From 7fa3fa209e3eb82d72a8c586dea692f4ca1d40e0 Mon Sep 17 00:00:00 2001 From: Jason Gustafson Date: Wed, 12 Jun 2019 15:06:59 -0700 Subject: [PATCH] KAFKA-8530; Check for topic authorization erros in OffsetFetch response --- .../consumer/internals/ConsumerCoordinator.java | 15 +++++++++++++-- .../common/requests/OffsetFetchResponse.java | 11 ++++++----- .../internals/ConsumerCoordinatorTest.java | 16 ++++++++++++++++ 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java index bacb96001bcbe..fbf5db42af3e7 100644 --- a/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java +++ b/clients/src/main/java/org/apache/kafka/clients/consumer/internals/ConsumerCoordinator.java @@ -959,6 +959,7 @@ public void handle(OffsetFetchResponse response, RequestFuture unauthorizedTopics = null; Map offsets = new HashMap<>(response.responseData().size()); for (Map.Entry entry : response.responseData().entrySet()) { TopicPartition tp = entry.getKey(); @@ -969,11 +970,17 @@ public void handle(OffsetFetchResponse response, RequestFuture(); + } + unauthorizedTopics.add(tp.topic()); } else { future.raise(new KafkaException("Unexpected error in fetch offset response for partition " + tp + ": " + error.message())); + return; } - return; } else if (data.offset >= 0) { // record the position with the offset (-1 indicates no committed offset to fetch) offsets.put(tp, new OffsetAndMetadata(data.offset, data.leaderEpoch, data.metadata)); @@ -982,7 +989,11 @@ public void handle(OffsetFetchResponse response, RequestFuture + coordinator.fetchCommittedOffsets(singleton(t1p), time.timer(Long.MAX_VALUE))); + + assertEquals(singleton(topic1), exception.unauthorizedTopics()); + } + @Test public void testRefreshOffsetLoadInProgress() { client.prepareResponse(groupCoordinatorResponse(node, Errors.NONE));