@Override public Stream<T> getElements() { return backend .getKeys(stateDescriptor.getName(), VoidNamespace.INSTANCE) .flatMap( key -> { try { backend.setCurrentKey(key); ListState<T> state = backend.getPartitionedState( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, stateDescriptor); return StreamSupport.stream(state.get().spliterator(), false); } catch (Exception e) { throw new RuntimeException("Error reading keyed state.", e); } }); }
@Override public Stream<T> getElements() { return backend .getKeys(stateDescriptor.getName(), VoidNamespace.INSTANCE) .flatMap( key -> { try { backend.setCurrentKey(key); ListState<T> state = backend.getPartitionedState( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, stateDescriptor); return StreamSupport.stream(state.get().spliterator(), false); } catch (Exception e) { throw new RuntimeException("Error reading keyed state.", e); } }); }
@Override public void clear() throws Exception { // TODO we have to collect all keys because otherwise we get ConcurrentModificationExceptions // from flink. We can change this once it's fixed in Flink List<K> keys = backend .getKeys(stateDescriptor.getName(), VoidNamespace.INSTANCE) .collect(Collectors.toList()); for (K key : keys) { backend.setCurrentKey(key); ListState<T> state = backend.getPartitionedState( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, stateDescriptor); state.clear(); } }
@Override public void pushBack(T element) throws Exception { ListState<T> state = backend.getPartitionedState( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, stateDescriptor); backend.setCurrentKey(keySelector.getKey(element)); state.add(element); }
@Override public void pushBack(T element) throws Exception { ListState<T> state = backend.getPartitionedState( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, stateDescriptor); backend.setCurrentKey(keySelector.getKey(element)); state.add(element); }
@Override public void clear() throws Exception { // TODO we have to collect all keys because otherwise we get ConcurrentModificationExceptions // from flink. We can change this once it's fixed in Flink List<K> keys = backend .getKeys(stateDescriptor.getName(), VoidNamespace.INSTANCE) .collect(Collectors.toList()); for (K key : keys) { backend.setCurrentKey(key); ListState<T> state = backend.getPartitionedState( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, stateDescriptor); state.clear(); } }
@Override public void fireTimer(InternalTimer<?, TimerInternals.TimerData> timer) { // We need to decode the key final ByteBuffer encodedKey = (ByteBuffer) timer.getKey(); @SuppressWarnings("ByteBufferBackingArray") byte[] bytes = encodedKey.array(); final Object decodedKey; try { decodedKey = CoderUtils.decodeFromByteArray(keyCoder, bytes); } catch (CoderException e) { throw new RuntimeException( String.format(Locale.ENGLISH, "Failed to decode encoded key: %s", Arrays.toString(bytes)), e); } // Prepare the SdkHarnessRunner with the key for the timer sdkHarnessRunner.setCurrentTimerKey(decodedKey); // We have to synchronize to ensure the state backend is not concurrently accessed by the state requests try { stateBackendLock.lock(); getKeyedStateBackend().setCurrentKey(encodedKey); super.fireTimer(timer); } finally { stateBackendLock.unlock(); } }
private void setTimer(WindowedValue<InputT> timerElement, TimerInternals.TimerData timerData) { try { Object key = keySelector.getKey(timerElement); sdkHarnessRunner.setCurrentTimerKey(key); // We have to synchronize to ensure the state backend is not concurrently accessed by the state requests try { stateBackendLock.lock(); getKeyedStateBackend().setCurrentKey(key); timerInternals.setTimer(timerData); } finally { stateBackendLock.unlock(); } } catch (Exception e) { throw new RuntimeException("Couldn't set timer", e); } finally { sdkHarnessRunner.setCurrentTimerKey(null); } }
BagState<String> valueForNamespace0 = allState.state(NAMESPACE_1, STRING_BAG_ADDR); BagState<String> valueForNamespace1 = allState.state(NAMESPACE_2, STRING_BAG_ADDR); keyedStateBackend.setCurrentKey(key0); valueForNamespace0.add("0"); valueForNamespace1.add("2"); keyedStateBackend.setCurrentKey(key1); valueForNamespace0.add("1"); valueForNamespace1.add("3");
BagState<String> valueForNamespace0 = allState.state(NAMESPACE_1, STRING_BAG_ADDR); BagState<String> valueForNamespace1 = allState.state(NAMESPACE_2, STRING_BAG_ADDR); keyedStateBackend.setCurrentKey(key0); valueForNamespace0.add("0"); valueForNamespace1.add("2"); keyedStateBackend.setCurrentKey(key1); valueForNamespace0.add("1"); valueForNamespace1.add("3");
BagState<String> valueForNamespace0 = allState.state(NAMESPACE_1, STRING_BAG_ADDR); BagState<String> valueForNamespace1 = allState.state(NAMESPACE_2, STRING_BAG_ADDR); keyedStateBackend.setCurrentKey(key0); valueForNamespace0.add("0"); valueForNamespace1.add("2"); keyedStateBackend.setCurrentKey(key1); valueForNamespace0.add("1"); valueForNamespace1.add("3");