c) I am torn here. I do not like the idea that the connector code could diverge for the same connector version, ie 2.1.0-1.15 and 2.1.0-1.16. If the Flink version change requires a change to the connector code, then this should result in a new connector version in my opinion. Going back to your example of API changes, this means we could end up supporting new features for multiple Flink versions with potentially different @Internal implementations. Where do we draw the line here? Hypothetically if the @Internal Flink apis change substantially, but do not impact the public connector interface, this could still end up with the same connector version. Example:
- 1.0.0-1.14 (uses @Internal connector API v1) - 1.0.0-1.15 (uses @Internal connector API v2) But on the flip side, this example is very good "let's say exclusive to 1.15; some workaround for a bug or smth", and I am not sure how the single branch per version approach would solve it. c1) We would likely need to do something like this: - 1.0.0-1.14 (patches) - 1.1.0-1.15 (contains some 1.15 bugfix) (feature and patches) c2) When 1.16 is released, we would need to remove the 1.15 bugfix, and therefore change the connector code: - 1.0.0-1.14 - 1.1.0-1.15 (contains some 1.15 bugfix) (patches) - 1.2.0-1.16 (features and patches) c3) But following this approach I can see a case where we end up with a version gap to support Flink (n-1) patches: - 1.0.0-1.14 - 1.1.0-1.15 (contains some 1.15 bugfix) (patches) - 1.2.0-1.16 - 1.3.0-1.16 - 1.4.0-1.16 (patches) - 1.5.0-1.16 (features and patches) I think we need some animations to help with these! d) Agree with the "Socially" point generally. Thanks, On Fri, Sep 16, 2022 at 1:30 PM Ryan Skraba <ryan.skr...@aiven.io> wrote: > I had to write down a diagram to fully understand the discussion :D > > If I recall correctly, during the externalization discussion, the "price > to pay" for the (many) advantages of taking connectors out of the main repo > was to maintain and manually consult a compatibility matrix per connector. > I'm not a fan of that approach, and your example of diverging code between > 2.1.0-1.15 and 2.1.0-1.16 is a good reason why. > > b) I think your proposal here is a viable alternative. > > c) In my experience, the extra effort of correctly cherry-picking to the > "right" branches adds a small burden to each commit and release event. > > The biggest challenge will be for committers for each connector to be > mindful of which versions are "still in the game" (but this is also true > for the compatibility matrix approach). Two major versions of connectors > multiplied by two versions of Flink is up to three cherry-picks per commit > -- plus one if the connector is currently being migrated and exists > simultaneously inside and outside the main repo, plus another for the > previous still-supported version of flink. It's going to take some > education effort! > > Weighing in on the shim approach: this might be something to leave up to > each connector -- I can see it being easier or more relevant for some > connectors than others to use dedicated branches versus dedicated modules > per flink version, and this might evolve with the connector. > > d) Socially, it's a nice convention to have the `main` branch point to the > "newest and best" variant for new users to check out, test, build and > create a PR for quick fixes without diving deep into the policies of the > project, even if it is qualified for just the newest version of Flink. > > Danny: I like the common connector parent approach too. Looks tidy! > > All my best, Ryan > > > > > On Fri, Sep 16, 2022 at 10:41 AM Chesnay Schepler <ches...@apache.org> > wrote: > >> a) 2 Flink versions would be the obvious answer. I don't think anything >> else makes much sense. >> >> I don't want us to increment versions just because the Flink versions >> change, so in your example I'd go with 2.0.0-1.16. >> >> c) >> >> Generally speaking I would love to avoid the Flink versions in branch >> names, because it simplifies the git branching (everything, really) and >> as you said makes main useful. >> >> However the devil is in the details. >> >> Imagine we have 2.0.0 for 1.15, and 1.16 is released with now a new API >> (maybe even just a test util) that we want to use. >> >> For the sake of arguments let's say we go with 2.1.0-1.16, >> and 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 also have 2.1.0-1.15. >> >> We can't have 1 module use 2 different Flink API versions to satisfy >> this. Build profiles wouldn't solve this. >> >> We could do something like adding Flink-version specific shims though, >> somewhat similar to how we support ES 6/7. >> >> >> On 15/09/2022 23:23, Danny Cranmer wrote: >> > Thanks for starting this discussion. I am working on the early stages of >> > the new DynamoDB connector and have been pondering the same thing. >> > >> > a) Makes sense. On the flip side, how many Flink versions will we >> > support? Right now we support 2 versions for Flink, so it makes sense to >> > follow this rule. >> > >> > For example if the latest connector version is 2.0.0, we would only >> publish >> > 2.0.0-1.15 and 2.0.0-1.14. >> > Then once we want to ship connector 2.1.0 if Flink 1.16 is out, we would >> > publish 2.1.0-1.16 and 2.1.0-1.15. >> > Which leaves the case when a new Flink version is released (1.16 for >> > example) and connector 2.0.0 is already published. We do not have any >> > connector changes so could consider adding 2.0.0-1.16 (resulting in >> > 2.0.0-1.16, 2.0.0-1.15 and 2.0.0-1.14 (no longer supported)) or >> requiring a >> > version bump to 2.1.0-1.16. I would prefer adding 2.0.0-1.16 if there >> are >> > no changes to the code, and this is possible. If a connector code never >> > changes, we would end up with 2.0.0-1.14, 2.0.0-1.15 ... 2.0.0-n.m >> > >> > b) I like this suggestion, even though the Flink dependencies are >> usually >> > "provided" and therefore the builds are identical. It gives the users a >> > clear indicator of what is supported, and allows us to target tests >> against >> > different Flink versions consistently. >> > >> > c) Instead of having a branch per Flink version can we have multiple >> build >> > profiles like the Scala variable? Having 1.0-1.15 and 1.0-1.16 branches >> > would likely be duplicate code and increase the maintenance burden >> (having >> > to merge PRs into multiple branches). If the connector code is not >> > compatible with both Flink versions we can bump the connector version at >> > this point. I would propose following the Flink branching strategy >> > "release-1.0" unless this will not work. >> > >> > d) If we remove the Flink qualifier from the branch as discussed above, >> > then main can be the next major version, like in Flink. >> > >> >>