@Override public void onProcessingTime(long timestamp) { if (this.isRunning) { synchronized (context.getCheckpointLock()) { // find minimum watermark over all localReaders long watermarkMillis = Long.MAX_VALUE; for (UnboundedSource.UnboundedReader<OutputT> reader : localReaders) { Instant watermark = reader.getWatermark(); if (watermark != null) { watermarkMillis = Math.min(watermark.getMillis(), watermarkMillis); } } context.emitWatermark(new Watermark(watermarkMillis)); if (shutdownOnFinalWatermark && watermarkMillis >= BoundedWindow.TIMESTAMP_MAX_VALUE.getMillis()) { this.isRunning = false; } } setNextWatermarkTimer(this.runtimeContext); } }
@Override public void onProcessingTime(long timestamp) { if (this.isRunning) { synchronized (context.getCheckpointLock()) { // find minimum watermark over all localReaders long watermarkMillis = Long.MAX_VALUE; for (UnboundedSource.UnboundedReader<OutputT> reader : localReaders) { Instant watermark = reader.getWatermark(); if (watermark != null) { watermarkMillis = Math.min(watermark.getMillis(), watermarkMillis); } } context.emitWatermark(new Watermark(watermarkMillis)); if (watermarkMillis >= BoundedWindow.TIMESTAMP_MAX_VALUE.getMillis()) { this.isRunning = false; } } setNextWatermarkTimer(this.runtimeContext); } }
@Override public void onProcessingTime(long timestamp) throws Exception { if (this.isRunning) { synchronized (context.getCheckpointLock()) { // find minimum watermark over all localReaders long watermarkMillis = Long.MAX_VALUE; for (UnboundedSource.UnboundedReader<OutputT> reader: localReaders) { Instant watermark = reader.getWatermark(); if (watermark != null) { watermarkMillis = Math.min(watermark.getMillis(), watermarkMillis); } } context.emitWatermark(new Watermark(watermarkMillis)); if (watermarkMillis >= BoundedWindow.TIMESTAMP_MAX_VALUE.getMillis()) { this.isRunning = false; } } setNextWatermarkTimer(this.runtimeContext); } }
.getLocalReaders() .stream() .anyMatch(reader -> reader.getWatermark().getMillis() == 0)) {
Instant watermark = reader.getWatermark(); WindowedValue.timestampedValueInGlobalWindow(residual, watermark))); } else { Instant watermark = reader.getWatermark(); if (watermark.isBefore(BoundedWindow.TIMESTAMP_MAX_VALUE)) {
@Override public Instant getWatermark() { if (reader instanceof UnboundedSource.UnboundedReader) { org.joda.time.Instant watermark = ((UnboundedSource.UnboundedReader) reader).getWatermark(); if (watermark.equals(BoundedWindow.TIMESTAMP_MAX_VALUE)) { return Watermark.MAX(); } else { return TranslatorUtils.jodaTimeToJava8Time(watermark); } } else { if (available) { return Watermark.MIN(); } else { return Watermark.MAX(); } } } }
@Override public long readWatermark() { final Instant watermark = reader.getWatermark(); // Finish if the watermark == TIMESTAMP_MAX_VALUE isFinished = (watermark.getMillis() >= GlobalWindow.TIMESTAMP_MAX_VALUE.getMillis()); return watermark.getMillis(); }
@Override public void beginWindow(long windowId) { if (!available && (isBoundedSource || source instanceof ValuesSource)) { // if it's a Create and the input was consumed, emit final watermark emitWatermarkIfNecessary(BoundedWindow.TIMESTAMP_MAX_VALUE.getMillis()); } else { emitWatermarkIfNecessary(reader.getWatermark().getMillis()); } }