Browse Source

Fix a logic bug that occurs when a broker is down.

If RefreshMetadata completed successfully, a panic would happen because
the code nulled out the broker.
Burke Libbey 12 years ago
parent
commit
9d5c25779a
1 changed files with 2 additions and 2 deletions
  1. 2 2
      consumer.go

+ 2 - 2
consumer.go

@@ -194,7 +194,7 @@ func (c *Consumer) fetchMessages() {
 			}
 			}
 		default:
 		default:
 			c.client.disconnectBroker(c.broker)
 			c.client.disconnectBroker(c.broker)
-			for c.broker = nil; err != nil; c.broker, err = c.client.Leader(c.topic, c.partition) {
+			for c.broker, err = c.client.Leader(c.topic, c.partition); err != nil; c.broker, err = c.client.Leader(c.topic, c.partition) {
 				if !c.sendError(err) {
 				if !c.sendError(err) {
 					return
 					return
 				}
 				}
@@ -217,7 +217,7 @@ func (c *Consumer) fetchMessages() {
 		case UNKNOWN_TOPIC_OR_PARTITION, NOT_LEADER_FOR_PARTITION, LEADER_NOT_AVAILABLE:
 		case UNKNOWN_TOPIC_OR_PARTITION, NOT_LEADER_FOR_PARTITION, LEADER_NOT_AVAILABLE:
 			err = c.client.RefreshTopicMetadata(c.topic)
 			err = c.client.RefreshTopicMetadata(c.topic)
 			if c.sendError(err) {
 			if c.sendError(err) {
-				for c.broker = nil; err != nil; c.broker, err = c.client.Leader(c.topic, c.partition) {
+				for c.broker, err = c.client.Leader(c.topic, c.partition); err != nil; c.broker, err = c.client.Leader(c.topic, c.partition) {
 					if !c.sendError(err) {
 					if !c.sendError(err) {
 						return
 						return
 					}
 					}