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

Sylvain Lebresne commented on CASSANDRA-6837:
---------------------------------------------

Committed, thanks.

bq. but can we rename to commitCL instead of serialCL?

Hum, the thing is that serialCL is the CL for the paxos phase, not the one use 
during the commit (it corresponds to the consistencyForPaxos argument of 
SP.cas(), not to consistencyForCommit), so renaming it commitCL is probably a 
bad idea. I'm fine renaming it to paxosCL or something though, I don't really 
care much (though we use serialConsistency in other places already like the 
native protocol, QueryOptions and in thrift/CassandraServer so if it was just 
me, I'd leave it be).

> Batch CAS does not support LOCAL_SERIAL
> ---------------------------------------
>
>                 Key: CASSANDRA-6837
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-6837
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>            Reporter: Nicolas Favre-Felix
>            Assignee: Sylvain Lebresne
>             Fix For: 2.0.7
>
>         Attachments: 6837.txt
>
>
> The batch CAS feature introduced in Cassandra 2.0.6 does not support the 
> LOCAL_SERIAL consistency level, and always uses SERIAL.
> Create a cluster with 4 nodes with the following topology:
> {code}
> Datacenter: DC2
> ===============
> Status=Up/Down
> |/ State=Normal/Leaving/Joining/Moving
> --  Address    Load       Tokens  Owns   Host ID                              
>  Rack
> UN  127.0.0.3  269 KB     256     26.3%  ae92d997-6042-42d9-b447-943080569742 
>  RAC1
> UN  127.0.0.4  197.81 KB  256     25.1%  3edc92d7-9d1b-472a-8452-24dddbc4502c 
>  RAC1
> Datacenter: DC1
> ===============
> Status=Up/Down
> |/ State=Normal/Leaving/Joining/Moving
> --  Address    Load       Tokens  Owns   Host ID                              
>  Rack
> UN  127.0.0.1  226.92 KB  256     24.8%  dbc17bd7-1ede-47a2-9b31-6063752d6eb3 
>  RAC1
> UN  127.0.0.2  179.27 KB  256     23.7%  bb0ad285-34d2-4989-a664-b068986ab6fa 
>  RAC1
> {code}
> In cqlsh:
> {code}
> cqlsh> CREATE KEYSPACE foo WITH replication = {'class': 
> 'NetworkTopologyStrategy', 'DC1': 2, 'DC2': 2};
> cqlsh> USE foo;
> cqlsh:foo> CREATE TABLE bar (x text, y bigint, z bigint, t bigint, PRIMARY 
> KEY(x,y));
> {code}
> Kill nodes 127.0.0.3 and 127.0.0.4:
> {code}
> Datacenter: DC2
> ===============
> Status=Up/Down
> |/ State=Normal/Leaving/Joining/Moving
> --  Address    Load       Tokens  Owns   Host ID                              
>  Rack
> DN  127.0.0.3  262.37 KB  256     26.3%  ae92d997-6042-42d9-b447-943080569742 
>  RAC1
> DN  127.0.0.4  208.04 KB  256     25.1%  3edc92d7-9d1b-472a-8452-24dddbc4502c 
>  RAC1
> Datacenter: DC1
> ===============
> Status=Up/Down
> |/ State=Normal/Leaving/Joining/Moving
> --  Address    Load       Tokens  Owns   Host ID                              
>  Rack
> UN  127.0.0.1  214.82 KB  256     24.8%  dbc17bd7-1ede-47a2-9b31-6063752d6eb3 
>  RAC1
> UN  127.0.0.2  178.23 KB  256     23.7%  bb0ad285-34d2-4989-a664-b068986ab6fa 
>  RAC1
> {code}
> Connect to 127.0.0.1 in DC1 and run a CAS batch at 
> CL.LOCAL_SERIAL+LOCAL_QUORUM:
> {code}
>         final Cluster cluster = new Cluster.Builder()
>                 .addContactPoint("127.0.0.1")
>                 .withLoadBalancingPolicy(new DCAwareRoundRobinPolicy("DC1"))
>                 .build();
>         final Session session = cluster.connect("foo");
>         Batch batch = QueryBuilder.batch();
>         batch.add(new SimpleStatement("INSERT INTO bar (x,y,z) VALUES ('abc', 
> 123, 1) IF NOT EXISTS"));
>         batch.add(new SimpleStatement("UPDATE bar SET t=2 WHERE x='abc' AND 
> y=123"));
>         batch.setConsistencyLevel(ConsistencyLevel.LOCAL_QUORUM);
>         batch.setSerialConsistencyLevel(ConsistencyLevel.LOCAL_SERIAL);
>         session.execute(batch);
> {code}
> The batch fails with:
> {code}
> Caused by: com.datastax.driver.core.exceptions.UnavailableException: Not 
> enough replica available for query at consistency SERIAL (3 required but only 
> 2 alive)
>       at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:44)
>       at com.datastax.driver.core.Responses$Error$1.decode(Responses.java:33)
>       at 
> com.datastax.driver.core.Message$ProtocolDecoder.decode(Message.java:182)
>       at 
> org.jboss.netty.handler.codec.oneone.OneToOneDecoder.handleUpstream(OneToOneDecoder.java:66)
>       ... 21 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to