You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pulsar.apache.org by GitBox <gi...@apache.org> on 2021/07/13 13:10:15 UTC
[GitHub] [pulsar-client-go] zymap commented on a change in pull request #566: Add send error logic for connection
zymap commented on a change in pull request #566:
URL: https://github.com/apache/pulsar-client-go/pull/566#discussion_r668742469
##########
File path: pulsar/internal/connection.go
##########
@@ -744,6 +745,50 @@ func (c *connection) handleAuthChallenge(authChallenge *pb.CommandAuthChallenge)
c.writeCommand(baseCommand(pb.BaseCommand_AUTH_RESPONSE, cmdAuthResponse))
}
+func (c *connection) handleSendError(sendError *pb.CommandSendError, cmdError *pb.CommandError) {
+ c.log.Warnf("Received send error from server: [%v] : [%s]", sendError.GetError(), sendError.GetMessage())
+
+ requestID := cmdError.GetRequestId()
+ producerID := sendError.GetProducerId()
+
+SendError:
+ switch *sendError.Error {
+ case pb.ServerError_NotAllowedError:
+ c.pendingLock.Lock()
+ request, ok := c.pendingReqs[requestID]
+ if !ok {
+ c.log.Warnf("Received unexpected error response for request %d of type %s",
+ requestID, cmdError.GetError())
+ c.pendingLock.Unlock()
+ return
+ }
+
+ delete(c.pendingReqs, requestID)
+ c.pendingLock.Unlock()
+
+ errMsg := fmt.Sprintf("server error: %s: %s", cmdError.GetError(), cmdError.GetMessage())
+ request.callback(nil, errors.New(errMsg))
+ break SendError
+ case pb.ServerError_TopicTerminatedError:
+ c.listenersLock.RLock()
+ producer, ok := c.listeners[producerID]
+ c.listenersLock.RUnlock()
+
+ if ok {
+ producer.ConnectionClosed()
+ } else {
+ c.log.
Review comment:
wrong indentation?
##########
File path: pulsar/internal/connection.go
##########
@@ -744,6 +745,50 @@ func (c *connection) handleAuthChallenge(authChallenge *pb.CommandAuthChallenge)
c.writeCommand(baseCommand(pb.BaseCommand_AUTH_RESPONSE, cmdAuthResponse))
}
+func (c *connection) handleSendError(sendError *pb.CommandSendError, cmdError *pb.CommandError) {
+ c.log.Warnf("Received send error from server: [%v] : [%s]", sendError.GetError(), sendError.GetMessage())
+
+ requestID := cmdError.GetRequestId()
+ producerID := sendError.GetProducerId()
+
+SendError:
+ switch *sendError.Error {
Review comment:
We also handle the `ChecksumError` in the java implementation, do we need to implement that?
##########
File path: pulsar/internal/connection.go
##########
@@ -744,6 +745,50 @@ func (c *connection) handleAuthChallenge(authChallenge *pb.CommandAuthChallenge)
c.writeCommand(baseCommand(pb.BaseCommand_AUTH_RESPONSE, cmdAuthResponse))
}
+func (c *connection) handleSendError(sendError *pb.CommandSendError, cmdError *pb.CommandError) {
+ c.log.Warnf("Received send error from server: [%v] : [%s]", sendError.GetError(), sendError.GetMessage())
+
+ requestID := cmdError.GetRequestId()
+ producerID := sendError.GetProducerId()
+
+SendError:
+ switch *sendError.Error {
+ case pb.ServerError_NotAllowedError:
+ c.pendingLock.Lock()
+ request, ok := c.pendingReqs[requestID]
+ if !ok {
+ c.log.Warnf("Received unexpected error response for request %d of type %s",
+ requestID, cmdError.GetError())
+ c.pendingLock.Unlock()
+ return
+ }
+
+ delete(c.pendingReqs, requestID)
+ c.pendingLock.Unlock()
+
+ errMsg := fmt.Sprintf("server error: %s: %s", cmdError.GetError(), cmdError.GetMessage())
+ request.callback(nil, errors.New(errMsg))
+ break SendError
+ case pb.ServerError_TopicTerminatedError:
+ c.listenersLock.RLock()
+ producer, ok := c.listeners[producerID]
+ c.listenersLock.RUnlock()
+
+ if ok {
+ producer.ConnectionClosed()
Review comment:
In the Java implementation, we change the state to terminate and send the error to all pending messages, does the producer connection closed will do the same thing with that?
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@pulsar.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org