Github user Aitozi commented on a diff in the pull request: https://github.com/apache/flink/pull/4665#discussion_r139742368 --- Diff: flink-streaming-java/src/main/java/org/apache/flink/streaming/runtime/operators/windowing/WindowOperator.java --- @@ -405,6 +411,8 @@ public void merge(W mergeResult, // windowAssigner is event time and current timestamp + allowed lateness no less than element timestamp if (isSkippedElement && lateDataOutputTag != null && isElementLate(element)) { sideOutput(element); + } else if (isSkippedElement) { --- End diff -- i think when the `isSkippedElement` is true, the `isElementLate(element)` is always be true. Because `isSkippedElement` is true when all the assigned window's window.endtime + allowLateness < currentLowWatermark, and `isElementLate` is true when element.time + allowLateness < currentLowWatermark. and element.time is <= bigest window.endtime. so does `isElementLate` always be true when isSkippedElement is true? And i think if i want to rule out the situation that **because no windows were assigned to it.**, i just need to judge whether the variable `Collection elementWindows` is empty?
---