3333#include " ConnectionPool.h"
3434#include " ConsumerImpl.h"
3535#include " ExecutorService.h"
36+ #include " Future.h"
3637#include " LogUtils.h"
3738#include " MockServer.h"
3839#include " OpSendMsg.h"
@@ -1005,7 +1006,6 @@ Future<Result, BrokerConsumerStatsImpl> ClientConnection::newConsumerStats(uint6
10051006 }
10061007 pendingConsumerStatsMap_.insert (std::make_pair (requestId, promise));
10071008 lock.unlock ();
1008-
10091009 if (mockingRequests_.load (std::memory_order_acquire) && mockServer_ != nullptr &&
10101010 mockServer_->sendRequest (" CONSUMER_STATS" , requestId)) {
10111011 return promise.getFuture ();
@@ -1040,14 +1040,14 @@ void ClientConnection::newLookup(const SharedBuffer& cmd, uint64_t requestId, co
10401040 return ;
10411041 }
10421042
1043- auto request = std::make_shared<LookupRequest> (
1044- executor_-> createTimer (operationsTimeout_),
1045- makePendingRequestTimeoutHandler (
1046- pendingLookupRequests_, requestId,
1047- [cnxString = cnxString (), requestId, requestType]() {
1048- LOG_WARN (cnxString << requestType << " request timeout to broker, req_id: " << requestId) ;
1049- },
1050- [](ClientConnection& connection) { connection. numOfPendingLookupRequest_ --; }) );
1043+ auto request = insertRequest (
1044+ pendingLookupRequests_, requestId, [weakSelf{ weak_from_this ()}, requestId, requestType]() {
1045+ if ( auto self = weakSelf. lock ()) {
1046+ LOG_WARN (self-> cnxString ()
1047+ << requestType << " request timeout to broker, req_id: " << requestId);
1048+ self-> numOfPendingLookupRequest_ -- ;
1049+ }
1050+ } );
10511051 request->getFuture ().addListener ([promise](Result result, const LookupDataResultPtr& lookupDataResult) {
10521052 if (result == ResultOk) {
10531053 promise->setValue (lookupDataResult);
@@ -1056,9 +1056,7 @@ void ClientConnection::newLookup(const SharedBuffer& cmd, uint64_t requestId, co
10561056 }
10571057 });
10581058
1059- pendingLookupRequests_.emplace (requestId, request);
10601059 numOfPendingLookupRequest_++;
1061- request->initialize ();
10621060 lock.unlock ();
10631061 LOG_DEBUG (cnxString () << " Inserted lookup request " << requestType << " (req_id: " << requestId << " )" );
10641062 if (mockingRequests_.load (std::memory_order_acquire) && mockServer_ != nullptr &&
@@ -1174,22 +1172,17 @@ Future<Result, ResponseData> ClientConnection::sendRequestWithId(const SharedBuf
11741172 lock.unlock ();
11751173 LOG_DEBUG (cnxString () << " Fail " << requestType << " (req_id: " << requestId
11761174 << " ) to a closed connection" );
1177- auto request =
1178- std::make_shared<Request>(executor_->createTimer (operationsTimeout_), [] { return false ; });
1179- request->fail (ResultNotConnected);
1180- return request->getFuture ();
1175+ Promise<Result, ResponseData> promise;
1176+ promise.setFailed (ResultNotConnected);
1177+ return promise.getFuture ();
11811178 }
11821179
1183- auto request = std::make_shared<Request>(
1184- executor_->createTimer (operationsTimeout_),
1185- makePendingRequestTimeoutHandler (
1186- pendingRequests_, requestId,
1187- [cnxString = cnxString (), physicalAddress = physicalAddress_, requestId, requestType]() {
1188- LOG_WARN (cnxString << " Network request timeout to broker, remote: " << physicalAddress
1189- << " , req_id: " << requestId << " , request: " << requestType);
1190- }));
1191- pendingRequests_.emplace (requestId, request);
1192- request->initialize ();
1180+ auto request = insertRequest (
1181+ pendingRequests_, requestId,
1182+ [cnxString{cnxString ()}, physicalAddress{physicalAddress_}, requestId, requestType]() {
1183+ LOG_WARN (cnxString << " Network request timeout to broker, remote: " << physicalAddress
1184+ << " , req_id: " << requestId << " , request: " << requestType);
1185+ });
11931186 lock.unlock ();
11941187
11951188 LOG_DEBUG (cnxString () << " Inserted request " << requestType << " (req_id: " << requestId << " )" );
@@ -1278,6 +1271,11 @@ const std::future<void>& ClientConnection::close(Result result, bool switchClust
12781271 keepAliveTimer_.reset ();
12791272 }
12801273
1274+ if (consumerStatsRequestTimer_) {
1275+ cancelTimer (*consumerStatsRequestTimer_);
1276+ consumerStatsRequestTimer_.reset ();
1277+ }
1278+
12811279 cancelTimer (*connectTimer_);
12821280 lock.unlock ();
12831281 int refCount = weak_from_this ().use_count ();
@@ -1401,15 +1399,12 @@ Future<Result, GetLastMessageIdResponse> ClientConnection::newGetLastMessageId(u
14011399 return promise->getFuture ();
14021400 }
14031401
1404- auto request = std::make_shared<GetLastMessageId>(
1405- executor_->createTimer (operationsTimeout_),
1406- makePendingRequestTimeoutHandler (
1407- pendingGetLastMessageIdRequests_, requestId, [cnxString = cnxString (), requestId]() {
1408- LOG_WARN (cnxString << " GetLastMessageId request timeout to broker, req_id: " << requestId);
1409- }));
1410- pendingGetLastMessageIdRequests_.emplace (requestId, request);
1411- request->initialize ();
1402+ auto request =
1403+ insertRequest (pendingGetLastMessageIdRequests_, requestId, [cnxString = cnxString (), requestId]() {
1404+ LOG_WARN (cnxString << " GetLastMessageId request timeout to broker, req_id: " << requestId);
1405+ });
14121406 lock.unlock ();
1407+
14131408 if (mockingRequests_.load (std::memory_order_acquire) && mockServer_ != nullptr &&
14141409 mockServer_->sendRequest (" GET_LAST_MESSAGE_ID" , requestId)) {
14151410 return request->getFuture ();
@@ -1424,21 +1419,16 @@ Future<Result, NamespaceTopicsPtr> ClientConnection::newGetTopicsOfNamespace(
14241419 if (isClosed ()) {
14251420 lock.unlock ();
14261421 LOG_ERROR (cnxString () << " Client is not connected to the broker" );
1427- auto request = std::make_shared<GetTopicsOfNamespace>(executor_->createTimer (operationsTimeout_),
1428- [] { return false ; });
1429- request->fail (ResultNotConnected);
1430- return request->getFuture ();
1422+ Promise<Result, NamespaceTopicsPtr> promise;
1423+ promise.setFailed (ResultNotConnected);
1424+ return promise.getFuture ();
14311425 }
14321426
1433- auto request = std::make_shared<GetTopicsOfNamespace>(
1434- executor_->createTimer (operationsTimeout_),
1435- makePendingRequestTimeoutHandler (
1436- pendingGetNamespaceTopicsRequests_, requestId, [cnxString = cnxString (), requestId]() {
1437- LOG_WARN (cnxString << " GetTopicsOfNamespace request timeout to broker, req_id: "
1438- << requestId);
1439- }));
1427+ auto request =
1428+ insertRequest (pendingGetNamespaceTopicsRequests_, requestId, [cnxString = cnxString (), requestId]() {
1429+ LOG_WARN (cnxString << " GetTopicsOfNamespace request timeout to broker, req_id: " << requestId);
1430+ });
14401431 pendingGetNamespaceTopicsRequests_.emplace (requestId, request);
1441- request->initialize ();
14421432 lock.unlock ();
14431433 if (mockingRequests_.load (std::memory_order_acquire) && mockServer_ != nullptr &&
14441434 mockServer_->sendRequest (" GET_TOPICS_OF_NAMESPACE" , requestId)) {
@@ -1455,20 +1445,15 @@ Future<Result, SchemaInfo> ClientConnection::newGetSchema(const std::string& top
14551445 if (isClosed ()) {
14561446 lock.unlock ();
14571447 LOG_ERROR (cnxString () << " Client is not connected to the broker" );
1458- auto request =
1459- std::make_shared<GetSchema>(executor_->createTimer (operationsTimeout_), [] { return false ; });
1460- request->fail (ResultNotConnected);
1461- return request->getFuture ();
1448+ Promise<Result, SchemaInfo> promise;
1449+ promise.setFailed (ResultNotConnected);
1450+ return promise.getFuture ();
14621451 }
14631452
1464- auto request = std::make_shared<GetSchema>(
1465- executor_->createTimer (operationsTimeout_),
1466- makePendingRequestTimeoutHandler (
1467- pendingGetSchemaRequests_, requestId, [cnxString = cnxString (), requestId]() {
1468- LOG_WARN (cnxString << " GetSchema request timeout to broker, req_id: " << requestId);
1469- }));
1470- pendingGetSchemaRequests_.emplace (requestId, request);
1471- request->initialize ();
1453+ auto request =
1454+ insertRequest (pendingGetSchemaRequests_, requestId, [cnxString = cnxString (), requestId]() {
1455+ LOG_WARN (cnxString << " GetSchema request timeout to broker, req_id: " << requestId);
1456+ });
14721457 lock.unlock ();
14731458
14741459 if (mockingRequests_.load (std::memory_order_acquire) && mockServer_ != nullptr &&
@@ -1737,8 +1722,7 @@ void ClientConnection::handleError(const proto::CommandError& error) {
17371722
17381723 request->fail (result);
17391724 } else {
1740- PendingGetNamespaceTopicsMap::iterator it =
1741- pendingGetNamespaceTopicsRequests_.find (error.request_id ());
1725+ auto it = pendingGetNamespaceTopicsRequests_.find (error.request_id ());
17421726 if (it != pendingGetNamespaceTopicsRequests_.end ()) {
17431727 auto request = std::move (it->second );
17441728 pendingGetNamespaceTopicsRequests_.erase (it);
0 commit comments