Thanks a lot for the detailed reviews and discussions, @dawidwys and 
@StephanEwen.

@dawidwys and I went through some offline second-pass discussions on the 
suggestions, and we finally came up with this (implemented in the follow-up 
e2cbe99):

1. To incorporate all the desired changes to the current 
`TypeSerializerConfigSnapshot` class (e.g. not explicitly setting the 
classloader, dump using the `VersionedIOReadableWritable` as base class, etc.), 
we came up with introducing `TypeSerializerSnapshot` which will eventually be 
the new snapshot interface once we completely remove 
`TypeSerializerConfigSnapshot`:

```
@PublicEvolving
public interface TypeSerializerSnapshot<T> {
    int getCurrentVersion();
    void write(DataOutputView out) throws IOException;
    void read(int readVersion, DataInputView in, ClassLoader 
userCodeClassLoader) throws IOException;
    TypeSerializer<T> restoreSerializer();
    <NS extends TypeSerializer<T>> TypeSerializerSchemaCompatibility<T, NS> 
resolveSchemaCompatibility(NS newSerializer);
}
```

If a serializer's snapshot is still the legacy `TypeSerializerConfigSnapshot`, 
then the prior serializer will always be written along with it so that the 
dummy `restoreSerializer()` factory method works with requiring the user for 
any changes. Once the user upgrades to directly implementing the 
`TypeSerializerSnapshot`, then the `restoreSerializer()` method will be 
strictly required to be implemented, and the prior serializer will no longer be 
written anymore.

It is only possible to change a snapshot from `TypeSerializerConfigSnapshot` to 
`TypeSerializerSnapshot`, and not the other way around.

This allows us to incrementally upgrade each serializer snapshot class 
currently in Flink.
We can still release if only partially some of the serializers have been 
upgraded.

2. The `BackwardsCompatibleConfigSnapshot` wrapper class is still required, so 
that for Flink version <= 1.2 (which only wrote the serializer instance and no 
snapshots), we can wrap the serializer instance inside a snapshot 
implementation.

Overall, the new changes quite closely follows your suggestions, only with a 
different approach to how the new / old interfaces work together.

[ Full content available at: https://github.com/apache/flink/pull/6711 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to