diff --git a/source/common/conn_pool/conn_pool_base.cc b/source/common/conn_pool/conn_pool_base.cc index 113836ab13648..ce14a12d16438 100644 --- a/source/common/conn_pool/conn_pool_base.cc +++ b/source/common/conn_pool/conn_pool_base.cc @@ -577,10 +577,6 @@ ActiveClient::ActiveClient(ConnPoolImplBase& parent, uint32_t lifetime_stream_li ActiveClient::~ActiveClient() { releaseResourcesBase(); } -void ActiveClient::onEvent(Network::ConnectionEvent event) { - parent_.onConnectionEvent(*this, "", event); -} - void ActiveClient::releaseResourcesBase() { if (!resources_released_) { resources_released_ = true; diff --git a/source/common/conn_pool/conn_pool_base.h b/source/common/conn_pool/conn_pool_base.h index dafc845f88915..fa43d35b607a0 100644 --- a/source/common/conn_pool/conn_pool_base.h +++ b/source/common/conn_pool/conn_pool_base.h @@ -38,7 +38,6 @@ class ActiveClient : public LinkedObject, void releaseResourcesBase(); // Network::ConnectionCallbacks - void onEvent(Network::ConnectionEvent event) override; void onAboveWriteBufferHighWatermark() override {} void onBelowWriteBufferLowWatermark() override {} diff --git a/source/common/tcp/conn_pool.cc b/source/common/tcp/conn_pool.cc index 9cfa340eff0d0..5a65a91d6a18c 100644 --- a/source/common/tcp/conn_pool.cc +++ b/source/common/tcp/conn_pool.cc @@ -65,7 +65,7 @@ void ActiveTcpClient::onEvent(Network::ConnectionEvent event) { if (event == Network::ConnectionEvent::Connected) { connection_->readDisable(true); } - Envoy::ConnectionPool::ActiveClient::onEvent(event); + parent_.onConnectionEvent(*this, connection_->transportFailureReason(), event); if (callbacks_) { // Do not pass the Connected event to any session which registered during onEvent above. // Consumers of connection pool connections assume they are receiving already connected diff --git a/source/common/tcp/original_conn_pool.cc b/source/common/tcp/original_conn_pool.cc index 7321d3723a5c6..bafb0266a20ad 100644 --- a/source/common/tcp/original_conn_pool.cc +++ b/source/common/tcp/original_conn_pool.cc @@ -198,7 +198,8 @@ void OriginalConnPoolImpl::onConnectionEvent(ActiveConn& conn, Network::Connecti PendingRequestPtr request = pending_requests_to_purge.front()->removeFromList(pending_requests_to_purge); host_->cluster().stats().upstream_rq_pending_failure_eject_.inc(); - request->callbacks_.onPoolFailure(reason, "", conn.real_host_description_); + request->callbacks_.onPoolFailure(reason, conn.conn_->transportFailureReason(), + conn.real_host_description_); } } diff --git a/test/common/conn_pool/conn_pool_base_test.cc b/test/common/conn_pool/conn_pool_base_test.cc index 17dcfe7e8473a..6d60e9c098d4c 100644 --- a/test/common/conn_pool/conn_pool_base_test.cc +++ b/test/common/conn_pool/conn_pool_base_test.cc @@ -25,6 +25,9 @@ class TestActiveClient : public ActiveClient { bool closingWithIncompleteStream() const override { return false; } uint32_t numActiveStreams() const override { return active_streams_; } absl::optional protocol() const override { return absl::nullopt; } + void onEvent(Network::ConnectionEvent event) override { + parent_.onConnectionEvent(*this, "", event); + } uint32_t active_streams_{}; }; diff --git a/test/common/tcp/conn_pool_test.cc b/test/common/tcp/conn_pool_test.cc index 04178b7207b38..59766ef3c4e1f 100644 --- a/test/common/tcp/conn_pool_test.cc +++ b/test/common/tcp/conn_pool_test.cc @@ -61,10 +61,11 @@ struct ConnPoolCallbacks : public Tcp::ConnectionPool::Callbacks { pool_ready_.ready(); } - void onPoolFailure(ConnectionPool::PoolFailureReason reason, absl::string_view, + void onPoolFailure(ConnectionPool::PoolFailureReason reason, absl::string_view failure_reason, Upstream::HostDescriptionConstSharedPtr host) override { reason_ = reason; host_ = host; + failure_reason_string_ = std::string(failure_reason); pool_failure_.ready(); } @@ -73,6 +74,7 @@ struct ConnPoolCallbacks : public Tcp::ConnectionPool::Callbacks { ReadyWatcher pool_ready_; ConnectionPool::ConnectionDataPtr conn_data_{}; absl::optional reason_; + std::string failure_reason_string_; Upstream::HostDescriptionConstSharedPtr host_; Ssl::ConnectionInfoConstSharedPtr ssl_; }; @@ -321,6 +323,7 @@ class TcpConnPoolImplDestructorTest : public Event::TestUsingSimulatedTime, void prepareConn() { connection_ = new StrictMock(); + EXPECT_CALL(*connection_, transportFailureReason()).Times(AtLeast(0)); EXPECT_CALL(*connection_, setBufferLimits(0)); EXPECT_CALL(*connection_, detectEarlyCloseWhenReadDisabled(false)); EXPECT_CALL(*connection_, addConnectionCallbacks(_)); @@ -650,10 +653,13 @@ TEST_P(TcpConnPoolImplTest, RemoteConnectFailure) { EXPECT_CALL(*conn_pool_->test_conns_[0].connect_timer_, disableTimer()); EXPECT_CALL(*conn_pool_, onConnDestroyedForTest()); + EXPECT_CALL(*conn_pool_->test_conns_[0].connection_, transportFailureReason()) + .WillOnce(Return("foo")); conn_pool_->test_conns_[0].connection_->raiseEvent(Network::ConnectionEvent::RemoteClose); dispatcher_.clearDeferredDeleteList(); EXPECT_EQ(ConnectionPool::PoolFailureReason::RemoteConnectionFailure, callbacks.reason_); + EXPECT_EQ("foo", callbacks.failure_reason_string_); EXPECT_EQ(1U, cluster_->stats_.upstream_cx_connect_fail_.value()); EXPECT_EQ(1U, cluster_->stats_.upstream_rq_pending_failure_eject_.value());