I have an open pull request [1] to merge in a standalone downgrader. The problem has been that between v3 and v4 there was a breaking change in the system local table where the columns "broadcast_port", "listen_port", and "rpc_port" were added. The code (in the current pull request) provides functionality to remove those columns when the older table is written. The code also allows for other transformations of the columns, though none are implemented.
In order for the downgrade to work the following steps are taken (not all are in this code, some are in a script I have for testing the process) 1. Execute the standalone downgrade on the desired table(s). 2. Delete the system_schema tables. 3. Delete the *-Filter.db, *-Index.db, *-TOC.txt, *-Digest.*, and *-Summary.db for the modified table(s) 4. Delete the original files (e.g. nb-*) 5. Start the earlier version of the software. I tested the current code by starting 4.1 to create the tables. Downgraded all the tables in the database to "ma" version, followed the above steps and started 3.11 According to the logs 3.11.14 started. The current pull request code is not as clean as I would like it, but it does work correctly. I would like some comments on the general approach for removing columns where they are filtered out of the row definition during writing. Your assistance is appreciated, Claude [1] https://github.com/apache/cassandra/pull/2045