Hi everyone, There has been a discussion lately about changes to the sstable format in the context of being able to abort a cluster upgrade, and the fact that changes to sstables can prevent downgraded nodes from reading any data written during their temporary operation with the new version.
Most of the discussion is in CASSANDRA-18134 <https://issues.apache.org/jira/browse/CASSANDRA-18134>, and is spreading into CASSANDRA-14277 <https://issues.apache.org/jira/browse/CASSANDRA-14227> and CASSANDRA-17698 <https://issues.apache.org/jira/browse/CASSANDRA-17698>, none of which is a good place to discuss the topic seriously. Downgradability is a worthy goal and is listed in the current roadmap. I would like to open a discussion here on how it would be achieved. My understanding of what has been suggested so far translates to: - avoid changes to sstable formats; - if there are changes, implement them in a way that is backwards-compatible, e.g. by duplicating data, so that a new version is presented in a component or portion of a component that legacy nodes will not try to read; - if the latter is not feasible, make sure the changes are only applied if a feature flag has been enabled. To me this approach introduces several risks: - it bloats file and parsing complexity; - it discourages improvement (e.g. CASSANDRA-17698 is no longer a LHF ticket once this requirement is in place); - it needs care to avoid risky solutions to address technical issues with the format versioning (e.g. staying on n-versions for 5.0 and needing a bump for a 4.1 bugfix might require porting over support for new features); - it requires separate and uncoordinated solutions to the problem and switching mechanisms for each individual change. An alternative solution is to implement/complete CASSANDRA-8110 <https://issues.apache.org/jira/browse/CASSANDRA-8110>, which provides a method of writing sstables for a target version. During upgrades, a node could be set to produce sstables corresponding to the older version, and there is a very straightforward way to implement modifications to formats like the tickets above to conform to its requirements. What do people think should be the way forward? Regards, Branimir