/** * Return the state associated with {@code address} in the specified {@code namespace} with the * {@link StateContext}. */ <T extends State> T state(StateNamespace namespace, StateTag<T> address, StateContext<?> c); }
private static <W extends BoundedWindow> StateContext<W> stateContextFromComponents( @Nullable final PipelineOptions options, @Nullable final SideInputReader sideInputReader, final W mainInputWindow) { if (options == null || sideInputReader == null) { return StateContexts.windowOnlyContext(mainInputWindow); } else { return new StateContext<W>() { @Override public PipelineOptions getPipelineOptions() { return options; } @Override public <T> T sideInput(PCollectionView<T> view) { return sideInputReader.get( view, view.getWindowMappingFn().getSideInputWindow(mainInputWindow)); } @Override public W window() { return mainInputWindow; } }; } }
@Override public <T extends State> T state( final StateNamespace namespace, StateTag<T> address, final StateContext<?> context) { return address.bind( new StateTag.StateBinder() { @Override public <T> ValueState<T> bindValue( StateTag<ValueState<T>> address, Coder<T> coder) { throw new UnsupportedOperationException( String.format("%s is not supported", ValueState.class.getSimpleName())); } @Override public <T> BagState<T> bindBag( StateTag<BagState<T>> address, Coder<T> elemCoder) { return new FlinkKeyGroupBagState<>(address, namespace, elemCoder); } @Override public <T> SetState<T> bindSet( StateTag<SetState<T>> address, Coder<T> elemCoder) { throw new UnsupportedOperationException( String.format("%s is not supported", SetState.class.getSimpleName())); }
public Instant readThroughAndGetEarliestHold(StateTable readTo) { Instant earliestHold = BoundedWindow.TIMESTAMP_MAX_VALUE; for (StateNamespace namespace : underlying.getNamespacesInUse()) { for (Map.Entry<StateTag, State> existingState : underlying.getTagsInUse(namespace).entrySet()) { if (!((InMemoryState<?>) existingState.getValue()).isCleared()) { // Only read through non-cleared values to ensure that completed windows are // eventually discarded, and remember the earliest watermark hold from among those // values. State state = readTo.get(namespace, existingState.getKey(), StateContexts.nullContext()); if (state instanceof WatermarkHoldState) { Instant hold = ((WatermarkHoldState) state).read(); if (hold != null && hold.isBefore(earliestHold)) { earliestHold = hold; } } } } } return earliestHold; }
public Instant readThroughAndGetEarliestHold(StateTable readTo) { Instant earliestHold = BoundedWindow.TIMESTAMP_MAX_VALUE; for (StateNamespace namespace : underlying.getNamespacesInUse()) { for (Map.Entry<StateTag, State> existingState : underlying.getTagsInUse(namespace).entrySet()) { if (!((InMemoryState<?>) existingState.getValue()).isCleared()) { // Only read through non-cleared values to ensure that completed windows are // eventually discarded, and remember the earliest watermark hold from among those // values. State state = readTo.get(namespace, existingState.getKey(), StateContexts.nullContext()); if (state instanceof WatermarkHoldState) { Instant hold = ((WatermarkHoldState) state).read(); if (hold != null && hold.isBefore(earliestHold)) { earliestHold = hold; } } } } } return earliestHold; }
@Override public <T extends State> T state( final StateNamespace namespace, StateTag<T> address, final StateContext<?> context) { return address.bind( new StateTag.StateBinder() { @Override public <T> ValueState<T> bindValue( StateTag<ValueState<T>> address, Coder<T> coder) { return new FlinkValueState<>(flinkStateBackend, address, namespace, coder); } @Override public <T> BagState<T> bindBag( StateTag<BagState<T>> address, Coder<T> elemCoder) { return new FlinkBagState<>(flinkStateBackend, address, namespace, elemCoder); } @Override public <T> SetState<T> bindSet( StateTag<SetState<T>> address, Coder<T> elemCoder) { return new FlinkSetState<>( flinkStateBackend, address, namespace, elemCoder); }
@Override public <T extends State> T state( final StateNamespace namespace, StateTag<T> address, final StateContext<?> context) { return address.bind( new StateTag.StateBinder() { @Override public <T> ValueState<T> bindValue( StateTag<ValueState<T>> address, Coder<T> coder) { throw new UnsupportedOperationException( String.format("%s is not supported", ValueState.class.getSimpleName())); } @Override public <T> BagState<T> bindBag( StateTag<BagState<T>> address, Coder<T> elemCoder) { return new FlinkSplitBagState<>(stateBackend, address, namespace, elemCoder); } @Override public <T> SetState<T> bindSet( StateTag<SetState<T>> address, Coder<T> elemCoder) { throw new UnsupportedOperationException( String.format("%s is not supported", SetState.class.getSimpleName())); }
@Override public <T extends State> T state( final StateNamespace namespace, StateTag<T> address, final StateContext<?> context) { return address.bind( new StateTag.StateBinder() { @Override public <T> ValueState<T> bindValue( StateTag<ValueState<T>> address, Coder<T> coder) { return new FlinkBroadcastValueState<>(stateBackend, address, namespace, coder); } @Override public <T> BagState<T> bindBag( StateTag<BagState<T>> address, Coder<T> elemCoder) { return new FlinkBroadcastBagState<>(stateBackend, address, namespace, elemCoder); } @Override public <T> SetState<T> bindSet( StateTag<SetState<T>> address, Coder<T> elemCoder) { throw new UnsupportedOperationException( String.format("%s is not supported", SetState.class.getSimpleName())); }
@Test public void testNonSerializable() throws Exception { expectedException.expect(NotSerializableException.class); expectedException.expectMessage( "Cannot serialize the CombineFn resulting from CombineFnUtil.bindContext."); ByteArrayOutputStream buffer = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(buffer); oos.writeObject(CombineFnUtil.bindContext(mockCombineFn, StateContexts.nullContext())); }