mirror of https://github.com/apache/cassandra
Merge branch 'cassandra-2.0' into trunk
This commit is contained in:
commit
231b345ffd
|
|
@ -240,6 +240,7 @@ cqlsh_extra_syntax_rules = r'''
|
|||
| "THREE"
|
||||
| "QUORUM"
|
||||
| "ALL"
|
||||
| "LOCAL_ONE"
|
||||
| "LOCAL_QUORUM"
|
||||
| "EACH_QUORUM"
|
||||
;
|
||||
|
|
@ -1757,7 +1758,7 @@ class Shell(cmd.Cmd):
|
|||
|
||||
Valid consistency levels:
|
||||
|
||||
ANY, ONE, TWO, THREE, QUORUM, ALL, LOCAL_QUORUM and EACH_QUORUM.
|
||||
ANY, ONE, TWO, THREE, QUORUM, ALL, LOCAL_ONE, LOCAL_QUORUM and EACH_QUORUM.
|
||||
|
||||
CONSISTENCY
|
||||
|
||||
|
|
|
|||
|
|
@ -1039,6 +1039,7 @@ CQL distinguishes between _reserved_ and _non-reserved_ keywords. Reserved keywo
|
|||
| @KEYSPACE@ | yes |
|
||||
| @LEVEL@ | no |
|
||||
| @LIMIT@ | yes |
|
||||
| @LOCAL_ONE@ | yes |
|
||||
| @LOCAL_QUORUM@ | yes |
|
||||
| @MODIFY@ | yes |
|
||||
| @NORECURSIVE@ | yes |
|
||||
|
|
|
|||
|
|
@ -201,6 +201,7 @@ Table of Contents
|
|||
0x0005 ALL
|
||||
0x0006 LOCAL_QUORUM
|
||||
0x0007 EACH_QUORUM
|
||||
0x0010 LOCAL_ONE
|
||||
|
||||
[string map] A [short] n, followed by n pair <k><v> where <k> and <v>
|
||||
are [string].
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@ Table of Contents
|
|||
0x0007 EACH_QUORUM
|
||||
0x0008 SERIAL
|
||||
0x0009 LOCAL_SERIAL
|
||||
0x0010 LOCAL_ONE
|
||||
|
||||
[string map] A [short] n, followed by n pair <k><v> where <k> and <v>
|
||||
are [string].
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ namespace rb CassandraThrift
|
|||
# An effort should be made not to break forward-client-compatibility either
|
||||
# (e.g. one should avoid removing obsolete fields from the IDL), but no
|
||||
# guarantees in this respect are made by the Cassandra project.
|
||||
const string VERSION = "19.37.0"
|
||||
const string VERSION = "19.38.0"
|
||||
|
||||
|
||||
#
|
||||
|
|
@ -212,6 +212,7 @@ exception SchemaDisagreementException {
|
|||
* TWO Ensure that the write has been written to at least 2 node's commit log and memory table
|
||||
* THREE Ensure that the write has been written to at least 3 node's commit log and memory table
|
||||
* QUORUM Ensure that the write has been written to <ReplicationFactor> / 2 + 1 nodes
|
||||
* LOCAL_ONE Ensure that the write has been written to 1 node within the local datacenter (requires NetworkTopologyStrategy)
|
||||
* LOCAL_QUORUM Ensure that the write has been written to <ReplicationFactor> / 2 + 1 nodes, within the local datacenter (requires NetworkTopologyStrategy)
|
||||
* EACH_QUORUM Ensure that the write has been written to <ReplicationFactor> / 2 + 1 nodes in each datacenter (requires NetworkTopologyStrategy)
|
||||
* ALL Ensure that the write is written to <code><ReplicationFactor></code> nodes before responding to the client.
|
||||
|
|
@ -222,6 +223,7 @@ exception SchemaDisagreementException {
|
|||
* TWO Returns the record with the most recent timestamp once two replicas have replied.
|
||||
* THREE Returns the record with the most recent timestamp once three replicas have replied.
|
||||
* QUORUM Returns the record with the most recent timestamp once a majority of replicas have replied.
|
||||
* LOCAL_ONE Returns the record with the most recent timestamp once a single replica within the local datacenter have replied.
|
||||
* LOCAL_QUORUM Returns the record with the most recent timestamp once a majority of replicas within the local datacenter have replied.
|
||||
* EACH_QUORUM Returns the record with the most recent timestamp once a majority of replicas within each datacenter have replied.
|
||||
* ALL Returns the record with the most recent timestamp once all replicas have replied (implies no replica may be down)..
|
||||
|
|
@ -237,6 +239,7 @@ enum ConsistencyLevel {
|
|||
THREE = 8,
|
||||
SERIAL = 9,
|
||||
LOCAL_SERIAL = 10,
|
||||
LOCAL_ONE = 11,
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -60,6 +60,7 @@ import org.apache.thrift.TEnum;
|
|||
* TWO Ensure that the write has been written to at least 2 node's commit log and memory table
|
||||
* THREE Ensure that the write has been written to at least 3 node's commit log and memory table
|
||||
* QUORUM Ensure that the write has been written to <ReplicationFactor> / 2 + 1 nodes
|
||||
* LOCAL_ONE Ensure that the write has been written to 1 node within the local datacenter (requires NetworkTopologyStrategy)
|
||||
* LOCAL_QUORUM Ensure that the write has been written to <ReplicationFactor> / 2 + 1 nodes, within the local datacenter (requires NetworkTopologyStrategy)
|
||||
* EACH_QUORUM Ensure that the write has been written to <ReplicationFactor> / 2 + 1 nodes in each datacenter (requires NetworkTopologyStrategy)
|
||||
* ALL Ensure that the write is written to <code><ReplicationFactor></code> nodes before responding to the client.
|
||||
|
|
@ -70,6 +71,7 @@ import org.apache.thrift.TEnum;
|
|||
* TWO Returns the record with the most recent timestamp once two replicas have replied.
|
||||
* THREE Returns the record with the most recent timestamp once three replicas have replied.
|
||||
* QUORUM Returns the record with the most recent timestamp once a majority of replicas have replied.
|
||||
* LOCAL_ONE Returns the record with the most recent timestamp once a single replica within the local datacenter have replied.
|
||||
* LOCAL_QUORUM Returns the record with the most recent timestamp once a majority of replicas within the local datacenter have replied.
|
||||
* EACH_QUORUM Returns the record with the most recent timestamp once a majority of replicas within each datacenter have replied.
|
||||
* ALL Returns the record with the most recent timestamp once all replicas have replied (implies no replica may be down)..
|
||||
|
|
@ -84,7 +86,8 @@ public enum ConsistencyLevel implements org.apache.thrift.TEnum {
|
|||
TWO(7),
|
||||
THREE(8),
|
||||
SERIAL(9),
|
||||
LOCAL_SERIAL(10);
|
||||
LOCAL_SERIAL(10),
|
||||
LOCAL_ONE(11);
|
||||
|
||||
private final int value;
|
||||
|
||||
|
|
@ -125,6 +128,8 @@ public enum ConsistencyLevel implements org.apache.thrift.TEnum {
|
|||
return SERIAL;
|
||||
case 10:
|
||||
return LOCAL_SERIAL;
|
||||
case 11:
|
||||
return LOCAL_ONE;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -56,6 +56,6 @@ import org.slf4j.LoggerFactory;
|
|||
|
||||
public class cassandraConstants {
|
||||
|
||||
public static final String VERSION = "19.37.0";
|
||||
public static final String VERSION = "19.38.0";
|
||||
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
|
@ -46,15 +46,17 @@ public enum ConsistencyLevel
|
|||
THREE (3),
|
||||
QUORUM (4),
|
||||
ALL (5),
|
||||
LOCAL_QUORUM(6),
|
||||
LOCAL_QUORUM(6, true),
|
||||
EACH_QUORUM (7),
|
||||
SERIAL (8),
|
||||
LOCAL_SERIAL(9);
|
||||
LOCAL_SERIAL(9),
|
||||
LOCAL_ONE (10, true);
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(ConsistencyLevel.class);
|
||||
|
||||
// Used by the binary protocol
|
||||
public final int code;
|
||||
private final boolean isDCLocal;
|
||||
private static final ConsistencyLevel[] codeIdx;
|
||||
static
|
||||
{
|
||||
|
|
@ -71,8 +73,14 @@ public enum ConsistencyLevel
|
|||
}
|
||||
|
||||
private ConsistencyLevel(int code)
|
||||
{
|
||||
this(code, false);
|
||||
}
|
||||
|
||||
private ConsistencyLevel(int code, boolean isDCLocal)
|
||||
{
|
||||
this.code = code;
|
||||
this.isDCLocal = isDCLocal;
|
||||
}
|
||||
|
||||
public static ConsistencyLevel fromCode(int code)
|
||||
|
|
@ -92,6 +100,7 @@ public enum ConsistencyLevel
|
|||
switch (this)
|
||||
{
|
||||
case ONE:
|
||||
case LOCAL_ONE:
|
||||
return 1;
|
||||
case ANY:
|
||||
return 1;
|
||||
|
|
@ -116,6 +125,11 @@ public enum ConsistencyLevel
|
|||
}
|
||||
}
|
||||
|
||||
public boolean isDatacenterLocal()
|
||||
{
|
||||
return isDCLocal;
|
||||
}
|
||||
|
||||
private boolean isLocal(InetAddress endpoint)
|
||||
{
|
||||
return DatabaseDescriptor.getLocalDataCenter().equals(DatabaseDescriptor.getEndpointSnitch().getDatacenter(endpoint));
|
||||
|
|
@ -155,11 +169,11 @@ public enum ConsistencyLevel
|
|||
{
|
||||
/*
|
||||
* Endpoints are expected to be restricted to live replicas, sorted by snitch preference.
|
||||
* For LOCAL_QORUM, move local-DC replicas in front first as we need them there whether
|
||||
* For LOCAL_QUORUM, move local-DC replicas in front first as we need them there whether
|
||||
* we do read repair (since the first replica gets the data read) or not (since we'll take
|
||||
* the blockFor first ones).
|
||||
*/
|
||||
if (this == LOCAL_QUORUM)
|
||||
if (isDCLocal)
|
||||
Collections.sort(liveEndpoints, DatabaseDescriptor.getLocalComparator());
|
||||
|
||||
switch (readRepair)
|
||||
|
|
@ -195,6 +209,8 @@ public enum ConsistencyLevel
|
|||
case ANY:
|
||||
// local hint is acceptable, and local node is always live
|
||||
return true;
|
||||
case LOCAL_ONE:
|
||||
return countLocalEndpoints(liveEndpoints) >= 1;
|
||||
case LOCAL_QUORUM:
|
||||
return countLocalEndpoints(liveEndpoints) >= blockFor(keyspace);
|
||||
case EACH_QUORUM:
|
||||
|
|
@ -260,6 +276,7 @@ public enum ConsistencyLevel
|
|||
switch (this)
|
||||
{
|
||||
case LOCAL_QUORUM:
|
||||
case LOCAL_ONE:
|
||||
requireNetworkTopologyStrategy(keyspaceName);
|
||||
break;
|
||||
case ANY:
|
||||
|
|
@ -275,6 +292,7 @@ public enum ConsistencyLevel
|
|||
{
|
||||
case LOCAL_QUORUM:
|
||||
case EACH_QUORUM:
|
||||
case LOCAL_ONE:
|
||||
requireNetworkTopologyStrategy(keyspaceName);
|
||||
break;
|
||||
case SERIAL:
|
||||
|
|
@ -290,6 +308,7 @@ public enum ConsistencyLevel
|
|||
{
|
||||
case LOCAL_QUORUM:
|
||||
case EACH_QUORUM:
|
||||
case LOCAL_ONE:
|
||||
requireNetworkTopologyStrategy(keyspaceName);
|
||||
break;
|
||||
case SERIAL:
|
||||
|
|
@ -315,7 +334,7 @@ public enum ConsistencyLevel
|
|||
{
|
||||
throw new InvalidRequestException("Consistency level ANY is not yet supported for counter columnfamily " + metadata.cfName);
|
||||
}
|
||||
else if (!metadata.getReplicateOnWrite() && this != ConsistencyLevel.ONE)
|
||||
else if (!metadata.getReplicateOnWrite() && !(this == ConsistencyLevel.ONE || this == ConsistencyLevel.LOCAL_ONE))
|
||||
{
|
||||
throw new InvalidRequestException("cannot achieve CL > CL.ONE without replicate_on_write on columnfamily " + metadata.cfName);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -122,7 +122,7 @@ public abstract class AbstractReplicationStrategy
|
|||
|
||||
public AbstractWriteResponseHandler getWriteResponseHandler(Collection<InetAddress> naturalEndpoints, Collection<InetAddress> pendingEndpoints, ConsistencyLevel consistency_level, Runnable callback, WriteType writeType)
|
||||
{
|
||||
if (consistency_level == ConsistencyLevel.LOCAL_QUORUM)
|
||||
if (consistency_level.isDatacenterLocal())
|
||||
{
|
||||
// block for in this context will be localnodes block.
|
||||
return new DatacenterWriteResponseHandler(naturalEndpoints, pendingEndpoints, consistency_level, getKeyspace(), callback, writeType);
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ public class DatacenterWriteResponseHandler extends WriteResponseHandler
|
|||
WriteType writeType)
|
||||
{
|
||||
super(naturalEndpoints, pendingEndpoints, consistencyLevel, keyspace, callback, writeType);
|
||||
assert consistencyLevel == ConsistencyLevel.LOCAL_QUORUM;
|
||||
assert consistencyLevel.isDatacenterLocal();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -127,7 +127,7 @@ public class ReadCallback<TMessage, TResolved> implements IAsyncCallback<TMessag
|
|||
*/
|
||||
private boolean waitingFor(MessageIn message)
|
||||
{
|
||||
return consistencyLevel == ConsistencyLevel.LOCAL_QUORUM
|
||||
return consistencyLevel.isDatacenterLocal()
|
||||
? DatabaseDescriptor.getLocalDataCenter().equals(DatabaseDescriptor.getEndpointSnitch().getDatacenter(message.from))
|
||||
: true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ public class ThriftConversion
|
|||
case LOCAL_QUORUM: return org.apache.cassandra.db.ConsistencyLevel.LOCAL_QUORUM;
|
||||
case EACH_QUORUM: return org.apache.cassandra.db.ConsistencyLevel.EACH_QUORUM;
|
||||
case SERIAL: return org.apache.cassandra.db.ConsistencyLevel.SERIAL;
|
||||
case LOCAL_ONE: return org.apache.cassandra.db.ConsistencyLevel.LOCAL_ONE;
|
||||
}
|
||||
throw new AssertionError();
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue