The PR is merged, so everything should be back to normal.
Thanks everyone involved!

Also based on the discussion here, I have updated the FLIP-372 [1]. I tried
to incorporate every comment, but in some cases they were contradictory, so
please share your opinion on the corresponding thread [2].

Thanks again,
Peter

[1] -
https://cwiki.apache.org/confluence/display/FLINK/FLIP-372%3A+Allow+TwoPhaseCommittingSink+WithPreCommitTopology+to+alter+the+type+of+the+Committable
[2] - https://lists.apache.org/thread/344pzbrqbbb4w0sfj67km25msp7hxlyd

Leonard Xu <xbjt...@gmail.com> ezt írta (időpont: 2023. dec. 12., K, 7:33):

> Thanks Peter and Marton for the quick response and fix, I’ve left +1 for
> this PR.
>
> I’d like to take a look at followup FLIP-372 as well.
>
> Best,
> Leonard
>
>
> > 2023年12月12日 上午7:39,Becket Qin <becket....@gmail.com> 写道:
> >
> > Hi Peter,
> >
> > Thanks for updating the patch. The latest patch looks good to me. I've
> +1ed
> > on the PR.
> >
> > Cheers,
> >
> > Jiangjie (Becket) Qin
> >
> > On Mon, Dec 11, 2023 at 9:21 PM Péter Váry <peter.vary.apa...@gmail.com>
> > wrote:
> >
> >> Thanks everyone for the lively discussion!
> >>
> >> The PR is available which strictly adheres the accepted changes from
> >> FLIP-371. Thanks Gyula and Marton for the review. Becket, if you have
> any
> >> questions left, please let me know, so I can fix and we can merge the
> >> changes.
> >>
> >> I would like to invite everyone involved here to take a look at FLIP-372
> >> [1], and the related mailing thread [2]. The discussion there is also at
> >> the stage where we are debating the merits of migrating to a mixin based
> >> Sink API. So if you are interested, please join us there.
> >>
> >> Thanks,
> >> Peter
> >>
> >> [1] -
> >>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-372%3A+Allow+TwoPhaseCommittingSink+WithPreCommitTopology+to+alter+the+type+of+the+Committable
> >> [2] - https://lists.apache.org/thread/344pzbrqbbb4w0sfj67km25msp7hxlyd
> >>
> >>
> >> On Tue, Dec 5, 2023, 18:05 Márton Balassi <balassi.mar...@gmail.com>
> >> wrote:
> >>
> >>> Thanks, Peter. Given the discussion I also agree that the consensus is
> to
> >>> move towards the mixin interface approach (and accept its disadvantages
> >>> given its advantages).
> >>>
> >>> +1 for the general direction of your proposed code change in
> >>> https://github.com/apache/flink/pull/23876.
> >>>
> >>> On Tue, Dec 5, 2023 at 3:44 PM Péter Váry <peter.vary.apa...@gmail.com
> >
> >>> wrote:
> >>>
> >>>> It seems to me we have a consensus to move forward with the mixin
> >>> approach.
> >>>> I hope that everyone is aware that with the mixin interfaces we lose
> >> the
> >>>> opportunity of the strong type checks. This will be especially painful
> >>> for
> >>>> generic types, where we will not have a way to ensure that the generic
> >>>> types are correctly synchronized between the different interfaces,
> even
> >>> on
> >>>> DAG creation time.
> >>>>
> >>>> Even with this drawback, I like this approach too, so +1 from my side.
> >>>>
> >>>> As a first step in the direction of the mixin approach, we can remove
> >> the
> >>>> specific implementations of the `createWriter` methods from the
> >>>> `StatefulSink` and the `TwoPhaseCommitingSink` interfaces (and replace
> >>> them
> >>>> with an instanceof check where needed).
> >>>> - This would remove the diamond inheritance - enable us to create
> >> default
> >>>> methods for backward compatibility.
> >>>> - This would not break the API, as the same method with wider return
> >>> value
> >>>> will be inherited from the `Sink` interface.
> >>>>
> >>>> Since, it might be easier to understand the proposed changes, I have
> >>>> created a new PR: https://github.com/apache/flink/pull/23876
> >>>> The PR has 2 commits:
> >>>> - Reverting the previous change - non-clean, since there were some
> >>>> additional fixes on the tests -
> >>>>
> >>>>
> >>>
> >>
> https://github.com/apache/flink/pull/23876/commits/c7625d5fa62a6e9a182f39f53fb7e5626105f3b0
> >>>> - The new change with mixin approach, and deprecation -
> >>>>
> >>>>
> >>>
> >>
> https://github.com/apache/flink/pull/23876/commits/99ec936966af527598ca49712c1263bc4aa03c15
> >>>>
> >>>> Thanks,
> >>>> Peter
> >>>>
> >>>> weijie guo <guoweijieres...@gmail.com> ezt írta (időpont: 2023. dec.
> >> 5.,
> >>>> K,
> >>>> 8:01):
> >>>>
> >>>>> Thanks Martijn for driving this!
> >>>>>
> >>>>> I'm +1  to reverting the breaking change.
> >>>>>
> >>>>>> For new functionality or changes we can make easily, we should
> >> switch
> >>>> to
> >>>>> the decorative/mixin interface approach used successfully in the
> >> source
> >>>> and
> >>>>> table interfaces.
> >>>>>
> >>>>> I like the way of switching to mixin interface.
> >>>>>
> >>>>> Best regards,
> >>>>>
> >>>>> Weijie
> >>>>>
> >>>>>
> >>>>> Becket Qin <becket....@gmail.com> 于2023年12月5日周二 14:50写道:
> >>>>>
> >>>>>> I am with Gyula about fixing the current SinkV2 API.
> >>>>>>
> >>>>>> A SinkV3 seems not necessary because we are not changing the
> >>>> fundamental
> >>>>>> design of the API. Hopefully we can modify the interface structure
> >> a
> >>>>> little
> >>>>>> bit to make it similar to the Source while still keep the backwards
> >>>>>> compatibility.
> >>>>>> For example, one approach is:
> >>>>>>
> >>>>>> - Add snapshotState(int checkpointId) and precommit() methods to
> >> the
> >>>>>> SinkWriter with default implementation doing nothing. Deprecate
> >>>>>> StatefulSinkWriter and PrecommittingSinkWriter.
> >>>>>> - Add two mixin interfaces of SupportsStatefulWrite and
> >>>>>> SupportsTwoPhaseCommit. Deprecate the StatefulSink and
> >>>>>> TwoPhaseCommittingSink.
> >>>>>>
> >>>>>> Thanks,
> >>>>>>
> >>>>>> Jiangjie (Becket) Qin
> >>>>>>
> >>>>>> On Mon, Dec 4, 2023 at 7:25 PM Gyula Fóra <gyula.f...@gmail.com>
> >>>> wrote:
> >>>>>>
> >>>>>>> Hi All!
> >>>>>>>
> >>>>>>> Based on the discussion above, I feel that the most reasonable
> >>>> approach
> >>>>>>> from both developers and users perspective at this point is what
> >>>> Becket
> >>>>>>> lists as Option 1:
> >>>>>>>
> >>>>>>> Revert the naming change to the backward compatible version and
> >>>> accept
> >>>>>> that
> >>>>>>> the names are not perfect (treat it as legacy).
> >>>>>>>
> >>>>>>> On a different note, I agree that the current sink v2 interface
> >> is
> >>>> very
> >>>>>>> difficult to evolve and structuring the interfaces the way they
> >> are
> >>>> now
> >>>>>> is
> >>>>>>> not a good design in the long run.
> >>>>>>> For new functionality or changes we can make easily, we should
> >>> switch
> >>>>> to
> >>>>>>> the decorative/mixin interface approach used successfully in the
> >>>> source
> >>>>>> and
> >>>>>>> table interfaces. Let's try to do this as much as possible within
> >>> the
> >>>>> v2
> >>>>>>> and compatibility boundaries and we should only introduce a v3 if
> >>> we
> >>>>>> really
> >>>>>>> must.
> >>>>>>>
> >>>>>>> So from my side, +1 to reverting the naming to keep backward
> >>>>>> compatibility.
> >>>>>>>
> >>>>>>> Cheers,
> >>>>>>> Gyula
> >>>>>>>
> >>>>>>>
> >>>>>>> On Fri, Dec 1, 2023 at 10:43 AM Péter Váry <
> >>>>> peter.vary.apa...@gmail.com>
> >>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Thanks Becket for your reply!
> >>>>>>>>
> >>>>>>>> *On Option 1:*
> >>>>>>>> - I personally consider API inconsistencies more important,
> >> since
> >>>>> they
> >>>>>>> will
> >>>>>>>> remain with us "forever", but this is up to the community. I
> >> can
> >>>>>>> implement
> >>>>>>>> whichever solution we decide upon.
> >>>>>>>>
> >>>>>>>> *Option 2:*
> >>>>>>>> - I don't think this specific issue merits a rewrite, but if we
> >>>>> decide
> >>>>>> to
> >>>>>>>> change our approach, then it's a different story.
> >>>>>>>>
> >>>>>>>> *Evolvability:*
> >>>>>>>> This discussion reminds me of a similar discussion on FLIP-372
> >>> [1],
> >>>>>> where
> >>>>>>>> we are trying to decide if we should use mixin interfaces, or
> >> use
> >>>>>>> interface
> >>>>>>>> inheritance.
> >>>>>>>> With the mixin approach, we have a more flexible interface, but
> >>> we
> >>>>>> can't
> >>>>>>>> check the generic types of the interfaces/classes on compile
> >>> time,
> >>>> or
> >>>>>>> even
> >>>>>>>> when we create the DAG. The first issue happens when we call
> >> the
> >>>>> method
> >>>>>>> and
> >>>>>>>> fail.
> >>>>>>>> The issue here is similar:
> >>>>>>>> - *StatefulSink* needs a writer with a method to
> >>> `*snapshotState*`
> >>>>>>>> - *TwoPhaseCommittingSink* needs a writer with
> >> `*prepareCommit*`
> >>>>>>>> - If there is a Sink which is stateful and needs to commit,
> >> then
> >>> it
> >>>>>> needs
> >>>>>>>> both of these methods.
> >>>>>>>>
> >>>>>>>> If we use the mixin solution here, we lose the possibility to
> >>> check
> >>>>> the
> >>>>>>>> types in compile time. We could do the type check in runtime
> >>> using
> >>>> `
> >>>>>>>> *instanceof*`, so we are better off than with the FLIP-372
> >>> example
> >>>>>> above,
> >>>>>>>> but still lose any important possibility. I personally prefer
> >> the
> >>>>> mixin
> >>>>>>>> approach, but that would mean we rewrite the Sink API again -
> >>>> likely
> >>>>> a
> >>>>>>>> SinkV3. Are we ready to move down that path?
> >>>>>>>>
> >>>>>>>> Thanks,
> >>>>>>>> Peter
> >>>>>>>>
> >>>>>>>> [1] -
> >>>>> https://lists.apache.org/thread/344pzbrqbbb4w0sfj67km25msp7hxlyd
> >>>>>>>>
> >>>>>>>> On Thu, Nov 30, 2023, 14:53 Becket Qin <becket....@gmail.com>
> >>>> wrote:
> >>>>>>>>
> >>>>>>>>> Hi folks,
> >>>>>>>>>
> >>>>>>>>> Sorry for replying late on the thread.
> >>>>>>>>>
> >>>>>>>>> For this particular FLIP, I see two solutions:
> >>>>>>>>>
> >>>>>>>>> Option 1:
> >>>>>>>>> 1. On top of the the current status, rename
> >>>>>>>>> *org.apache.flink.api.connector.sink2.InitContext *to
> >>>>>>>>> *CommonInitContext (*should
> >>>>>>>>> probably be package private*)*.
> >>>>>>>>> 2. Change the name *WriterInitContext* back to *InitContext,
> >>> *and
> >>>>>>> revert
> >>>>>>>>> the deprecation. We can change the parameter name to
> >>>> writerContext
> >>>>> if
> >>>>>>> we
> >>>>>>>>> want to.
> >>>>>>>>> Admittedly, this does not have full symmetric naming of the
> >>>>>>> InitContexts
> >>>>>>>> -
> >>>>>>>>> we will have CommonInitContext / InitContext /
> >>>> CommitterInitContext
> >>>>>>>> instead
> >>>>>>>>> of InitContext / WriterInitContext / CommitterInitContext.
> >>>> However,
> >>>>>> the
> >>>>>>>>> naming seems clear without much confusion. Personally, I can
> >>> live
> >>>>>> with
> >>>>>>>>> that, treating the class InitContext as a non-ideal legacy
> >>> class
> >>>>> name
> >>>>>>>>> without much material harm.
> >>>>>>>>>
> >>>>>>>>> Option 2:
> >>>>>>>>> Theoretically speaking, if we really want to reach the
> >> perfect
> >>>>> state
> >>>>>>>> while
> >>>>>>>>> being backwards compatible, we can create a brand new set of
> >>> Sink
> >>>>>>>>> interfaces and deprecate the old ones. But I feel this is an
> >>>>> overkill
> >>>>>>>> here.
> >>>>>>>>>
> >>>>>>>>> The solution to this particular issue aside, the evolvability
> >>> of
> >>>>> the
> >>>>>>>>> current interface hierarchy seems a more fundamental issue
> >> and
> >>>>>> worries
> >>>>>>> me
> >>>>>>>>> more. I haven't completely thought it through, but there are
> >>> two
> >>>>>>>> noticeable
> >>>>>>>>> differences between the interface design principles between
> >>>> Source
> >>>>>> and
> >>>>>>>>> Sink.
> >>>>>>>>> 1. Source uses decorative interfaces. For example, we have a
> >>>>>>>>> SupportsFilterPushdown interface, instead of a subclass of
> >>>>>>>>> FilterableSource. This seems provides better flexibility.
> >>>>>>>>> 2. Source tends to have a more coarse-grained interface. For
> >>>>> example,
> >>>>>>>>> SourceReader always has the methods of snapshotState(),
> >>>>>>>>> notifyCheckpointComplete(). Even if they may not be always
> >>>>> required,
> >>>>>> we
> >>>>>>>> do
> >>>>>>>>> not separate them into different interfaces.
> >>>>>>>>> My hunch is that if we follow similar approach as Source, the
> >>>>>>>> evolvability
> >>>>>>>>> might be better. If we want to do this, we'd better to do it
> >>>> before
> >>>>>>> 2.0.
> >>>>>>>>> What do you think?
> >>>>>>>>>
> >>>>>>>>> Process wise,
> >>>>>>>>> - I agree that if there is a change to the passed FLIP during
> >>>>>>>>> implementation, it should be brought back to the mailing
> >> list.
> >>>>>>>>> - There might be value for the connector nightly build to
> >>> depend
> >>>> on
> >>>>>> the
> >>>>>>>>> latest snapshot of the same Flink major version. It helps
> >>>> catching
> >>>>>>>>> unexpected breaking changes sooner.
> >>>>>>>>> - I'll update the website to reflect the latest API stability
> >>>>> policy.
> >>>>>>>>> Apologies for the confusion caused by the stale doc.
> >>>>>>>>>
> >>>>>>>>> Thanks,
> >>>>>>>>>
> >>>>>>>>> Jiangjie (Becket) Qin
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Wed, Nov 29, 2023 at 10:55 PM Márton Balassi <
> >>>>>>>> balassi.mar...@gmail.com>
> >>>>>>>>> wrote:
> >>>>>>>>>
> >>>>>>>>>> Thanks, Martijn and Peter.
> >>>>>>>>>>
> >>>>>>>>>> In terms of the concrete issue:
> >>>>>>>>>>
> >>>>>>>>>>   - I am following up with the author of FLIP-321 [1]
> >>> (Becket)
> >>>>> to
> >>>>>>>> update
> >>>>>>>>>>   the docs [2] to reflect the right state.
> >>>>>>>>>>   - I see two reasonable approaches in terms of proceeding
> >>>> with
> >>>>>> the
> >>>>>>>>>>   specific changeset:
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>   1. We allow the exception from FLIP-321 for this change
> >>> and
> >>>>> let
> >>>>>>> the
> >>>>>>>>>>      PublicEvolving API change happen between Flink 1.18
> >> and
> >>>>> 1.19,
> >>>>>>>> which
> >>>>>>>>>> is
> >>>>>>>>>>      consistent with current state of the relevant
> >>>>> documentation.
> >>>>>>> [2]
> >>>>>>>>>> We commit
> >>>>>>>>>>      to helping the connector repos make the necessary
> >> (one
> >>>>> liner)
> >>>>>>>>>> changes.
> >>>>>>>>>>      2. We revert back to the original implementation plan
> >>> as
> >>>>>>>> explicitly
> >>>>>>>>>>      voted on in FLIP-371 [3]. That has no API breaking
> >>>> changes.
> >>>>>>>>>> However we end
> >>>>>>>>>>      up with an inconsistently named API with duplicated
> >>>>> internal
> >>>>>>>>>> methods. Peter
> >>>>>>>>>>      has also discovered additional bad patterns during
> >> his
> >>>> work
> >>>>>> in
> >>>>>>>>>> FLIP-372
> >>>>>>>>>>      [3], the total of these changes could be handled in a
> >>>>>> separate
> >>>>>>>> FLIP
> >>>>>>>>>> that
> >>>>>>>>>>      would do multiple PublicEvolving breaking changes to
> >>>> clean
> >>>>> up
> >>>>>>> the
> >>>>>>>>>> API.
> >>>>>>>>>>
> >>>>>>>>>> In terms of the general issues:
> >>>>>>>>>>
> >>>>>>>>>>   - I agree that if a PR review of an accepted FLIP newly
> >>>>>>> introduces a
> >>>>>>>>>>   breaking API change that warrants an update to the
> >> mailing
> >>>>> list
> >>>>>>>>>> discussion
> >>>>>>>>>>   and possibly even a new vote.
> >>>>>>>>>>   - I agree with the general sentiment of FLIP-321 to
> >>> provide
> >>>>>>> stronger
> >>>>>>>>> API
> >>>>>>>>>>   guarantees with the minor note that if we have changes
> >> in
> >>>> mind
> >>>>>> we
> >>>>>>>>> should
> >>>>>>>>>>   prioritize them now such that they can be validated by
> >>> Flink
> >>>>>> 2.0.
> >>>>>>>>>>   - I agree that ideally the connector repos should build
> >>>>> against
> >>>>>>> the
> >>>>>>>>>>   latest release and not the master branch.
> >>>>>>>>>>
> >>>>>>>>>> [1]
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-321%3A+Introduce+an+API+deprecation+process
> >>>>>>>>>> [2]
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://nightlies.apache.org/flink/flink-docs-master/docs/ops/upgrading/#api-compatibility-guarantees
> >>>>>>>>>> [3]
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-371%3A+Provide+initialization+context+for+Committer+creation+in+TwoPhaseCommittingSink
> >>>>>>>>>> [4]
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-372%3A+Allow+TwoPhaseCommittingSink+WithPreCommitTopology+to+alter+the+type+of+the+Committable
> >>>>>>>>>>
> >>>>>>>>>> Best,
> >>>>>>>>>> Marton
> >>>>>>>>>>
> >>>>>>>>>> On Mon, Nov 27, 2023 at 7:23 PM Péter Váry <
> >>>>>>>> peter.vary.apa...@gmail.com>
> >>>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> I think we should try to separate the discussion in a few
> >>>>>> different
> >>>>>>>>>> topics:
> >>>>>>>>>>>
> >>>>>>>>>>>   - Concrete issue
> >>>>>>>>>>>      - How to solve this problem in 1.19 and wrt the
> >>>> affected
> >>>>>>>>>> createWriter
> >>>>>>>>>>>      interface
> >>>>>>>>>>>      - Update the documentation [1], so FLIP-321 is
> >>> visible
> >>>>> for
> >>>>>>>> every
> >>>>>>>>>>>      contributor
> >>>>>>>>>>>   - Generic issue
> >>>>>>>>>>>      - API stability
> >>>>>>>>>>>      - Connector dependencies
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> *CreateWriter interface*
> >>>>>>>>>>> The change on the createWriter is not strictly required
> >> for
> >>>> the
> >>>>>>>>>>> functionality defined by the requirements on the FLIP.
> >>>>>>>>>>> If the only goal is only to have a backward compatible
> >> API,
> >>>> we
> >>>>>> can
> >>>>>>>>> simply
> >>>>>>>>>>> create a separate `*CommitterInitContext*` object and do
> >>> not
> >>>>>> touch
> >>>>>>>> the
> >>>>>>>>>>> writer `*InitContext*`, like it was done in the original
> >> PR
> >>>>> [2].
> >>>>>>>>>>> The issue is that this would result in an implementation
> >>>> which
> >>>>>> has
> >>>>>>>>>>> duplicated methods/implementations (internal issue only),
> >>> and
> >>>>> has
> >>>>>>>>>>> inconsistent naming (issue for external users).
> >>>>>>>>>>>
> >>>>>>>>>>> If we want to create an API which is consistent (and I
> >>> agree
> >>>>> with
> >>>>>>> the
> >>>>>>>>>>> reviewer's comments), then we need to rename the
> >> parameter
> >>>>> type (
> >>>>>>>>>>> *WriterInitContext*) for the createWriter method.
> >>>>>>>>>>> I have tried to keep the backward compatibility with
> >>>> creating a
> >>>>>> new
> >>>>>>>>>> method
> >>>>>>>>>>> and providing a default implementation for this new
> >> method
> >>>>> which
> >>>>>>>> would
> >>>>>>>>>> call
> >>>>>>>>>>> the original method after converting the
> >> WriterInitContext
> >>> to
> >>>>>>>>>> InitContext.
> >>>>>>>>>>>
> >>>>>>>>>>> This is failed because the following details:
> >>>>>>>>>>>
> >>>>>>>>>>>   - *org.apache.flink.api.connector.sink2.Sink* defines
> >>>>>>>>>>> `*SinkWriter<InputT>
> >>>>>>>>>>>   createWriter(InitContext context)`*
> >>>>>>>>>>>   - *org.apache.flink.api.connector.sink2.StatefulSink*
> >>>>> narrows
> >>>>>> it
> >>>>>>>>>>> down to *`StatefulSinkWriter<InputT,
> >>>>>>>>>>>   WriterStateT> createWriter(InitContext context)`*
> >>>>>>>>>>>   -
> >>>>>> *org.apache.flink.api.connector.sink2.TwoPhaseCommittingSink*
> >>>>>>>>>> narrows
> >>>>>>>>>>>   it down to *`PrecommittingSinkWriter<InputT, CommT>
> >>>>>>>>>>>   createWriter(WriterInitContext context)`*
> >>>>>>>>>>>   -
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> *org.apache.flink.streaming.runtime.operators.sink.TestSinkV2.TestStatefulSinkV2*
> >>>>>>>>>>>   implements *StatefulSink* and *TwoPhaseCommittingSink*
> >>> too
> >>>>>>>>>>>
> >>>>>>>>>>> *TestStatefulSinkV2* is a good example where we can not
> >>>> achieve
> >>>>>>>>> backward
> >>>>>>>>>>> compatibility, since the the compiler will fail with
> >>>> unrelated
> >>>>>>>> default
> >>>>>>>>>>> methods [3]
> >>>>>>>>>>>
> >>>>>>>>>>> I am open for any suggestions how to move to the new API,
> >>> and
> >>>>>> keep
> >>>>>>>> the
> >>>>>>>>>>> backward compatibility. If we do not find a way to keep
> >>>>> backward
> >>>>>>>>>>> compatibility, and we decide that we would like to honour
> >>>>>> FLIP-321,
> >>>>>>>>> then
> >>>>>>>>>> we
> >>>>>>>>>>> can reverting to the original solution and keep only the
> >>>>> changes
> >>>>>>> for
> >>>>>>>>> the
> >>>>>>>>>> `
> >>>>>>>>>>> *createCommitter*` method.
> >>>>>>>>>>>
> >>>>>>>>>>> *Update the documentation*
> >>>>>>>>>>> I have not found only one place in the docs [1], where we
> >>>> talk
> >>>>>>> about
> >>>>>>>>> the
> >>>>>>>>>>> compatibility guarantees.
> >>>>>>>>>>> Based FLIP-321 and the result of the discussion here, we
> >>>> should
> >>>>>>>> update
> >>>>>>>>>> this
> >>>>>>>>>>> page.
> >>>>>>>>>>>
> >>>>>>>>>>> *API stability*
> >>>>>>>>>>> I agree with the general sentiment of FLIP-321 to keep
> >> the
> >>>>>> changes
> >>>>>>>>>> backward
> >>>>>>>>>>> compatible as much as possible. But the issue above
> >>>> highlights
> >>>>>> that
> >>>>>>>>> there
> >>>>>>>>>>> could be situations where it is not possible to achieve
> >>>>> backward
> >>>>>>>>>>> compatibility. Probably we should provide exceptions to
> >>>> handle
> >>>>>> this
> >>>>>>>>> kind
> >>>>>>>>>> of
> >>>>>>>>>>> situations - minimally for PublicEvolving interfaces.
> >> After
> >>>> we
> >>>>>>> agree
> >>>>>>>> on
> >>>>>>>>>>> long term goals - allowing exceptions or to be more
> >> lenient
> >>>> on
> >>>>>>>> backward
> >>>>>>>>>>> compatibility guarantees, or sticking to FLIP-321 by the
> >>>>> letter -
> >>>>>>> we
> >>>>>>>>>> could
> >>>>>>>>>>> discuss how to apply it to the current situation.
> >>>>>>>>>>>
> >>>>>>>>>>> *Connector dependencies*
> >>>>>>>>>>> I think it is generally a good practice to depend on the
> >>>> stable
> >>>>>>>> version
> >>>>>>>>>> of
> >>>>>>>>>>> Flink (or any other downstream project). This is how we
> >> do
> >>> it
> >>>>> in
> >>>>>>>>> Iceberg,
> >>>>>>>>>>> and how it was implemented in the Kafka connector as
> >> well.
> >>>> This
> >>>>>>> would
> >>>>>>>>>>> result in more stable connector builds. The only issue I
> >>> see,
> >>>>>> that
> >>>>>>>> the
> >>>>>>>>>>> situations like this would take longer to surface, but I
> >>>> fully
> >>>>>>> expect
> >>>>>>>>> us
> >>>>>>>>>> to
> >>>>>>>>>>> get better at compatibility after we wetted the process.
> >>>>>>>>>>>
> >>>>>>>>>>> [1] -
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://nightlies.apache.org/flink/flink-docs-master/docs/ops/upgrading/#api-compatibility-guarantees
> >>>>>>>>>>> [2] -
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://github.com/apache/flink/pull/23555/commits/2b9adeb20e55c33a623115efa97d3149c11e9ca4
> >>>>>>>>>>> [3] -
> >>>>>>>>>
> >>>> https://github.com/apache/flink/pull/23555#discussion_r1371740397
> >>>>>>>>>>>
> >>>>>>>>>>> Martijn Visser <martijnvis...@apache.org> ezt írta
> >>> (időpont:
> >>>>>> 2023.
> >>>>>>>>> nov.
> >>>>>>>>>>> 27., H, 11:21):
> >>>>>>>>>>>
> >>>>>>>>>>>> Hi all,
> >>>>>>>>>>>>
> >>>>>>>>>>>> I'm opening this discussion thread to bring a
> >> discussion
> >>>>> that's
> >>>>>>>>>>>> happening on a completed Jira ticket back to the
> >> mailing
> >>>> list
> >>>>>> [1]
> >>>>>>>>>>>>
> >>>>>>>>>>>> In summary:
> >>>>>>>>>>>>
> >>>>>>>>>>>> * There was a discussion and a vote on FLIP-371 [2]
> >>>>>>>>>>>> * During implementation, it was determined that
> >> there's a
> >>>>>> diamond
> >>>>>>>>>>>> inheritance problem on the Sink.createWriter method,
> >>>> making a
> >>>>>>>>>>>> backwards compatible change hard/impossible (I think
> >> this
> >>>> is
> >>>>>>> where
> >>>>>>>>> the
> >>>>>>>>>>>> main discussion point actually is) [3]
> >>>>>>>>>>>> * The PR was merged, causing a backwards incompatible
> >>>> change
> >>>>>>>> without
> >>>>>>>>> a
> >>>>>>>>>>>> discussion on the Dev mailing list
> >>>>>>>>>>>>
> >>>>>>>>>>>> I think that in hindsight, even though there was a FLIP
> >>> on
> >>>>> this
> >>>>>>>>> topic,
> >>>>>>>>>>>> the finding of the diamond inheritance issue should
> >> have
> >>>> been
> >>>>>>>> brought
> >>>>>>>>>>>> back to the Dev mailing list in order to agree on how
> >> to
> >>>>>> resolve
> >>>>>>>> it.
> >>>>>>>>>>>> Since 1.19 is still under way, we still have time to
> >> fix
> >>>>> this.
> >>>>>>>>>>>>
> >>>>>>>>>>>> I think there's two things we can improve:
> >>>>>>>>>>>>
> >>>>>>>>>>>> 1) Next time during implementation of a FLIP/PR which
> >>>>> involves
> >>>>>> a
> >>>>>>>>>>>> non-backward compatible change of an API that wasn't
> >>>>> accounted
> >>>>>>> for,
> >>>>>>>>>>>> the discussion should be brought back to the Dev
> >> mailing
> >>>>> list.
> >>>>>> I
> >>>>>>>>> think
> >>>>>>>>>>>> we can just add that to the FLIP bylaws.
> >>>>>>>>>>>> 2) How do we actually resolve the problem: is there
> >>> anyone
> >>>>> who
> >>>>>>> has
> >>>>>>>> an
> >>>>>>>>>>>> idea on how we could introduce the proposed change
> >> while
> >>>>>>>> maintaining
> >>>>>>>>>>>> backwards compatibility, or do we agree that while this
> >>> is
> >>>> an
> >>>>>> non
> >>>>>>>>>>>> desired situation, there is no better alternative
> >>>>>> unfortunately?
> >>>>>>>>>>>>
> >>>>>>>>>>>> Best regards,
> >>>>>>>>>>>>
> >>>>>>>>>>>> Martijn
> >>>>>>>>>>>>
> >>>>>>>>>>>> [1] https://issues.apache.org/jira/browse/FLINK-25857
> >>>>>>>>>>>> [2]
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
> https://cwiki.apache.org/confluence/display/FLINK/FLIP-371%3A+Provide+initialization+context+for+Committer+creation+in+TwoPhaseCommittingSink
> >>>>>>>>>>>> [3]
> >>>>>>>>>
> >>>> https://github.com/apache/flink/pull/23555#discussion_r1371740397
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>
> >>>>
> >>>
> >>
>
>

Reply via email to