Hi Colin, Thanks for bringing up these points. I believe Jose suggested failing the command if some features upgrade on the downgrade call and vice versa. This could address some of the concerns you bring up here. I agree we should not have an rpc to do both.
As for setting metadata only, we do have the option of using the --feature flag to set only metadata version, but that requires writing it by short rather than by metadata string. Not sure if that's what folks had in mind. Including a command to list the features for a given version is pretty useful. I can add that to the kip unless folks have concerns. Justine On Thu, Mar 7, 2024 at 1:28 PM Colin McCabe <cmcc...@apache.org> wrote: > Hi Jun and Justine, > > My understanding is that in the KIP, --metadata does not do the same thing > as --release-version. The --metadata flag sets the metadata version only, > and does not change any other feature. So neither flag replaces the other. > > In general, I'm not sure that this functionality belongs in the features > command. It will have a lot of confusing interactions with the other flags. > If we do want it in the features command it should be its own subcommand, > not upgrade or downgrade. Because setting all the features could involve > upgrading some, but downgrading others. So really what we're doing is > neither an upgrade nor a downgrade, but a sync to a release version. > > This also raises some questions about the RPC. If we want to use the > existing features RPC, we cannot perform a sync that does both upgrades and > downgrades in a single RPC. So we'd either need to be non-atomic, or just > refuse to do it in that case. Or add a new server-side RPC for this. > > Perhaps it would be more useful to just have a command that tells people > what the levels of each feature would be for a given release version? Then > the user could choose which ones to upgrade / downgrade (if any) and do > them carefully one at a time. The shotgun approach, where you upgrade > everything at once, actually isn't what I think most users want to do in > production. > > best, > Colin > > > On Fri, Mar 1, 2024, at 13:25, Jun Rao wrote: > > Hi, Justine, > > > > Thanks for the reply. > > > > 11. Yes, we can still have the option to set individual features. I was > > suggesting that if one uses the tool without either --release-version > > or --features, it will just use the latest version of every feature that > it > > knows. This is what's proposed in the original KIP-584. > > > > 12. If we can't deprecate --metadata METADATA, it would be useful to > > describe the reason. > > > > Jun > > > > On Thu, Feb 29, 2024 at 3:39 PM Justine Olshan > <jols...@confluent.io.invalid> > > wrote: > > > >> Hey folks, > >> > >> Thanks for the discussion. Let me try to cover everyone's comments. > >> > >> Artem -- > >> I can add the examples you mentioned. As for naming, right now the > feature > >> is called "transaction version" or "TV". Are you suggesting it should be > >> called "transaction protocol version" or "TPV"? I don't mind that, but > just > >> wanted to clarify if we want to include protocol or if simply > "transaction > >> version" is enough. > >> > >> Jun -- > >> > >> 10. *With **more features, would each of those be controlled by a > separate > >> feature or* > >> > >> *multiple features. For example, is the new transaction record format* > >> > >> *controlled only by MV with TV having a dependency on MV or is it > >> controlled* > >> > >> *by both MV and TV.* > >> > >> > >> I think this will need to be decided on a case by case basis. There > should > >> be a mechanism to set dependencies among features. > >> For transaction version specifically, I have no metadata version > >> dependencies besides requiring 3.3 to write the feature records and use > the > >> feature tools. I would suspect all new features would have this > >> requirement. > >> > >> > >> 11. *Basically, if **--release-version is not used, the command will > just > >> use the latest* > >> > >> *production version of every feature. Should we apply that logic to > both* > >> > >> *tools?* > >> > >> > >> How would this work with the upgrade tool? I think we want a way to set > a > >> new feature version for one feature and not touch any of the others. > >> > >> > >> *12. Should we remove --metadata METADATA from kafka-features? It does > the* > >> > >> *same thing as --release-version.* > >> > >> > >> When I previously discussed with Colin McCabe offline about this tool, > he > >> was strongly against deprecation or changing flags. I personally think > it > >> could good > >> > >> to unify and not support a ton of flags, but I would want to make sure > he > >> is aligned. > >> > >> > >> *13. KIP-853 also extends the tools to support a new feature > >> kraft.version.* > >> > >> *It would be useful to have alignment between that KIP and this one.* > >> > >> > >> Sounds good. Looks like Jose is in on the discussion so we can continue > >> here. :) > >> > >> > >> > >> Jose -- > >> > >> > >> *1. KIP-853 uses --feature for kafka-storage instead of --features.* > >> > >> *This is consistent with the use of --feature in the "kafka-feature.sh* > >> > >> *upgrade" command.* > >> > >> > >> I wanted to include multiple features in one command, so it seems like > >> features is a better name. I discuss more below about why I think we > should > >> allow setting multiple features at once. > >> > >> > >> *2. I find it a bit inconsistent that --feature and --release-version* > >> > >> *are mutually exclusive in the kafka-feature CLI but not in the* > >> > >> *kafka-storage CLI. What is the reason for this decision?* > >> > >> > >> For the storage tool, we are setting all the features for the cluster. > By > >> default, all are set. For the upgrade tool, the default is to set one > >> feature. In the storage tool, it is natural for the --release-version to > >> set the remaining features that --features didn't cover since otherwise > we > >> would need to set them all > >> > >> If we use the flag. In the feature upgrade case, it is less necessary > for > >> all the features to be set at once and the tool can be run multiple > times. > >> I'm not opposed to allowing both flags, but it is less necessary in my > >> opinion. > >> > >> > >> *3. KIP-853 deprecates --metadata in the kafka-features and makes it an* > >> > >> *alias for --release-version. In KIP-1022, what happens if the user* > >> > >> *specified both --metadata and --feature?* > >> > >> > >> See my note above (Jun's comment 12) about deprecating old commands. I > >> would think as the KIP stands now, we would not accept both commands. > >> > >> > >> *4. I would suggest keeping this* > >> > >> *consistent with kafka-features. It would avoid having to implement one* > >> > >> *more parser in Kafka.* > >> > >> > >> I sort of already implemented it as such, so I don't think it is too > >> tricky. I'm not sure of an alternative. Kafka features currently only > >> supports one feature at a time. > >> I would like to support more than one for the storage tool. Do you have > >> another suggestion for multiple features in the storage tool? > >> > >> > >> *5. As currently described, trial and error seem to be the* > >> > >> *only mechanism. Should the Kafka documentation describe these* > >> > >> *dependencies? Is that good enough?* > >> > >> > >> The plan so far is documentation. The idea is that this is an advanced > >> feature, so I think it is reasonable to ask folks use documentation > >> > >> > >> *6. Did you mean that 3.8-IV4 would map to TV2? If* > >> > >> *not, 3.8-IV3 would map to two different TV values.* > >> > >> > >> It was a typo. Each MV maps to a single other feature version. > >> > >> > >> *7. For --release-version in "kafka-features upgrade", does* > >> > >> *--release-version mean that all of the feature versions will either* > >> > >> *upgrade or stay the same? Meaning that downgrades will be rejected by* > >> > >> *the Kafka controller. How about when --release-version is used with* > >> > >> *"kafka-features downgrade"?* > >> > >> > >> The idea I had was that the cluster will check if all the versions are > >> supported. If any version is not supported the tool will throw an > error. We > >> can also issue a warning if the given command (if supported by the > cluster) > >> will downgrade a feature. One option is also to require a yes/no prompt > or > >> flag to allow downgrades. The downgrade tool would allow the same. > >> Alternatively we could just fail the command if a feature is downgraded > on > >> upgrade command or vice versa. I don't have a strong preference. > >> > >> > >> Thanks again for the discussion, > >> Justine > >> > >> On Thu, Feb 29, 2024 at 10:44 AM José Armando García Sancio > >> <jsan...@confluent.io.invalid> wrote: > >> > >> > Hi Justine and Jun, > >> > > >> > Thanks for the KIP Justine. See my comments below. > >> > > >> > On Wed, Feb 28, 2024 at 3:09 PM Jun Rao <j...@confluent.io.invalid> > >> wrote: > >> > > 13. KIP-853 also extends the tools to support a new feature > >> > kraft.version. > >> > > It would be useful to have alignment between that KIP and this one. > >> > > >> > I agree. I took a look at this KIP and these are the differences that > >> > I can spot. > >> > > >> > 1. KIP-853 uses --feature for kafka-storage instead of --features. > >> > This is consistent with the use of --feature in the "kafka-feature.sh > >> > upgrade" command. > >> > > >> > 2. I find it a bit inconsistent that --feature and --release-version > >> > are mutually exclusive in the kafka-feature CLI but not in the > >> > kafka-storage CLI. What is the reason for this decision? > >> > > >> > 3. KIP-853 deprecates --metadata in the kafka-features and makes it an > >> > alias for --release-version. In KIP-1022, what happens if the user > >> > specified both --metadata and --feature? > >> > > >> > 4. There is an example: "kafka-storage format --features > >> > > metadata.version=16,transaction.version=2,group.coordinator.version=1". > >> > This is different from the --feature flag in kafka-features which is > >> > an append flag. Meaning that multiple features are specified as > >> > "--feature metadata.version=16 --feature transaction.version=2 > >> > --feature group.coordinator.version=1". I would suggest keeping this > >> > consistent with kafka-features. It would avoid having to implement one > >> > more parser in Kafka. > >> > > >> > 5. In the section "A Note on Feature Interdependence", you mention "an > >> > error should be thrown if trying to format with X version 13 and Y > >> > version 12". How would the user discover (or describe) these > >> > dependencies? As currently described, trial and error seem to be the > >> > only mechanism. Should the Kafka documentation describe these > >> > dependencies? Is that good enough? > >> > > >> > 6. In "3.8-IV2 that could map to TV1, 3.8-IV3 could also be TV1, and > >> > 3.8-IV3 could be TV2" did you mean that 3.8-IV4 would map to TV2? If > >> > not, 3.8-IV3 would map to two different TV values. > >> > > >> > 7. For --release-version in "kafka-features upgrade", does > >> > --release-version mean that all of the feature versions will either > >> > upgrade or stay the same? Meaning that downgrades will be rejected by > >> > the Kafka controller. How about when --release-version is used with > >> > "kafka-features downgrade"? > >> > > >> > -José > >> > > >> >