Revert "broken: context won't satisfy spawn async move"

This reverts commit 2b11479ad4801e1efa8ab0aca4ca577bd3f195fe.
This commit is contained in:
Floriane TUERNAL SABOTINOV
2025-09-04 14:10:16 +02:00
parent 99a0f4ea30
commit 4063071e08
2 changed files with 88 additions and 66 deletions
@@ -858,77 +858,101 @@ impl<R, S> FreshHandler<R, S> {
pub(crate) async fn handle_initial_client_request(
&mut self,
request: ClientControlRequest,
) -> Result<(Option<ClientDetails>, Option<TraceId>), InitialAuthenticationError>
) -> Result<Option<ClientDetails>, InitialAuthenticationError>
where
S: AsyncRead + AsyncWrite + Unpin + Send,
R: CryptoRng + RngCore + Send,
{
let distributed_trace_id = if let ClientControlRequest::AuthenticateV2(ref auth_req) = request {
if let Some(ref trace_id_str) = auth_req.debug_trace_id {
warn!("Received debug trace ID: {trace_id_str}");
match TraceId::from_hex(&trace_id_str) {
Ok(trace_id) => {
warn!("Parsed debug trace ID: {trace_id}");
Some(trace_id)
}
Err(err) => {
warn!("Failed to parse debug trace ID: {err}");
None
}
}
// let _distributed_context = if let ClientControlRequest::AuthenticateV2(ref auth_req) = request {
// if let Some(ref trace_id_str) = auth_req.debug_trace_id {
// warn!("Received debug trace ID: {trace_id_str}");
// match TraceId::from_hex(&trace_id_str) {
// Ok(trace_id) => {
// warn!("Parsed debug trace ID: {trace_id}");
// let id_gen = RandomIdGenerator::default();
// let span_id = id_gen.new_span_id();
// let span_context = opentelemetry::trace::SpanContext::new(
// trace_id,
// span_id,
// opentelemetry::trace::TraceFlags::SAMPLED,
// true,
// Default::default(),
// );
// let remote_context = opentelemetry::Context::current()
// .with_remote_span_context(span_context);
// let context_guard = remote_context.attach();
// let span = info_span!(
// "handle_initial_client_request",
// trace_id = %trace_id,
// service = "nym-node"
// );
// warn!("Distributed context established. trace_id: {:?}", trace_id);
// Some(span)
// }
// Err(err) => {
// warn!("Failed to parse debug trace ID: {err}");
// None
// }
// }
// } else {
// warn!("Received debug trace ID without context");
// None
// }
// } else {
// None
// };
let span = if let ClientControlRequest::AuthenticateV2(ref auth_req) = request {
if let Some(ref trace_id) = auth_req.debug_trace_id {
warn!("RAW TRACE ID: {trace_id:?}");
let trace_id = opentelemetry::trace::TraceId::from_hex(&trace_id)
.expect("Invalid trace ID format");
warn!("🫂TraceID: {trace_id}🫂");
// We don't need to try and preserve the SpanID, just the TraceID (right?) so
// just making a new SpanID for the moment
let id_generator = RandomIdGenerator::default();
let span_id = id_generator.new_span_id();
let span_context = opentelemetry::trace::SpanContext::new(
trace_id,
span_id,
opentelemetry::trace::TraceFlags::SAMPLED,
true, // is_remote = true since this comes from another service
Default::default(),
);
let remote_context =
opentelemetry::Context::current().with_remote_span_context(span_context);
let contextguard = remote_context.clone().attach();
let span = info_span!(
"authenticate_v2",
trace_id = %trace_id
);
span.set_parent(remote_context.clone());
Some(span)
} else {
warn!("AuthenticateV2 request but no trace_id provided");
None
}
} else {
warn!("Not an AuthenticateV2 request");
None
};
// mark/otel method
// let span = if let ClientControlRequest::AuthenticateV2(ref auth_req) = request {
// if let Some(ref trace_id) = auth_req.debug_trace_id {
// warn!("RAW TRACE ID: {trace_id:?}");
// let trace_id = opentelemetry::trace::TraceId::from_hex(&trace_id)
// .expect("Invalid trace ID format");
// warn!("🫂TraceID: {trace_id}🫂");
// // We don't need to try and preserve the SpanID, just the TraceID (right?) so
// // just making a new SpanID for the moment
// let id_generator = RandomIdGenerator::default();
// let span_id = id_generator.new_span_id();
// let span_context = opentelemetry::trace::SpanContext::new(
// trace_id,
// span_id,
// opentelemetry::trace::TraceFlags::SAMPLED,
// true, // is_remote = true since this comes from another service
// Default::default(),
// );
// let remote_context =
// opentelemetry::Context::current().with_remote_span_context(span_context);
// let contextguard = remote_context.clone().attach();
// let span = info_span!(
// "authenticate_v2",
// trace_id = %trace_id
// );
// span.set_parent(remote_context.clone());
// Some(span)
// } else {
// warn!("AuthenticateV2 request but no trace_id provided");
// None
// }
// } else {
// warn!("Not an AuthenticateV2 request");
// None
// };
// // Probably a nicer way to do this but for now just match
// let _guard = match &span {
// Some(s) => {
// warn!("ENTERED SPAN");
// Some(s.enter())
// }
// None => {
// warn!("COULDN'T ENTER SPAN");
// None
// }
// };
// Probably a nicer way to do this but for now just match
let _guard = match &span {
Some(s) => {
warn!("ENTERED SPAN");
Some(s.enter())
}
None => {
warn!("COULDN'T ENTER SPAN");
None
}
};
let auth_result = match request {
ClientControlRequest::Authenticate {
@@ -948,7 +972,7 @@ impl<R, S> FreshHandler<R, S> {
} => self.handle_register(protocol_version, data).await,
ClientControlRequest::SupportedProtocol { .. } => {
self.handle_reply_supported_protocol_request().await;
return Ok((None, distributed_trace_id));
return Ok(None);
}
_ => {
debug!("received an invalid client request");
@@ -988,7 +1012,7 @@ impl<R, S> FreshHandler<R, S> {
return Err(InitialAuthenticationError::EmptyClientDetails);
};
Ok((Some(client_details), distributed_trace_id))
Ok(Some(client_details))
}
#[instrument(skip_all)]
@@ -1010,7 +1034,7 @@ impl<R, S> FreshHandler<R, S> {
};
// see if we managed to register the client through this request
let (maybe_auth_res, distributed_trace_id) = match self.handle_initial_client_request(initial_request).await {
let maybe_auth_res = match self.handle_initial_client_request(initial_request).await {
Ok(maybe_auth_res) => maybe_auth_res,
Err(err) => {
debug!("initial client request handling error: {err}");
@@ -1021,6 +1045,7 @@ impl<R, S> FreshHandler<R, S> {
if let Some(registration_details) = maybe_auth_res {
let (mix_sender, mix_receiver) = mpsc::unbounded();
// Channel for handlers to ask other handlers if they are still active.
let (is_active_request_sender, is_active_request_receiver) = mpsc::unbounded();
self.shared_state.active_clients_store.insert_remote(
registration_details.address,
@@ -6,9 +6,6 @@ use nym_credential_verification::BandwidthFlushingBehaviourConfig;
use nym_gateway_requests::shared_key::SharedGatewayKey;
use nym_gateway_requests::ServerResponse;
use nym_sphinx::DestinationAddressBytes;
use opentelemetry::Context;
use opentelemetry_sdk::trace::{IdGenerator, RandomIdGenerator};
use opentelemetry::trace::TraceContextExt;
use rand::{CryptoRng, Rng};
use std::time::Duration;
use time::OffsetDateTime;