You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Richard Low (JIRA)" <ji...@apache.org> on 2012/10/26 13:53:14 UTC

[jira] [Created] (CASSANDRA-4866) ConfigurationException when creating column families simultaneously

Richard Low created CASSANDRA-4866:
--------------------------------------

             Summary: ConfigurationException when creating column families simultaneously
                 Key: CASSANDRA-4866
                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4866
             Project: Cassandra
          Issue Type: Bug
          Components: Core
    Affects Versions: 1.1.2
            Reporter: Richard Low


This reproduces the problem:

Suppose there are just two nodes A and B.

* Create two client threads with separate connections.
* Connect them to A and they both create the same column family foo.
* One gets ID 1000, the other ID 1001.
* On the mutation stage, A processes the two CF creations, and asynchronously sends the creation messages to B.
* Suppose B gets 1001 first, it creates it.
* A creates 1000
* B tries to create 1000 and fails (which is OK, we only want one CF)
* A tries to create 1001 and fails (which is OK, we only want one CF)
* Errors in the log like 'ConfigurationException: Column family ID mismatch (found 1001; expected 1000)'
* Inserts, hints and repair now fails because the IDs are not consistent across the cluster.  Inserts fail with 'org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=1001'

There's a few problems here:

One is that DefsTable.mergeSchema applies the change, then calls mergeColumnFamilies which could throw ConfigurationException.  If ConfigurationException is thrown, the local schema is in an invalid state.  The fix for this is to merge before updating the schema system CF.

The other issue is that there are two unique identifiers for the CF - the name and the ID.  It would be better to have just one to avoid this.  And I think the only safe way of doing this is to use the CF name, since the IDs could be assigned in different orders.

Have I misunderstood how the concurrent schema updates work, or is simultaneous CF creation not supported?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

[jira] [Resolved] (CASSANDRA-4866) ConfigurationException when creating column families simultaneously

Posted by "Jonathan Ellis (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/CASSANDRA-4866?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Jonathan Ellis resolved CASSANDRA-4866.
---------------------------------------

    Resolution: Duplicate

bq. Have I misunderstood how the concurrent schema updates work, or is simultaneous CF creation not supported?

The latter.  Should be fixed in 1.2.  (CASSANDRA-3794)
                
> ConfigurationException when creating column families simultaneously
> -------------------------------------------------------------------
>
>                 Key: CASSANDRA-4866
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-4866
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>    Affects Versions: 1.1.2
>            Reporter: Richard Low
>
> This reproduces the problem:
> Suppose there are just two nodes A and B.
> * Create two client threads with separate connections.
> * Connect them to A and they both create the same column family foo.
> * One gets ID 1000, the other ID 1001.
> * On the mutation stage, A processes the two CF creations, and asynchronously sends the creation messages to B.
> * Suppose B gets 1001 first, it creates it.
> * A creates 1000
> * B tries to create 1000 and fails (which is OK, we only want one CF)
> * A tries to create 1001 and fails (which is OK, we only want one CF)
> * Errors in the log like 'ConfigurationException: Column family ID mismatch (found 1001; expected 1000)'
> * Inserts, hints and repair now fails because the IDs are not consistent across the cluster.  Inserts fail with 'org.apache.cassandra.db.UnknownColumnFamilyException: Couldn't find cfId=1001'
> There's a few problems here:
> One is that DefsTable.mergeSchema applies the change, then calls mergeColumnFamilies which could throw ConfigurationException.  If ConfigurationException is thrown, the local schema is in an invalid state.  The fix for this is to merge before updating the schema system CF.
> The other issue is that there are two unique identifiers for the CF - the name and the ID.  It would be better to have just one to avoid this.  And I think the only safe way of doing this is to use the CF name, since the IDs could be assigned in different orders.
> Have I misunderstood how the concurrent schema updates work, or is simultaneous CF creation not supported?

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira