From 608191352fc4caca80f5078b67832d3c953e35c4 Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" Date: Wed, 29 Jun 2022 16:47:57 -0500 Subject: [PATCH] track # roots added/removed since last clean (#26319) --- runtime/src/accounts_db.rs | 10 ++++++++++ runtime/src/accounts_index.rs | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/runtime/src/accounts_db.rs b/runtime/src/accounts_db.rs index b1fe6b48c8..16f89a5994 100644 --- a/runtime/src/accounts_db.rs +++ b/runtime/src/accounts_db.rs @@ -2813,6 +2813,16 @@ impl AccountsDb { .swap(0, Ordering::Relaxed), i64 ), + ( + "roots_added", + self.accounts_index.roots_added.swap(0, Ordering::Relaxed) as i64, + i64 + ), + ( + "roots_removed", + self.accounts_index.roots_removed.swap(0, Ordering::Relaxed) as i64, + i64 + ), ("next_store_id", self.next_id.load(Ordering::Relaxed), i64), ); } diff --git a/runtime/src/accounts_index.rs b/runtime/src/accounts_index.rs index 044422ec58..bfd85d4def 100644 --- a/runtime/src/accounts_index.rs +++ b/runtime/src/accounts_index.rs @@ -34,7 +34,7 @@ use { }, path::PathBuf, sync::{ - atomic::{AtomicBool, AtomicU64, AtomicU8, Ordering}, + atomic::{AtomicBool, AtomicU64, AtomicU8, AtomicUsize, Ordering}, Arc, Mutex, RwLock, RwLockReadGuard, RwLockWriteGuard, }, }, @@ -673,6 +673,11 @@ pub struct AccountsIndex { /// when a scan's accumulated data exceeds this limit, abort the scan pub scan_results_limit_bytes: Option, + + /// # roots added since last check + pub roots_added: AtomicUsize, + /// # roots removed since last check + pub roots_removed: AtomicUsize, } impl AccountsIndex { @@ -702,6 +707,8 @@ impl AccountsIndex { removed_bank_ids: Mutex::>::default(), storage, scan_results_limit_bytes, + roots_added: AtomicUsize::default(), + roots_removed: AtomicUsize::default(), } } @@ -1757,6 +1764,7 @@ impl AccountsIndex { } pub fn add_root(&self, slot: Slot, caching_enabled: bool) { + self.roots_added.fetch_add(1, Ordering::Relaxed); let mut w_roots_tracker = self.roots_tracker.write().unwrap(); // `AccountsDb::flush_accounts_cache()` relies on roots being added in order assert!(slot >= w_roots_tracker.alive_roots.max_inclusive()); @@ -1863,6 +1871,8 @@ impl AccountsIndex { Some(w_roots_tracker.previous_uncleaned_roots.len()); stats.roots_range = Some(w_roots_tracker.alive_roots.range_width()); stats.historical_roots_len = Some(w_roots_tracker.historical_roots.len()); + drop(w_roots_tracker); + self.roots_removed.fetch_add(1, Ordering::Relaxed); true } }