Java源码示例:org.apache.flink.api.common.typeutils.CompositeTypeSerializerUtil.IntermediateCompatibilityResult
示例1
/**
* Finds which registered subclasses exists both in the new {@link PojoSerializer} as well as in the previous one
* (represented by this snapshot), and returns an {@link IntermediateCompatibilityResult}
* of the serializers of this preexisting registered subclasses.
*/
private static <T> IntermediateCompatibilityResult<T> getCompatibilityOfPreExistingRegisteredSubclasses(
PojoSerializer<T> newPojoSerializer,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSubclassSerializerSnapshots) {
final LinkedHashMap<Class<?>, TypeSerializerSnapshot<?>> unwrappedSerializerSnapshots = registeredSubclassSerializerSnapshots.unwrapOptionals();
final ArrayList<TypeSerializerSnapshot<?>> associatedSubclassSerializerSnapshots = new ArrayList<>();
final ArrayList<TypeSerializer<?>> associatedNewSubclassSerializers = new ArrayList<>();
final LinkedHashMap<Class<?>, TypeSerializer<?>> newSubclassSerializerRegistry = newPojoSerializer.getBundledSubclassSerializerRegistry();
for (Map.Entry<Class<?>, TypeSerializerSnapshot<?>> entry : unwrappedSerializerSnapshots.entrySet()) {
TypeSerializer<?> newRegisteredSerializer = newSubclassSerializerRegistry.get(entry.getKey());
if (newRegisteredSerializer != null) {
associatedSubclassSerializerSnapshots.add(entry.getValue());
associatedNewSubclassSerializers.add(newRegisteredSerializer);
}
}
return CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(
associatedNewSubclassSerializers.toArray(new TypeSerializer<?>[associatedNewSubclassSerializers.size()]),
associatedSubclassSerializerSnapshots.toArray(new TypeSerializerSnapshot<?>[associatedSubclassSerializerSnapshots.size()]));
}
示例2
/**
* Creates a reconfigured version of the {@link PojoSerializer}.
*
* @param originalNewPojoSerializer the original new {@link PojoSerializer} to create a reconfigured version of.
* @param fieldSerializerCompatibility compatibility of preexisting fields' serializers.
* @param registeredSerializerSnapshots snapshot of previous registered subclasses' serializers.
* @param preExistingRegistrationsCompatibility compatibility of preexisting subclasses' serializers.
* @param nonRegisteredSubclassSerializerSnapshots snapshot of previous non-registered subclasses' serializers.
*
* @return a reconfigured version of the original new {@link PojoSerializer}.
*/
private static <T> PojoSerializer<T> constructReconfiguredPojoSerializer(
PojoSerializer<T> originalNewPojoSerializer,
IntermediateCompatibilityResult<T> fieldSerializerCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSerializerSnapshots,
IntermediateCompatibilityResult<T> preExistingRegistrationsCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> nonRegisteredSubclassSerializerSnapshots) {
@SuppressWarnings("unchecked")
final TypeSerializer<Object>[] reconfiguredFieldSerializers = constructReconfiguredFieldSerializers(fieldSerializerCompatibility);
Tuple2<LinkedHashMap<Class<?>, Integer>, TypeSerializer<Object>[]> reconfiguredSubclassRegistry = constructReconfiguredSubclassRegistry(
originalNewPojoSerializer.getBundledSubclassSerializerRegistry(),
registeredSerializerSnapshots,
preExistingRegistrationsCompatibility);
return new PojoSerializer<>(
originalNewPojoSerializer.getPojoClass(),
originalNewPojoSerializer.getFields(),
reconfiguredFieldSerializers,
reconfiguredSubclassRegistry.f0,
reconfiguredSubclassRegistry.f1,
restoreSerializers(nonRegisteredSubclassSerializerSnapshots.unwrapOptionals()),
originalNewPojoSerializer.getExecutionConfig());
}
示例3
private static Tuple2<LinkedHashMap<Class<?>, Integer>, TypeSerializer<Object>[]> constructReconfiguredSubclassRegistry(
LinkedHashMap<Class<?>, TypeSerializer<?>> newSubclassRegistrations,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSerializerSnapshots,
IntermediateCompatibilityResult<?> preExistingRegistrationsCompatibility) {
checkArgument(!preExistingRegistrationsCompatibility.isIncompatible() && !preExistingRegistrationsCompatibility.isCompatibleAfterMigration());
LinkedHashMap<Class<?>, TypeSerializer<?>> reconfiguredSubclassSerializerRegistry =
restoreSerializers(registeredSerializerSnapshots.unwrapOptionals());
Iterator<TypeSerializer<?>> serializersForPreexistingRegistrations =
Arrays.asList(preExistingRegistrationsCompatibility.getNestedSerializers()).iterator();
for (Map.Entry<Class<?>, TypeSerializer<?>> registration : newSubclassRegistrations.entrySet()) {
// new registrations should simply be appended to the subclass serializer registry with their new serializers;
// preexisting registrations should use the compatibility-checked serializer
TypeSerializer<?> newRegistration = (reconfiguredSubclassSerializerRegistry.containsKey(registration.getKey()))
? serializersForPreexistingRegistrations.next()
: registration.getValue();
reconfiguredSubclassSerializerRegistry.put(registration.getKey(), newRegistration);
}
return decomposeSubclassSerializerRegistry(reconfiguredSubclassSerializerRegistry);
}
示例4
@Test
public void testCompatibleAsIsIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("first serializer"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("second serializer"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("first serializer"),
new SchemaCompatibilityTestingSerializer("second serializer"),
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isCompatibleAsIs());
assertTrue(intermediateCompatibilityResult.getFinalResult().isCompatibleAsIs());
assertArrayEquals(testNewSerializers, intermediateCompatibilityResult.getNestedSerializers());
}
示例5
@Test
public void testCompatibleWithReconfiguredSerializerIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("a"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration("b"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
final TypeSerializer<?>[] expectedReconfiguredNestedSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
};
assertTrue(intermediateCompatibilityResult.isCompatibleWithReconfiguredSerializer());
assertArrayEquals(expectedReconfiguredNestedSerializers, intermediateCompatibilityResult.getNestedSerializers());
}
示例6
@Test
public void testCompatibleAfterMigrationIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration("a"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterMigration("b"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("c"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
new SchemaCompatibilityTestingSerializer("c")
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isCompatibleAfterMigration());
assertTrue(intermediateCompatibilityResult.getFinalResult().isCompatibleAfterMigration());
}
示例7
@Test
public void testIncompatibleIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer(),
SchemaCompatibilityTestingSnapshot.thatIsIncompatibleWithTheNextSerializer(),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration(),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterMigration(),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer()
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isIncompatible());
assertTrue(intermediateCompatibilityResult.getFinalResult().isIncompatible());
}
示例8
/**
* Finds which registered subclasses exists both in the new {@link PojoSerializer} as well as in the previous one
* (represented by this snapshot), and returns an {@link IntermediateCompatibilityResult}
* of the serializers of this preexisting registered subclasses.
*/
private static <T> IntermediateCompatibilityResult<T> getCompatibilityOfPreExistingRegisteredSubclasses(
PojoSerializer<T> newPojoSerializer,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSubclassSerializerSnapshots) {
final LinkedHashMap<Class<?>, TypeSerializerSnapshot<?>> unwrappedSerializerSnapshots = registeredSubclassSerializerSnapshots.unwrapOptionals();
final ArrayList<TypeSerializerSnapshot<?>> associatedSubclassSerializerSnapshots = new ArrayList<>();
final ArrayList<TypeSerializer<?>> associatedNewSubclassSerializers = new ArrayList<>();
final LinkedHashMap<Class<?>, TypeSerializer<?>> newSubclassSerializerRegistry = newPojoSerializer.getBundledSubclassSerializerRegistry();
for (Map.Entry<Class<?>, TypeSerializerSnapshot<?>> entry : unwrappedSerializerSnapshots.entrySet()) {
TypeSerializer<?> newRegisteredSerializer = newSubclassSerializerRegistry.get(entry.getKey());
if (newRegisteredSerializer != null) {
associatedSubclassSerializerSnapshots.add(entry.getValue());
associatedNewSubclassSerializers.add(newRegisteredSerializer);
}
}
return CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(
associatedNewSubclassSerializers.toArray(new TypeSerializer<?>[associatedNewSubclassSerializers.size()]),
associatedSubclassSerializerSnapshots.toArray(new TypeSerializerSnapshot<?>[associatedSubclassSerializerSnapshots.size()]));
}
示例9
/**
* Creates a reconfigured version of the {@link PojoSerializer}.
*
* @param originalNewPojoSerializer the original new {@link PojoSerializer} to create a reconfigured version of.
* @param fieldSerializerCompatibility compatibility of preexisting fields' serializers.
* @param registeredSerializerSnapshots snapshot of previous registered subclasses' serializers.
* @param preExistingRegistrationsCompatibility compatibility of preexisting subclasses' serializers.
* @param nonRegisteredSubclassSerializerSnapshots snapshot of previous non-registered subclasses' serializers.
*
* @return a reconfigured version of the original new {@link PojoSerializer}.
*/
private static <T> PojoSerializer<T> constructReconfiguredPojoSerializer(
PojoSerializer<T> originalNewPojoSerializer,
IntermediateCompatibilityResult<T> fieldSerializerCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSerializerSnapshots,
IntermediateCompatibilityResult<T> preExistingRegistrationsCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> nonRegisteredSubclassSerializerSnapshots) {
@SuppressWarnings("unchecked")
final TypeSerializer<Object>[] reconfiguredFieldSerializers = constructReconfiguredFieldSerializers(fieldSerializerCompatibility);
Tuple2<LinkedHashMap<Class<?>, Integer>, TypeSerializer<Object>[]> reconfiguredSubclassRegistry = constructReconfiguredSubclassRegistry(
originalNewPojoSerializer.getBundledSubclassSerializerRegistry(),
registeredSerializerSnapshots,
preExistingRegistrationsCompatibility);
return new PojoSerializer<>(
originalNewPojoSerializer.getPojoClass(),
originalNewPojoSerializer.getFields(),
reconfiguredFieldSerializers,
reconfiguredSubclassRegistry.f0,
reconfiguredSubclassRegistry.f1,
restoreSerializers(nonRegisteredSubclassSerializerSnapshots.unwrapOptionals()),
originalNewPojoSerializer.getExecutionConfig());
}
示例10
@Test
public void testCompatibleAsIsIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("first serializer"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("second serializer"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("first serializer"),
new SchemaCompatibilityTestingSerializer("second serializer"),
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isCompatibleAsIs());
assertTrue(intermediateCompatibilityResult.getFinalResult().isCompatibleAsIs());
assertArrayEquals(testNewSerializers, intermediateCompatibilityResult.getNestedSerializers());
}
示例11
@Test
public void testCompatibleWithReconfiguredSerializerIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("a"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration("b"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
final TypeSerializer<?>[] expectedReconfiguredNestedSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
};
assertTrue(intermediateCompatibilityResult.isCompatibleWithReconfiguredSerializer());
assertArrayEquals(expectedReconfiguredNestedSerializers, intermediateCompatibilityResult.getNestedSerializers());
}
示例12
@Test
public void testCompatibleAfterMigrationIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration("a"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterMigration("b"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("c"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
new SchemaCompatibilityTestingSerializer("c")
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isCompatibleAfterMigration());
assertTrue(intermediateCompatibilityResult.getFinalResult().isCompatibleAfterMigration());
}
示例13
@Test
public void testIncompatibleIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer(),
SchemaCompatibilityTestingSnapshot.thatIsIncompatibleWithTheNextSerializer(),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration(),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterMigration(),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer()
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isIncompatible());
assertTrue(intermediateCompatibilityResult.getFinalResult().isIncompatible());
}
示例14
/**
* Finds which registered subclasses exists both in the new {@link PojoSerializer} as well as in the previous one
* (represented by this snapshot), and returns an {@link IntermediateCompatibilityResult}
* of the serializers of this preexisting registered subclasses.
*/
private static <T> IntermediateCompatibilityResult<T> getCompatibilityOfPreExistingRegisteredSubclasses(
PojoSerializer<T> newPojoSerializer,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSubclassSerializerSnapshots) {
final LinkedHashMap<Class<?>, TypeSerializerSnapshot<?>> unwrappedSerializerSnapshots = registeredSubclassSerializerSnapshots.unwrapOptionals();
final ArrayList<TypeSerializerSnapshot<?>> associatedSubclassSerializerSnapshots = new ArrayList<>();
final ArrayList<TypeSerializer<?>> associatedNewSubclassSerializers = new ArrayList<>();
final LinkedHashMap<Class<?>, TypeSerializer<?>> newSubclassSerializerRegistry = newPojoSerializer.getBundledSubclassSerializerRegistry();
for (Map.Entry<Class<?>, TypeSerializerSnapshot<?>> entry : unwrappedSerializerSnapshots.entrySet()) {
TypeSerializer<?> newRegisteredSerializer = newSubclassSerializerRegistry.get(entry.getKey());
if (newRegisteredSerializer != null) {
associatedSubclassSerializerSnapshots.add(entry.getValue());
associatedNewSubclassSerializers.add(newRegisteredSerializer);
}
}
return CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(
associatedNewSubclassSerializers.toArray(new TypeSerializer<?>[associatedNewSubclassSerializers.size()]),
associatedSubclassSerializerSnapshots.toArray(new TypeSerializerSnapshot<?>[associatedSubclassSerializerSnapshots.size()]));
}
示例15
/**
* Creates a reconfigured version of the {@link PojoSerializer}.
*
* @param originalNewPojoSerializer the original new {@link PojoSerializer} to create a reconfigured version of.
* @param fieldSerializerCompatibility compatibility of preexisting fields' serializers.
* @param registeredSerializerSnapshots snapshot of previous registered subclasses' serializers.
* @param preExistingRegistrationsCompatibility compatibility of preexisting subclasses' serializers.
* @param nonRegisteredSubclassSerializerSnapshots snapshot of previous non-registered subclasses' serializers.
*
* @return a reconfigured version of the original new {@link PojoSerializer}.
*/
private static <T> PojoSerializer<T> constructReconfiguredPojoSerializer(
PojoSerializer<T> originalNewPojoSerializer,
IntermediateCompatibilityResult<T> fieldSerializerCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSerializerSnapshots,
IntermediateCompatibilityResult<T> preExistingRegistrationsCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> nonRegisteredSubclassSerializerSnapshots) {
@SuppressWarnings("unchecked")
final TypeSerializer<Object>[] reconfiguredFieldSerializers = constructReconfiguredFieldSerializers(fieldSerializerCompatibility);
Tuple2<LinkedHashMap<Class<?>, Integer>, TypeSerializer<Object>[]> reconfiguredSubclassRegistry = constructReconfiguredSubclassRegistry(
originalNewPojoSerializer.getBundledSubclassSerializerRegistry(),
registeredSerializerSnapshots,
preExistingRegistrationsCompatibility);
return new PojoSerializer<>(
originalNewPojoSerializer.getPojoClass(),
originalNewPojoSerializer.getFields(),
reconfiguredFieldSerializers,
reconfiguredSubclassRegistry.f0,
reconfiguredSubclassRegistry.f1,
restoreSerializers(nonRegisteredSubclassSerializerSnapshots.unwrapOptionals()),
originalNewPojoSerializer.getExecutionConfig());
}
示例16
@Test
public void testCompatibleAsIsIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("first serializer"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("second serializer"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("first serializer"),
new SchemaCompatibilityTestingSerializer("second serializer"),
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isCompatibleAsIs());
assertTrue(intermediateCompatibilityResult.getFinalResult().isCompatibleAsIs());
assertArrayEquals(testNewSerializers, intermediateCompatibilityResult.getNestedSerializers());
}
示例17
@Test
public void testCompatibleWithReconfiguredSerializerIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("a"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration("b"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
final TypeSerializer<?>[] expectedReconfiguredNestedSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
};
assertTrue(intermediateCompatibilityResult.isCompatibleWithReconfiguredSerializer());
assertArrayEquals(expectedReconfiguredNestedSerializers, intermediateCompatibilityResult.getNestedSerializers());
}
示例18
@Test
public void testCompatibleAfterMigrationIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration("a"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterMigration("b"),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer("c"),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer("a"),
new SchemaCompatibilityTestingSerializer("b"),
new SchemaCompatibilityTestingSerializer("c")
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isCompatibleAfterMigration());
assertTrue(intermediateCompatibilityResult.getFinalResult().isCompatibleAfterMigration());
}
示例19
@Test
public void testIncompatibleIntermediateCompatibilityResult() {
final TypeSerializerSnapshot<?>[] testSerializerSnapshots = new TypeSerializerSnapshot<?>[] {
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializer(),
SchemaCompatibilityTestingSnapshot.thatIsIncompatibleWithTheNextSerializer(),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterReconfiguration(),
SchemaCompatibilityTestingSnapshot.thatIsCompatibleWithNextSerializerAfterMigration(),
};
final TypeSerializer<?>[] testNewSerializers = new TypeSerializer<?>[] {
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer(),
new SchemaCompatibilityTestingSerializer()
};
IntermediateCompatibilityResult<?> intermediateCompatibilityResult =
CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(testNewSerializers, testSerializerSnapshots);
assertTrue(intermediateCompatibilityResult.isIncompatible());
assertTrue(intermediateCompatibilityResult.getFinalResult().isIncompatible());
}
示例20
/**
* Finds which Pojo fields exists both in the new {@link PojoSerializer} as well as in the previous one
* (represented by this snapshot), and returns an {@link IntermediateCompatibilityResult}
* of the serializers of those preexisting fields.
*/
private static <T> IntermediateCompatibilityResult<T> getCompatibilityOfPreExistingFields(
PojoSerializer<T> newPojoSerializer,
LinkedOptionalMap<Field, TypeSerializerSnapshot<?>> fieldSerializerSnapshots) {
// the present entries dictates the preexisting fields, because removed fields would be
// represented as absent keys in the optional map.
final Set<LinkedOptionalMap.KeyValue<Field, TypeSerializerSnapshot<?>>> presentFieldSnapshots =
fieldSerializerSnapshots.getPresentEntries();
final ArrayList<TypeSerializerSnapshot<?>> associatedFieldSerializerSnapshots = new ArrayList<>(presentFieldSnapshots.size());
final ArrayList<TypeSerializer<?>> associatedNewFieldSerializers = new ArrayList<>(presentFieldSnapshots.size());
final Map<Field, TypeSerializer<?>> newFieldSerializersIndex = buildNewFieldSerializersIndex(newPojoSerializer);
for (LinkedOptionalMap.KeyValue<Field, TypeSerializerSnapshot<?>> presentFieldEntry : presentFieldSnapshots) {
TypeSerializer<?> associatedNewFieldSerializer = newFieldSerializersIndex.get(presentFieldEntry.getKey());
checkState(
associatedNewFieldSerializer != null,
"a present field should have its associated new field serializer available.");
associatedFieldSerializerSnapshots.add(presentFieldEntry.getValue());
associatedNewFieldSerializers.add(associatedNewFieldSerializer);
}
return CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(
associatedNewFieldSerializers.toArray(new TypeSerializer<?>[associatedNewFieldSerializers.size()]),
associatedFieldSerializerSnapshots.toArray(new TypeSerializerSnapshot<?>[associatedFieldSerializerSnapshots.size()]));
}
示例21
/**
* Checks if the new {@link PojoSerializer} is compatible after migration.
*/
private static <T> boolean newPojoSerializerIsCompatibleAfterMigration(
PojoSerializer<T> newPojoSerializer,
IntermediateCompatibilityResult<T> fieldSerializerCompatibility,
IntermediateCompatibilityResult<T> preExistingRegistrationsCompatibility,
LinkedOptionalMap<Field, TypeSerializerSnapshot<?>> fieldSerializerSnapshots) {
return newPojoHasNewOrRemovedFields(fieldSerializerSnapshots, newPojoSerializer)
|| fieldSerializerCompatibility.isCompatibleAfterMigration()
|| preExistingRegistrationsCompatibility.isCompatibleAfterMigration();
}
示例22
/**
* Checks if the new {@link PojoSerializer} is compatible with a reconfigured instance.
*/
private static <T> boolean newPojoSerializerIsCompatibleWithReconfiguredSerializer(
PojoSerializer<T> newPojoSerializer,
IntermediateCompatibilityResult<T> fieldSerializerCompatibility,
IntermediateCompatibilityResult<T> preExistingRegistrationsCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSubclassSerializerSnapshots,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> nonRegisteredSubclassSerializerSnapshots) {
return newPojoHasDifferentSubclassRegistrationOrder(registeredSubclassSerializerSnapshots, newPojoSerializer)
|| previousSerializerHasNonRegisteredSubclasses(nonRegisteredSubclassSerializerSnapshots)
|| fieldSerializerCompatibility.isCompatibleWithReconfiguredSerializer()
|| preExistingRegistrationsCompatibility.isCompatibleWithReconfiguredSerializer();
}
示例23
@Test(expected = IllegalStateException.class)
public void testGetFinalResultOnUndefinedReconfigureIntermediateCompatibilityResultFails() {
IntermediateCompatibilityResult<Integer> intermediateCompatibilityResult =
IntermediateCompatibilityResult.undefinedReconfigureResult(new TypeSerializer[]{ IntSerializer.INSTANCE });
intermediateCompatibilityResult.getFinalResult();
}
示例24
@Test(expected = IllegalStateException.class)
public void testGetNestedSerializersOnCompatibleAfterMigrationIntermediateCompatibilityResultFails() {
IntermediateCompatibilityResult<Integer> intermediateCompatibilityResult =
IntermediateCompatibilityResult.definedCompatibleAfterMigrationResult();
intermediateCompatibilityResult.getNestedSerializers();
}
示例25
@Test(expected = IllegalStateException.class)
public void testGetNestedSerializersOnIncompatibleIntermediateCompatibilityResultFails() {
IntermediateCompatibilityResult<Integer> intermediateCompatibilityResult =
IntermediateCompatibilityResult.definedIncompatibleResult();
intermediateCompatibilityResult.getNestedSerializers();
}
示例26
/**
* Finds which Pojo fields exists both in the new {@link PojoSerializer} as well as in the previous one
* (represented by this snapshot), and returns an {@link IntermediateCompatibilityResult}
* of the serializers of those preexisting fields.
*/
private static <T> IntermediateCompatibilityResult<T> getCompatibilityOfPreExistingFields(
PojoSerializer<T> newPojoSerializer,
LinkedOptionalMap<Field, TypeSerializerSnapshot<?>> fieldSerializerSnapshots) {
// the present entries dictates the preexisting fields, because removed fields would be
// represented as absent keys in the optional map.
final Set<LinkedOptionalMap.KeyValue<Field, TypeSerializerSnapshot<?>>> presentFieldSnapshots =
fieldSerializerSnapshots.getPresentEntries();
final ArrayList<TypeSerializerSnapshot<?>> associatedFieldSerializerSnapshots = new ArrayList<>(presentFieldSnapshots.size());
final ArrayList<TypeSerializer<?>> associatedNewFieldSerializers = new ArrayList<>(presentFieldSnapshots.size());
final Map<Field, TypeSerializer<?>> newFieldSerializersIndex = buildNewFieldSerializersIndex(newPojoSerializer);
for (LinkedOptionalMap.KeyValue<Field, TypeSerializerSnapshot<?>> presentFieldEntry : presentFieldSnapshots) {
TypeSerializer<?> associatedNewFieldSerializer = newFieldSerializersIndex.get(presentFieldEntry.getKey());
checkState(
associatedNewFieldSerializer != null,
"a present field should have its associated new field serializer available.");
associatedFieldSerializerSnapshots.add(presentFieldEntry.getValue());
associatedNewFieldSerializers.add(associatedNewFieldSerializer);
}
return CompositeTypeSerializerUtil.constructIntermediateCompatibilityResult(
associatedNewFieldSerializers.toArray(new TypeSerializer<?>[associatedNewFieldSerializers.size()]),
associatedFieldSerializerSnapshots.toArray(new TypeSerializerSnapshot<?>[associatedFieldSerializerSnapshots.size()]));
}
示例27
/**
* Checks if the new {@link PojoSerializer} is compatible after migration.
*/
private static <T> boolean newPojoSerializerIsCompatibleAfterMigration(
PojoSerializer<T> newPojoSerializer,
IntermediateCompatibilityResult<T> fieldSerializerCompatibility,
IntermediateCompatibilityResult<T> preExistingRegistrationsCompatibility,
LinkedOptionalMap<Field, TypeSerializerSnapshot<?>> fieldSerializerSnapshots) {
return newPojoHasNewOrRemovedFields(fieldSerializerSnapshots, newPojoSerializer)
|| fieldSerializerCompatibility.isCompatibleAfterMigration()
|| preExistingRegistrationsCompatibility.isCompatibleAfterMigration();
}
示例28
/**
* Checks if the new {@link PojoSerializer} is compatible with a reconfigured instance.
*/
private static <T> boolean newPojoSerializerIsCompatibleWithReconfiguredSerializer(
PojoSerializer<T> newPojoSerializer,
IntermediateCompatibilityResult<T> fieldSerializerCompatibility,
IntermediateCompatibilityResult<T> preExistingRegistrationsCompatibility,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> registeredSubclassSerializerSnapshots,
LinkedOptionalMap<Class<?>, TypeSerializerSnapshot<?>> nonRegisteredSubclassSerializerSnapshots) {
return newPojoHasDifferentSubclassRegistrationOrder(registeredSubclassSerializerSnapshots, newPojoSerializer)
|| previousSerializerHasNonRegisteredSubclasses(nonRegisteredSubclassSerializerSnapshots)
|| fieldSerializerCompatibility.isCompatibleWithReconfiguredSerializer()
|| preExistingRegistrationsCompatibility.isCompatibleWithReconfiguredSerializer();
}
示例29
@Test(expected = IllegalStateException.class)
public void testGetFinalResultOnUndefinedReconfigureIntermediateCompatibilityResultFails() {
IntermediateCompatibilityResult<Integer> intermediateCompatibilityResult =
IntermediateCompatibilityResult.undefinedReconfigureResult(new TypeSerializer[]{ IntSerializer.INSTANCE });
intermediateCompatibilityResult.getFinalResult();
}
示例30
@Test(expected = IllegalStateException.class)
public void testGetNestedSerializersOnCompatibleAfterMigrationIntermediateCompatibilityResultFails() {
IntermediateCompatibilityResult<Integer> intermediateCompatibilityResult =
IntermediateCompatibilityResult.definedCompatibleAfterMigrationResult();
intermediateCompatibilityResult.getNestedSerializers();
}