Hi Hangxiang, Dawid,

I also prefer to add method into TypeSerializerSnapshot, which looks
more natural. TypeSerializerSnapshot has `Version` concept, which also
can be used for compatibility.
`
TypeSerializerSnapshot {

        TypeSerializerSchemaCompatibility<T> resolveSchemaCompatibility(
             TypeSerializerSnapshot<T> oldSnapshot);

    }
`

Best,
Godfrey

Dawid Wysakowicz <dwysakow...@apache.org> 于2022年10月20日周四 16:59写道:
>
> That's the final status we will arrive at.
>
> IIUC, we cannot just remove the original method but just mark it as 
> deprecated so two methods have to exist together in the short term.
>
> Users may also need to migrate their own external serializers which is a long 
> run.
>
> I'd like to make jobs where users could always work without modifying any 
> codes before removing the deprecated method so I provide a default 
> implementation in the proposal.
>
>
> I understand it works for old serializers, but it makes writing new 
> serializers more complicated. It's not as simple as extending an interface 
> and implementing all the methods it tells you to. You have to dig into 
> documentation and check that you must implement one of the methods (either 
> the old or the new one). Otherwise you end up in an ifinite loop.
>
>
> If we break the compatibility, yes we cause some annoyance, but I feel it's a 
> safer option. BTW, there is a proposal around serializer that also causes 
> some incompatibilities so we could squash this together: 
> https://lists.apache.org/thread/v1q28zg5jhxcqrpq67pyv291nznd3n0w
>
>
> I don't want to force that, but would be really happy to hear what others 
> think.
>
>
> Best,
>
> Dawid
>
> On 19/10/2022 04:05, Hangxiang Yu wrote:
>
> Hi, Dawid.
>
>
> Thanks for your reply.
>
> Should we introduce the new method to the TypeSerializerSnapshot instead?
>
> You provided a valuable option, let me try to list the benefit and cost.
>
> benefit:
>
> TypeSerializerSnapshot still owns the responsibility of resolving schema 
> compatibility so TypeSerializer could just pay attention to its serialization 
> and deserialization as before.
> It's very convenient to implement it based on current implementation by all 
> information in TypeSerializerSnapshot and tools which is also helpful for 
> users to migrate their external serializer.
>
> cost:
>
> The interface is a bit strange because we have to construct and use the 
> snapshot of the new serializer to check the compatibility.
>
> I appreciate this because users could migrate more conveniently.
>
> For its cost, We could see TypeSerializerSnapshot as a point-in-time view of 
> TypeSerializer used for forward compatibility checks and persisting 
> serializer within checkpoints. It seems reasonable to generate a 
> point-in-time view of the serializer when we need to resolve compatibility.
>
>
> I'd actually be fine with breaking some external serializers and not provide 
> a default implementation of the new method.
>
> That's the final status we will arrive at.
>
> IIUC, we cannot just remove the original method but just mark it as 
> deprecated so two methods have to exist together in the short term.
>
> Users may also need to migrate their own external serializers which is a long 
> run.
>
> I'd like to make jobs where users could always work without modifying any 
> codes before removing the deprecated method so I provide a default 
> implementation in the proposal.
>
>
> On Mon, Oct 17, 2022 at 10:10 PM Dawid Wysakowicz <dwysakow...@apache.org> 
> wrote:
>>
>> Hi Han,
>>
>> I think in principle your proposal makes sense and the compatibility
>> check indeed should be done in the opposite direction.
>>
>> However, I have two suggestions:
>>
>> 1. Should we introduce the new method to the TypeSerializerSnapshot
>> instead? E.g.
>>
>>     TypeSerializerSnapshot {
>>
>>         TypeSerializerSchemaCompatibility<T> resolveSchemaCompatibility(
>>              TypeSerializerSnapshot<T> oldSnapshot);
>>
>>     }
>>
>> I know it has the downside that we'd need to create a snapshot for the
>> new serializer during a restore, but the there is a lot of tooling and
>> subclasses in the *Snapshot stack that it won't be possible to migrate
>> to TypeSerializer stack. I have classes such as
>> CompositeTypeSerializerSnapshot and alike in mind.
>>
>> 2. I'd actually be fine with breaking some external serializers and not
>> provide a default implementation of the new method. If we don't do that
>> we will have two methods with default implementation which call each
>> other. It makes it also a bit harder to figure out which methods are
>> mandatory to be implemented going forward.
>>
>> What do you think?
>>
>> Best,
>>
>> Dawid
>>
>> On 17/10/2022 04:43, Hangxiang Yu wrote:
>> > Hi, Han.
>> >
>> > Both the old method and the new method can get previous and new inner
>> > information.
>> >
>> > The new serializer will decide it just like the old serializer did before.
>> >
>> > The method just specify the schema compatibility result so that other
>> > behaviours is same as before.
>> >
>> > On Fri, Oct 14, 2022 at 11:40 AM Han Yin <alexyin...@gmail.com> wrote:
>> >
>> >> Hi Hangxiang,
>> >>
>> >> Thanks for the proposal. It seems more reasonable to let the new
>> >> serializer claim the compatibility in the cases you mentioned.
>> >>
>> >> I have but one question here. What happens in the case of
>> >> “compatibleAfterMigration” after we completely reverse the direction (in
>> >> step 3)?  To be specific, migration from an old schema calls for the
>> >> previous serializer to read bytes into state objects. How should a new
>> >> serializer decide whether the migration is possible?
>> >>
>> >> Best,
>> >> Han
>> >>
>> >> On 2022/10/12 12:41:07 Hangxiang Yu wrote:
>> >>> Dear Flink developers,
>> >>>
>> >>> I would like to start a discussion thread on FLIP-263[1] proposing to
>> >>> improve the usability of resolving schema compatibility.
>> >>>
>> >>> Currently, the place for compatibility checks is
>> >>> TypeSerializerSnapshot#resolveSchemaCompatibility
>> >>> which belongs to the old serializer, There are no ways for users to
>> >> specify the
>> >>> compatibility with the old serializer in the new customized serializer.
>> >>>
>> >>> The FLIP hopes to reverse the direction of resolving schema compatibility
>> >>> to improve the usability of resolving schema compatibility.
>> >>>
>> >>> [1]
>> >>>
>> >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-263%3A+Improve+resolving+schema+compatibility
>> >
>> >
>
>
>
> --
> Best,
> Hangxiang.

Reply via email to