aboutsummaryrefslogtreecommitdiff
path: root/src/index
diff options
context:
space:
mode:
authorAva Chow <github@achow101.com>2024-03-20 16:21:18 -0400
committerAva Chow <github@achow101.com>2024-03-20 16:38:32 -0400
commitbf1b6383dbbfdd0c96a161d4693a48bf3a6b6150 (patch)
tree52a3c31cc58fa81d009470627311d7ae994e9ac6 /src/index
parentb50554babdddf452acaa51bac757736766c70e81 (diff)
parentf65b0f6401091e4a4ca4c9f4db1cf388f0336bad (diff)
downloadbitcoin-bf1b6383dbbfdd0c96a161d4693a48bf3a6b6150.tar.xz
Merge bitcoin/bitcoin#29671: index: avoid "failed to commit" errors on initialization
f65b0f6401091e4a4ca4c9f4db1cf388f0336bad index: Move last_locator_write_time and logging to end of threadsync loop (Fabian Jahr) Pull request description: In the index sync thread, when initializing an index for the first time, stop callng BaseIndex::Commit when m_best_block_index is null, to avoid a spurious "failed to commit" error from that function. This error started happening in commit https://github.com/bitcoin/bitcoin/commit/7878f97bf15b6e7c9b47d1c0d96419b97e1bdcbd from https://github.com/bitcoin/bitcoin/pull/25494 and was reported by pstratem in https://github.com/bitcoin/bitcoin/pull/26903 with an alternate fix. ACKs for top commit: achow101: ACK f65b0f6401091e4a4ca4c9f4db1cf388f0336bad ryanofsky: Code review ACK f65b0f6401091e4a4ca4c9f4db1cf388f0336bad. Just moved log "Syncing" log line since last commit to avoid having to call now() twice. furszy: ACK f65b0f6401091e4a4ca4c9f4db1cf388f0336bad TheCharlatan: ACK f65b0f6401091e4a4ca4c9f4db1cf388f0336bad Tree-SHA512: afa8f05786318d36346d167ff53ea0b3bc8abdb0ad04465d199dc3eb91e9f837369e24fcb7e24b5757b02d698ec504e61da6ac365eaf006c874fc07a424a7e20
Diffstat (limited to 'src/index')
-rw-r--r--src/index/base.cpp28
1 files changed, 14 insertions, 14 deletions
diff --git a/src/index/base.cpp b/src/index/base.cpp
index b4bda2fca6..eb7de2ea0a 100644
--- a/src/index/base.cpp
+++ b/src/index/base.cpp
@@ -174,20 +174,6 @@ void BaseIndex::Sync()
pindex = pindex_next;
- auto current_time{std::chrono::steady_clock::now()};
- if (last_log_time + SYNC_LOG_INTERVAL < current_time) {
- LogPrintf("Syncing %s with block chain from height %d\n",
- GetName(), pindex->nHeight);
- last_log_time = current_time;
- }
-
- if (last_locator_write_time + SYNC_LOCATOR_WRITE_INTERVAL < current_time) {
- SetBestBlockIndex(pindex->pprev);
- last_locator_write_time = current_time;
- // No need to handle errors in Commit. See rationale above.
- Commit();
- }
-
CBlock block;
interfaces::BlockInfo block_info = kernel::MakeBlockInfo(pindex);
if (!m_chainstate->m_blockman.ReadBlockFromDisk(block, *pindex)) {
@@ -202,6 +188,20 @@ void BaseIndex::Sync()
__func__, pindex->GetBlockHash().ToString());
return;
}
+
+ auto current_time{std::chrono::steady_clock::now()};
+ if (last_log_time + SYNC_LOG_INTERVAL < current_time) {
+ LogPrintf("Syncing %s with block chain from height %d\n",
+ GetName(), pindex->nHeight);
+ last_log_time = current_time;
+ }
+
+ if (last_locator_write_time + SYNC_LOCATOR_WRITE_INTERVAL < current_time) {
+ SetBestBlockIndex(pindex);
+ last_locator_write_time = current_time;
+ // No need to handle errors in Commit. See rationale above.
+ Commit();
+ }
}
}