Remove reprocess channel (#7437)

Partially https://github.com/sigp/lighthouse/issues/6291


  This PR removes the reprocess event channel from being externally exposed. All work events are now sent through the single `BeaconProcessorSend` channel. I've introduced a new `Work::Reprocess` enum variant which we then use to schedule jobs for reprocess. I've also created a new scheduler module which will eventually house the different scheduler impls.

This is all needed as an initial step to generalize the beacon processor

A "full" implementation for the generalized beacon processor can be found here
https://github.com/sigp/lighthouse/pull/6448

I'm going to try to break up the full implementation into smaller PR's so it can actually be reviewed
This commit is contained in:
Eitan Seri-Levi
2025-06-20 05:52:16 +03:00
committed by GitHub
parent dd98534158
commit f67084a571
17 changed files with 186 additions and 152 deletions

View File

@@ -19,6 +19,7 @@ use beacon_chain::{
AvailabilityProcessingStatus, BeaconChainError, BeaconChainTypes, BlockError, ForkChoiceError,
GossipVerifiedBlock, NotifyExecutionLayer,
};
use beacon_processor::{Work, WorkEvent};
use lighthouse_network::{Client, MessageAcceptance, MessageId, PeerAction, PeerId, ReportSource};
use logging::crit;
use operation_pool::ReceivedPreCapella;
@@ -30,8 +31,7 @@ use std::path::PathBuf;
use std::sync::Arc;
use std::time::{Duration, Instant, SystemTime, UNIX_EPOCH};
use store::hot_cold_store::HotColdDBError;
use tokio::sync::mpsc;
use tokio::sync::mpsc::error::SendError;
use tokio::sync::mpsc::error::TrySendError;
use tracing::{debug, error, info, trace, warn};
use types::{
beacon_block::BlockImportSource, Attestation, AttestationData, AttestationRef,
@@ -205,7 +205,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
attestation: Box<SingleAttestation>,
subnet_id: SubnetId,
should_import: bool,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
seen_timestamp: Duration,
) {
let result = match self
@@ -228,7 +228,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
message_id,
peer_id,
subnet_id,
reprocess_tx,
allow_reprocess,
should_import,
seen_timestamp,
);
@@ -237,7 +237,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
pub fn process_gossip_attestation_batch(
self: Arc<Self>,
packages: GossipAttestationBatch,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
) {
let attestations_and_subnets = packages
.iter()
@@ -298,7 +298,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
package.message_id,
package.peer_id,
package.subnet_id,
reprocess_tx.clone(),
allow_reprocess,
package.should_import,
package.seen_timestamp,
);
@@ -314,7 +314,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
message_id: MessageId,
peer_id: PeerId,
subnet_id: SubnetId,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
should_import: bool,
seen_timestamp: Duration,
) {
@@ -398,7 +398,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
should_import,
seen_timestamp,
},
reprocess_tx,
allow_reprocess,
error,
seen_timestamp,
);
@@ -418,7 +418,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
message_id: MessageId,
peer_id: PeerId,
aggregate: Box<SignedAggregateAndProof<T::EthSpec>>,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
seen_timestamp: Duration,
) {
let beacon_block_root = aggregate.message().aggregate().data().beacon_block_root;
@@ -442,7 +442,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
beacon_block_root,
message_id,
peer_id,
reprocess_tx,
allow_reprocess,
seen_timestamp,
);
}
@@ -450,7 +450,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
pub fn process_gossip_aggregate_batch(
self: Arc<Self>,
packages: Vec<GossipAggregatePackage<T::EthSpec>>,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
) {
let aggregates = packages.iter().map(|package| package.aggregate.as_ref());
@@ -504,7 +504,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
package.beacon_block_root,
package.message_id,
package.peer_id,
reprocess_tx.clone(),
allow_reprocess,
package.seen_timestamp,
);
}
@@ -516,7 +516,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
beacon_block_root: Hash256,
message_id: MessageId,
peer_id: PeerId,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
seen_timestamp: Duration,
) {
match result {
@@ -595,7 +595,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
attestation: signed_aggregate,
seen_timestamp,
},
reprocess_tx,
allow_reprocess,
error,
seen_timestamp,
);
@@ -1039,9 +1039,9 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
// another column arrives it either completes availability or pushes
// reconstruction back a bit.
let cloned_self = Arc::clone(self);
let send_result = self
.reprocess_tx
.send(ReprocessQueueMessage::DelayColumnReconstruction(
let send_result = self.beacon_processor_send.try_send(WorkEvent {
drop_during_sync: false,
work: Work::Reprocess(ReprocessQueueMessage::DelayColumnReconstruction(
QueuedColumnReconstruction {
block_root,
process_fn: Box::pin(async move {
@@ -1050,11 +1050,15 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
.await;
}),
},
))
.await;
if let Err(SendError(ReprocessQueueMessage::DelayColumnReconstruction(
reconstruction,
))) = send_result
)),
});
if let Err(TrySendError::Full(WorkEvent {
work:
Work::Reprocess(ReprocessQueueMessage::DelayColumnReconstruction(
reconstruction,
)),
..
})) = send_result
{
warn!("Unable to send reconstruction to reprocessing");
// Execute it immediately instead.
@@ -1099,7 +1103,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
peer_id: PeerId,
peer_client: Client,
block: Arc<SignedBeaconBlock<T::EthSpec>>,
reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
duplicate_cache: DuplicateCache,
invalid_block_storage: InvalidBlockStorage,
seen_duration: Duration,
@@ -1110,7 +1113,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
peer_id,
peer_client,
block.clone(),
reprocess_tx.clone(),
seen_duration,
)
.await
@@ -1121,7 +1123,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
self.process_gossip_verified_block(
peer_id,
gossip_verified_block,
reprocess_tx,
invalid_block_storage,
seen_duration,
)
@@ -1147,7 +1148,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
peer_id: PeerId,
peer_client: Client,
block: Arc<SignedBeaconBlock<T::EthSpec>>,
reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
seen_duration: Duration,
) -> Option<GossipVerifiedBlock<T>> {
let block_delay =
@@ -1374,24 +1374,28 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
let inner_self = self.clone();
let process_fn = Box::pin(async move {
let reprocess_tx = inner_self.reprocess_tx.clone();
let invalid_block_storage = inner_self.invalid_block_storage.clone();
inner_self
.process_gossip_verified_block(
peer_id,
verified_block,
reprocess_tx,
invalid_block_storage,
seen_duration,
)
.await;
});
if reprocess_tx
.try_send(ReprocessQueueMessage::EarlyBlock(QueuedGossipBlock {
beacon_block_slot: block_slot,
beacon_block_root: block_root,
process_fn,
}))
if self
.beacon_processor_send
.try_send(WorkEvent {
drop_during_sync: false,
work: Work::Reprocess(ReprocessQueueMessage::EarlyBlock(
QueuedGossipBlock {
beacon_block_slot: block_slot,
beacon_block_root: block_root,
process_fn,
},
)),
})
.is_err()
{
error!(
@@ -1424,7 +1428,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
self: Arc<Self>,
peer_id: PeerId,
verified_block: GossipVerifiedBlock<T>,
reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
invalid_block_storage: InvalidBlockStorage,
_seen_duration: Duration,
) {
@@ -1474,10 +1477,14 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
match &result {
Ok(AvailabilityProcessingStatus::Imported(block_root)) => {
if reprocess_tx
.try_send(ReprocessQueueMessage::BlockImported {
block_root: *block_root,
parent_root: block.message().parent_root(),
if self
.beacon_processor_send
.try_send(WorkEvent {
drop_during_sync: false,
work: Work::Reprocess(ReprocessQueueMessage::BlockImported {
block_root: *block_root,
parent_root: block.message().parent_root(),
}),
})
.is_err()
{
@@ -2002,7 +2009,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
message_id: MessageId,
peer_id: PeerId,
light_client_optimistic_update: LightClientOptimisticUpdate<T::EthSpec>,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
seen_timestamp: Duration,
) {
match self.chain.verify_optimistic_update_for_gossip(
@@ -2030,7 +2037,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
"Optimistic update for unknown block"
);
if let Some(sender) = reprocess_tx {
if allow_reprocess {
let processor = self.clone();
let msg = ReprocessQueueMessage::UnknownLightClientOptimisticUpdate(
QueuedLightClientUpdate {
@@ -2040,14 +2047,21 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
message_id,
peer_id,
light_client_optimistic_update,
None, // Do not reprocess this message again.
false, // Do not reprocess this message again.
seen_timestamp,
)
}),
},
);
if sender.try_send(msg).is_err() {
if self
.beacon_processor_send
.try_send(WorkEvent {
drop_during_sync: true,
work: Work::Reprocess(msg),
})
.is_err()
{
error!("Failed to send optimistic update for re-processing")
}
} else {
@@ -2117,7 +2131,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
peer_id: PeerId,
message_id: MessageId,
failed_att: FailedAtt<T::EthSpec>,
reprocess_tx: Option<mpsc::Sender<ReprocessQueueMessage>>,
allow_reprocess: bool,
error: AttnError,
seen_timestamp: Duration,
) {
@@ -2357,7 +2371,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
block = ?beacon_block_root,
"Attestation for unknown block"
);
if let Some(sender) = reprocess_tx {
if allow_reprocess {
// We don't know the block, get the sync manager to handle the block lookup, and
// send the attestation to be scheduled for re-processing.
self.sync_tx
@@ -2384,7 +2398,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
message_id,
peer_id,
attestation,
None, // Do not allow this attestation to be re-processed beyond this point.
false, // Do not allow this attestation to be re-processed beyond this point.
seen_timestamp,
)
}),
@@ -2409,7 +2423,7 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
attestation,
subnet_id,
should_import,
None, // Do not allow this attestation to be re-processed beyond this point.
false, // Do not allow this attestation to be re-processed beyond this point.
seen_timestamp,
)
}),
@@ -2417,7 +2431,14 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
}
};
if sender.try_send(msg).is_err() {
if self
.beacon_processor_send
.try_send(WorkEvent {
drop_during_sync: false,
work: Work::Reprocess(msg),
})
.is_err()
{
error!("Failed to send attestation for re-processing")
}
} else {

View File

@@ -12,8 +12,8 @@ use beacon_chain::{
AvailabilityProcessingStatus, BeaconChain, BeaconChainTypes, BlockError, NotifyExecutionLayer,
};
use beacon_processor::{
work_reprocessing_queue::ReprocessQueueMessage, BeaconProcessorSend, DuplicateCache,
GossipAggregatePackage, GossipAttestationPackage, Work, WorkEvent as BeaconWorkEvent,
BeaconProcessorSend, DuplicateCache, GossipAggregatePackage, GossipAttestationPackage, Work,
WorkEvent as BeaconWorkEvent,
};
use lighthouse_network::rpc::methods::{
BlobsByRangeRequest, BlobsByRootRequest, DataColumnsByRangeRequest, DataColumnsByRootRequest,
@@ -61,7 +61,6 @@ pub struct NetworkBeaconProcessor<T: BeaconChainTypes> {
pub chain: Arc<BeaconChain<T>>,
pub network_tx: mpsc::UnboundedSender<NetworkMessage<T::EthSpec>>,
pub sync_tx: mpsc::UnboundedSender<SyncMessage<T::EthSpec>>,
pub reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
pub network_globals: Arc<NetworkGlobals<T::EthSpec>>,
pub invalid_block_storage: InvalidBlockStorage,
pub executor: TaskExecutor,
@@ -88,24 +87,21 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
// Define a closure for processing individual attestations.
let processor = self.clone();
let process_individual = move |package: GossipAttestationPackage<SingleAttestation>| {
let reprocess_tx = processor.reprocess_tx.clone();
processor.process_gossip_attestation(
package.message_id,
package.peer_id,
package.attestation,
package.subnet_id,
package.should_import,
Some(reprocess_tx),
true,
package.seen_timestamp,
)
};
// Define a closure for processing batches of attestations.
let processor = self.clone();
let process_batch = move |attestations| {
let reprocess_tx = processor.reprocess_tx.clone();
processor.process_gossip_attestation_batch(attestations, Some(reprocess_tx))
};
let process_batch =
move |attestations| processor.process_gossip_attestation_batch(attestations, true);
self.try_send(BeaconWorkEvent {
drop_during_sync: true,
@@ -135,22 +131,19 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
// Define a closure for processing individual attestations.
let processor = self.clone();
let process_individual = move |package: GossipAggregatePackage<T::EthSpec>| {
let reprocess_tx = processor.reprocess_tx.clone();
processor.process_gossip_aggregate(
package.message_id,
package.peer_id,
package.aggregate,
Some(reprocess_tx),
true,
package.seen_timestamp,
)
};
// Define a closure for processing batches of attestations.
let processor = self.clone();
let process_batch = move |aggregates| {
let reprocess_tx = processor.reprocess_tx.clone();
processor.process_gossip_aggregate_batch(aggregates, Some(reprocess_tx))
};
let process_batch =
move |aggregates| processor.process_gossip_aggregate_batch(aggregates, true);
let beacon_block_root = aggregate.message().aggregate().data().beacon_block_root;
self.try_send(BeaconWorkEvent {
@@ -180,7 +173,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
) -> Result<(), Error<T::EthSpec>> {
let processor = self.clone();
let process_fn = async move {
let reprocess_tx = processor.reprocess_tx.clone();
let invalid_block_storage = processor.invalid_block_storage.clone();
let duplicate_cache = processor.duplicate_cache.clone();
processor
@@ -189,7 +181,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
peer_id,
peer_client,
block,
reprocess_tx,
duplicate_cache,
invalid_block_storage,
seen_timestamp,
@@ -382,12 +373,11 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
) -> Result<(), Error<T::EthSpec>> {
let processor = self.clone();
let process_fn = move || {
let reprocess_tx = processor.reprocess_tx.clone();
processor.process_gossip_optimistic_update(
message_id,
peer_id,
light_client_optimistic_update,
Some(reprocess_tx),
true,
seen_timestamp,
)
};
@@ -1132,8 +1122,6 @@ impl<E: EthSpec> NetworkBeaconProcessor<TestBeaconChainType<E>> {
let BeaconProcessorChannels {
beacon_processor_tx,
beacon_processor_rx,
work_reprocessing_tx,
work_reprocessing_rx: _work_reprocessing_rx,
} = <_>::default();
let (network_tx, _network_rx) = mpsc::unbounded_channel();
@@ -1144,7 +1132,6 @@ impl<E: EthSpec> NetworkBeaconProcessor<TestBeaconChainType<E>> {
chain,
network_tx,
sync_tx,
reprocess_tx: work_reprocessing_tx,
network_globals,
invalid_block_storage: InvalidBlockStorage::Disabled,
executor,

View File

@@ -17,11 +17,11 @@ use beacon_processor::{
work_reprocessing_queue::{QueuedRpcBlock, ReprocessQueueMessage},
AsyncFn, BlockingFn, DuplicateCache,
};
use beacon_processor::{Work, WorkEvent};
use lighthouse_network::PeerAction;
use std::sync::Arc;
use std::time::Duration;
use store::KzgCommitment;
use tokio::sync::mpsc;
use tracing::{debug, error, info, warn};
use types::beacon_block_body::format_kzg_commitments;
use types::blob_sidecar::FixedBlobSidecarList;
@@ -57,14 +57,12 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
process_type: BlockProcessType,
) -> AsyncFn {
let process_fn = async move {
let reprocess_tx = self.reprocess_tx.clone();
let duplicate_cache = self.duplicate_cache.clone();
self.process_rpc_block(
block_root,
block,
seen_timestamp,
process_type,
reprocess_tx,
duplicate_cache,
)
.await;
@@ -106,7 +104,6 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
block: RpcBlock<T::EthSpec>,
seen_timestamp: Duration,
process_type: BlockProcessType,
reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
duplicate_cache: DuplicateCache,
) {
// Check if the block is already being imported through another source
@@ -131,7 +128,14 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
ignore_fn,
});
if reprocess_tx.try_send(reprocess_msg).is_err() {
if self
.beacon_processor_send
.try_send(WorkEvent {
drop_during_sync: false,
work: Work::Reprocess(reprocess_msg),
})
.is_err()
{
error!(source = "rpc", %block_root,"Failed to inform block import")
};
return;
@@ -176,7 +180,14 @@ impl<T: BeaconChainTypes> NetworkBeaconProcessor<T> {
block_root: *hash,
parent_root,
};
if reprocess_tx.try_send(reprocess_msg).is_err() {
if self
.beacon_processor_send
.try_send(WorkEvent {
drop_during_sync: false,
work: Work::Reprocess(reprocess_msg),
})
.is_err()
{
error!(
source = "rpc",
block_root = %hash,

View File

@@ -199,8 +199,6 @@ impl TestRig {
let BeaconProcessorChannels {
beacon_processor_tx,
beacon_processor_rx,
work_reprocessing_tx,
work_reprocessing_rx,
} = BeaconProcessorChannels::new(&beacon_processor_config);
let (sync_tx, _sync_rx) = mpsc::unbounded_channel();
@@ -244,7 +242,6 @@ impl TestRig {
chain: harness.chain.clone(),
network_tx,
sync_tx,
reprocess_tx: work_reprocessing_tx.clone(),
network_globals: network_globals.clone(),
invalid_block_storage: InvalidBlockStorage::Disabled,
executor: executor.clone(),
@@ -259,8 +256,6 @@ impl TestRig {
}
.spawn_manager(
beacon_processor_rx,
work_reprocessing_tx,
work_reprocessing_rx,
Some(work_journal_tx),
harness.chain.slot_clock.clone(),
chain.spec.maximum_gossip_clock_disparity(),

View File

@@ -10,9 +10,7 @@ use crate::service::NetworkMessage;
use crate::status::status_message;
use crate::sync::SyncMessage;
use beacon_chain::{BeaconChain, BeaconChainTypes};
use beacon_processor::{
work_reprocessing_queue::ReprocessQueueMessage, BeaconProcessorSend, DuplicateCache,
};
use beacon_processor::{BeaconProcessorSend, DuplicateCache};
use futures::prelude::*;
use lighthouse_network::rpc::*;
use lighthouse_network::{
@@ -87,7 +85,6 @@ impl<T: BeaconChainTypes> Router<T> {
executor: task_executor::TaskExecutor,
invalid_block_storage: InvalidBlockStorage,
beacon_processor_send: BeaconProcessorSend<T::EthSpec>,
beacon_processor_reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
fork_context: Arc<ForkContext>,
) -> Result<mpsc::UnboundedSender<RouterMessage<T::EthSpec>>, String> {
trace!("Service starting");
@@ -103,7 +100,6 @@ impl<T: BeaconChainTypes> Router<T> {
chain: beacon_chain.clone(),
network_tx: network_send.clone(),
sync_tx: sync_send.clone(),
reprocess_tx: beacon_processor_reprocess_tx,
network_globals: network_globals.clone(),
invalid_block_storage,
executor: executor.clone(),

View File

@@ -6,7 +6,7 @@ use crate::router::{Router, RouterMessage};
use crate::subnet_service::{SubnetService, SubnetServiceMessage, Subscription};
use crate::NetworkConfig;
use beacon_chain::{BeaconChain, BeaconChainTypes};
use beacon_processor::{work_reprocessing_queue::ReprocessQueueMessage, BeaconProcessorSend};
use beacon_processor::BeaconProcessorSend;
use futures::channel::mpsc::Sender;
use futures::future::OptionFuture;
use futures::prelude::*;
@@ -211,7 +211,6 @@ impl<T: BeaconChainTypes> NetworkService<T> {
executor: task_executor::TaskExecutor,
libp2p_registry: Option<&'_ mut Registry>,
beacon_processor_send: BeaconProcessorSend<T::EthSpec>,
beacon_processor_reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
) -> Result<
(
NetworkService<T>,
@@ -315,7 +314,6 @@ impl<T: BeaconChainTypes> NetworkService<T> {
executor.clone(),
invalid_block_storage,
beacon_processor_send,
beacon_processor_reprocess_tx,
fork_context.clone(),
)?;
@@ -367,7 +365,6 @@ impl<T: BeaconChainTypes> NetworkService<T> {
executor: task_executor::TaskExecutor,
libp2p_registry: Option<&'_ mut Registry>,
beacon_processor_send: BeaconProcessorSend<T::EthSpec>,
beacon_processor_reprocess_tx: mpsc::Sender<ReprocessQueueMessage>,
) -> Result<(Arc<NetworkGlobals<T::EthSpec>>, NetworkSenders<T::EthSpec>), String> {
let (network_service, network_globals, network_senders) = Self::build(
beacon_chain,
@@ -375,7 +372,6 @@ impl<T: BeaconChainTypes> NetworkService<T> {
executor.clone(),
libp2p_registry,
beacon_processor_send,
beacon_processor_reprocess_tx,
)
.await?;

View File

@@ -58,8 +58,6 @@ fn test_dht_persistence() {
let BeaconProcessorChannels {
beacon_processor_tx,
beacon_processor_rx: _beacon_processor_rx,
work_reprocessing_tx,
work_reprocessing_rx: _work_reprocessing_rx,
} = <_>::default();
let _network_service = NetworkService::start(
@@ -68,7 +66,6 @@ fn test_dht_persistence() {
executor,
None,
beacon_processor_tx,
work_reprocessing_tx,
)
.await
.unwrap();
@@ -137,7 +134,6 @@ fn test_removing_topic_weight_on_old_topics() {
executor.clone(),
None,
beacon_processor_channels.beacon_processor_tx,
beacon_processor_channels.work_reprocessing_tx,
)
.await
.unwrap()