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();
}