On Tue, Jan 23, 2024, at 11:21, Jun Rao wrote: > Hi, Proven, > > Thanks for the KIP. > > I am not sure about the reordering approach proposed in the KIP. Let's say > in a release we have features X and Y, depending on MV IV1 and IV2, > respectively. At the release time, feature Y is ready, but X is not. I > guess the proposal is to move IV1 to a new MV IV3?
Hi Jun, In your example, if X is not ready, it should be moved into an unstable MV. Then if Y is ready, it can be moved into a stable MV and we can advance the last stable MV. > The issue is that IV2 > could have made changes on top of IV1. For example, IV2 could have evolved > the schema of the same inter broker request as IV1. In that case, what does > IV3 represent? We can't simply take the changes associated with IV1 since > it could have conflicts with IV2. If Y changed the same file as X, we can just edit the file so that Y's change come first. Nobody using a stable MV should be affected, since they will be generating records on an older (stable) version. > Even when there are no conflicts, I am not sure if the approach supports > the trunk deployment model. Let's say we move two unstable MV IV3 and IV4 > to IV7 and IV8. If someone deployed code corresponding to IV4 and later > upgraded the code to IV7, he/she (1) wouldn't be able to set IV4 in the > upgrade code since it no longer exists and (2) would be surprised that the > request protocol that worked under IV4 doesn't work now. > Upgrades are not supported if you are running an unstable MV. It's intended only for testing. Colin > > Thanks, > > Jun > > On Fri, Jan 19, 2024 at 2:13 PM Artem Livshits > <alivsh...@confluent.io.invalid> wrote: > >> Hi Colin, >> >> > I think feature flags are somewhat orthogonal to the stable / unstable >> discussion >> >> I think feature flags can be used as an alternative to achieve similar >> results as stable / unstable functionality. As well as long-lived feature >> branches. In my experience, I've seen feature flags to be more successful >> than feature branches for changes of existing functionality. I also think >> that stable / unstable MV would work better than feature branches. I just >> wanted to mention it for completeness, not sure if we should start a full >> fledged discussion on these topics. >> >> > I'm struggling a bit with your phrasing. Are you suggesting that unstable >> MVs would not be able to be in trunk? >> >> Unstable MV should be in trunk. The wording is related to when we can >> promote "unstable" to "stable". >> >> -Artem >> >> >> On Mon, Jan 15, 2024 at 10:03 PM Colin McCabe <cmcc...@apache.org> wrote: >> >> > On Fri, Jan 12, 2024, at 11:32, Artem Livshits wrote: >> > > I think using feature flags (whether we support a framework and tooling >> > for >> > > feature flags or just an ad-hoc XyzEnabled flag) can be an alternative >> to >> > > this KIP. I think the value of this KIP is that it's trying to >> propose a >> > > systemic approach for gating functionality that may take multiple >> > releases >> > > to develop. A problem with ad-hoc feature flags is that it's useful >> > during >> > > feature development, so that people who are working on this feature (or >> > are >> > > interested in beta-testing the feature) can get early access (without >> any >> > > guarantees on compatibility or even correctness); but then the feature >> > > flags often stick forever after the feature development is done (and as >> > > time moves one, the new code is written in such a way that it's not >> > > possible to turn the feature off any more cleanly). >> > > >> > >> > Hi Artem, >> > >> > I think feature flags are somewhat orthogonal to the stable / unstable >> > discussion. Even if every new feature was a feature flag, you probably >> > still wouldn't want to stabilize the features immediately, to avoid >> > maintaining a lot of alpha stuff forever. >> > >> > (I also think that feature flags should be used sparingly, if at all, >> > because of the way that they exponentially increase the test matrix. But >> > that's a tangent, I think, given the first point...) >> > >> > > >> > > I'd also clarify how I think about "stable". Ismael made a comment " >> > > something is stable in the "this is battle-tested" sense.". I don't >> > think >> > > it has to be "battle-tested", it just has to meet the bar of being in >> the >> > > trunk. Again, thinking of a small single-commit feature -- to commit >> to >> > > trunk, the feature doesn't have to be "battle-tested", but it should be >> > > complete (and not just a bunch of TODOs), with tests written and some >> > level >> > > of dev-testing done, so that once the release is cut, we can find and >> fix >> > > bugs and make it release-quality (as opposed to reverting the whole >> > > thing). We can apply the same "stability" bar for features to be in >> the >> > > stable MV -- fully complete, tests written and some level of dev >> testing >> > > done. >> > > >> > >> > I'm struggling a bit with your phrasing. Are you suggesting that unstable >> > MVs would not be able to be in trunk? I think we do want them to be able >> to >> > go into trunk. If they have to go into a branch, then there is actually >> no >> > need for any of this. >> > >> > Doing big features in long-lived branches is one genuine alternative to >> > unstable MVs, I think. But it's not an alternative that works well with >> our >> > current tooling for continuous integration, deployment, building, etc. I >> > think it would also impact developer productivity somewhat negatively. >> > >> > best, >> > Colin >> > >> > >> > > >> > > -Artem >> > > >> > > On Fri, Jan 12, 2024 at 10:12 AM Justine Olshan >> > > <jols...@confluent.io.invalid> wrote: >> > > >> > >> Hi Ismael, >> > >> >> > >> I debated including something about feature flags in my last comment, >> > but >> > >> maybe I should have. >> > >> What you said makes sense. >> > >> >> > >> Justine >> > >> >> > >> On Fri, Jan 12, 2024 at 9:31 AM Ismael Juma <m...@ismaeljuma.com> >> wrote: >> > >> >> > >> > Justine, >> > >> > >> > >> > For features that are not production-ready, they should have an >> > >> additional >> > >> > configuration (not the metadata version) that enables/disables it. >> > The MV >> > >> > specific features we ship are something we have to support and make >> > sure >> > >> we >> > >> > don't break going forward. >> > >> > >> > >> > Ismael >> > >> > >> > >> > On Fri, Jan 12, 2024 at 9:26 AM Justine Olshan >> > >> > <jols...@confluent.io.invalid> >> > >> > wrote: >> > >> > >> > >> > > Hi Ismael, >> > >> > > >> > >> > > I think the concern I have about a MV for a feature that is not >> > >> > production >> > >> > > ready is that it blocks any development/features with higher MV >> > >> versions >> > >> > > that could be production ready. >> > >> > > >> > >> > > I do see your point though. Previously MV/IBP was about pure >> broker >> > >> > > compatibility and not about the confidence in the feature it is >> > >> gating. I >> > >> > > do wonder though if it could be useful to have that sort of >> gating. >> > >> > > I also wonder if an internal config could be useful so that the >> > average >> > >> > > user doesn't have to worry about the complexities of unstable >> > metadata >> > >> > > versions (and their risks). >> > >> > > >> > >> > > I am ok with options 2 and 2 as well by the way. >> > >> > > >> > >> > > Justine >> > >> > > >> > >> > > On Fri, Jan 12, 2024 at 7:36 AM Ismael Juma <m...@ismaeljuma.com> >> > wrote: >> > >> > > >> > >> > > > Hi, >> > >> > > > >> > >> > > > Thanks for the KIP. >> > >> > > > >> > >> > > > Reading the discussion, I think a lot of the confusion is due to >> > the >> > >> > > > "unstable" naming. People are then trying to figure out when we >> > think >> > >> > > > something is stable in the "this is battle-tested" sense. But >> this >> > >> flag >> > >> > > > should not be about that. We can have an MV for a feature that >> is >> > not >> > >> > yet >> > >> > > > production-ready (and we did that when KRaft itself was not >> > >> production >> > >> > > > ready). I think this flag is about metadata versions that are >> > >> basically >> > >> > > > unsupported - if you use it, you get to keep the pieces. They >> > exist >> > >> > > solely >> > >> > > > to make the lives of Apache Kafka developers easier. I would >> even >> > >> > suggest >> > >> > > > that the config we introduce be of the internal variety, ie it >> > won't >> > >> > show >> > >> > > > in the generated documentation and there won't be any >> > compatibility >> > >> > > > guarantee. >> > >> > > > >> > >> > > > Thoughts? >> > >> > > > >> > >> > > > Ismael >> > >> > > > >> > >> > > > On Fri, Jan 5, 2024 at 7:33 AM Proven Provenzano >> > >> > > > <pprovenz...@confluent.io.invalid> wrote: >> > >> > > > >> > >> > > > > Hey folks, >> > >> > > > > >> > >> > > > > I am starting a discussion thread for managing unstable >> metadata >> > >> > > versions >> > >> > > > > in Apache Kafka. >> > >> > > > > >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > >> >> > >> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1014%3A+Managing+Unstable+Metadata+Versions+in+Apache+Kafka >> > >> > > > > >> > >> > > > > This KIP is actually already implemented in 3.7 with PR >> > >> > > > > https://github.com/apache/kafka/pull/14860. >> > >> > > > > I have created this KIP to explain the motivation and how >> > managing >> > >> > > > Metadata >> > >> > > > > Versions is expected to work. >> > >> > > > > Comments are greatly appreciated as this process can always be >> > >> > > improved. >> > >> > > > > >> > >> > > > > -- >> > >> > > > > --Proven >> > >> > > > > >> > >> > > > >> > >> > > >> > >> > >> > >> >> > >>