apoorvmittal10 commented on code in PR #17539:
URL: https://github.com/apache/kafka/pull/17539#discussion_r1806596264


##########
core/src/main/java/kafka/server/share/DelayedShareFetch.java:
##########
@@ -204,6 +187,58 @@ Map<TopicIdPartition, FetchRequest.PartitionData> 
acquirablePartitions() {
         return topicPartitionData;
     }
 
+    /**
+     * Prepare partitions fetch data structure for acquirable partitions in 
the share fetch request satisfying minBytes criteria.
+     */
+    Map<TopicIdPartition, FetchPartitionData> 
replicaManagerFetchData(Map<TopicIdPartition, FetchRequest.PartitionData> 
topicPartitionData,
+                                                                      boolean 
hasRequestTimedOut) {
+        log.trace("Fetchable share partitions data: {} with groupId: {} fetch 
params: {}", topicPartitionData,
+            shareFetchData.groupId(), shareFetchData.fetchParams());
+        Map<TopicIdPartition, FetchPartitionData> 
replicaManagerFetchSatisfyingMinBytes = new HashMap<>();
+        Map<TopicIdPartition, FetchPartitionData> responseData = new 
HashMap<>();
+        try {
+            Seq<Tuple2<TopicIdPartition, LogReadResult>> responseLogResult = 
replicaManager.readFromLog(
+                shareFetchData.fetchParams(),
+                CollectionConverters.asScala(
+                    topicPartitionData.entrySet().stream().map(entry ->
+                        new Tuple2<>(entry.getKey(), 
entry.getValue())).collect(Collectors.toList())
+                ),
+                QuotaFactory.UnboundedQuota$.MODULE$,
+                true);
+
+            AtomicInteger accumulatedBytes = new AtomicInteger(0);
+
+            responseLogResult.foreach(tpLogResult -> {
+                TopicIdPartition topicIdPartition = tpLogResult._1();
+                LogReadResult logResult = tpLogResult._2();
+                FetchPartitionData fetchPartitionData = 
logResult.toFetchPartitionData(false);
+                responseData.put(topicIdPartition, fetchPartitionData);
+                
accumulatedBytes.addAndGet(logResult.info().records.sizeInBytes());

Review Comment:
   Question for my understanding: Do we need to this calculation? As I can see 
fetch params already has minBytes in request to replica manager hence isn't the 
response from replica manager should be empty if minBytes criteria is not 
satisfied?
   
   So the question arise that how do we differentiate between empty reponse 
from replica manager log read, if that's beacus of min bytes or there is no 
data in the log? In either case we should continue holding the request in 
purgatory? Wdyt? 



-- 
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.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to