in dubbo/src/filter/timeout.rs [38:65]
fn call(&mut self, req: Request<()>) -> Result<Request<()>, Status> {
if let Some(attachments) = RpcContext::get_attachments() {
let current_nanos = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos();
let attachments = attachments.lock().unwrap();
let tri_timeout_deadline_in_nanos =
attachments.get(TRI_TIMEOUT_DEADLINE_IN_NANOS).unwrap();
let tri_timeout_deadline_in_nanos: u128 = tri_timeout_deadline_in_nanos
.as_str()
.unwrap()
.parse()
.unwrap();
tracing::debug!(
"TimeoutFilter tri-timeout-deadline-in-nanos : {}, current-nanos:{}",
tri_timeout_deadline_in_nanos,
current_nanos
);
if tri_timeout_deadline_in_nanos - current_nanos <= 0 {
return Err(Status::new(Code::DeadlineExceeded, String::from("Timeout")));
}
}
Ok(req)
}