If I summarize it correctly, that means that:

1. The versioning scheme would be <major.minor.patch connector
version>-<major.minor supported Flink version>, where there will never be a
patch release for a minor version if a newer minor version already exists.
E.g., 1.0.0-1.15; 1.0.1-1.15; 1.1.0-1.15; 1.2.0-1.15;

2. The branch naming scheme would be vmajor.minor-flink-major.flink-minor
E.g., v1.0.0-1.15; v1.0.1-1.15; v1.1.0-1.15; v1.2.0-1.15;

I would +1 that.

Best regards,

Martijn

On Tue, Sep 20, 2022 at 2:21 PM Chesnay Schepler <ches...@apache.org> wrote:

>  > After 1.16, only patches are accepted for 1.2.0-1.15.
>
> I feel like this is a misunderstanding that both you and Danny ran into.
>
> What I meant in the original proposal is that the last 2 _major_
> /connector /versions are supported, with the latest receiving additional
> features.
> (Provided that the previous major version still works against a
> currently supported Flink version!)
> There will never be patch releases for a minor version if a newer minor
> version exists.
>
> IOW, the minor/patch releases within a major version do not form a tree
> (like in Flink), but a line.
>
> 1.0.0 -> 1.0.1 -> 1.1.0 -> 1.2.0 -> ...
> NOT
> 1.0.0 -> 1.0.1 -> 1.0.2
>     |-----> 1.1.0 -> 1.1.1
>
> If we actually follow semantic versioning then it's just not necessary
> to publish a patch for a previous version.
>
> So if 2.x exists, then (the latest) 2.x gets features and patches, and
> the latest 1.x gets patches.
>
> I hope that clears things up.
>
> On 20/09/2022 14:00, Jing Ge wrote:
> > Hi,
> >
> > Thanks for starting this discussion. It is an interesting one and yeah,
> it
> > is a tough topic. It seems like a centralized release version schema
> > control for decentralized connector development ;-)
> >
> > In general, I like this idea, not because it is a good one but because
> > there might be no better one(That's life!). The solution gives users an
> > easy life with the price of extra effort on the developer's part. But it
> is
> > a chicken and egg situation, i.e. developer friendly vs. user friendly.
> If
> > it is hard for developers to move forward, it will also be difficult for
> > users to get a new release, even if the version schema is user friendly.
> >
> > I'd like to raise some questions/concerns to make sure we are on the same
> > page.
> >
> > @Chesnay
> >
> > c1) Imagine we have 2.0.0 for 1.15:
> >
> > - 2.0.0-1.14 (patches)
> > - 2.0.0-1.15 (feature and patches)
> > ===> new major release targeting 1.16 and we need to change code for new
> API
> > - 2.0.0-1.14 (no support)
> > - 2.0.0-1.15 (patches)
> >     - 2.0.1-1.15 (new patches)
> > - 2.1.0-1.16 (feature and patches)
> >
> > There is no more 2.1.0-1.15 because only the latest version is receiving
> > new features.
> >
> > b1) Even if in some special cases that we need to break the rule, we
> should
> > avoid confusing users:
> >
> > ===> new major release targeting 1.16 and we need to change code for new
> API
> > - 2.0.0-1.14 (no support)
> > - 2.0.0-1.15 (patches)
> > - 2.1.0-1.16 (feature and patches)
> > ===> now we want to break the rule to add features to the penultimate
> > version
> > - 2.0.0-1.14 (no support)
> > - 2.0.0-1.15 (patches)
> >      - 2.2.0-1.15 (patches, new features)  // 2.1.0-1.15 vs. 2.2.0-1.15,
> > have to choose 2.2.0-1.15 to avoid conflict
> > - 2.1.0-1.16 (feature and patches)
> >
> > we have two options: 2.1.0-1.15 vs. 2.2.0-1.15, both will confuse users:
> > - Using 2.1.0-1.15 will conflict with the existing 2.1.0-1.16. The
> > connector version of "2.1.0-1.16" is actually 2.1.0 which means it has
> the
> > same code as 2.1.0-1.15 but in this case, it contains upgraded code.
> > - Using 2.2.0-1.15 will skip 2.1.0-1.15. Actually, it needs to skip all
> > occupied minor-1.16 versions, heads-up release manager!
> >
> > c2) Allow me using your example:
> >
> > ===> new major release targeting 1.16
> > - 1.2.0-1.14 (no support; unsupported Flink version)
> > - 1.2.0-1.15 (patches; supported until either 3.0 of 1.17, whichever
> > happens first)
> > - 2.0.0-1.15 (feature and patches)
> > - 2.0.0-1.16 (feature and patches)
> >
> > I didn't understand the part of "2.0.0-1.15 (features and patches)".
> After
> > 1.16, only patches are accepted for 1.2.0-1.15.
> > It should be clearly defined how to bump up the connector's version
> number
> > for the new Flink version. If the connector major number would always
> bump
> > up, it would make less sense to use the Flink version as postfix. With
> the
> > same example, it should be:
> >
> > ===> new major release targeting 1.16
> > - 1.2.0-1.14 (no support; unsupported Flink version)
> > - 1.2.0-1.15 (patches; supported until either 3.0 of 1.17, whichever
> > happens first)
> >       - 1.2.1-1.15 (new patches)
> > - 1.3.0-1.16 (feature and patches)
> >      - 1.4.0-1.16 (feature and patches, new features)
> >      - 2.0.0-1.16 (feature and patches, major upgrade of connector
> itself)
> >
> > or
> >
> > - 1.2.0-1.14 (patches)
> > - 1.2.0-1.15 (feature and patches)
> >      - 2.0.0 -1.15 (feature and patches, major upgrade of connector
> itself)
> > ===> new major release targeting 1.16
> > - 1.2.0-1.14 (no support; unsupported Flink version)
> > - 2.0.0-1.15 (patches)
> >      - 2.0.1-1.15 (new patches)
> > - 2.1.0-1.16 (feature and patches)
> >     - 2.2.0-1.16 (feature and patches, new features)
> >
> > i.e. commonly, there should be no connector major version change when
> using
> > the Flink version postfix as the version schema. Special cases(rarely
> > happens) are obviously allowed.
> >
> > Best regards,
> > Jing
> >
> > On Tue, Sep 20, 2022 at 10:57 AM Martijn Visser<martijnvis...@apache.org
> >
> > wrote:
> >
> >> Hi all,
> >>
> >> This is a tough topic, I also had to write things down a couple of
> times.
> >> To summarize and add my thoughts:
> >>
> >> a) I think everyone is agreeing that "Only the last 2 versions of a
> >> connector are supported per supported Flink version, with only the
> latest
> >> version receiving new features". In the current situation, that means
> that
> >> Flink 1.14 and Flink 1.15 would be supported for connectors. This
> results
> >> in a maximum of 4 supported connector versions.
> >>
> >> b1) In an ideal world, I would have liked Flink's APIs that are used by
> >> connectors to be versioned (that's why there's now a Sink V1 and a Sink
> >> V2). However, we're not there yet.
> >>
> >> b2) With regards to the remark of using @Interal APIs, one thing that we
> >> agreed to in previous discussions is that connectors shouldn't need to
> rely
> >> on @Interal APIs so that the connector surface also stabilizes.
> >>
> >> b3) In the end, I think what matters the most is the user's perception
> on
> >> versioning. So the first thing to establish would be the versioning for
> >> connectors itself. So you would indeed have a <major.minor.patch>
> scheme.
> >> Next is the compatibility of that scheme with a version of Flink. I do
> like
> >> Chesnay's approach for using the Scala suffixes idea. So you would have
> >> <major.minor.patch connector>_<major.minor Flink version>. In the
> currently
> >> externalized Elasticsearch connector, we would end up with 3.0.0_1.14
> and
> >> 3.0.0_1.15 as first released versions. If a new Flink version would be
> >> released that doesn't require code changes to the connector, the
> released
> >> version would be 3.0.0_1.16. That means that there have been no
> connector
> >> code changes (no patches, no new features) when comparing this across
> >> different Flink versions.
> >>
> >> b4) Now using the example that Chesnay provided (yet slightly modified
> to
> >> match it with the Elasticsearch example I've used above), there exists
> an
> >> Elasticsearch connector 3.0.0_1.15. Now in Flink 1.16, there's a new API
> >> that we want to use, which is a test util. It would result in version
> >> 3.1.0_1.16 for the new Flink version. Like Chesnay said, for the sake of
> >> argument, at the same time we also had some pending changes for the 1.15
> >> connector (let's say exclusive to 1.15; some workaround for a bug or
> smth),
> >> so we would also end up with 3.1.0-1.15. I agree with Danny that we
> should
> >> avoid this situation: the perception of the user would be that there's
> no
> >> divergence between the 3.1.0 version, except the compatible Flink
> version.
> >>
> >> I really am wondering how often we will run in that situation. From what
> >> I've seen so far with connectors is that bug fixes always end up in both
> >> the release branch and the master branch. The only exceptions are test
> >> stabilities or documentation fixes, but if we only resolve these, they
> >> wouldn't need to be released. If such a special occasion would occur, I
> >> would be inclined to go for a hotfix approach, where you would end up
> with
> >> 3.0.0.1_1.15.
> >>
> >> c) Branch wise, I think we should end up with <major.minor.patch
> >> connector>_<major.minor Flink version>. So again the Elasticsearch
> example,
> >> at this moment there would be 3.0.0_1.14 and 3.0.0_1.15 branches.
> >>
> >> Best regards,
> >>
> >> Martijn
> >>
>

Reply via email to