From 9e043d2055ad35b12340d2712153cfc73721e3e9 Mon Sep 17 00:00:00 2001 From: Tyera Eulberg Date: Tue, 23 Nov 2021 17:36:13 -0700 Subject: [PATCH] Use max_complete_transaction_status_slot in BigTableUploadService (#21401) * Use max_complete_transaction_status_slot in BigTableUploadService * Use node root to limit BigTableUploadService --- ledger/src/bigtable_upload_service.rs | 27 ++++++++++++--------------- rpc/src/rpc_service.rs | 1 + 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/ledger/src/bigtable_upload_service.rs b/ledger/src/bigtable_upload_service.rs index ba109bbaa7..9dba8e483c 100644 --- a/ledger/src/bigtable_upload_service.rs +++ b/ledger/src/bigtable_upload_service.rs @@ -2,21 +2,16 @@ use { crate::{bigtable_upload, blockstore::Blockstore}, solana_runtime::commitment::BlockCommitmentCache, std::{ - sync::atomic::{AtomicBool, Ordering}, - sync::{Arc, RwLock}, + cmp::min, + sync::{ + atomic::{AtomicBool, AtomicU64, Ordering}, + 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<()>, } @@ -27,6 +22,7 @@ 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"); @@ -38,6 +34,7 @@ impl BigTableUploadService { bigtable_ledger_storage, blockstore, block_commitment_cache, + max_complete_transaction_status_slot, exit, ) }) @@ -51,6 +48,7 @@ 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; @@ -59,11 +57,10 @@ impl BigTableUploadService { break; } - let end_slot = block_commitment_cache - .read() - .unwrap() - .highest_confirmed_root() - .saturating_sub(LARGEST_CONFIRMED_ROOT_UPLOAD_DELAY as u64); + let end_slot = min( + max_complete_transaction_status_slot.load(Ordering::SeqCst), + block_commitment_cache.read().unwrap().root(), + ); 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 d279300b50..7e90029489 100644 --- a/rpc/src/rpc_service.rs +++ b/rpc/src/rpc_service.rs @@ -356,6 +356,7 @@ impl JsonRpcService { bigtable_ledger_storage.clone(), blockstore.clone(), block_commitment_cache.clone(), + current_transaction_status_slot.clone(), exit_bigtable_ledger_upload_service.clone(), ))) } else {