mirror of
https://github.com/scylladb/scylladb.git
synced 2026-05-30 03:30:49 +00:00
The feature check in `enable_features_on_startup` loads the list of features that were enabled previously, goes over every one of them and checks whether each feature is considered supported and whether there is a corresponding `gms::feature` object for it (i.e. the feature is "registered"). The second part of the check is unnecessary and wrong. A feature can be marked as supported but its `gms::feature` object not be present anymore: after a feature is supported for long enough (i.e. we only support upgrades from versions that support the feature), we can consider such a feature to be deprecated. When a feature is deprecated, its `gms::feature` object is removed and the feature is always considered enabled which allows to remove some legacy code. We still consider this feature to be supported and advertise it in gossip, for the sake of the old nodes which, even though they always support the feature, they still check whether other nodes support it. The problem with the check as it is now is that it disallows moving features to the disabled list. If one tries to do it, they will find out that upgrading the node to the new version does not work: `enable_features_on_startup` will load the feature, notice that it is not "registered" (there is no `gms::feature` object for it) and fail to boot. This commit fixes the problem by modifying `enable_features_on_startup` not to look at the registered features list at all. In addition to this, some other small cleanups are performed: - "LARGE_COLLECTION_DETECTION" is removed from the deprecated features list. For some reason, it was put there when the feature was being introduced. It does not break anything because there is a `gms::feature` object for it, but it's slightly confusing and therefore is removed. - The comment in `supported_feature_set` that invites developers to add features there as they are introduced is removed. It is no longer necessary to do so because registered features are put there automatically. Deprecated features should still be put there, as indicated as another comment. Fortunately, this issue does not break any upgrades as of now - since we added enabled cluster feature persisting, no features were deprecated, and we only add registered features to the persisted feature list. An error injection and a regression test is added. Closes #14701 * github.com:scylladb/scylladb: topology_custom: add deprecated features test feature_service: add error injection for deprecated cluster feature feature_service: move error injection check to helper function feature_service: handle deprecated features correctly in feature check