@@ -1048,7 +1048,7 @@ void ClientConnection::newLookup(const SharedBuffer& cmd, uint64_t requestId, co
10481048 self->numOfPendingLookupRequest_ --;
10491049 }
10501050 });
1051- request->getFuture ().addListener ([promise](Result result, const LookupDataResultPtr& lookupDataResult) {
1051+ request->getFuture ().addListener ([promise](Error result, const LookupDataResultPtr& lookupDataResult) {
10521052 if (result == ResultOk) {
10531053 promise->setValue (lookupDataResult);
10541054 } else {
@@ -1413,13 +1413,13 @@ Future<Result, GetLastMessageIdResponse> ClientConnection::newGetLastMessageId(u
14131413 return request->getFuture ();
14141414}
14151415
1416- Future<Result , NamespaceTopicsPtr> ClientConnection::newGetTopicsOfNamespace (
1416+ Future<Error , NamespaceTopicsPtr> ClientConnection::newGetTopicsOfNamespace (
14171417 const std::string& nsName, CommandGetTopicsOfNamespace_Mode mode, uint64_t requestId) {
14181418 Lock lock (mutex_);
14191419 if (isClosed ()) {
14201420 lock.unlock ();
14211421 LOG_ERROR (cnxString () << " Client is not connected to the broker" );
1422- Promise<Result , NamespaceTopicsPtr> promise;
1422+ Promise<Error , NamespaceTopicsPtr> promise;
14231423 promise.setFailed (ResultNotConnected);
14241424 return promise.getFuture ();
14251425 }
@@ -1437,14 +1437,14 @@ Future<Result, NamespaceTopicsPtr> ClientConnection::newGetTopicsOfNamespace(
14371437 return request->getFuture ();
14381438}
14391439
1440- Future<Result , SchemaInfo> ClientConnection::newGetSchema (const std::string& topicName,
1441- const std::string& version, uint64_t requestId) {
1440+ Future<Error , SchemaInfo> ClientConnection::newGetSchema (const std::string& topicName,
1441+ const std::string& version, uint64_t requestId) {
14421442 Lock lock (mutex_);
14431443
14441444 if (isClosed ()) {
14451445 lock.unlock ();
14461446 LOG_ERROR (cnxString () << " Client is not connected to the broker" );
1447- Promise<Result , SchemaInfo> promise;
1447+ Promise<Error , SchemaInfo> promise;
14481448 promise.setFailed (ResultNotConnected);
14491449 return promise.getFuture ();
14501450 }
@@ -1556,7 +1556,8 @@ void ClientConnection::handlePartitionedMetadataResponse(
15561556 << " msg: " << partitionMetadataResponse.message ());
15571557 checkServerError (partitionMetadataResponse.error (), partitionMetadataResponse.message ());
15581558 request->fail (
1559- getResult (partitionMetadataResponse.error (), partitionMetadataResponse.message ()));
1559+ Error{getResult (partitionMetadataResponse.error (), partitionMetadataResponse.message ()),
1560+ partitionMetadataResponse.message ()});
15601561 } else {
15611562 LOG_ERROR (cnxString () << " Failed partition-metadata lookup req_id: "
15621563 << partitionMetadataResponse.request_id () << " with empty response: " );
@@ -1628,7 +1629,8 @@ void ClientConnection::handleLookupTopicRespose(
16281629 << " error: " << lookupTopicResponse.error ()
16291630 << " msg: " << lookupTopicResponse.message ());
16301631 checkServerError (lookupTopicResponse.error (), lookupTopicResponse.message ());
1631- request->fail (getResult (lookupTopicResponse.error (), lookupTopicResponse.message ()));
1632+ request->fail (Error{getResult (lookupTopicResponse.error (), lookupTopicResponse.message ()),
1633+ lookupTopicResponse.message ()});
16321634 } else {
16331635 LOG_ERROR (cnxString () << " Failed lookup req_id: " << lookupTopicResponse.request_id ()
16341636 << " with empty response: " );
@@ -1699,6 +1701,7 @@ void ClientConnection::handleProducerSuccess(const proto::CommandProducerSuccess
16991701
17001702void ClientConnection::handleError (const proto::CommandError& error) {
17011703 Result result = getResult (error.error (), error.message ());
1704+ Error errorResult{result, error.has_message () ? error.message () : " " };
17021705 LOG_WARN (cnxString () << " Received error response from server: " << result
17031706 << (error.has_message () ? (" (" + error.message () + " )" ) : " " )
17041707 << " -- req_id: " << error.request_id ());
@@ -1716,27 +1719,51 @@ void ClientConnection::handleError(const proto::CommandError& error) {
17161719 data.errorMessage = error.message ();
17171720 }
17181721 request->fail (result, data);
1719- } else {
1720- auto it = pendingGetLastMessageIdRequests_.find (error.request_id ());
1721- if (it != pendingGetLastMessageIdRequests_.end ()) {
1722- auto request = std::move (it->second );
1723- pendingGetLastMessageIdRequests_.erase (it);
1724- lock.unlock ();
1722+ return ;
1723+ }
17251724
1726- request->fail (result);
1727- } else {
1728- auto it = pendingGetNamespaceTopicsRequests_.find (error.request_id ());
1729- if (it != pendingGetNamespaceTopicsRequests_.end ()) {
1730- auto request = std::move (it->second );
1731- pendingGetNamespaceTopicsRequests_.erase (it);
1732- lock.unlock ();
1725+ auto lookupIt = pendingLookupRequests_.find (error.request_id ());
1726+ if (lookupIt != pendingLookupRequests_.end ()) {
1727+ auto request = std::move (lookupIt->second );
1728+ pendingLookupRequests_.erase (lookupIt);
1729+ numOfPendingLookupRequest_--;
1730+ lock.unlock ();
17331731
1734- request->fail (result);
1735- } else {
1736- lock.unlock ();
1737- }
1738- }
1732+ request->fail (errorResult);
1733+ return ;
1734+ }
1735+
1736+ auto lastMessageIdIt = pendingGetLastMessageIdRequests_.find (error.request_id ());
1737+ if (lastMessageIdIt != pendingGetLastMessageIdRequests_.end ()) {
1738+ auto request = std::move (lastMessageIdIt->second );
1739+ pendingGetLastMessageIdRequests_.erase (lastMessageIdIt);
1740+ lock.unlock ();
1741+
1742+ request->fail (result);
1743+ return ;
1744+ }
1745+
1746+ auto topicsIt = pendingGetNamespaceTopicsRequests_.find (error.request_id ());
1747+ if (topicsIt != pendingGetNamespaceTopicsRequests_.end ()) {
1748+ auto request = std::move (topicsIt->second );
1749+ pendingGetNamespaceTopicsRequests_.erase (topicsIt);
1750+ lock.unlock ();
1751+
1752+ request->fail (errorResult);
1753+ return ;
17391754 }
1755+
1756+ auto schemaIt = pendingGetSchemaRequests_.find (error.request_id ());
1757+ if (schemaIt != pendingGetSchemaRequests_.end ()) {
1758+ auto request = std::move (schemaIt->second );
1759+ pendingGetSchemaRequests_.erase (schemaIt);
1760+ lock.unlock ();
1761+
1762+ request->fail (errorResult);
1763+ return ;
1764+ }
1765+
1766+ lock.unlock ();
17401767}
17411768
17421769std::string ClientConnection::getMigratedBrokerServiceUrl (
@@ -1959,7 +1986,7 @@ void ClientConnection::handleGetSchemaResponse(const proto::CommandGetSchemaResp
19591986 : " " )
19601987 << " -- req_id: " << response.request_id ());
19611988 }
1962- request->fail (result);
1989+ request->fail (Error{ result, response. has_error_message () ? response. error_message () : " " } );
19631990 return ;
19641991 }
19651992
0 commit comments