diff --git a/core/src/snapshot_packager_service.rs b/core/src/snapshot_packager_service.rs index 09f3139696..8c89d10be2 100644 --- a/core/src/snapshot_packager_service.rs +++ b/core/src/snapshot_packager_service.rs @@ -32,6 +32,7 @@ impl SnapshotPackagerService { exit: &Arc, cluster_info: &Arc, snapshot_config: SnapshotConfig, + enable_gossip_push: bool, ) -> Self { let exit = exit.clone(); let cluster_info = cluster_info.clone(); @@ -47,14 +48,20 @@ impl SnapshotPackagerService { let t_snapshot_packager = Builder::new() .name("snapshot-packager".to_string()) .spawn(move || { - let mut snapshot_gossip_manager = SnapshotGossipManager { - cluster_info, - max_full_snapshot_hashes, - max_incremental_snapshot_hashes, - full_snapshot_hashes: FullSnapshotHashes::default(), - incremental_snapshot_hashes: IncrementalSnapshotHashes::default(), + let mut snapshot_gossip_manager = if enable_gossip_push { + Some(SnapshotGossipManager { + cluster_info, + max_full_snapshot_hashes, + max_incremental_snapshot_hashes, + full_snapshot_hashes: FullSnapshotHashes::default(), + incremental_snapshot_hashes: IncrementalSnapshotHashes::default(), + }) + } else { + None }; - snapshot_gossip_manager.push_starting_snapshot_hashes(starting_snapshot_hashes); + if let Some(snapshot_gossip_manager) = snapshot_gossip_manager.as_mut() { + snapshot_gossip_manager.push_starting_snapshot_hashes(starting_snapshot_hashes); + } loop { if exit.load(Ordering::Relaxed) { @@ -78,10 +85,12 @@ impl SnapshotPackagerService { ) .expect("failed to archive snapshot package"); - snapshot_gossip_manager.push_snapshot_hash( - snapshot_package.snapshot_type, - (snapshot_package.slot(), *snapshot_package.hash()), - ); + if let Some(snapshot_gossip_manager) = snapshot_gossip_manager.as_mut() { + snapshot_gossip_manager.push_snapshot_hash( + snapshot_package.snapshot_type, + (snapshot_package.slot(), *snapshot_package.hash()), + ); + } } }) .unwrap(); diff --git a/core/src/validator.rs b/core/src/validator.rs index 2ec859a7c0..fd3c1223ff 100644 --- a/core/src/validator.rs +++ b/core/src/validator.rs @@ -703,12 +703,22 @@ impl Validator { // Start a snapshot packaging service let pending_snapshot_package = PendingSnapshotPackage::default(); + // filler accounts make snapshots invalid for use + // so, do not publish that we have snapshots + let enable_gossip_push = config + .accounts_db_config + .as_ref() + .and_then(|config| config.filler_account_count) + .map(|count| count == 0) + .unwrap_or(true); + let snapshot_packager_service = SnapshotPackagerService::new( pending_snapshot_package.clone(), starting_snapshot_hashes, &exit, &cluster_info, snapshot_config.clone(), + enable_gossip_push, ); ( Some(snapshot_packager_service), diff --git a/core/tests/snapshots.rs b/core/tests/snapshots.rs index c0e22b8feb..97412cea8e 100644 --- a/core/tests/snapshots.rs +++ b/core/tests/snapshots.rs @@ -501,6 +501,7 @@ mod tests { &exit, &cluster_info, snapshot_config.clone(), + true, ); let _package_receiver = std::thread::Builder::new() @@ -928,6 +929,7 @@ mod tests { &exit, &cluster_info, snapshot_test_config.snapshot_config.clone(), + true, ); let tmpdir = TempDir::new().unwrap();