[ https://issues.apache.org/jira/browse/CASSANDRA-4017?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13230155#comment-13230155 ]
Sylvain Lebresne commented on CASSANDRA-4017: --------------------------------------------- I've put some initial patch at https://github.com/pcmanus/cassandra/commits/4017. As described above, the main idea is to unify code between what happens on the initial node applying the migration and the rest of the nodes. With this patch, when a schema change has to happen, we generate the RowMutation corresponding and send it to all nodes (including the localhost) and all the node use that to figure out what changed and how to update in-memory structures. The patch removes the Migration classes (that weren't doing much anyway) and moves a bit a code around to make it easier to follow a migration path. Sadly, this ended up posing problem with the unit tests. More precisely, SchemaLoader was not using the migration path, but only loading the schema in-memory. Because the patch removes the local special case, this was breaking DefsTest. The solution was to make SchemaLoader use actual migrations (to get stuffs written to disk). But now that means that SchemaLoader needs to be merged with CleanupHelper (otherwise, since the cleanup was happening with the schema loading, the loading was conflicting with the schema of the previous test). When that's fixed (which the patch does), MoveTest still broke with a ClassCastException between BytesToken and BigIntegerToken. The reason is that MoveTest use {{ss.setPartitionerUnsafe}} to set the RandomPartitioner. But it does that *after* the schema has been loaded. But now the schema happens to trigger flushing of system tables. Those are flushed with the order preserving partitioner and later conflict with the sstable created after the partitioner change. I'm not sure what the best fix is for this and so the patch doesn't fix that failure. Maybe we could just make MoveTest keep the test partitioner. But I suppose the intention was to test the random partitioner, so .... > Unify migrations > ---------------- > > Key: CASSANDRA-4017 > URL: https://issues.apache.org/jira/browse/CASSANDRA-4017 > Project: Cassandra > Issue Type: Improvement > Components: Core > Affects Versions: 1.1.0 > Reporter: Jonathan Ellis > Assignee: Sylvain Lebresne > Fix For: 1.1.0 > > > Now that we can send a schema as a RowMutation, there's no need to keep > separate add/drop/update migration classes around. Let's just send the > schema to our counterparts and let them figure out what changed. Currently > we have "figure out what changed" code to both generate migrations on the > sender, and for application on the target, which adds complexity. -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa For more information on JIRA, see: http://www.atlassian.com/software/jira