@SuppressWarnings("unchecked") private CompatibilityResult<T> ensureFieldCompatibility( List<Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot>> previousSerializersAndConfigs) { TypeSerializer<Object>[] convertSerializers = new TypeSerializer[fieldSerializers.length]; boolean requiresMigration = false; for (int index = 0; index < previousSerializersAndConfigs.size(); index++) { CompatibilityResult<Object> compatResult = resolveFieldCompatibility(previousSerializersAndConfigs, index); if (compatResult.isRequiresMigration()) { requiresMigration = true; if (compatResult.getConvertDeserializer() != null) { convertSerializers[index] = new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()); } else { return CompatibilityResult.requiresMigration(); } } } return requiresMigration ? createMigrationCompatResult(convertSerializers) : CompatibilityResult.compatible(); }
return CompatibilityResult.compatible(); } else { if (keyCompatResult.getConvertDeserializer() != null && valueCompatResult.getConvertDeserializer() != null && versionCompatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new SharedBufferSerializer<>( new TypeDeserializerAdapter<>(keyCompatResult.getConvertDeserializer()), new TypeDeserializerAdapter<>(valueCompatResult.getConvertDeserializer()), new TypeDeserializerAdapter<>(versionCompatResult.getConvertDeserializer()) ));
return CompatibilityResult.compatible(); } else { if (eventCompatResult.getConvertDeserializer() != null && sharedBufCompatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new NFASerializer<>( new TypeDeserializerAdapter<>(eventCompatResult.getConvertDeserializer()), new TypeDeserializerAdapter<>(sharedBufCompatResult.getConvertDeserializer())));
requiresMigration = true; if (compatResult.getConvertDeserializer() != null) { reorderedFieldSerializers[i] = (TypeSerializer<Object>) compatResult.getConvertDeserializer(); } else { return CompatibilityResult.requiresMigration(); requiresMigration = true; if (compatResult.getConvertDeserializer() == null) { return CompatibilityResult.requiresMigration(); requiresMigration = true; if (compatResult.getConvertDeserializer() != null) { rebuiltCache.put(previousCachedEntry.getKey(), cachedSerializer); } else {
requiresMigration = true; if (compatResult.getConvertDeserializer() != null) { convertFieldSerializers[i] = new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()); } else { return CompatibilityResult.requiresMigration();
@SuppressWarnings("unchecked") private CompatibilityResult<T> ensureFieldCompatibility( List<Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot>> previousSerializersAndConfigs) { TypeSerializer<Object>[] convertSerializers = new TypeSerializer[fieldSerializers.length]; boolean requiresMigration = false; for (int index = 0; index < previousSerializersAndConfigs.size(); index++) { CompatibilityResult<Object> compatResult = resolveFieldCompatibility(previousSerializersAndConfigs, index); if (compatResult.isRequiresMigration()) { requiresMigration = true; if (compatResult.getConvertDeserializer() != null) { convertSerializers[index] = new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()); } else { return CompatibilityResult.requiresMigration(); } } } return requiresMigration ? createMigrationCompatResult(convertSerializers) : CompatibilityResult.compatible(); }
@Override public CompatibilityResult<T> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof NullableSerializerConfigSnapshot) { List<Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot>> previousKvSerializersAndConfigs = ((NullableSerializerConfigSnapshot) configSnapshot).getNestedSerializersAndConfigs(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousKvSerializersAndConfigs.get(0).f0, UnloadableDummyTypeSerializer.class, previousKvSerializersAndConfigs.get(0).f1, originalSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new NullableSerializer<>( new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()), padNullValue())); } } return CompatibilityResult.requiresMigration(); }
@Override public CompatibilityResult<StreamRecord<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof StreamRecordSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousTypeSerializerAndConfig = ((StreamRecordSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousTypeSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousTypeSerializerAndConfig.f1, typeSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new StreamRecordSerializer<>( new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); }
@Override public CompatibilityResult<StreamElement> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof MultiplexingStreamRecordSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousTypeSerializerAndConfig = ((MultiplexingStreamRecordSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousTypeSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousTypeSerializerAndConfig.f1, typeSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new MultiplexingStreamRecordSerializer<>( new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); }
@Override public CompatibilityResult<List<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof CollectionSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousElemSerializerAndConfig = ((CollectionSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousElemSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousElemSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new ListSerializer<>(new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<ArrayList<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof CollectionSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousElemSerializerAndConfig = ((CollectionSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousElemSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousElemSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new ArrayListSerializer<>(new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<ArrayList<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof CollectionSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousElemSerializerAndConfig = ((CollectionSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousElemSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousElemSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new ArrayListSerializer<>(new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<PriorityQueue<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof CollectionSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousElemSerializerAndConfig = ((CollectionSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousElemSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousElemSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new PriorityQueueSerializer<>( new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()), factory)); } } return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<C[]> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof GenericArraySerializerConfigSnapshot) { final GenericArraySerializerConfigSnapshot config = (GenericArraySerializerConfigSnapshot) configSnapshot; if (componentClass.equals(config.getComponentClass())) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousComponentSerializerAndConfig = config.getSingleNestedSerializerAndConfig(); CompatibilityResult<C> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousComponentSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousComponentSerializerAndConfig.f1, componentSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new GenericArraySerializer<>( componentClass, new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } } return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<BufferEntry<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof BufferSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousSerializerAndConfig = ((BufferSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new BufferEntrySerializer<>( new TypeDeserializerAdapter<>( compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); } }
/** * NOTE: this method cannot be removed until {@link CollectionSerializerConfigSnapshot} is fully removed. */ @Override @SuppressWarnings("deprecation") public CompatibilityResult<ArrayList<T>> ensureCompatibility(TypeSerializerConfigSnapshot<?> configSnapshot) { if (configSnapshot instanceof CollectionSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerSnapshot<?>> previousElemSerializerAndConfig = ((CollectionSerializerConfigSnapshot<?, ?>) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousElemSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousElemSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new ArrayListSerializer<>(new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<BufferEntry<T>> ensureCompatibility(TypeSerializerConfigSnapshot configSnapshot) { if (configSnapshot instanceof BufferSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerConfigSnapshot> previousSerializerAndConfig = ((BufferSerializerConfigSnapshot) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new BufferEntrySerializer<>( new TypeDeserializerAdapter<>( compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); } }
/** * NOTE: this method cannot be removed until {@link CollectionSerializerConfigSnapshot} is fully removed. */ @Override @SuppressWarnings("deprecation") public CompatibilityResult<ArrayList<T>> ensureCompatibility(TypeSerializerConfigSnapshot<?> configSnapshot) { if (configSnapshot instanceof CollectionSerializerConfigSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerSnapshot<?>> previousElemSerializerAndConfig = ((CollectionSerializerConfigSnapshot<?, ?>) configSnapshot).getSingleNestedSerializerAndConfig(); CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousElemSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousElemSerializerAndConfig.f1, elementSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new ArrayListSerializer<>(new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } } return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<StreamElement> ensureCompatibility(TypeSerializerConfigSnapshot<?> configSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerSnapshot<?>> previousTypeSerializerAndConfig; // we are compatible for data written by ourselves or the legacy MultiplexingStreamRecordSerializer if (configSnapshot instanceof StreamElementSerializerConfigSnapshot) { previousTypeSerializerAndConfig = ((StreamElementSerializerConfigSnapshot<?>) configSnapshot).getSingleNestedSerializerAndConfig(); } else { return CompatibilityResult.requiresMigration(); } CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousTypeSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousTypeSerializerAndConfig.f1, typeSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new StreamElementSerializer<>( new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } else { return CompatibilityResult.requiresMigration(); } }
@Override public CompatibilityResult<StreamElement> ensureCompatibility(TypeSerializerConfigSnapshot<?> configSnapshot) { Tuple2<TypeSerializer<?>, TypeSerializerSnapshot<?>> previousTypeSerializerAndConfig; // we are compatible for data written by ourselves or the legacy MultiplexingStreamRecordSerializer if (configSnapshot instanceof StreamElementSerializerConfigSnapshot) { previousTypeSerializerAndConfig = ((StreamElementSerializerConfigSnapshot<?>) configSnapshot).getSingleNestedSerializerAndConfig(); } else { return CompatibilityResult.requiresMigration(); } CompatibilityResult<T> compatResult = CompatibilityUtil.resolveCompatibilityResult( previousTypeSerializerAndConfig.f0, UnloadableDummyTypeSerializer.class, previousTypeSerializerAndConfig.f1, typeSerializer); if (!compatResult.isRequiresMigration()) { return CompatibilityResult.compatible(); } else if (compatResult.getConvertDeserializer() != null) { return CompatibilityResult.requiresMigration( new StreamElementSerializer<>( new TypeDeserializerAdapter<>(compatResult.getConvertDeserializer()))); } else { return CompatibilityResult.requiresMigration(); } }