+ "for key:{}; window: {}; inputWatermark: {}; outputWatermark: {}", getClass().getSimpleName(), context.key(), context.window(), inputWM, + "outputWatermark:{}", gcHold, context.key(), context.window(), inputWM, + "key:{}; window:{}; inputWatermark:{}; outputWatermark:{}", gcHold, context.key(), context.window(), inputWM,
elementHold, which, context.key(), context.window(), inputWM,
"WatermarkHold.extractAndRelease: for key:{}; window:{}; inputWatermark:{}; " + "outputWatermark:{}", context.key(), context.window(), timerInternals.currentInputWatermarkTime(),
/** * Return a ({@link ReadableState} for) the pane info appropriate for {@code context}. The pane * info includes the timing for the pane, who's calculation is quite subtle. * * @param isFinal should be {@code true} only if the triggering machinery can guarantee no further * firings for the */ public ReadableState<PaneInfo> getNextPaneInfo( ReduceFn<?, ?, ?, ?>.Context context, final boolean isFinal) { final Object key = context.key(); final ReadableState<PaneInfo> previousPaneFuture = context.state().access(PaneInfoTracker.PANE_INFO_TAG); final Instant windowMaxTimestamp = context.window().maxTimestamp(); return new ReadableState<PaneInfo>() { @Override public ReadableState<PaneInfo> readLater() { previousPaneFuture.readLater(); return this; } @Override public PaneInfo read() { PaneInfo previousPane = previousPaneFuture.read(); return describePane(key, windowMaxTimestamp, previousPane, isFinal); } }; }
/** Clear any remaining holds. */ public void clearHolds(ReduceFn<?, ?, ?, W>.Context context) { WindowTracing.debug( "WatermarkHold.clearHolds: For key:{}; window:{}; inputWatermark:{}; outputWatermark:{}", context.key(), context.window(), timerInternals.currentInputWatermarkTime(), timerInternals.currentOutputWatermarkTime()); context.state().access(elementHoldTag).clear(); context.state().access(EXTRA_HOLD_TAG).clear(); }