Skip to content

Commit 9c0346d

Browse files
authored
fix: ensure rpc::request is always a new root span (#1739)
1 parent a040285 commit 9c0346d

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

src/eth/rpc/rpc_middleware.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ impl<'a> RpcServiceT<'a> for RpcMiddleware {
6262
fn call(&self, mut request: jsonrpsee::types::Request<'a>) -> Self::Future {
6363
// track request
6464
let span = info_span!(
65+
parent: None,
6566
"rpc::request",
6667
cid = %new_cid(),
6768
rpc_client = field::Empty,
@@ -159,18 +160,17 @@ impl<'a> Future for RpcResponse<'a> {
159160
fn poll(self: std::pin::Pin<&mut Self>, cx: &mut std::task::Context<'_>) -> std::task::Poll<Self::Output> {
160161
// poll future
161162
let resp = self.project();
162-
let response = resp.future_response.poll(cx);
163+
let mut response = resp.future_response.poll(cx);
163164

164-
// when ready, track response
165-
if let Poll::Ready(response) = &response {
165+
// when ready, track response before returning
166+
if let Poll::Ready(response) = &mut response {
166167
let elapsed = resp.start.elapsed();
167-
let _middleware_enter = response.extensions().enter_middleware_span();
168+
let middleware_enter = response.extensions().enter_middleware_span();
168169

169-
// trace response
170+
// extract response data
170171
let response_success = response.is_success();
171172
let response_result: JsonValue = from_json_str(response.as_result());
172173

173-
#[cfg_attr(not(feature = "metrics"), allow(unused_variables))]
174174
let (level, error_code) = match response_result
175175
.get("error")
176176
.and_then(|v| v.get("code"))
@@ -183,6 +183,7 @@ impl<'a> Future for RpcResponse<'a> {
183183
None => (Level::INFO, 0),
184184
};
185185

186+
// track event
186187
event_with!(
187188
level,
188189
rpc_client = %resp.client,
@@ -199,7 +200,7 @@ impl<'a> Future for RpcResponse<'a> {
199200
"rpc response"
200201
);
201202

202-
// metrify response
203+
// track metrics
203204
#[cfg(feature = "metrics")]
204205
{
205206
let rpc_result = match response_result.get("result") {
@@ -219,6 +220,10 @@ impl<'a> Future for RpcResponse<'a> {
219220
response.is_success(),
220221
);
221222
}
223+
224+
// drop span because maybe jsonrpsee is keeping it alive
225+
drop(middleware_enter);
226+
response.extensions_mut().remove::<Span>();
222227
}
223228

224229
response

0 commit comments

Comments
 (0)