Skip to content

Commit 5cd020c

Browse files
Fix the error handling in client.InitProducerID()
err was shadowed in InitProducerID() so it would never return a non-nil error. It now returns ErrOutOfBrokers if there aren't any registered brokers. If there are registered brokers and the broker calls fail then it returns the last encoutered error. This was causing a panic in newTransactionManager() with idempotent production enabled because nil, nil was being returned if the brokers were unavailable.
1 parent 83d633e commit 5cd020c

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

client.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,11 +213,12 @@ func (client *client) Broker(brokerID int32) (*Broker, error) {
213213
}
214214

215215
func (client *client) InitProducerID() (*InitProducerIDResponse, error) {
216-
var err error
216+
err := ErrOutOfBrokers
217217
for broker := client.any(); broker != nil; broker = client.any() {
218+
var response *InitProducerIDResponse
218219
req := &InitProducerIDRequest{}
219220

220-
response, err := broker.InitProducerID(req)
221+
response, err = broker.InitProducerID(req)
221222
switch err.(type) {
222223
case nil:
223224
return response, nil
@@ -228,6 +229,7 @@ func (client *client) InitProducerID() (*InitProducerIDResponse, error) {
228229
client.deregisterBroker(broker)
229230
}
230231
}
232+
231233
return nil, err
232234
}
233235

0 commit comments

Comments
 (0)