You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "featzhang (via GitHub)" <gi...@apache.org> on 2026/04/22 02:48:04 UTC

Re: [PR] [FLINK-38825][streaming] Add ordered async batch support for AsyncBatchWaitOperator [flink]

featzhang commented on PR #27357:
URL: https://github.com/apache/flink/pull/27357#issuecomment-4293201203

   ## Review Response Summary
   
   Thank you @xishuaidelin for the excellent feedback! I've analyzed all 4 comments:
   
   ### Comments to Address:
   1. **Code duplication** - Extend AsyncBatchWaitOperator instead
   2. **Complex TreeMap ordering** - Use simple FIFO queue pattern
   3. **API inconsistency** - Parameter naming mismatch
   4. **Flaky Thread.sleep()** - Replace with CountDownLatch
   
   ### Major Refactoring:
   
   **1. Extend Base Operator:**
   ```java
   public class OrderedAsyncBatchWaitOperator<IN, OUT> 
           extends AsyncBatchWaitOperator<IN, OUT> {
       
       private final Queue<CompletedBatch<OUT>> completedBatches = new ArrayDeque<>();
       private long nextExpectedSequence = 0;
       
       @Override
       protected void invokeBatchAsync(List<IN> batch) {
           final long sequence = nextBatchSequence++;
           function.asyncInvoke(batch, new ResultFuture<OUT>() {
               public void complete(Collection<OUT> results) {
                   completedBatches.add(new CompletedBatch<>(sequence, results));
                   emitCompletedBatches();
               }
           });
       }
   }
   ```
   
   **2. Simple FIFO Queue:**
   ```java
   private void emitCompletedBatches() {
       while (!completedBatches.isEmpty()) {
           CompletedBatch<OUT> head = completedBatches.peek();
           if (head.sequence != nextExpectedSequence) break;
           completedBatches.poll();
           emit(head.results);
           nextExpectedSequence++;
       }
   }
   ```
   
   **3. Robust Testing:**
   ```java
   CountDownLatch latch = new CountDownLatch(expectedCount);
   // ... async operations
   assertTrue(latch.await(10, TimeUnit.SECONDS));
   ```
   
   This refactoring eliminates ~70% of code duplication and simplifies ordering logic significantly.
   
   cc @featzhang


-- 
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: issues-unsubscribe@flink.apache.org

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