I have checked with Ekaterina, we are ok with what she asked us to take a look at. Other than that, I do not remember I have touched / worked with any other mentioned parameter she elaborated on between 4.0 and 4.1 so I can not comment on that.
On Tue, 5 Apr 2022 at 23:24, Ekaterina Dimitrova <e.dimitr...@gmail.com> wrote: > > ATTENTION PLEASE Below email will be long but I believe you will agree it > deserves attention for good reasons. Thank you in advance for your time and > consideration! > > > Hi everyone, > > I am working on the last batch of config parameters to be transferred to the > new types after CASSANDRA-15234 landed. > > This led to a few questions and concerns and here I am to raise awareness and > one more time to confirm things for the community to ensure there is no > regression when 4.1 is out. > > As the main decisions were taken and implemented two years ago before even > 4.0 beta, I would like to ensure that everyone here is aware that in > CASSANDRA-15234 we have backward compatibility to transfer the old format > (only values, no opportunity to change unit) to the new format (value + unit) > but it falls back to the new types at the end. This is not a feature with a > flag to be disabled. We migrated the parameters to the new types in Config > class and in cassandra.yaml. Also, we explicitly say we don’t support > negative values (old and new yaml config) which was not the case before. We > never advertised the usage of negative values but we also did not prohibit > that which we do now as one more improvement in CASSANDRA-15234. I will add > an explicit note in NEWS.txt to be sure no one was expecting to keep on using > negative values with the old yaml if they were doing it for some unknown > reason, old/new - we prohibit on trunk negative values except special cases. > > As part of the documentation I mentioned the Converter class which serves to > do these conversions between old value and new value - load the old value to > the new Config types. There are special cases which I want to highlight in > case someone knows of any behavior not caught by our CI that might be changed > or broken because of those changes(better safe than sorry): > > The new types DataRateSpec, DurationSpec and DataRateSpec accept only > non-negative values (this will affect both old and new config). Thus as part > of the converters we have the following special cases: > > - MILLIS_DOUBLE_DURATION for commitlog_sync_group_window_in_ms or now already > commitlog_sync_group_window which covers that this was double and even if we > think this was a bug as it is casted later to int here[1], someone might have > been using double and NaN. Disallow less than 0 as we already said for all > types. With the new config types this parameter is stored as long. > > - MILLIS_CUSTOM_DURATION for permissions_update_interval, > roles_update_interval and credentials_update_interval. After CASSANDRA-17431 > those will be updated to - old value of “-1” being translated to null. The > setters will be doing that too. Anything below -1 is prohibited and > considered a bug (both with old and new config). > > - we are adding NEGATIVE_SECONDS_DURATION as part of C17431 to handle > validation_preview_purge_head_start. Anyone using the old yaml and value <0 > will have it translated into 0 seconds. New yaml and format prohibits values > less than 0 and the smallest unit for this parameter is seconds. > > - BYTES_CUSTOM_DATA_STORAGE translates “-1” to “null” and prohibits anything > less than -1 with the old yaml and less than 0 with the new one for > native_transport_max_concurrent_requests_in_bytes_per_ip and > native_transport_max_concurrent_requests_in_bytes after C17341. I had also > separate mail for these two as we have some concerns about them for all C* > versions. > > In C17431 I also decided to leave parameters phi_convict_threshold, > memtable_cleanup_threshold, block_for_peers_timeout_in_secs alone and not to > migrate them to the new Config types because of various reasons explained in > the ticket. Please let me know if you have any particular > suggestions/concerns/thoughts around those. > > DataRateSpec - it was requested to support mebibytes/s, kibibytes/s, bytes/s. > This made things complicated internally with two of the parameters introduced > in 4.0 which were in megabits/s and I had to keep the old behavior and them > being able to still support megabits/s with the old format. As the conversion > between megabits and mebibytes is not really a whole number, I had to store > the DataRateSpec in double and not long as in the other types in order to > ensure accurate precision, etc. We considered this being fine because the > RateLimiter uses double and we still allow only whole numbers to be provided > by the users. Please let me know if you see any problem. A quick unit test > where you can validate how those work is SetGetInterDCStreamThroughputTest. > Important to mention that once people move to the new format, they can’t > assign them anything less than 1MiB/s. > > Regarding DataRateSpec - the two new parameters > (entire_sstable_stream_throughput_outbound_megabits_per_sec and > entire_sstable_inter_dc_stream_throughput_outbound_megabits_per_sec) still > not being in release were changed to be in MiB/s. Checked with Francisoco in > Slack - that should be fine. > > I would also like to ask Stefan and Paulo to check if they do not agree with > anything in the latest version of DurationSpec as they have introduced the > initial version of Duration in the codebase which evolved into DurationSpec > in C15234. Please let me know if there is anything else aside from the tests > you introduced that I might be missing and it changes your intentions. > Already sent a msg in Slack in case they miss the email. > > > Also, it was discussed on the ticket but I wanted to add it again for > consideration - virtual tables currently show both the old names and format > and new names and format. There are only three parameters which change only > type but not names. Those will be listed only with the new format value. This > was not considered as enough reason to bump to 5.0 because of breaking change > but I wanted one more time everyone to be aware of that agreement. > > > In addition, I will add one more note to NEWS.txt for people to raise > awareness to check carefully their config on upgrade that there are no > breaking changes. We already mention the new option and the backward > compatibility but I think it won’t hurt to stress more on the part we > prohibit negative values considering it being a bug and have only a few > special cases around -1 that we convert. > > > Please check the matching patterns we use to accept config values in > DurationSpec, DataRateSpec and DataStorageSpec and let me know if you think > there was some special case missed or anything. > > > One more topic I want to mention is changes to public classes. There were > some name changes (not to JMX) and out of this work I’ve seen such changes > even in patch releases. I know we give a promise not to change only > interfaces but I still want to mention it here and to ensure we are aligned. > As I said, Config changes the types of our parameters. We use annotations and > the mentioned converters for backward compatibility of our yaml file. > > > New JMX methods are not added and the old ones still work by converting to > the base unit of the specific parameter. By base I mean the internally used > one. The agreement was that in the future virtual tables should handle the > new format when we add the update option for SettingsTable. > > > In order not to run into precision issues, we introduced the Smallest > possible unit for certain parameters of type Duration and DataStorage, that > can be changed if we decide to migrate any of those in time to the smallest > possible unit internally. I am also adding their Int equivalents now to > improve the former int parameters handling. > > We didn’t find any parameters with suffix _mb or _kb that internally didn’t > mean kibi- or mebi- but kilo- or mega-. So all default values are the same in > the new format. > > > For more details - please refer to the write up doc I shared before here - > https://cassandra.apache.org/doc/trunk/cassandra/new/configuration.html There > is important note and ticket around parameters overloading which turned to be > undocumented behavior in the project that people use. > > > Last but not least - I want to remind you that any new parameters are added > with the new types. Users will have to set them with their new format. So > whoever wants to use old yaml and wants to update default values of new > parameters will have to do this in the new format. > > > This email came rather long but I truly believe it is important and I want to > ask you if there were parameters you think they might have been affected, to > double check them and raise the flag if you are not sure or worried about > something done or not done. > > > [1] > https://github.com/apache/cassandra/blob/trunk/src/java/org/apache/cassandra/db/commitlog/GroupCommitLogService.java#L31 > > > > Ekaterina Dimitrova