sharedBufCompatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new NFASerializer<>( new TypeDeserializerAdapter<>(eventCompatResult.getConvertDeserializer()), new TypeDeserializerAdapter<>(sharedBufCompatResult.getConvertDeserializer())));
@Override public void copy(DataInputView source, DataOutputView target) throws IOException { Set<State<T>> states = deserializeStates(source); serializeStates(states, target);
condition = deserializeCondition(in); } catch (ClassNotFoundException e) { e.printStackTrace();
@Override public void serialize(NFA<T> record, DataOutputView target) throws IOException { serializeStates(record.states, target); target.writeLong(record.windowTime); target.writeBoolean(record.handleTimeout); sharedBufferSerializer.serialize(record.eventSharedBuffer, target); target.writeInt(record.computationStates.size()); StringSerializer stateNameSerializer = StringSerializer.INSTANCE; LongSerializer timestampSerializer = LongSerializer.INSTANCE; DeweyNumber.DeweyNumberSerializer versionSerializer = new DeweyNumber.DeweyNumberSerializer(); for (ComputationState<T> computationState: record.computationStates) { stateNameSerializer.serialize(computationState.getState().getName(), target); stateNameSerializer.serialize(computationState.getPreviousState() == null ? null : computationState.getPreviousState().getName(), target); timestampSerializer.serialize(computationState.getTimestamp(), target); versionSerializer.serialize(computationState.getVersion(), target); timestampSerializer.serialize(computationState.getStartTimestamp(), target); target.writeInt(computationState.getCounter()); if (computationState.getEvent() == null) { target.writeBoolean(false); } else { target.writeBoolean(true); eventSerializer.serialize(computationState.getEvent(), target); } } }
sharedBufCompatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new NFASerializer<>( new TypeDeserializerAdapter<>(eventCompatResult.getConvertDeserializer()), new TypeDeserializerAdapter<>(sharedBufCompatResult.getConvertDeserializer())));
@Override public CompatibilityResult<NFA<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof NFASerializerConfigSnapshot) { List<Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot>> serializersAndConfigs = ((NFASerializerConfigSnapshot) configSnapshot).getNestedSerializersAndConfigs(); CompatibilityResult<T> eventCompatResult = CompatibilityUtil.resolveCompatibilityResult( serializersAndConfigs.get(0).f0, UnloadableDummyTypeSerializer.class, serializersAndConfigs.get(0).f1, eventSerializer); CompatibilityResult<SharedBuffer<String, T>> sharedBufCompatResult = CompatibilityUtil.resolveCompatibilityResult( serializersAndConfigs.get(1).f0, UnloadableDummyTypeSerializer.class, serializersAndConfigs.get(1).f1, sharedBufferSerializer); if (!sharedBufCompatResult.isRequiresMigration() && !eventCompatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else { if (eventCompatResult.getConvertDeserializer() != null && sharedBufCompatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new NFASerializer<>( new TypeDeserializerAdapter<>(eventCompatResult.getConvertDeserializer()), new TypeDeserializerAdapter<>(sharedBufCompatResult.getConvertDeserializer()))); } } } return CompatibilityResult.requiresMigration(); }
sharedBufCompatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new NFASerializer<>( new TypeDeserializerAdapter<>(eventCompatResult.getConvertDeserializer()), new TypeDeserializerAdapter<>(sharedBufCompatResult.getConvertDeserializer())));
@Override public NFA<T> deserialize(DataInputView source) throws IOException { Set<State<T>> states = deserializeStates(source); long windowTime = source.readLong(); boolean handleTimeout = source.readBoolean(); NFA<T> nfa = new NFA<>(eventSerializer, windowTime, handleTimeout); nfa.states = states; nfa.eventSharedBuffer = sharedBufferSerializer.deserialize(source); Queue<ComputationState<T>> computationStates = new LinkedList<>(); StringSerializer stateNameSerializer = StringSerializer.INSTANCE; LongSerializer timestampSerializer = LongSerializer.INSTANCE; DeweyNumber.DeweyNumberSerializer versionSerializer = new DeweyNumber.DeweyNumberSerializer(); int computationStateNo = source.readInt(); for (int i = 0; i < computationStateNo; i++) { State<T> state = getStateByName(stateNameSerializer.deserialize(source), nfa); State<T> prevState = getStateByName(stateNameSerializer.deserialize(source), nfa); long timestamp = timestampSerializer.deserialize(source); DeweyNumber version = versionSerializer.deserialize(source); long startTimestamp = timestampSerializer.deserialize(source); int counter = source.readInt(); T event = null; if (source.readBoolean()) { event = eventSerializer.deserialize(source); } computationStates.add(ComputationState.createState( nfa, state, prevState, event, counter, timestamp, version, startTimestamp)); } nfa.computationStates = computationStates; return nfa; }
private void migrateOldState() throws Exception { getKeyedStateBackend().applyToAllKeys( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, new ValueStateDescriptor<>( "nfaOperatorStateName", new NFA.NFASerializer<>(inputSerializer) ), new KeyedStateFunction<Object, ValueState<MigratedNFA<IN>>>() { @Override public void process(Object key, ValueState<MigratedNFA<IN>> state) throws Exception { MigratedNFA<IN> oldState = state.value(); computationStates.update(new NFAState(oldState.getComputationStates())); org.apache.flink.cep.nfa.SharedBuffer<IN> sharedBuffer = oldState.getSharedBuffer(); partialMatches.init(sharedBuffer.getEventsBuffer(), sharedBuffer.getPages()); state.clear(); } } ); }
private void migrateOldState() throws Exception { getKeyedStateBackend().applyToAllKeys( VoidNamespace.INSTANCE, VoidNamespaceSerializer.INSTANCE, new ValueStateDescriptor<>( "nfaOperatorStateName", new NFA.NFASerializer<>(inputSerializer) ), new KeyedStateFunction<Object, ValueState<MigratedNFA<IN>>>() { @Override public void process(Object key, ValueState<MigratedNFA<IN>> state) throws Exception { MigratedNFA<IN> oldState = state.value(); computationStates.update(new NFAState(oldState.getComputationStates())); org.apache.flink.cep.nfa.SharedBuffer<IN> sharedBuffer = oldState.getSharedBuffer(); partialMatches.init(sharedBuffer.getEventsBuffer(), sharedBuffer.getPages()); state.clear(); } } ); }
private void serializeStates(Set<State<T>> states, DataOutputView out) throws IOException { TypeSerializer<String> nameSerializer = StringSerializer.INSTANCE; TypeSerializer<State.StateType> stateTypeSerializer = new EnumSerializer<>(State.StateType.class); TypeSerializer<StateTransitionAction> actionSerializer = new EnumSerializer<>(StateTransitionAction.class); out.writeInt(states.size()); for (State<T> state: states) { nameSerializer.serialize(state.getName(), out); stateTypeSerializer.serialize(state.getStateType(), out); } for (State<T> state: states) { nameSerializer.serialize(state.getName(), out); out.writeInt(state.getStateTransitions().size()); for (StateTransition<T> transition : state.getStateTransitions()) { nameSerializer.serialize(transition.getSourceState().getName(), out); nameSerializer.serialize(transition.getTargetState().getName(), out); actionSerializer.serialize(transition.getAction(), out); serializeCondition(transition.getCondition(), out); } } }
@Override public void initializeState(StateInitializationContext context) throws Exception { super.initializeState(context); if (nfaOperatorState == null) { nfaOperatorState = getRuntimeContext().getState( new ValueStateDescriptor<>( NFA_OPERATOR_STATE_NAME, new NFA.NFASerializer<>(inputSerializer))); } if (elementQueueState == null) { elementQueueState = getRuntimeContext().getMapState( new MapStateDescriptor<>( EVENT_QUEUE_STATE_NAME, LongSerializer.INSTANCE, new ListSerializer<>(inputSerializer) ) ); } }
@Override public NFA<T> copy(NFA<T> from) { try { ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); serialize(from, new DataOutputViewStreamWrapper(oos)); oos.close(); baos.close(); byte[] data = baos.toByteArray(); ByteArrayInputStream bais = new ByteArrayInputStream(data); ObjectInputStream ois = new ObjectInputStream(bais); @SuppressWarnings("unchecked") NFA<T> copy = deserialize(new DataInputViewStreamWrapper(ois)); ois.close(); bais.close(); return copy; } catch (IOException e) { throw new RuntimeException("Could not copy NFA.", e); } }
@Override public NFA<T> deserialize(NFA<T> reuse, DataInputView source) throws IOException { return deserialize(source); }
@Override public MigratedNFA<T> copy(MigratedNFA<T> from, MigratedNFA<T> reuse) { return copy(from); }
@Override public MigratedNFA<T> deserialize( MigratedNFA<T> reuse, DataInputView source) throws IOException { return deserialize(source); }
@Override public NFASerializer<T> duplicate() { return new NFASerializer<>(eventSerializer.duplicate()); }
@Override public NFASerializer<T> duplicate() { return new NFASerializer<>(eventSerializer.duplicate()); }
@Override public MigratedNFA<T> copy(MigratedNFA<T> from, MigratedNFA<T> reuse) { return copy(from); }
@Override public NFA<T> copy(NFA<T> from, NFA<T> reuse) { return copy(from); }