mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-15 10:52:43 +00:00
Ignored sync jobs 2 (#3317)
## Issue Addressed Duplicate of #3269. Making this since @divagant-martian opened the previous PR and she can't approve her own PR 😄 Co-authored-by: Diva M <divma@protonmail.com>
This commit is contained in:
@@ -1,7 +1,9 @@
|
||||
#![cfg(not(debug_assertions))] // Tests are too slow in debug.
|
||||
#![cfg(test)]
|
||||
|
||||
use crate::beacon_processor::work_reprocessing_queue::QUEUED_ATTESTATION_DELAY;
|
||||
use crate::beacon_processor::work_reprocessing_queue::{
|
||||
QUEUED_ATTESTATION_DELAY, QUEUED_RPC_BLOCK_DELAY,
|
||||
};
|
||||
use crate::beacon_processor::*;
|
||||
use crate::{service::NetworkMessage, sync::SyncMessage};
|
||||
use beacon_chain::test_utils::{
|
||||
@@ -54,6 +56,7 @@ struct TestRig {
|
||||
work_journal_rx: mpsc::Receiver<&'static str>,
|
||||
_network_rx: mpsc::UnboundedReceiver<NetworkMessage<E>>,
|
||||
_sync_rx: mpsc::UnboundedReceiver<SyncMessage<E>>,
|
||||
duplicate_cache: DuplicateCache,
|
||||
_harness: BeaconChainHarness<T>,
|
||||
}
|
||||
|
||||
@@ -185,6 +188,7 @@ impl TestRig {
|
||||
|
||||
let (work_journal_tx, work_journal_rx) = mpsc::channel(16_364);
|
||||
|
||||
let duplicate_cache = DuplicateCache::default();
|
||||
BeaconProcessor {
|
||||
beacon_chain: Arc::downgrade(&chain),
|
||||
network_tx,
|
||||
@@ -193,7 +197,7 @@ impl TestRig {
|
||||
executor,
|
||||
max_workers: cmp::max(1, num_cpus::get()),
|
||||
current_workers: 0,
|
||||
importing_blocks: Default::default(),
|
||||
importing_blocks: duplicate_cache.clone(),
|
||||
log: log.clone(),
|
||||
}
|
||||
.spawn_manager(beacon_processor_rx, Some(work_journal_tx));
|
||||
@@ -211,6 +215,7 @@ impl TestRig {
|
||||
work_journal_rx,
|
||||
_network_rx,
|
||||
_sync_rx,
|
||||
duplicate_cache,
|
||||
_harness: harness,
|
||||
}
|
||||
}
|
||||
@@ -246,6 +251,15 @@ impl TestRig {
|
||||
self.beacon_processor_tx.try_send(event).unwrap();
|
||||
}
|
||||
|
||||
pub fn enqueue_single_lookup_rpc_block(&self) {
|
||||
let event = WorkEvent::rpc_beacon_block(
|
||||
self.next_block.clone(),
|
||||
std::time::Duration::default(),
|
||||
BlockProcessType::SingleBlock { id: 1 },
|
||||
);
|
||||
self.beacon_processor_tx.try_send(event).unwrap();
|
||||
}
|
||||
|
||||
pub fn enqueue_unaggregated_attestation(&self) {
|
||||
let (attestation, subnet_id) = self.attestations.first().unwrap().clone();
|
||||
self.beacon_processor_tx
|
||||
@@ -828,3 +842,33 @@ async fn import_misc_gossip_ops() {
|
||||
"op pool should have one more exit"
|
||||
);
|
||||
}
|
||||
|
||||
/// Ensure that rpc block going to the reprocessing queue flow
|
||||
/// works when the duplicate cache handle is held by another task.
|
||||
#[tokio::test]
|
||||
async fn test_rpc_block_reprocessing() {
|
||||
let mut rig = TestRig::new(SMALL_CHAIN).await;
|
||||
let next_block_root = rig.next_block.canonical_root();
|
||||
// Insert the next block into the duplicate cache manually
|
||||
let handle = rig.duplicate_cache.check_and_insert(next_block_root);
|
||||
rig.enqueue_single_lookup_rpc_block();
|
||||
|
||||
rig.assert_event_journal(&[RPC_BLOCK, WORKER_FREED, NOTHING_TO_DO])
|
||||
.await;
|
||||
// next_block shouldn't be processed since it couldn't get the
|
||||
// duplicate cache handle
|
||||
assert_ne!(next_block_root, rig.head_root());
|
||||
|
||||
drop(handle);
|
||||
|
||||
// The block should arrive at the beacon processor again after
|
||||
// the specified delay.
|
||||
tokio::time::sleep(QUEUED_RPC_BLOCK_DELAY).await;
|
||||
|
||||
rig.assert_event_journal(&[RPC_BLOCK]).await;
|
||||
// Add an extra delay for block processing
|
||||
tokio::time::sleep(Duration::from_millis(10)).await;
|
||||
// head should update to next block now since the duplicate
|
||||
// cache handle was dropped.
|
||||
assert_eq!(next_block_root, rig.head_root());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user