smjn commented on code in PR #18514: URL: https://github.com/apache/kafka/pull/18514#discussion_r1914382884
########## core/src/main/java/kafka/server/share/SharePartition.java: ########## @@ -456,6 +456,17 @@ public CompletableFuture<Void> maybeInitialize() { stateBatch.lastOffset(), RecordState.forId(stateBatch.deliveryState()), stateBatch.deliveryCount(), null); cachedState.put(stateBatch.firstOffset(), inFlightBatch); } + + long initialOffset = startOffset; Review Comment: startOffset is 10 and is never updated in the loop - for 2 batches (15, 20, 2, 1), (21, 25, 2, 2) initial = 10 first batch 10 != 15 => if loop is executed newBatch = (10, 14, 0, 0), cachedState:{10 -> (10,14,0,0)}, initial = 21 second batch 10 != 21 => if loop is executed newBatch = (21, 20, 0, 0), cachedState:{10 -> (10,14,0,0), 21 -> (21,20,0,0)}, initial = 26 what am I missing? This might work ``` soFar = startOffset // assuming non-overlapping, sorted batches by first, last, deliveryCount, deliveryState for(Batch b: batches) { // case 1: // | <--- start offset // ------- <--- interval if soFar < b.firstOffset() Batch newBatch = new Batch(start, b.firstOffset()-1, 0, 0) cache.put(soFar, newBatch) // case 2: // | // firstOffset intersection (No new batch) // -------- else cache.put(soFar, batch) // case 3: // | // intersection somewhere in the middle (not possible due to persister) // -------- // case 4: // | // intersection at last offset (not possible due to persister) // -------- // case 5: // | // interval lastOffset < startOffset (not possible due to persister) // ------ soFar = batch.lastOffset() + 1 } ``` -- 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: jira-unsubscr...@kafka.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org