protected DoFnRunner<InputT, OutputT> createWrappingDoFnRunner( DoFnRunner<InputT, OutputT> wrappedRunner) { if (keyCoder != null) { StatefulDoFnRunner.CleanupTimer cleanupTimer = new StatefulDoFnRunner.TimeInternalsCleanupTimer(timerInternals, windowingStrategy); // we don't know the window type @SuppressWarnings({"unchecked", "rawtypes"}) Coder windowCoder = windowingStrategy.getWindowFn().windowCoder(); @SuppressWarnings({"unchecked", "rawtypes"}) StatefulDoFnRunner.StateCleaner<?> stateCleaner = new StatefulDoFnRunner.StateInternalsStateCleaner<>( doFn, keyedStateInternals, windowCoder); return DoFnRunners.defaultStatefulDoFnRunner( doFn, wrappedRunner, windowingStrategy, cleanupTimer, stateCleaner); } else { return doFnRunner; } }
protected DoFnRunner<InputT, OutputT> createWrappingDoFnRunner( DoFnRunner<InputT, OutputT> wrappedRunner) { if (keyCoder != null) { StatefulDoFnRunner.CleanupTimer cleanupTimer = new StatefulDoFnRunner.TimeInternalsCleanupTimer(timerInternals, windowingStrategy); // we don't know the window type @SuppressWarnings({"unchecked", "rawtypes"}) Coder windowCoder = windowingStrategy.getWindowFn().windowCoder(); @SuppressWarnings({"unchecked", "rawtypes"}) StatefulDoFnRunner.StateCleaner<?> stateCleaner = new StatefulDoFnRunner.StateInternalsStateCleaner<>( doFn, keyedStateInternals, windowCoder); return DoFnRunners.defaultStatefulDoFnRunner( doFn, wrappedRunner, windowingStrategy, cleanupTimer, stateCleaner); } else { return doFnRunner; } }
DoFnRunners.defaultStatefulDoFnRunner( doFn, doFnRunner, windowingStrategy, cleanupTimer, stateCleaner);
doFn, stepContext.stateInternals(), windowCoder); doFnRunner = DoFnRunners.defaultStatefulDoFnRunner( doFn, doFnRunner,
@Test public void testLateDropping() throws Exception { MetricsContainerImpl container = new MetricsContainerImpl("any"); MetricsEnvironment.setCurrentContainer(container); timerInternals.advanceInputWatermark(new Instant(BoundedWindow.TIMESTAMP_MAX_VALUE)); timerInternals.advanceOutputWatermark(new Instant(BoundedWindow.TIMESTAMP_MAX_VALUE)); DoFn<KV<String, Integer>, Integer> fn = new MyDoFn(); DoFnRunner<KV<String, Integer>, Integer> runner = DoFnRunners.defaultStatefulDoFnRunner( fn, getDoFnRunner(fn), WINDOWING_STRATEGY, new StatefulDoFnRunner.TimeInternalsCleanupTimer(timerInternals, WINDOWING_STRATEGY), new StatefulDoFnRunner.StateInternalsStateCleaner<>( fn, stateInternals, (Coder) WINDOWING_STRATEGY.getWindowFn().windowCoder())); runner.startBundle(); IntervalWindow window = new IntervalWindow(new Instant(0), new Instant(0L + WINDOW_SIZE)); Instant timestamp = new Instant(0); runner.processElement( WindowedValue.of(KV.of("hello", 1), timestamp, window, PaneInfo.NO_FIRING)); long droppedValues = container .getCounter( MetricName.named( StatefulDoFnRunner.class, StatefulDoFnRunner.DROPPED_DUE_TO_LATENESS_COUNTER)) .getCumulative(); assertEquals(1L, droppedValues); runner.finishBundle(); }
DoFnRunners.defaultStatefulDoFnRunner( fn, getDoFnRunner(fn),