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

Jonathan Ellis commented on CASSANDRA-1391:
-------------------------------------------

For example, suppose we have two clients C1 and C2, and two nodes A and B.  
They have a columnfamily that includes the following options:

{noformat}
ColumnFamily1: {
  'default_validation_class': 'bytes',
  'comment': 'an example',
  'row_cache_size': 0
}
{noformat}

Next, C1 and C2 update ColumnFamily1 with M1 and M2 as follows:

{noformat}
M1 = ColumnFamily1: {'d_v_c': 'ascii', 'comment': 'foo'} @ T1}}
M2 = ColumnFamily1: {'d_v_c': 'utf8', 'row_cache_size': 1000000} @ T0 < T1
{noformat}

(Note that we have a conflict on default_validation_class.)

Node A receives M1 first, while node B receives M2 first.

*Node A:*
{noformat}
(applies M1)
ColumnFamily1: {
  'default_validation_class': 'ascii',
  'comment': 'foo',
  'row_cache_size': 0
}

(applies M2)
ColumnFamily1: {
  'default_validation_class': 'ascii', // M2.dvc has no effect since T0 < T1
  'comment': 'foo',
  'row_cache_size': 1000000
}
{noformat}

*Node B:*
{noformat}
ColumnFamily1: {
  'default_validation_class': 'utf8',
  'comment': 'an example',
  'row_cache_size': 1000000
}

(applies M1)
ColumnFamily1: {
  'default_validation_class': 'ascii',
  'comment': 'foo',
  'row_cache_size': 1000000
}
{noformat}

Because timestamp-based conflict resolution is commutative, all nodes end with 
the same schema no matter what order they get the updates in.
                
> 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: 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