From 58f25a87524b3b785cc25142d6a13e8d0289e1f9 Mon Sep 17 00:00:00 2001 From: "Jeff Washington (jwash)" <75863576+jeffwashington@users.noreply.github.com> Date: Thu, 16 Sep 2021 17:52:06 -0500 Subject: [PATCH] AcctIdx: move background() to AccountsIndexStorage (#19948) --- runtime/src/accounts_index_storage.rs | 24 ++++++++++++++++++++---- runtime/src/bucket_map_holder.rs | 14 -------------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/runtime/src/accounts_index_storage.rs b/runtime/src/accounts_index_storage.rs index fe61b3947a..60014234b2 100644 --- a/runtime/src/accounts_index_storage.rs +++ b/runtime/src/accounts_index_storage.rs @@ -3,6 +3,7 @@ use crate::bucket_map_holder::BucketMapHolder; use crate::in_mem_accounts_index::InMemAccountsIndex; use crate::waitable_condvar::WaitableCondvar; use std::fmt::Debug; +use std::time::Duration; use std::{ sync::{ atomic::{AtomicBool, Ordering}, @@ -51,16 +52,16 @@ impl AccountsIndexStorage { .map(|bin| Arc::new(InMemAccountsIndex::new(&storage, bin))) .collect(); - let storage_ = storage.clone(); + let storage_ = Arc::clone(&storage); let exit = Arc::new(AtomicBool::default()); - let exit_ = exit.clone(); + let exit_ = Arc::clone(&exit); let wait = Arc::new(WaitableCondvar::default()); - let wait_ = wait.clone(); + let wait_ = Arc::clone(&wait); let handle = Some( Builder::new() .name("solana-index-flusher".to_string()) .spawn(move || { - storage_.background(exit_, wait_); + Self::background(storage_, exit_, wait_); }) .unwrap(), ); @@ -77,4 +78,19 @@ impl AccountsIndexStorage { pub fn storage(&self) -> &Arc> { &self.storage } + + // intended to execute in a bg thread + pub fn background( + storage: Arc>, + exit: Arc, + wait: Arc, + ) { + loop { + wait.wait_timeout(Duration::from_millis(10000)); // account index stats every 10 s + if exit.load(Ordering::Relaxed) { + break; + } + storage.stats.report_stats(); + } + } } diff --git a/runtime/src/bucket_map_holder.rs b/runtime/src/bucket_map_holder.rs index e1cd0ee6f6..442891393d 100644 --- a/runtime/src/bucket_map_holder.rs +++ b/runtime/src/bucket_map_holder.rs @@ -1,10 +1,6 @@ use crate::accounts_index::IndexValue; use crate::bucket_map_holder_stats::BucketMapHolderStats; -use crate::waitable_condvar::WaitableCondvar; use std::fmt::Debug; -use std::sync::atomic::{AtomicBool, Ordering}; -use std::sync::Arc; -use std::time::Duration; // will eventually hold the bucket map pub struct BucketMapHolder { @@ -25,14 +21,4 @@ impl BucketMapHolder { _phantom: std::marker::PhantomData::::default(), } } - // intended to execute in a bg thread - pub fn background(&self, exit: Arc, wait: Arc) { - loop { - wait.wait_timeout(Duration::from_millis(10000)); // account index stats every 10 s - if exit.load(Ordering::Relaxed) { - break; - } - self.stats.report_stats(); - } - } }