gunli commented on code in PR #1333:
URL: https://github.com/apache/pulsar-client-go/pull/1333#discussion_r1961662312


##########
pulsar/producer_partition.go:
##########
@@ -581,7 +581,8 @@ func (p *partitionProducer) runEventsLoop() {
                        }
                case connectionClosed := <-p.connectClosedCh:
                        p.log.Info("runEventsLoop will reconnect in producer")
-                       p.reconnectToBroker(connectionClosed)
+                       // reconnect to broker in a new goroutine so that it 
won't block the event loop, see issue #1332
+                       go p.reconnectToBroker(connectionClosed)

Review Comment:
   > If you look at the [Java 
implementation](https://github.com/apache/pulsar/blob/1220951ac74fb4742abbbd331d6e751234c47015/pulsar-client/src/main/java/org/apache/pulsar/client/impl/ProducerImpl.java#L522-L675),
 you'll find that Java handles many things in `sendAsync internal`, and before 
these logics are processed, the user call is blocked.
   
   We have done the same things in go client, the question is that 
`partitionProducer.runEventsLoop()` is block in the reconnecting case, which 
prevent the data from entering the `pendingQueue`, and `failTimeoutMessages()` 
can't failed it, because `failTimeoutMessages()` only fail the ones in 
`pendingQueue`.



-- 
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: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to