From 6d9d65e6664153f8a7557ec31b5983eb0ac26782 Mon Sep 17 00:00:00 2001 From: Justine Olshan Date: Thu, 30 Mar 2023 09:23:55 -0700 Subject: [PATCH] MINOR: Change ordering of checks to prevent log spam on metadata updates (#13447) On startup, we always update the metadata. The topic ID also goes from null to defined. Move the epoch is null check to before the topic ID check to prevent log spam. Reviewers: David Jacot , Jason Gustafson --- .../main/java/org/apache/kafka/clients/Metadata.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 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 60d2c0516da..c42eb474a6c 100644 --- a/clients/src/main/java/org/apache/kafka/clients/Metadata.java +++ b/clients/src/main/java/org/apache/kafka/clients/Metadata.java @@ -394,16 +394,22 @@ public class Metadata implements Closeable { if (hasReliableLeaderEpoch && partitionMetadata.leaderEpoch.isPresent()) { int newEpoch = partitionMetadata.leaderEpoch.get(); Integer currentEpoch = lastSeenLeaderEpochs.get(tp); - if (topicId != null && !topicId.equals(oldTopicId)) { + if (currentEpoch == null) { + // We have no previous info, so we can just insert the new epoch info + log.debug("Setting the last seen epoch of partition {} to {} since the last known epoch was undefined.", + tp, newEpoch); + lastSeenLeaderEpochs.put(tp, newEpoch); + return Optional.of(partitionMetadata); + } else if (topicId != null && !topicId.equals(oldTopicId)) { // If the new topic ID is valid and different from the last seen topic ID, update the metadata. // Between the time that a topic is deleted and re-created, the client may lose track of the // corresponding topicId (i.e. `oldTopicId` will be null). In this case, when we discover the new // topicId, we allow the corresponding leader epoch to override the last seen value. log.info("Resetting the last seen epoch of partition {} to {} since the associated topicId changed from {} to {}", - tp, newEpoch, oldTopicId, topicId); + tp, newEpoch, oldTopicId, topicId); lastSeenLeaderEpochs.put(tp, newEpoch); return Optional.of(partitionMetadata); - } else if (currentEpoch == null || newEpoch >= currentEpoch) { + } else if (newEpoch >= currentEpoch) { // If the received leader epoch is at least the same as the previous one, update the metadata log.debug("Updating last seen epoch for partition {} from {} to epoch {} from new metadata", tp, currentEpoch, newEpoch); lastSeenLeaderEpochs.put(tp, newEpoch);