You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jeff Jirsa (JIRA)" <ji...@apache.org> on 2017/08/27 20:46:00 UTC

[jira] [Commented] (CASSANDRA-12683) Batch statement fails with consistency ONE when only 1 node up in DC

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

Jeff Jirsa commented on CASSANDRA-12683:
----------------------------------------

Hi Andy,

What's the replication strategy configured on your keyspace? 


> Batch statement fails with consistency ONE when only 1 node up in DC
> --------------------------------------------------------------------
>
>                 Key: CASSANDRA-12683
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-12683
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Coordination
>         Environment: 3 Cassandra nodes (N1, N2, N3)
> 2 Data Centers (DC1, DC2)
> N1 and N2 members of DC1
> N3 a member of DC2
> 1 keyspace using SimpleReplicationStrategy with RF=3 (can also be 2):
> CREATE KEYSPACE ks WITH REPLICATION={'class':'SimpleStrategy','replication_factor':3};
> 1 column family in the keyspace. For simplicity, a partition key of bigint and one other field of any type. No cluster key needed:
> CREATE TABLE ks.test (
>         id      bigint,
>         flag    boolean,
>         PRIMARY KEY(id)
> );
>            Reporter: Andy Klages
>            Priority: Minor
>
> If Cassandra node N2 is stopped, that only leaves one node (N1) in DC1 running. Output from "nodetool status" is:
> Datacenter: DC1
> =========================
> Status=Up/Down
> |/ State=Normal/Leaving/Joining/Moving
> --  Address        Load       Tokens  Owns    Host ID                               Rack
> DN  N2            ...
> UN  N1            ...
> Datacenter: DC2
> ======================
> Status=Up/Down
> |/ State=Normal/Leaving/Joining/Moving
> --  Address        Load       Tokens  Owns    Host ID                               Rack
> UN  N3            ...
> The following batch statement will fail when executed on N1 with consistency level of ONE using cqlsh (also fails with Java using Datastax driver):
> CONSISTENCY ONE
> BEGIN BATCH
> UPDATE ks.test SET flag=true where id=1;
> UPDATE ks.test SET flag=true where id=2;
> APPLY BATCH;
> The failure is:
>   File "apache-cassandra-2.1.15/bin/../lib/cassandra-driver-internal-only-2.7.2.zip/cassandra-driver-2.7.2/cassandra/cluster.py", line 3347, in result
>     raise self._final_exception
> Unavailable: code=1000 [Unavailable exception] message="Cannot achieve consistency level ONE" info={'required_replicas': 1, 'alive_replicas': 0, 'consistency': 'ONE'}
> There are 2 replicas alive but for some reason, Cassandra thinks there are none.
> If each statement is executed individually (i.e. no batch), each one succeeds.
> This same batch query succeeds on N3, which is the other node in the cluster that is running. My analysis shows this happens when the query is executed on a node in a DC where all other nodes in that DC is down. The batch statement has 2 or more queries with different partition keys. If all of the partition keys are the same value, it succeeds. As the replication factor is set to the number of nodes in the cluster (full replication) and the consistency level is ONE, the batch statement should succeed.
> 2 workarounds for this are:
> 1. Set the consistency level to ANY.
> 2. Use an unlogged batch.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org