[ 
https://issues.apache.org/jira/browse/FLINK-5285?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15732633#comment-15732633
 ] 

ASF GitHub Bot commented on FLINK-5285:
---------------------------------------

Github user StephanEwen commented on a diff in the pull request:

    https://github.com/apache/flink/pull/2964#discussion_r91547796
  
    --- Diff: 
flink-streaming-java/src/main/java/org/apache/flink/streaming/runtime/io/BarrierTracker.java
 ---
    @@ -225,17 +230,19 @@ private void 
processCheckpointAbortBarrier(CancelCheckpointMarker barrier, int c
                                pendingCheckpoints.removeFirst();
                        }
                }
    -           else {
    +           else if (checkpointId > latestPendingCheckpointID) {
                        notifyAbort(checkpointId);
     
    -                   // first barrier for this checkpoint - remember it as 
aborted
    -                   // since we polled away all entries with lower 
checkpoint IDs
    -                   // this entry will become the new first entry
    -                   if (pendingCheckpoints.size() < 
MAX_CHECKPOINTS_TO_TRACK) {
    -                           CheckpointBarrierCount abortedMarker = new 
CheckpointBarrierCount(checkpointId);
    -                           abortedMarker.markAborted();
    -                           pendingCheckpoints.addFirst(abortedMarker);
    -                   }
    +                   latestPendingCheckpointID = checkpointId;
    +
    +                   CheckpointBarrierCount abortedMarker = new 
CheckpointBarrierCount(checkpointId);
    +                   abortedMarker.markAborted();
    +                   pendingCheckpoints.addLast(abortedMarker);
    --- End diff --
    
    Small comment here: I would
      - either keep the `addFirst()` statement here (we can be sure that is 
true, given that we pulled out all older checkpoints)
      - or add a sanity check that `pendingCheckpoints` is empty at that point.
    
    That way we explicitly guard the assumption that `pendingCheckpoints` 
contains entries on ordered sequence (which is currently only implicitly 
guarded by the `checkpointId > latestPendingCheckpointID` condition.


> CancelCheckpointMarker flood when using at least once mode
> ----------------------------------------------------------
>
>                 Key: FLINK-5285
>                 URL: https://issues.apache.org/jira/browse/FLINK-5285
>             Project: Flink
>          Issue Type: Bug
>          Components: State Backends, Checkpointing
>    Affects Versions: 1.2.0, 1.1.3
>            Reporter: Till Rohrmann
>            Assignee: Till Rohrmann
>             Fix For: 1.2.0, 1.1.4
>
>
> When using at least once mode ({{BarrierTracker}}), then an interleaved 
> arrival of cancellation barriers at the {{BarrierTracker}} of two consecutive 
> checkpoints can trigger a flood of {{CancelCheckpointMarkers}}. 
> The following sequence is problematic:
> {code}
> Cancel(1, 0),
> Cancel(2, 0),
> Cancel(1, 1),
> Cancel(2, 1),
> Cancel(1, 2),
> Cancel(2, 2)
> {code}
> with {{Cancel(checkpointId, channelId)}}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to