in dubbo/src/filter/context.rs [36:71]
fn call(&mut self, req: Request<()>) -> Result<Request<()>, Status> {
let headers = &mut req.metadata.into_headers();
let timeout = headers.get(TIMEOUT_COUNTDOWN);
let time = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos();
let mut dead_line_in_nanos = 0_u128;
if let Some(t) = timeout {
let timeout: u128 = t.to_str().unwrap().parse().unwrap();
if timeout > 0_u128 {
dead_line_in_nanos = time + timeout * 1000000;
}
} else {
let timeout: u128 = TIMEOUT_DEFAULT * 1000000;
dead_line_in_nanos = time + timeout;
}
tracing::debug!(
"ContextFilter tri-timeout-deadline-in-nanos : {}",
dead_line_in_nanos
);
if let Some(at) = RpcContext::get_attachments() {
let mut attachments = at.lock().unwrap();
attachments.insert(
String::from(TRI_TIMEOUT_DEADLINE_IN_NANOS),
Value::from(dead_line_in_nanos.to_string()),
);
}
Ok(req)
}