shashankhs11 commented on code in PR #20285:
URL: https://github.com/apache/kafka/pull/20285#discussion_r2427787628
##########
clients/src/test/java/org/apache/kafka/clients/producer/internals/RecordAccumulatorTest.java:
##########
@@ -1790,4 +1828,65 @@ public void
testSplitAndReenqueuePreventInfiniteRecursion() throws InterruptedEx
// Verify all original records are accounted for (no data loss)
assertEquals(100, keyFoundMap.size(), "All original 100 records should
be present after splitting");
}
+
+ @Test
+ public void testProduceRequestResultawaitAllDependents() throws Exception {
+ ProduceRequestResult parent = new ProduceRequestResult(tp1);
+
+ // make two dependent ProduceRequestResults -- mimicking split batches
+ ProduceRequestResult dependent1 = new ProduceRequestResult(tp1);
+ ProduceRequestResult dependent2 = new ProduceRequestResult(tp1);
+
+ // add dependents
+ parent.addDependentResult(dependent1);
+ parent.addDependentResult(dependent2);
+
+ parent.set(0L, RecordBatch.NO_TIMESTAMP, null);
+ parent.done();
+
+ // parent.completed() should return true (only checks latch)
+ assertTrue(parent.completed(), "Parent should be completed after
done()");
+
+ // awaitAllDependents() should block because dependents are not
complete
+ final AtomicBoolean awaitCompleted = new AtomicBoolean(false);
+ final AtomicReference<Exception> awaitException = new
AtomicReference<>();
+
+ // to prove awaitAllDependents() is blocking, we run it in a separate
thread
+ Thread awaitThread = new Thread(() -> {
+ try {
+ parent.awaitAllDependents();
+ awaitCompleted.set(true);
+ } catch (Exception e) {
+ awaitException.set(e);
+ }
+ });
+ awaitThread.start();
+ Thread.sleep(100);
Review Comment:
Done, changed to 5ms in f5bb5fa
--
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]