[ 
https://issues.apache.org/jira/browse/CASSANDRA-11875?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15306004#comment-15306004
 ] 

Paulo Motta commented on CASSANDRA-11875:
-----------------------------------------

Thanks for the update! See follow-up comments below:

* There is still some common code between {{StandaloneConverter}} and 
{{StandaloneUpgrader}} main methods, most of it can be extracted to common 
methods use by both.
* The supported version check will probably be used in other places, so we 
should probably move it to {{BigVersion}}. There are already {{isCompatible}} 
and  {{isCompatibleForStream}} methods, so we can maybe add a 
{{isCompatibeForWriting}}. It would be nice if you could add a unit test that 
checks that trying to converting to an unsupported version should fail.

bq. Also added a new Test suit SSTableConversionTest, but it has some problem 
when performing conversion.

It seems this is due to re-loading the schema on 
{{Schema.instance.loadFromDisk(false)}} on {{StandaloneConverter}}. Since we 
want to focus testing the conversion itself, we will probably have more 
flexibility testing the internal class {{SSTableConverter}}, so we don't have 
to add special options for testing on {{StandaloneConverter}} and can also play 
around with SSTableReaders directly. 

Instead of basing our tests on {{SSTableRewriterTest}} as initially discussed, 
it's probably more convenient to base it on {{CQLTester}} since we will be 
doing data conversions and testing this at a higher level with CQL is the only 
way to ensure converted data is being interpreted correctly. The tests should 
have more or less the following structure:

* Insert Data with CQL
* Flush to disk
* Read and verify data in current version with CQL
* Keep reference to original SSTableReaders and cleanup ColumnFamilyStore 
(clearUnsafe)
* Perform conversion on original SSTableReaders
* Verify metadata was converted correctly on converted SSTableReaders 
* Add converted SSTableReaders to ColumnFamilyStore (addSSTable)
* Read and verify data in converted version with CQL

For the mb to ma conversion, since there is no data conversion involved (only 
metadata), you can use {{SimpleQueryTest.testTableWithoutClustering}} as a 
example to write the first test case. You may use utility {{CQLTester}} utility 
methods such as {{flush()}} and {{getCurrentColumnFamilyStore()}} to flush and 
access {{ColumnFamilyStore}}.

> Create sstableconvert tool with support to ma format
> ----------------------------------------------------
>
>                 Key: CASSANDRA-11875
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-11875
>             Project: Cassandra
>          Issue Type: Sub-task
>          Components: Tools
>            Reporter: Paulo Motta
>            Assignee: Kaide Mu
>            Priority: Minor
>         Attachments: trunk-11875-WIP-V1.patch
>
>
> Currently {{Upgrader}} receives an sstable in any readable format, and writes 
> into {{BigFormat.getLatestVersion()}}. We should generalize it by making it 
> receive a {{target}} version and probably also rename it to 
> {{SSTableConverter}}. 
> Based on this we can create an {{StandaloneDowngrader}} tool which will 
> perform downgrade of specified sstables to a target version. To start with, 
> we should support only downgrading to {{ma}} format (from current format 
> {{mb}}), downgrade to any other version should be forbidden. Since we already 
> support serializing to "ma" we will not need to do any data conversion.
> We should also create a test suite that creates an sstable with data in the 
> current format, perform the downgrade, and verify data in the new format is 
> correct. This will be the base tests suite for more advanced conversions in 
> the future.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to