From 19031823c15cb3a0e5fcecaaf5de79c09b5300ed Mon Sep 17 00:00:00 2001 From: Jay Kreps Date: Wed, 4 Feb 2015 17:01:51 -0800 Subject: [PATCH] KAFKA-1919: Always update the metadata, when a metadata response is received to ensure we back off. --- .../src/main/java/org/apache/kafka/clients/Metadata.java | 8 ++++++++ .../main/java/org/apache/kafka/clients/NetworkClient.java | 6 ++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/clients/src/main/java/org/apache/kafka/clients/Metadata.java b/clients/src/main/java/org/apache/kafka/clients/Metadata.java index b8cdd145bfc..e8afecda956 100644 --- a/clients/src/main/java/org/apache/kafka/clients/Metadata.java +++ b/clients/src/main/java/org/apache/kafka/clients/Metadata.java @@ -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 */ diff --git a/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java b/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java index fef90a03ed0..a7fa4a9dfbc 100644 --- a/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java +++ b/clients/src/main/java/org/apache/kafka/clients/NetworkClient.java @@ -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); + } } /**