private void invokeProcessElement(WindowedValue<InputT> elem) { // This can contain user code. Wrap it in case it throws an exception. try { invoker.invokeProcessElement(new DoFnProcessContext(elem)); } catch (Exception ex) { throw wrapUserCodeException(ex); } }
private DoFn.ProcessContinuation invokeProcessElement(DoFn<String, String> fn) { return DoFnInvokers.invokerFor(fn).invokeProcessElement(mockArgumentProvider); }
createProcessContext( ValueInSingleWindow.of(element, timestamp, window, PaneInfo.NO_FIRING)); fnInvoker.invokeProcessElement( new DoFnInvoker.ArgumentProvider<InputT, OutputT>() { @Override
@ProcessElement public void process(ProcessContext c, BoundedWindow w) { InputT element = c.element().getKey(); RestrictionT restriction = c.element().getValue(); while (true) { RestrictionTracker<RestrictionT, PositionT> tracker = invoker.invokeNewTracker(restriction); ProcessContinuation continuation = invoker.invokeProcessElement(new NestedProcessContext<>(fn, c, element, w, tracker)); if (continuation.shouldResume()) { restriction = tracker.checkpoint(); Uninterruptibles.sleepUninterruptibly( continuation.resumeDelay().getMillis(), TimeUnit.MILLISECONDS); } else { break; } } }
@Test public void testProcessElementException() throws Exception { DoFnInvoker<Integer, Integer> invoker = DoFnInvokers.invokerFor( new DoFn<Integer, Integer>() { @ProcessElement public void processElement(@SuppressWarnings("unused") ProcessContext c) { throw new IllegalArgumentException("bogus"); } }); thrown.expect(UserCodeException.class); thrown.expectMessage("bogus"); invoker.invokeProcessElement( new FakeArgumentProvider<Integer, Integer>() { @Override public DoFn<Integer, Integer>.ProcessContext processContext(DoFn<Integer, Integer> fn) { return null; } }); }
.invokeProcessElement( new FakeArgumentProvider<Integer, Integer>() { @Override
assertEquals( resume(), invoker.invokeProcessElement( new FakeArgumentProvider<String, String>() { @Override
assertEquals(stop(), invoker.invokeProcessElement(mockArgumentProvider)); assertThat( invoker.invokeNewTracker(new RestrictionWithDefaultTracker()),
invoker.invokeProcessElement( new DoFnInvoker.ArgumentProvider<InputT, OutputT>() { @Override