Hi Arvid, > Should we expect connector devs to release different connector binaries for different Flink minors? >From the discussion of this thread, I think the answer is obviously "not", otherwise OpenInx won't start this discussion. As a maintainer of flink-cdc-connector, I have to say that it's very hard to release connectors for different flink versions. Usually, the connector community doesn't have so much time to maintain different branches/modules/code for different flink versions.
> If we change it back, then a specific connector would work for 1.14.1 and 1.13.X but not for 1.14.0 and this would be even more confusing. I think this is fine. IMO, this is a blocker issue of 1.14.0 which breaks Source connectors. We should suggest users to use 1.14.1 if they use Source connectors. Best, Jark On Fri, 1 Oct 2021 at 19:05, Arvid Heise <ar...@ververica.com> wrote: > The issue is that if we do not mark them as Public, we will always have > incompatibilities. The change of SourceReaderContext#metricGroup is > perfectly fine according to the annotation. The implications that we see > here just mean that the interfaces have been expected to be Public. > > And now the question is what do we expect? > Should we expect connector devs to release different connector binaries > for different Flink minors? Then PublicEvolving is fine. > If we expect that the same connector can work across multiple Flink > versions, we need to go into Public. > > It doesn't make sense to keep them PublicEvolving on the annotation but > implicitly assume them to be Public. > > @Jark Wu <imj...@gmail.com> I don't see a way to revert the change of > SourceReaderContext#metricGroup. For now, connector devs that expose > metrics need to release 2 versions. If we change it back, then a specific > connector would work for 1.14.1 and 1.13.X but not for 1.14.0 and this > would be even more confusing. > > On Fri, Oct 1, 2021 at 10:49 AM Ingo Bürk <i...@ververica.com> wrote: > >> Hi, >> >> > [...] but also the new Source/Sink APIs as public >> >> I'm not really involved in the new Source/Sink APIs and will happily >> listen to the developers working with them here, but since they are new, we >> should also be careful not to mark them as stable too quickly. We've only >> begun updating the existing connectors to these interfaces at the moment. >> Making more progress here and keeping new APIs as Evolving for a couple of >> minor releases is probably still a good idea. Maybe we should even have >> actual rules on when APIs can/should be promoted? >> >> More actively checking backwards-compatibility during a release sounds >> like a great idea regardless, of course. >> >> >> Ingo >> >> On Fri, Oct 1, 2021 at 9:19 AM Jark Wu <imj...@gmail.com> wrote: >> >>> Hi all, >>> >>> Nice thread and great discussion! Ecosystem is one of the most important >>> things >>> to the Flink community, we should pay more attention to API >>> compatibility. >>> >>> Marking all connector APIs @Public is a good idea, not only mark the >>> Table/SQL >>> connector APIs public, but also the new Source/Sink APIs as public. >>> Besides, we should also add a check item to the Verify Release >>> documentation[1] >>> to verify the release is backward-compatible for connectors. From my >>> point >>> of view, >>> such backward incompatibility should cancel the vote. >>> >>> Regarding the SourceReaderContext#metricGroup compatibility problem in >>> 1.14.0, I would >>> suggest starting a new discussion thread to see whether we have any idea >>> to >>> fix it. We should >>> fix it ASAP! Otherwise iceberg/hudi/cdc communities will get frustrated >>> again when upgrading >>> to 1.14. Maybe we still have time to release a minor version, because >>> there is no >>> connector upgraded to 1.14.0 yet. What do you think? @Leonard Xu >>> <xbjt...@gmail.com> @Arvid Heise <ar...@ververica.com> @Piotr Nowojski >>> <pi...@ververica.com> >>> >>> Best, >>> Jark >>> >>> [1]: >>> >>> https://cwiki.apache.org/confluence/display/FLINK/Verifying+a+Flink+Release >>> >>> On Wed, 29 Sept 2021 at 09:46, OpenInx <open...@gmail.com> wrote: >>> >>> > > Apart from this being `@PublicEvolving` >>> > >>> > From my perspective, annotating the 'DynamicTableSink' to be a >>> > 'PublicEvolving' class is not reasonable, because that means devs could >>> > just change the basic API which all downstream connectors are >>> depending on >>> > easily when iterating flink from 1.12 to 1.13 (according to the wiki >>> [1]). >>> > This implies all downstream maintainers must take on this maintenance >>> > burden, and it also makes our flink ecosystem very fragile. Changing >>> the >>> > 'DynamicTableSink' between two major versions sounds reasonable to me, >>> but >>> > unreasonable for uncompatibility changes between two minor versions. >>> I >>> > think we may need to check those API which are annotated >>> 'PublicEnvoling' >>> > while should be 'Public' because of the dependency from all >>> connectors. >>> > We should ensure the stability of those APIs that are necessary to >>> > implement the connector, and at the same time implement the updated v2 >>> > version of the API. After all v2 APIs are considered stable, we will >>> mark >>> > them as stable. Instead of releasing a version of the API, some of the >>> APIs >>> > necessary to implement the connector are marked as stable and some are >>> > marked as unstable, which is very unfriendly to downstream. Because >>> > downstream essentially every upgrade requires refactoring of the code. >>> > >>> > > We are trying to provide forward compatibility: applications using >>> > `@Public` APIs compiled against Flink 1.12.x, should work fine in Flink >>> > 1.13.x >>> > >>> > Thanks for clarifying this. Sounds reasonable to me, then we apache >>> > iceberg could just use flink 1.12.x to build the flink+iceberg >>> connector >>> > and should make all the tests work fine for both flink 1.12 & flink >>> 1.13. >>> > For the `ResolvedCatalogTable` changes, I don't think it guarantees >>> the >>> > forward compatibility as you said, because the >>> flink-iceberg-runtime.jar >>> > compiled by flink 1.12 can still not works fine in flink 1.13 because >>> it >>> > will need the flink1.12's `CatalogTable` to be cast to a flink1.13 's >>> > `ResolvedCatalogTable`. In general, I agree that forward >>> compatibility is >>> > a more clear compatibility guarantee. >>> > >>> > [1]. >>> > >>> https://cwiki.apache.org/confluence/display/FLINK/Stability+Annotations >>> > >>> > >>> > On Tue, Sep 28, 2021 at 10:33 PM David Morávek <d...@apache.org> >>> wrote: >>> > >>> > > > >>> > > > I think we have a compile time checks for breaking changes in >>> `@Public` >>> > > > marked classes/interfaces using japicmp [1]. >>> > > >>> > > >>> > > Nice, thanks for pointing that out, I'll take a closer look at it ;) >>> > > >>> > > Best, >>> > > D. >>> > > >>> > > On Tue, Sep 28, 2021 at 4:14 PM Piotr Nowojski <pnowoj...@apache.org >>> > >>> > > wrote: >>> > > >>> > > > > - We don't have any safeguards for stable API breaks. Big +1 for >>> > Ingo's >>> > > > effort with architectural tests [3]. >>> > > > >>> > > > I think we have a compile time checks for breaking changes in >>> `@Public` >>> > > > marked classes/interfaces using japicmp [1]. >>> > > > >>> > > > Piotrek >>> > > > >>> > > > [1] >>> https://github.com/apache/flink/blob/master/pom.xml#L2014:L2084 >>> > > > >>> > > > wt., 28 wrz 2021 o 15:59 David Morávek <d...@apache.org> >>> napisał(a): >>> > > > >>> > > > > This is a super interesting topic and there is already a great >>> > > > discussion. >>> > > > > Here are few thoughts: >>> > > > > >>> > > > > - There is a delicate balance between fast delivery of the new >>> > features >>> > > > and >>> > > > > API stability. Even though we should be careful with breaking >>> > evolving >>> > > > > interfaces, it shouldn't stop us from making fast progress / >>> iterate >>> > on >>> > > > > features. >>> > > > > - There are two camps of users. One camp prefers more frequent >>> > > releases / >>> > > > > new features (early adopters) and second that prefer less >>> frequent >>> > > stable >>> > > > > releases. There was already a great discussion about this at >>> Flink >>> > 1.14 >>> > > > > thread [1]. >>> > > > > - We're already trying to be explicit about which API's may >>> break via >>> > > > > annotations and the feature radar [2]. Stability annotations are >>> a >>> > well >>> > > > > known concept used by many projects. I think we still can go bit >>> > > further >>> > > > > here and aim for an IDE support (for example usages of guava >>> > > > @Experimental >>> > > > > interfaces get highlighted, raising more awareness about >>> potential >>> > > > issues). >>> > > > > I'm not sure how this IDE integration works though. >>> > > > > - We don't have any safeguards for stable API breaks. Big +1 for >>> > Ingo's >>> > > > > effort with architectural tests [3]. >>> > > > > >>> > > > > [1] >>> > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://lists.apache.org/thread.html/r76e1cdba577c6f4d6c86b23fdaeb53c4e3744c20d0b3e850fc2e14a7%40%3Cdev.flink.apache.org%3E >>> > > > > [2] https://flink.apache.org/roadmap.html >>> > > > > [3] https://issues.apache.org/jira/browse/FLINK-24138 >>> > > > > >>> > > > > Best, >>> > > > > D. >>> > > > > >>> > > > > On Tue, Sep 28, 2021 at 3:49 PM Leonard Xu <xbjt...@gmail.com> >>> > wrote: >>> > > > > >>> > > > > > Thanks Piotr for the kindly reply, what confused me is that >>> > > > > > `SourceReaderContext` was marked @Public when it was born in >>> flink >>> > > > 1.11, >>> > > > > > and then it was corrected to @PublicEvolving in 1.11 -_-, and >>> > finally >>> > > > it >>> > > > > > was changed to @Public again... >>> > > > > > >>> > > > > > As Flink and Flink ecosystem(Flink CDC connectors) developer, I >>> > think >>> > > > > what >>> > > > > > we're discussing is meaningful and I’d like to help improve >>> those >>> > > > Public >>> > > > > > API check for those changes. >>> > > > > > Chesnay’s tips is a good idea that maybe we can use the tool >>> like >>> > > > japicmp >>> > > > > > to do the check for every PR in CI phase. >>> > > > > > >>> > > > > > Best, >>> > > > > > Leonard >>> > > > > > >>> > > > > > >>> > > > > > > 在 2021年9月28日,21:15,Piotr Nowojski <pnowoj...@apache.org> 写道: >>> > > > > > > >>> > > > > > > Hi Leonard, >>> > > > > > > >>> > > > > > > Sorry for this causing you troubles, however that change in >>> the >>> > > > return >>> > > > > > type >>> > > > > > > was done while this class still has been marked as >>> > > > > `@PublicEvolving`[1]. >>> > > > > > As >>> > > > > > > of 1.13.x `SourceReaderContext` was `@PublicEvolving` and it >>> was >>> > > > marked >>> > > > > > as >>> > > > > > > `@Public` only starting from Flink 1.14.0 [2]. Probably what >>> > > confused >>> > > > > you >>> > > > > > > was that both of those changes (changing the return type and >>> > making >>> > > > it >>> > > > > > > `@Public`) happened in the same release. >>> > > > > > > >>> > > > > > > However, those changes (`SourceReaderContext` and >>> > > > > `ResolvedCatalogTable`) >>> > > > > > > should have been clearly mentioned in the release notes with >>> an >>> > > > upgrade >>> > > > > > > guide. >>> > > > > > > >>> > > > > > > Best, Piotrek >>> > > > > > > >>> > > > > > > [1] >>> > > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://github.com/apache/flink/commit/7f3636f6b4f8bac415a7db85917ad849636bd730#diff-a247a24ccd1afc07c5d690a8a58b1f6584329925fdf0d7dc89361b90d621b7f2R31 >>> > > > > > > [2] https://issues.apache.org/jira/browse/FLINK-22357 >>> > > > > > > >>> > > > > > > wt., 28 wrz 2021 o 14:49 Leonard Xu <xbjt...@gmail.com> >>> > > napisał(a): >>> > > > > > > >>> > > > > > >>>> >>> > > > > > >>>> Not sure if this will happen in 1.15 already. We will >>> needed >>> > > > > automated >>> > > > > > >>>> compatibility tests and a well-defined list of stable API. >>> > > > > > >> >>> > > > > > >>> We are >>> > > > > > >>> trying to provide forward compatibility: applications using >>> > > > `@Public` >>> > > > > > >> APIs >>> > > > > > >>> compiled against Flink 1.12.x, should work fine in Flink >>> 1.13.x >>> > > > > > >> >>> > > > > > >> Unfortunately, I also meet forward compatibility issue, >>> when I >>> > do >>> > > > the >>> > > > > > >> release 1.14 check, I try to use mysql-cdc connector[1] >>> which >>> > > > compiled >>> > > > > > >> against 1.13.1in SQL Client, but it can not work in flink >>> 1.14.0 >>> > > > > > cluster, >>> > > > > > >> it failed due to the metric API compatibility broken. >>> > > > > > >> >>> > > > > > >> @Public >>> > > > > > >> public interface SourceReaderContext { >>> > > > > > >> >>> > > > > > >> MetricGroup metricGroup(); >>> > > > > > >> >>> > > > > > >> >>> > > > > > >> @Public >>> > > > > > >> public interface SourceReaderContext { >>> > > > > > >> >>> > > > > > >> SourceReaderMetricGroup metricGroup(); >>> > > > > > >> >>> > > > > > >> >>> > > > > > >> Shouldn't we mark it as @Deprecated and then delete it util >>> > 2.0.0 >>> > > > > > version >>> > > > > > >> for @Public API as the our community rule [2] described? At >>> > least >>> > > we >>> > > > > > should >>> > > > > > >> keep them across server minor versions >>> > (<major>.<minor>.<patch>). >>> > > > > > >> >>> > > > > > >> Although these changes can be tracked to voted FLIPs and >>> it’s >>> > not >>> > > > the >>> > > > > > >> fault of a few developers, it show us the fact that we >>> didn’t >>> > pay >>> > > > > enough >>> > > > > > >> attention to back compatibility/forward compatibility. >>> > > > > > >> >>> > > > > > >> Best, >>> > > > > > >> Leonard >>> > > > > > >> [1] >>> > > > > > >> >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> https://github.com/ververica/flink-cdc-connectors/tree/master/flink-connector-mysql-cdc >>> > > > > > >> [2] >>> > > > > > >> >>> > > > > >>> > > >>> https://cwiki.apache.org/confluence/display/FLINK/Stability+Annotations >>> > > > > > >> >>> > > > > > >> >>> > > > > > >>> > > > > > >>> > > > > >>> > > > >>> > > >>> > >>> >>