[ 
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

        

Reply via email to