If you look at ElasticSearch [1] as an example there are different variants of the connector depending on the "connected" system: - flink-connector-elasticsearch6 - flink-connector-elasticsearch7
Looks like Hive and HBase follow a similar pattern in the main Flink repo/ [1] https://github.com/apache/flink-connector-elasticsearch On Thu, Sep 29, 2022 at 3:17 PM Péter Váry <peter.vary.apa...@gmail.com> wrote: > Hi Team, > > Just joining the conversation for the first time, so pardon me if I repeat > already answered questions. > > It might be already discussed, but I think the version for the "connected" > system could be important as well. > > There might be some API changes between Iceberg 0.14.2, and 1.0.0, which > would require as to rewrite part of the code for the Flink-Iceberg > connector. > It would be important for the users: > - Which Flink version(s) are this connector working with? > - Which Iceberg version(s) are this connector working with? > - Which code version we have for this connector? > > Does this make sense? What is the community's experience with the connected > systems? Are they stable enough for omitting their version number from the > naming of the connectors? Would this worth the proliferation of the > versions? > > Thanks, > Peter > > Chesnay Schepler <ches...@apache.org> ezt írta (időpont: 2022. szept. 29., > Cs, 14:11): > > > 2) No; the branch names would not have a Flink version in them; v1.0.0, > > v1.0.1 etc. > > > > On 29/09/2022 14:03, Martijn Visser wrote: > > > 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 > > >>>> > > > > >