Skip to content

Commit 50ab11a

Browse files
abakiaydinmeta-codesync[bot]
authored andcommitted
Propagate transport connection errors
Summary: Allows hq session to propagate quic error. Reviewed By: mingtaoy, hanidamlaj Differential Revision: D83672572 fbshipit-source-id: 7dffc982b87cada6bf4a7dab8b606a04a605deb8
1 parent b92618e commit 50ab11a

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

third-party/proxygen/src/proxygen/lib/http/session/HQSession.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -532,9 +532,12 @@ void HQSession::onConnectionError(quic::QuicError code) noexcept {
532532
}
533533
}
534534

535+
sessionDropReason_ = SessionDropReason{.quicError = std::move(code),
536+
.proxygenError = proxygenErr};
535537
// force close all streams.
536538
// close with error won't invoke any connection callback, reentrancy safe
537-
dropConnectionSync(std::move(code), proxygenErr);
539+
dropConnectionSync(sessionDropReason_->quicError,
540+
sessionDropReason_->proxygenError);
538541
}
539542

540543
bool HQSession::getCurrentTransportInfo(wangle::TransportInfo* tinfo) {
@@ -840,8 +843,9 @@ void HQSession::dropConnection(const std::string& errorMsg) {
840843

841844
void HQSession::dropConnectionAsync(quic::QuicError errorCode,
842845
ProxygenError proxygenError) {
843-
if (!dropInNextLoop_.has_value()) {
844-
dropInNextLoop_ = std::make_pair(errorCode, proxygenError);
846+
if (!sessionDropReason_.has_value()) {
847+
sessionDropReason_ = SessionDropReason{.quicError = std::move(errorCode),
848+
.proxygenError = proxygenError};
845849
scheduleLoopCallback(true);
846850
} else {
847851
VLOG(4) << "Session already scheduled to be dropped: sess=" << *this;
@@ -1086,8 +1090,9 @@ void HQSession::runLoopCallback() noexcept {
10861090
inLoopCallback_ = false;
10871091
});
10881092

1089-
if (dropInNextLoop_.has_value()) {
1090-
dropConnectionSync(dropInNextLoop_->first, dropInNextLoop_->second);
1093+
if (sessionDropReason_.has_value()) {
1094+
dropConnectionSync(sessionDropReason_->quicError,
1095+
sessionDropReason_->proxygenError);
10911096
return;
10921097
}
10931098

third-party/proxygen/src/proxygen/lib/http/session/HQSession.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,14 @@ class HQSession
471471
return sock_.get();
472472
}
473473

474+
struct SessionDropReason {
475+
quic::QuicError quicError{quic::TransportErrorCode::NO_ERROR};
476+
ProxygenError proxygenError{ProxygenError::kErrorNone};
477+
};
478+
const folly::Optional<SessionDropReason>& getSessionDropReason() const {
479+
return sessionDropReason_;
480+
}
481+
474482
// Override HTTPSessionBase address getter functions
475483
const folly::SocketAddress& getLocalAddress() const noexcept override {
476484
return sock_ && sock_->good() ? sock_->getLocalAddress() : localAddr_;
@@ -945,7 +953,7 @@ class HQSession
945953
bool started_ : 1;
946954
bool dropping_ : 1;
947955
bool inLoopCallback_ : 1;
948-
folly::Optional<std::pair<quic::QuicError, ProxygenError>> dropInNextLoop_;
956+
folly::Optional<SessionDropReason> sessionDropReason_;
949957

950958
#ifdef _MSC_VER
951959
#pragma warning(push)

0 commit comments

Comments
 (0)