Marcus Eriksson created CASSANDRA-17042:
-------------------------------------------

             Summary: Avoid sstable corruption when upgrading from 4.0-rc1 to 
4.0.0
                 Key: CASSANDRA-17042
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-17042
             Project: Cassandra
          Issue Type: Bug
          Components: Consistency/Streaming, Local/SSTable
            Reporter: Marcus Eriksson
            Assignee: Marcus Eriksson


4.0-rc2 introduced a new sstable version ({{-nb-}}), adding a field in 
{{StatsMetadata}}. When zero copy streaming a file from 4.0-rc2+ to 4.0-rc1, 
the rc1 node will write it as an {{-nb-}} file, mutate the metadata to clear 
repairedAt/level information from StatsMetadata and rewrite the file, keeping 
the same file name. Problem is that since rc1 doesn't know about the new field 
in StatsMetadata, it will write the file without the new StatsMetadata field, 
but with an {{-nb-}} filename. Then, when upgrading this node to rc2+ we will 
try to read it as a {{-nb-}} file, but will get {{EOFException}} since it 
doesn't contain the new field.

We should make sure that we never do zero-copy streaming to nodes that don't 
know about the file version.

The corrupt sstables can be fixed by simply renaming all components of it to 
{{-na-}} from {{-nb-}}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org
For additional commands, e-mail: commits-h...@cassandra.apache.org

Reply via email to