Browse Source

KAFKA-1919: Always update the metadata, when a metadata response is received to ensure we back off.

pull/1442/head
Jay Kreps 10 years ago
parent
commit
19031823c1
  1. 8
      clients/src/main/java/org/apache/kafka/clients/Metadata.java
  2. 6
      clients/src/main/java/org/apache/kafka/clients/NetworkClient.java

8
clients/src/main/java/org/apache/kafka/clients/Metadata.java

@ -147,6 +147,14 @@ public final class Metadata { @@ -147,6 +147,14 @@ public final class Metadata {
log.debug("Updated cluster metadata version {} to {}", this.version, this.cluster);
}
/**
* Record an attempt to update the metadata that failed. We need to keep track of this
* to avoid retrying immediately.
*/
public synchronized void failedUpdate(long now) {
this.lastRefreshMs = now;
}
/**
* @return The current metadata version
*/

6
clients/src/main/java/org/apache/kafka/clients/NetworkClient.java

@ -381,10 +381,12 @@ public class NetworkClient implements KafkaClient { @@ -381,10 +381,12 @@ public class NetworkClient implements KafkaClient {
Cluster cluster = response.cluster();
// don't update the cluster if there are no valid nodes...the topic we want may still be in the process of being
// created which means we will get errors and no nodes until it exists
if (cluster.nodes().size() > 0)
if (cluster.nodes().size() > 0) {
this.metadata.update(cluster, now);
else
} else {
log.trace("Ignoring empty metadata response with correlation id {}.", header.correlationId());
this.metadata.failedUpdate(now);
}
}
/**

Loading…
Cancel
Save