diff --git a/ledger/src/bigtable_upload_service.rs b/ledger/src/bigtable_upload_service.rs index 9dba8e483c..ba109bbaa7 100644 --- a/ledger/src/bigtable_upload_service.rs +++ b/ledger/src/bigtable_upload_service.rs @@ -2,16 +2,21 @@ use { crate::{bigtable_upload, blockstore::Blockstore}, solana_runtime::commitment::BlockCommitmentCache, std::{ - cmp::min, - sync::{ - atomic::{AtomicBool, AtomicU64, Ordering}, - Arc, RwLock, - }, + sync::atomic::{AtomicBool, Ordering}, + sync::{Arc, RwLock}, thread::{self, Builder, JoinHandle}, }, tokio::runtime::Runtime, }; +// Delay uploading the largest confirmed root for this many slots. This is done in an attempt to +// ensure that the `CacheBlockMetaService` has had enough time to add the block time for the root +// before it's uploaded to BigTable. +// +// A more direct connection between CacheBlockMetaService and BigTableUploadService would be +// preferable... +const LARGEST_CONFIRMED_ROOT_UPLOAD_DELAY: usize = 100; + pub struct BigTableUploadService { thread: JoinHandle<()>, } @@ -22,7 +27,6 @@ impl BigTableUploadService { bigtable_ledger_storage: solana_storage_bigtable::LedgerStorage, blockstore: Arc, block_commitment_cache: Arc>, - max_complete_transaction_status_slot: Arc, exit: Arc, ) -> Self { info!("Starting BigTable upload service"); @@ -34,7 +38,6 @@ impl BigTableUploadService { bigtable_ledger_storage, blockstore, block_commitment_cache, - max_complete_transaction_status_slot, exit, ) }) @@ -48,7 +51,6 @@ impl BigTableUploadService { bigtable_ledger_storage: solana_storage_bigtable::LedgerStorage, blockstore: Arc, block_commitment_cache: Arc>, - max_complete_transaction_status_slot: Arc, exit: Arc, ) { let mut start_slot = 0; @@ -57,10 +59,11 @@ impl BigTableUploadService { break; } - let end_slot = min( - max_complete_transaction_status_slot.load(Ordering::SeqCst), - block_commitment_cache.read().unwrap().root(), - ); + let end_slot = block_commitment_cache + .read() + .unwrap() + .highest_confirmed_root() + .saturating_sub(LARGEST_CONFIRMED_ROOT_UPLOAD_DELAY as u64); if end_slot <= start_slot { std::thread::sleep(std::time::Duration::from_secs(1)); diff --git a/rpc/src/rpc_service.rs b/rpc/src/rpc_service.rs index 8b5e9b9d5d..62bd20a5eb 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -339,7 +339,6 @@ impl JsonRpcService { bigtable_ledger_storage.clone(), blockstore.clone(), block_commitment_cache.clone(), - current_transaction_status_slot.clone(), exit_bigtable_ledger_upload_service.clone(), ))) } else {