diff options
author | Ava Chow <github@achow101.com> | 2024-03-20 16:21:18 -0400 |
---|---|---|
committer | Ava Chow <github@achow101.com> | 2024-03-20 16:38:32 -0400 |
commit | bf1b6383dbbfdd0c96a161d4693a48bf3a6b6150 (patch) | |
tree | 52a3c31cc58fa81d009470627311d7ae994e9ac6 /src/index | |
parent | b50554babdddf452acaa51bac757736766c70e81 (diff) | |
parent | f65b0f6401091e4a4ca4c9f4db1cf388f0336bad (diff) | |
download | bitcoin-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.cpp | 28 |
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(); + } } } |