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

Reply via email to