From 8afcd8b5545a433c92d3a47b4f85b4e89a5408b8 Mon Sep 17 00:00:00 2001 From: Hansie Odendaal <39146854+hansieodendaal@users.noreply.github.com> Date: Thu, 19 Oct 2023 13:01:09 +0200 Subject: [PATCH] fix: fix erroneous warning message (#5846) Description --- Fixed erroneous warning message about 'orphans_db' and 'orphan_header_accumulated_data_db' being out of sync - the difference was assumed instead of verified. Motivation and Context --- See above How Has This Been Tested? --- System-level test What process can a PR reviewer use to test or verify this change? --- Code review Breaking Changes --- - [x] None - [ ] Requires data directory on base node to be deleted - [ ] Requires hard fork - [ ] Other - Please specify --- .../core/src/chain_storage/lmdb_db/lmdb_db.rs | 66 +++++++++++-------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/base_layer/core/src/chain_storage/lmdb_db/lmdb_db.rs b/base_layer/core/src/chain_storage/lmdb_db/lmdb_db.rs index dbe2c4facc..51fe57c1f1 100644 --- a/base_layer/core/src/chain_storage/lmdb_db/lmdb_db.rs +++ b/base_layer/core/src/chain_storage/lmdb_db/lmdb_db.rs @@ -1121,38 +1121,52 @@ impl LMDBDatabase { // Orphan is a tip hash if lmdb_exists(txn, &self.orphan_chain_tips_db, hash.as_slice())? { + // We get rid of the orphan tip lmdb_delete(txn, &self.orphan_chain_tips_db, hash.as_slice(), "orphan_chain_tips_db")?; - - // Parent becomes a tip hash - if lmdb_exists(txn, &self.orphans_db, parent_hash.as_slice())? && - lmdb_exists(txn, &self.orphan_header_accumulated_data_db, parent_hash.as_slice())? - { - let orphan_parent_accum: Option = - lmdb_get(txn, &self.orphan_header_accumulated_data_db, parent_hash.as_slice())?; - if let Some(val) = orphan_parent_accum { - lmdb_insert( - txn, - &self.orphan_chain_tips_db, - parent_hash.as_slice(), - &ChainTipData { - hash: parent_hash, - total_accumulated_difficulty: val.total_accumulated_difficulty, + // If an orphan parent exists, it must be promoted + match ( + lmdb_exists(txn, &self.orphans_db, parent_hash.as_slice())?, + lmdb_exists(txn, &self.orphan_header_accumulated_data_db, parent_hash.as_slice())?, + ) { + (true, true) => { + // Parent becomes a tip hash + let orphan_parent_accum: Option = + lmdb_get(txn, &self.orphan_header_accumulated_data_db, parent_hash.as_slice())?; + match orphan_parent_accum { + Some(val) => { + lmdb_insert( + txn, + &self.orphan_chain_tips_db, + parent_hash.as_slice(), + &ChainTipData { + hash: parent_hash, + total_accumulated_difficulty: val.total_accumulated_difficulty, + }, + "orphan_chain_tips_db", + )?; }, - "orphan_chain_tips_db", - )?; - } else { + None => { + warn!( + target: LOG_TARGET, + "Empty 'BlockHeaderAccumulatedData' for parent hash '{}'", + parent_hash.to_hex() + ); + }, + } + }, + (false, false) => { + // No entries, nothing here + }, + _ => { + // Some previous database operations were not atomic warn!( target: LOG_TARGET, - "Empty 'BlockHeaderAccumulatedData' for parent hash '{}'", + "'orphans_db' ({}) and 'orphan_header_accumulated_data_db' ({}) out of sync, missing parent hash '{}' entry", + lmdb_exists(txn, &self.orphans_db, parent_hash.as_slice())?, + lmdb_exists(txn, &self.orphan_header_accumulated_data_db, parent_hash.as_slice())?, parent_hash.to_hex() ); - } - } else { - warn!( - target: LOG_TARGET, - "'orphans_db' and 'orphan_header_accumulated_data_db' out of sync, missing parent hash '{}' entry", - parent_hash.to_hex() - ); + }, } }