Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 21 additions & 14 deletions engine/packages/pegboard-gateway2/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -882,26 +882,33 @@ impl PegboardGateway2 {
},
);

if let Err(err) = in_flight_req.send_message(close_message, true).await {
tracing::warn!(?err, "error sending close message");
} else {
metrics::CLOSE_SENT_TOTAL
.with_label_values(&[
self.namespace_id.to_string().as_str(),
self.pool_name.as_str(),
RequestProtocol::WebSocket.to_string().as_str(),
close_reason_label,
])
.inc();
}

let stop_result = match &lifecycle_res {
Ok(LifecycleResult::ServerClose(_)) => RequestStopResult::Success,
Ok(LifecycleResult::ClientClose(_)) => RequestStopResult::ClientDisconnect,
Ok(LifecycleResult::Aborted) => RequestStopResult::RequestTimeout,
Err(_) => RequestStopResult::EnvoyError,
};
in_flight_req.stop(stop_result).await;
let close_sent = metrics::CLOSE_SENT_TOTAL.with_label_values(&[
self.namespace_id.to_string().as_str(),
self.pool_name.as_str(),
RequestProtocol::WebSocket.to_string().as_str(),
close_reason_label,
]);
let in_flight_req = in_flight_req.clone();
let close_envoy = async move {
match in_flight_req.send_message(close_message, true).await {
Ok(()) => close_sent.inc(),
Err(err) => tracing::warn!(?err, "error sending close message"),
}
in_flight_req.stop(stop_result).await;
};
// On a server close the envoy closed first and may already be gone,
// so its acknowledgment must not hold the client's close frame.
if matches!(lifecycle_res, Ok(LifecycleResult::ServerClose(_))) {
tokio::spawn(close_envoy.in_current_span());
} else {
close_envoy.await;
}
} else {
in_flight_req.start_hibernation().await?;
}
Expand Down
35 changes: 21 additions & 14 deletions engine/packages/pegboard-gateway3/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -631,26 +631,33 @@ impl PegboardGateway3 {
},
);

if let Err(err) = in_flight_req.send_message(close_message, true).await {
tracing::warn!(?err, "error sending close message");
} else {
metrics::CLOSE_SENT_TOTAL
.with_label_values(&[
self.namespace_id.to_string().as_str(),
self.pool_name.as_str(),
RequestProtocol::WebSocket.to_string().as_str(),
close_reason_label,
])
.inc();
}

let stop_result = match &lifecycle_res {
Ok(LifecycleResult::ServerClose(_)) => RequestStopResult::Success,
Ok(LifecycleResult::ClientClose(_)) => RequestStopResult::ClientDisconnect,
Ok(LifecycleResult::Aborted) => RequestStopResult::RequestTimeout,
Err(_) => RequestStopResult::EnvoyError,
};
in_flight_req.stop(stop_result).await;
let close_sent = metrics::CLOSE_SENT_TOTAL.with_label_values(&[
self.namespace_id.to_string().as_str(),
self.pool_name.as_str(),
RequestProtocol::WebSocket.to_string().as_str(),
close_reason_label,
]);
let in_flight_req = in_flight_req.clone();
let close_envoy = async move {
match in_flight_req.send_message(close_message, true).await {
Ok(()) => close_sent.inc(),
Err(err) => tracing::warn!(?err, "error sending close message"),
}
in_flight_req.stop(stop_result).await;
};
// On a server close the envoy closed first and may already be gone,
// so its acknowledgment must not hold the client's close frame.
if matches!(lifecycle_res, Ok(LifecycleResult::ServerClose(_))) {
tokio::spawn(close_envoy.in_current_span());
} else {
close_envoy.await;
}
} else {
in_flight_req.start_hibernation().await?;
}
Expand Down
Loading