Skip to content

Commit 975d685

Browse files
committed
feat: tracing permits
1 parent 2c09693 commit 975d685

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

crates/rpc/src/ctx/full.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use signet_node_types::Pnt;
1212
use signet_tx_cache::client::TxCache;
1313
use signet_types::constants::SignetSystemConstants;
1414
use std::sync::Arc;
15+
use tokio::sync::{AcquireError, OwnedSemaphorePermit, Semaphore};
1516
use trevm::{helpers::Ctx, revm::Inspector};
1617

1718
/// State location when instantiating an EVM instance.
@@ -137,6 +138,12 @@ where
137138
}
138139
}
139140

141+
/// Shared context between all RPC handlers.
142+
#[derive(Debug)]
143+
struct SharedContext {
144+
tracing_semaphores: Arc<Semaphore>,
145+
}
146+
140147
/// Inner context for [`RpcCtx`].
141148
#[derive(Debug)]
142149
pub struct RpcCtxInner<Host, Signet>
@@ -146,6 +153,8 @@ where
146153
{
147154
host: Host,
148155
signet: SignetCtx<Signet>,
156+
157+
shared: SharedContext,
149158
}
150159

151160
impl<Host, Signet> RpcCtxInner<Host, Signet>
@@ -177,8 +186,20 @@ where
177186
where
178187
Tasks: TaskSpawner + Clone + 'static,
179188
{
180-
SignetCtx::new(constants, factory, provider, eth_config, tx_cache, spawner)
181-
.map(|signet| Self { host, signet })
189+
SignetCtx::new(constants, factory, provider, eth_config, tx_cache, spawner).map(|signet| {
190+
Self {
191+
host,
192+
signet,
193+
shared: SharedContext {
194+
tracing_semaphores: Semaphore::new(eth_config.max_tracing_requests).into(),
195+
},
196+
}
197+
})
198+
}
199+
200+
/// Acquire a permit for tracing.
201+
pub async fn acquire_tracing_permit(&self) -> Result<OwnedSemaphorePermit, AcquireError> {
202+
self.shared.tracing_semaphores.clone().acquire_owned().await
182203
}
183204

184205
pub const fn host(&self) -> &Host {

crates/rpc/src/debug/endpoints.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ where
3838
Host: FullNodeComponents,
3939
Signet: Pnt,
4040
{
41+
let _permit = response_tri!(
42+
ctx.acquire_tracing_permit()
43+
.await
44+
.map_err(|_| DebugError::rpc_error("Failed to acquire tracing permit".into()))
45+
);
46+
4147
let id = id.into();
4248
let span = tracing::debug_span!("traceBlock", ?id, tracer = ?opts.as_ref().and_then(|o| o.tracer.as_ref()));
4349

@@ -101,6 +107,12 @@ where
101107
Host: FullNodeComponents,
102108
Signet: Pnt,
103109
{
110+
let _permit = response_tri!(
111+
ctx.acquire_tracing_permit()
112+
.await
113+
.map_err(|_| DebugError::rpc_error("Failed to acquire tracing permit".into()))
114+
);
115+
104116
let span = tracing::debug_span!("traceTransaction", %tx_hash, tracer = ?opts.as_ref().and_then(|o| o.tracer.as_ref()));
105117

106118
let fut = async move {

0 commit comments

Comments
 (0)