fn call()

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)
    }