[ 
https://issues.apache.org/jira/browse/BEAM-11481?focusedWorklogId=525492&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-525492
 ]

ASF GitHub Bot logged work on BEAM-11481:
-----------------------------------------

                Author: ASF GitHub Bot
            Created on: 17/Dec/20 11:04
            Start Date: 17/Dec/20 11:04
    Worklog Time Spent: 10m 
      Work Description: mxm commented on a change in pull request #13571:
URL: https://github.com/apache/beam/pull/13571#discussion_r545000289



##########
File path: 
runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/DoFnOperator.java
##########
@@ -992,7 +997,23 @@ public void onProcessingTime(InternalTimer<ByteBuffer, 
TimerData> timer) {
 
   // allow overriding this in ExecutableStageDoFnOperator to set the key 
context
   protected void fireTimerInternal(ByteBuffer key, TimerData timerData) {
+    long oldHold = keyCoder != null ? keyedStateInternals.minWatermarkHoldMs() 
: -1L;
     fireTimer(timerData);
+    emitWatermarkIfHoldChanged(oldHold);
+  }
+
+  void emitWatermarkIfHoldChanged(long currentWatermarkHold) {
+    if (keyCoder != null) {
+      long newWatermarkHold = keyedStateInternals.minWatermarkHoldMs();
+      if (newWatermarkHold > currentWatermarkHold) {
+        try {
+          processInputWatermark(false);

Review comment:
       This logic should be removed. All logic which deals with watermark 
emission should be handled through `processWatermark`.

##########
File path: 
runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/DoFnOperator.java
##########
@@ -739,9 +741,12 @@ public final void processWatermark1(Watermark mark) throws 
Exception {
     }
 
     currentInputWatermark = mark.getTimestamp();

Review comment:
       We need the following to generalize watermark emission to be able to 
call this method from other places. 
   
   ```
   if (mark.getTimestamp > currentInputWatermark) {
     currentInputWatermark = mark.getTimestamp();
   }

##########
File path: 
runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/DoFnOperator.java
##########
@@ -739,9 +741,12 @@ public final void processWatermark1(Watermark mark) throws 
Exception {
     }
 
     currentInputWatermark = mark.getTimestamp();
+    processInputWatermark(true);
+  }
 
+  private void processInputWatermark(boolean advanceInputWatermark) throws 
Exception {

Review comment:
       Please remove if we don't want to scatter the logic about watermark 
advancement.

##########
File path: 
runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/DoFnOperator.java
##########
@@ -784,7 +789,7 @@ private long computeOutputWatermark(long 
inputWatermarkHold) {
     return potentialOutputWatermark;
   }
 
-  private void maybeEmitWatermark(long watermark) {
+  void maybeEmitWatermark(long watermark) {

Review comment:
       We remove the `private` modifier?

##########
File path: 
runners/flink/src/main/java/org/apache/beam/runners/flink/translation/wrappers/streaming/DoFnOperator.java
##########
@@ -641,8 +641,10 @@ protected final void setBundleFinishedCallback(Runnable 
callback) {
   @Override
   public final void processElement(StreamRecord<WindowedValue<InputT>> 
streamRecord) {
     checkInvokeStartBundle();
+    long oldHold = keyCoder != null ? keyedStateInternals.minWatermarkHoldMs() 
: -1L;
     doFnRunner.processElement(streamRecord.getValue());
     checkInvokeFinishBundleByCount();
+    emitWatermarkIfHoldChanged(oldHold);

Review comment:
       Is this required on every element? I'd rather trigger this only if we 
set / remove a hold.




----------------------------------------------------------------
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:
[email protected]


Issue Time Tracking
-------------------

    Worklog Id:     (was: 525492)
    Time Spent: 50m  (was: 40m)

> FlinkRunner might not advance output watermark on change of watermark hold
> --------------------------------------------------------------------------
>
>                 Key: BEAM-11481
>                 URL: https://issues.apache.org/jira/browse/BEAM-11481
>             Project: Beam
>          Issue Type: Bug
>          Components: runner-flink
>    Affects Versions: 2.26.0
>            Reporter: Jan Lukavský
>            Assignee: Jan Lukavský
>            Priority: P0
>             Fix For: 2.27.0
>
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> Output watermark of DoFnOperator is advanced only when new input watermark is 
> received. The output watermark might advance even on timer or processed 
> element due to updated watermark hold. This especially holds true in 
> splittable DoFn.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to