thomaskwscott commented on a change in pull request #10760:
URL: https://github.com/apache/kafka/pull/10760#discussion_r640520669



##########
File path: 
clients/src/main/java/org/apache/kafka/clients/admin/KafkaAdminClient.java
##########
@@ -4225,76 +4232,84 @@ public ListOffsetsResult 
listOffsets(Map<TopicPartition, OffsetSpec> topicPartit
             }
         }
 
-        for (final Map.Entry<Node, Map<String, ListOffsetsTopic>> entry : 
leaders.entrySet()) {
-            final int brokerId = entry.getKey().id();
+        for (final Map.Entry<Node, Map<ListOffsetRequestVersion, Map<String, 
ListOffsetsTopic>>> versionedEntry : leaders.entrySet()) {
+            for (final Map.Entry<ListOffsetRequestVersion, Map<String, 
ListOffsetsTopic>> entry : versionedEntry.getValue().entrySet()) {
+                final int brokerId = versionedEntry.getKey().id();
 
-            calls.add(new Call("listOffsets on broker " + brokerId, 
context.deadline(), new ConstantNodeIdProvider(brokerId)) {
+                calls.add(new Call("listOffsets on broker " + brokerId, 
context.deadline(), new ConstantNodeIdProvider(brokerId)) {
 
-                final List<ListOffsetsTopic> partitionsToQuery = new 
ArrayList<>(entry.getValue().values());
+                    final List<ListOffsetsTopic> partitionsToQuery = new 
ArrayList<>(entry.getValue().values());
 
-                @Override
-                ListOffsetsRequest.Builder createRequest(int timeoutMs) {
-                    return ListOffsetsRequest.Builder
+                    @Override
+                    ListOffsetsRequest.Builder createRequest(int timeoutMs) {
+                        ListOffsetRequestVersion requestVersion = 
entry.getKey();
+                        if (requestVersion == 
ListOffsetRequestVersion.V7AndAbove) {
+                            return ListOffsetsRequest.Builder
+                                
.forMaxTimestamp(context.options().isolationLevel())
+                                .setTargetTimes(partitionsToQuery);
+                        }

Review comment:
       At present the only way requestVersion could be V7AndAbove is if we were 
issuing MAX_TIMESTAMP requests because of the way the calls are parsed earlier:
   
   `                    
   ListOffsetRequestVersion requiredRequestVersion = offsetQuery == 
ListOffsetsRequest.MAX_TIMESTAMP
                           ? ListOffsetRequestVersion.V7AndAbove :
                           ListOffsetRequestVersion.V0AndAbove;
   `
   
   All non-max timestamp requests are built using forConsumer rather than 
forMaxTimestamp and so should succeed against older brokers. Maybe the enums 
are a bit misleading in this regard. I'll see if i can come up with something 
better.




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to