Skip to content

Commit 3164e9d

Browse files
committed
Use OnceLock to initialize
1 parent c49c184 commit 3164e9d

File tree

4 files changed

+17
-21
lines changed

4 files changed

+17
-21
lines changed

crates/op-rbuilder/src/builders/flashblocks/payload.rs

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ use std::{
4545
ops::{Div, Rem},
4646
sync::{
4747
atomic::{AtomicU64, Ordering},
48-
Arc, Mutex,
48+
Arc, OnceLock,
4949
},
5050
time::Instant,
5151
};
@@ -121,8 +121,8 @@ pub struct OpPayloadBuilder<Pool, Client, BT> {
121121
#[allow(dead_code)]
122122
pub builder_tx: BT,
123123
/// Builder events handle to send BuiltPayload events
124-
payload_builder_handle:
125-
Arc<Mutex<Option<tokio::sync::broadcast::Sender<Events<OpEngineTypes>>>>>,
124+
pub payload_builder_handle:
125+
Arc<OnceLock<tokio::sync::broadcast::Sender<Events<OpEngineTypes>>>>,
126126
}
127127

128128
impl<Pool, Client, BT> OpPayloadBuilder<Pool, Client, BT> {
@@ -134,7 +134,7 @@ impl<Pool, Client, BT> OpPayloadBuilder<Pool, Client, BT> {
134134
config: BuilderConfig<FlashblocksConfig>,
135135
builder_tx: BT,
136136
payload_builder_handle: Arc<
137-
Mutex<Option<tokio::sync::broadcast::Sender<Events<OpEngineTypes>>>>,
137+
OnceLock<tokio::sync::broadcast::Sender<Events<OpEngineTypes>>>,
138138
>,
139139
) -> eyre::Result<Self> {
140140
let metrics = Arc::new(OpRBuilderMetrics::default());
@@ -619,8 +619,8 @@ where
619619
/// Sends built payload via payload builder handle broadcast channel to the engine
620620
pub fn send_payload_to_engine(&self, payload: OpBuiltPayload) {
621621
// Send built payload as create one
622-
match self.payload_builder_handle.lock().as_deref() {
623-
Ok(Some(handle)) => {
622+
match self.payload_builder_handle.get() {
623+
Some(handle) => {
624624
let res = handle.send(Events::BuiltPayload(payload.clone()));
625625
if let Err(e) = res {
626626
error!(
@@ -629,13 +629,9 @@ where
629629
);
630630
}
631631
}
632-
Ok(None) => {
632+
None => {
633633
error!(message = "Payload builder handle is not setup, skipping sending payload")
634634
}
635-
Err(e) => error!(
636-
message = "Failed to get access to payload builder handle",
637-
error = ?e,
638-
),
639635
}
640636
}
641637

crates/op-rbuilder/src/builders/flashblocks/service.rs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use reth_node_builder::{components::PayloadServiceBuilder, BuilderContext};
1313
use reth_optimism_evm::OpEvmConfig;
1414
use reth_payload_builder::{PayloadBuilderHandle, PayloadBuilderService};
1515
use reth_provider::CanonStateSubscriptions;
16-
use std::sync::{Arc, Mutex};
16+
use std::sync::Arc;
1717

1818
pub struct FlashblocksServiceBuilder(pub BuilderConfig<FlashblocksConfig>);
1919

@@ -29,16 +29,15 @@ impl FlashblocksServiceBuilder {
2929
Pool: PoolBounds,
3030
BT: BuilderTx + Unpin + Clone + Send + Sync + 'static,
3131
{
32-
let handle = Arc::new(Mutex::new(None));
33-
let payload_builder_handle = handle.clone();
32+
let once_lock = Arc::new(std::sync::OnceLock::new());
3433

3534
let payload_builder = OpPayloadBuilder::new(
3635
OpEvmConfig::optimism(ctx.chain_spec()),
3736
pool,
3837
ctx.provider().clone(),
3938
self.0.clone(),
4039
builder_tx,
41-
handle,
40+
once_lock.clone(),
4241
)?;
4342

4443
let payload_job_config = BasicPayloadJobGeneratorConfig::default();
@@ -55,10 +54,9 @@ impl FlashblocksServiceBuilder {
5554
let (payload_service, payload_builder) =
5655
PayloadBuilderService::new(payload_generator, ctx.provider().canonical_state_stream());
5756

58-
payload_builder_handle
59-
.lock()
60-
.expect("store payload builder handle in mutex")
61-
.replace(payload_service.payload_events_handle());
57+
once_lock
58+
.set(payload_service.payload_events_handle())
59+
.map_err(|_| eyre::eyre!("Cannot initialize payload service handle"))?;
6260

6361
ctx.task_executor()
6462
.spawn_critical("custom payload builder service", Box::pin(payload_service));

crates/op-rbuilder/src/primitives/reth/engine_api_builder.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ use op_alloy_rpc_types_engine::{
2323
OpPayloadAttributes, ProtocolVersion, SuperchainSignal,
2424
};
2525
use reth::builder::NodeTypes;
26-
use reth_node_api::{EngineTypes, EngineApiValidator};
26+
use reth_node_api::{EngineApiValidator, EngineTypes};
2727
use reth_optimism_chainspec::OpChainSpec;
2828
use reth_optimism_rpc::OpEngineApiServer;
2929
use reth_rpc_api::IntoEngineApiRpcModule;

crates/op-rbuilder/src/revert_protection.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,9 @@ where
157157
.await
158158
.map_err(EthApiError::from)?;
159159

160-
let result = BundleResult { bundle_hash: outcome.hash };
160+
let result = BundleResult {
161+
bundle_hash: outcome.hash,
162+
};
161163
Ok(result)
162164
}
163165
}

0 commit comments

Comments
 (0)