= sstableupgrade

Upgrade the sstables in the given table (or snapshot) to the current
version of Cassandra. This process is typically done after a Cassandra
version upgrade. This operation will rewrite the sstables in the
specified table to match the currently installed version of Cassandra.
The sstableupgrade command can also be used to downgrade sstables to a
previous version.

The snapshot option will only upgrade the specified snapshot. Upgrading
snapshots is required before attempting to restore a snapshot taken in a
major version older than the major version Cassandra is currently
running. This will replace the files in the given snapshot as well as
break any hard links to live sstables.

Cassandra must be stopped before this tool is executed, or unexpected
results will occur. Note: the script does not verify that Cassandra is
stopped.

== Usage

sstableupgrade <options> <keyspace> <table> [snapshot_name]

[cols=",",]
|===
|--debug |display stack traces
|-h,--help |display this help message
|-k,--keep-source |do not delete the source sstables
|===

== Rewrite tables to the current Cassandra version

Start with a set of sstables in one version of Cassandra:

....
ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/
...
-rw-r--r--   1 user  wheel      348 Aug 22 13:45 keyspace1-standard1-ka-1-CRC.db
-rw-r--r--   1 user  wheel  5620000 Aug 22 13:45 keyspace1-standard1-ka-1-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 13:45 keyspace1-standard1-ka-1-Digest.sha1
-rw-r--r--   1 user  wheel    25016 Aug 22 13:45 keyspace1-standard1-ka-1-Filter.db
-rw-r--r--   1 user  wheel   480000 Aug 22 13:45 keyspace1-standard1-ka-1-Index.db
-rw-r--r--   1 user  wheel     9895 Aug 22 13:45 keyspace1-standard1-ka-1-Statistics.db
-rw-r--r--   1 user  wheel     3562 Aug 22 13:45 keyspace1-standard1-ka-1-Summary.db
-rw-r--r--   1 user  wheel       79 Aug 22 13:45 keyspace1-standard1-ka-1-TOC.txt
....

After upgrading the Cassandra version, upgrade the sstables:

....
sstableupgrade keyspace1 standard1
Found 1 sstables that need upgrading.
Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db')
Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/keyspace1-standard1-ka-1-Data.db') complete.

ls -al /tmp/cassandra/data/keyspace1/standard1-9695b790a63211e8a6fb091830ac5256/
...
drwxr-xr-x   2 user  wheel       64 Aug 22 13:48 backups
-rw-r--r--   1 user  wheel      292 Aug 22 13:48 mc-2-big-CRC.db
-rw-r--r--   1 user  wheel  4599475 Aug 22 13:48 mc-2-big-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 13:48 mc-2-big-Digest.crc32
-rw-r--r--   1 user  wheel    25256 Aug 22 13:48 mc-2-big-Filter.db
-rw-r--r--   1 user  wheel   330807 Aug 22 13:48 mc-2-big-Index.db
-rw-r--r--   1 user  wheel    10312 Aug 22 13:48 mc-2-big-Statistics.db
-rw-r--r--   1 user  wheel     3506 Aug 22 13:48 mc-2-big-Summary.db
-rw-r--r--   1 user  wheel       80 Aug 22 13:48 mc-2-big-TOC.txt
....

== Rewrite tables to the current Cassandra version, and keep tables in old version

Again, starting with a set of sstables in one version:

....
ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/
...
-rw-r--r--   1 user  wheel      348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db
-rw-r--r--   1 user  wheel  5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1
-rw-r--r--   1 user  wheel    25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db
-rw-r--r--   1 user  wheel   480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db
-rw-r--r--   1 user  wheel     9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db
-rw-r--r--   1 user  wheel     3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db
-rw-r--r--   1 user  wheel       79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt
....

After upgrading the Cassandra version, upgrade the sstables, retaining
the original sstables:

....
sstableupgrade keyspace1 standard1 -k
Found 1 sstables that need upgrading.
Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db')
Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/keyspace1-standard1-ka-1-Data.db') complete.

ls -al /tmp/cassandra/data/keyspace1/standard1-db532690a63411e8b4ae091830ac5256/
...
drwxr-xr-x   2 user  wheel       64 Aug 22 14:00 backups
-rw-r--r--@  1 user  wheel      348 Aug 22 13:58 keyspace1-standard1-ka-1-CRC.db
-rw-r--r--@  1 user  wheel  5620000 Aug 22 13:58 keyspace1-standard1-ka-1-Data.db
-rw-r--r--@  1 user  wheel       10 Aug 22 13:58 keyspace1-standard1-ka-1-Digest.sha1
-rw-r--r--@  1 user  wheel    25016 Aug 22 13:58 keyspace1-standard1-ka-1-Filter.db
-rw-r--r--@  1 user  wheel   480000 Aug 22 13:58 keyspace1-standard1-ka-1-Index.db
-rw-r--r--@  1 user  wheel     9895 Aug 22 13:58 keyspace1-standard1-ka-1-Statistics.db
-rw-r--r--@  1 user  wheel     3562 Aug 22 13:58 keyspace1-standard1-ka-1-Summary.db
-rw-r--r--@  1 user  wheel       79 Aug 22 13:58 keyspace1-standard1-ka-1-TOC.txt
-rw-r--r--   1 user  wheel      292 Aug 22 14:01 mc-2-big-CRC.db
-rw-r--r--   1 user  wheel  4596370 Aug 22 14:01 mc-2-big-Data.db
-rw-r--r--   1 user  wheel       10 Aug 22 14:01 mc-2-big-Digest.crc32
-rw-r--r--   1 user  wheel    25256 Aug 22 14:01 mc-2-big-Filter.db
-rw-r--r--   1 user  wheel   330801 Aug 22 14:01 mc-2-big-Index.db
-rw-r--r--   1 user  wheel    10312 Aug 22 14:01 mc-2-big-Statistics.db
-rw-r--r--   1 user  wheel     3506 Aug 22 14:01 mc-2-big-Summary.db
-rw-r--r--   1 user  wheel       80 Aug 22 14:01 mc-2-big-TOC.txt
....

== Rewrite a snapshot to the current Cassandra version

Find the snapshot name:

....
nodetool listsnapshots

Snapshot Details:
Snapshot name       Keyspace name                Column family name           True size          Size on disk
...
1534962986979       keyspace1                    standard1                    5.85 MB            5.85 MB
....

Then rewrite the snapshot:

....
sstableupgrade keyspace1 standard1 1534962986979
Found 1 sstables that need upgrading.
Upgrading BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db')
Upgrade of BigTableReader(path='/var/lib/cassandra/data/keyspace1/standard1-5850e9f0a63711e8a5c5091830ac5256/snapshots/1534962986979/keyspace1-standard1-ka-1-Data.db') complete.
....
