[
https://issues.apache.org/jira/browse/CASSANDRA-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13181316#comment-13181316
]
Pavel Yaskevich commented on CASSANDRA-1391:
--------------------------------------------
Let me get this clear - migrations use apply/diff internally for their actions
upon KEYSPACE_CF. 0003 patch introduces content-based schema version which is
calculated from KEYSPACES_CF.
KEYSPACES_CF layout
{noformat}
name: { // key
'keyspace': str,
'comparator': str,
...
'columns': { // composite!
column name: {
'validation_class': str,
'index_type': str,
'index_name': str,
'index_options': { }
}
}
}
{noformat}
Current schema distribution is switched to be pull oriented: node A, let's call
it coordinator, applies migration locally and gossips its new (content-based)
version to the ring. Node B checks if it's current version differs from new
version of Node A and if so, it makes a migration request to coordinator by
sending MIGRATION_REQUEST message with list of its local migrations attached.
Coordinator upon receiving that message makes a diff between B migrations and
its local and replies to B with missing migrations. The last thing for B to do
is just deserialize received migrations and apply them one-by-one. Upon startup
node uses onAlive gossip handler to check versions on other nodes and request
missing migrations if needed.
It feels to be better than sending the whole KEYSPACES_CF on each schema change
and let receiver to decide what actions to do upon it.
> Allow Concurrent Schema Migrations
> ----------------------------------
>
> Key: CASSANDRA-1391
> URL: https://issues.apache.org/jira/browse/CASSANDRA-1391
> Project: Cassandra
> Issue Type: Improvement
> Components: Core
> Affects Versions: 0.7.0
> Reporter: Stu Hood
> Assignee: Pavel Yaskevich
> Fix For: 1.1
>
> Attachments:
> 0001-new-migration-schema-and-avro-methods-cleanup.patch,
> 0002-avro-removal.patch,
> 0003-oldVersion-removed-new-migration-distribution-schema.patch,
> CASSANDRA-1391.patch
>
>
> CASSANDRA-1292 fixed multiple migrations started from the same node to
> properly queue themselves, but it is still possible for migrations initiated
> on different nodes to conflict and leave the cluster in a bad state. Since
> the system_add/drop/rename methods are accessible directly from the client
> API, they should be completely safe for concurrent use.
> It should be possible to allow for most types of concurrent migrations by
> converting the UUID schema ID into a VersionVectorClock (as provided by
> CASSANDRA-580).
--
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