Retract request assertions for completed HTTP requests
This commit is contained in:
parent
15914aa153
commit
1d97ed1b55
|
@ -160,8 +160,9 @@ pub async fn serve(
|
||||||
let account = Account::new(Some(AnyValue::symbol("http")), trace_collector);
|
let account = Account::new(Some(AnyValue::symbol("http")), trace_collector);
|
||||||
|
|
||||||
let (tx, rx) = oneshot::channel();
|
let (tx, rx) = oneshot::channel();
|
||||||
|
let mut req_handle: Option<Handle> = None;
|
||||||
|
|
||||||
facet.activate(&account, Some(trace::TurnCause::external("http")), move |t| {
|
facet.activate(&account, Some(trace::TurnCause::external("http")), |t| {
|
||||||
let sreq = http::HttpRequest {
|
let sreq = http::HttpRequest {
|
||||||
sequence_number: NEXT_SEQ.fetch_add(1, Ordering::Relaxed).into(),
|
sequence_number: NEXT_SEQ.fetch_add(1, Ordering::Relaxed).into(),
|
||||||
host,
|
host,
|
||||||
|
@ -174,11 +175,20 @@ pub async fn serve(
|
||||||
};
|
};
|
||||||
tracing::debug!(?sreq);
|
tracing::debug!(?sreq);
|
||||||
let srep = Cap::guard(&language().syndicate, t.create(ResponseCollector::new(tx)));
|
let srep = Cap::guard(&language().syndicate, t.create(ResponseCollector::new(tx)));
|
||||||
httpd.assert(t, language(), &http::HttpContext { req: sreq, res: srep });
|
req_handle = httpd.assert(t, language(), &http::HttpContext { req: sreq, res: srep });
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
|
||||||
match rx.await {
|
let response_result = rx.await;
|
||||||
|
|
||||||
|
facet.activate(&account, Some(trace::TurnCause::external("http")), |t| {
|
||||||
|
if let Some(h) = req_handle {
|
||||||
|
t.retract(h);
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
});
|
||||||
|
|
||||||
|
match response_result {
|
||||||
Ok(response) => Ok(response),
|
Ok(response) => Ok(response),
|
||||||
Err(_ /* sender dropped */) => Ok(empty_response(StatusCode::INTERNAL_SERVER_ERROR)),
|
Err(_ /* sender dropped */) => Ok(empty_response(StatusCode::INTERNAL_SERVER_ERROR)),
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue