change multiget back to list, for now. patch by jbellis for CASSANDRA-1329

git-svn-id: https://svn.apache.org/repos/asf/cassandra/trunk@998435 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Ellis 2010-09-18 10:08:49 +00:00
parent c6f383ceb1
commit ec0316708b
6 changed files with 54 additions and 59 deletions

View File

@ -44,7 +44,6 @@
* add CMSInitiatingOccupancyFraction=75 and UseCMSInitiatingOccupancyOnly
to default JVM options
* decrease jvm heap for cassandra-cli (CASSANDRA-1446)
* change multiget key collection from list to set (CASSANDRA-1329)
* ability to modify keyspaces and column family definitions on a live cluster
(CASSANDRA-1285)
* support for Hadoop Streaming [non-jvm map/reduce via stdin/out]

View File

@ -60,9 +60,6 @@ Thrift API
----------
- The Cassandra server now defaults to framed mode, rather than
unframed. Unframed is obsolete and will be removed in the future.
- Multiget key collection is now a set, rather than a list
(for dynamic languages, this is a non-issue since really any
iterable is accepted)
- Row keys are now bytes: keys stored by versions prior to 0.7.0 will be
returned as UTF-8 encoded bytes. OrderPreservingPartitioner and
CollatingOrderPreservingPartitioner continue to expect that keys contain

View File

@ -46,7 +46,7 @@ namespace rb CassandraThrift
# for every edit that doesn't result in a change to major/minor.
#
# See the Semantic Versioning Specification (SemVer) http://semver.org.
const string VERSION = "15.0.0"
const string VERSION = "16.0.0"
#
@ -407,7 +407,7 @@ service Cassandra {
/**
Performs a get_slice for column_parent and predicate for the given keys in parallel.
*/
map<binary,list<ColumnOrSuperColumn>> multiget_slice(1:required set<binary> keys,
map<binary,list<ColumnOrSuperColumn>> multiget_slice(1:required list<binary> keys,
2:required ColumnParent column_parent,
3:required SlicePredicate predicate,
4:required ConsistencyLevel consistency_level=ONE)
@ -416,7 +416,7 @@ service Cassandra {
/**
Perform a get_count in parallel on the given list<binary> keys. The return value maps keys to the count found.
*/
map<binary, i32> multiget_count(1:required set<binary> keys,
map<binary, i32> multiget_count(1:required list<binary> keys,
2:required ColumnParent column_parent,
3:required SlicePredicate predicate,
4:required ConsistencyLevel consistency_level=ONE)

View File

@ -94,7 +94,7 @@ public class Cassandra {
* @param predicate
* @param consistency_level
*/
public Map<byte[],List<ColumnOrSuperColumn>> multiget_slice(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException;
public Map<byte[],List<ColumnOrSuperColumn>> multiget_slice(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException;
/**
* Perform a get_count in parallel on the given list<binary> keys. The return value maps keys to the count found.
@ -104,7 +104,7 @@ public class Cassandra {
* @param predicate
* @param consistency_level
*/
public Map<byte[],Integer> multiget_count(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException;
public Map<byte[],Integer> multiget_count(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException;
/**
* returns a subset of columns for a contiguous range of keys.
@ -305,9 +305,9 @@ public class Cassandra {
public void get_count(byte[] key, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<AsyncClient.get_count_call> resultHandler) throws TException;
public void multiget_slice(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<AsyncClient.multiget_slice_call> resultHandler) throws TException;
public void multiget_slice(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<AsyncClient.multiget_slice_call> resultHandler) throws TException;
public void multiget_count(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<AsyncClient.multiget_count_call> resultHandler) throws TException;
public void multiget_count(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<AsyncClient.multiget_count_call> resultHandler) throws TException;
public void get_range_slices(ColumnParent column_parent, SlicePredicate predicate, KeyRange range, ConsistencyLevel consistency_level, AsyncMethodCallback<AsyncClient.get_range_slices_call> resultHandler) throws TException;
@ -613,13 +613,13 @@ public class Cassandra {
throw new TApplicationException(TApplicationException.MISSING_RESULT, "get_count failed: unknown result");
}
public Map<byte[],List<ColumnOrSuperColumn>> multiget_slice(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException
public Map<byte[],List<ColumnOrSuperColumn>> multiget_slice(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException
{
send_multiget_slice(keys, column_parent, predicate, consistency_level);
return recv_multiget_slice();
}
public void send_multiget_slice(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws TException
public void send_multiget_slice(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws TException
{
oprot_.writeMessageBegin(new TMessage("multiget_slice", TMessageType.CALL, ++seqid_));
multiget_slice_args args = new multiget_slice_args();
@ -661,13 +661,13 @@ public class Cassandra {
throw new TApplicationException(TApplicationException.MISSING_RESULT, "multiget_slice failed: unknown result");
}
public Map<byte[],Integer> multiget_count(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException
public Map<byte[],Integer> multiget_count(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException
{
send_multiget_count(keys, column_parent, predicate, consistency_level);
return recv_multiget_count();
}
public void send_multiget_count(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws TException
public void send_multiget_count(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws TException
{
oprot_.writeMessageBegin(new TMessage("multiget_count", TMessageType.CALL, ++seqid_));
multiget_count_args args = new multiget_count_args();
@ -1783,18 +1783,18 @@ public class Cassandra {
}
}
public void multiget_slice(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_slice_call> resultHandler) throws TException {
public void multiget_slice(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_slice_call> resultHandler) throws TException {
checkReady();
multiget_slice_call method_call = new multiget_slice_call(keys, column_parent, predicate, consistency_level, resultHandler, this, protocolFactory, transport);
manager.call(method_call);
}
public static class multiget_slice_call extends TAsyncMethodCall {
private Set<byte[]> keys;
private List<byte[]> keys;
private ColumnParent column_parent;
private SlicePredicate predicate;
private ConsistencyLevel consistency_level;
public multiget_slice_call(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_slice_call> resultHandler, TAsyncClient client, TProtocolFactory protocolFactory, TNonblockingTransport transport) throws TException {
public multiget_slice_call(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_slice_call> resultHandler, TAsyncClient client, TProtocolFactory protocolFactory, TNonblockingTransport transport) throws TException {
super(client, protocolFactory, transport, resultHandler, false);
this.keys = keys;
this.column_parent = column_parent;
@ -1823,18 +1823,18 @@ public class Cassandra {
}
}
public void multiget_count(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_count_call> resultHandler) throws TException {
public void multiget_count(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_count_call> resultHandler) throws TException {
checkReady();
multiget_count_call method_call = new multiget_count_call(keys, column_parent, predicate, consistency_level, resultHandler, this, protocolFactory, transport);
manager.call(method_call);
}
public static class multiget_count_call extends TAsyncMethodCall {
private Set<byte[]> keys;
private List<byte[]> keys;
private ColumnParent column_parent;
private SlicePredicate predicate;
private ConsistencyLevel consistency_level;
public multiget_count_call(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_count_call> resultHandler, TAsyncClient client, TProtocolFactory protocolFactory, TNonblockingTransport transport) throws TException {
public multiget_count_call(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback<multiget_count_call> resultHandler, TAsyncClient client, TProtocolFactory protocolFactory, TNonblockingTransport transport) throws TException {
super(client, protocolFactory, transport, resultHandler, false);
this.keys = keys;
this.column_parent = column_parent;
@ -8386,12 +8386,12 @@ public class Cassandra {
public static class multiget_slice_args implements TBase<multiget_slice_args, multiget_slice_args._Fields>, java.io.Serializable, Cloneable {
private static final TStruct STRUCT_DESC = new TStruct("multiget_slice_args");
private static final TField KEYS_FIELD_DESC = new TField("keys", TType.SET, (short)1);
private static final TField KEYS_FIELD_DESC = new TField("keys", TType.LIST, (short)1);
private static final TField COLUMN_PARENT_FIELD_DESC = new TField("column_parent", TType.STRUCT, (short)2);
private static final TField PREDICATE_FIELD_DESC = new TField("predicate", TType.STRUCT, (short)3);
private static final TField CONSISTENCY_LEVEL_FIELD_DESC = new TField("consistency_level", TType.I32, (short)4);
public Set<byte[]> keys;
public List<byte[]> keys;
public ColumnParent column_parent;
public SlicePredicate predicate;
/**
@ -8477,7 +8477,7 @@ public class Cassandra {
static {
Map<_Fields, FieldMetaData> tmpMap = new EnumMap<_Fields, FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.KEYS, new FieldMetaData("keys", TFieldRequirementType.REQUIRED,
new SetMetaData(TType.SET,
new ListMetaData(TType.LIST,
new FieldValueMetaData(TType.STRING))));
tmpMap.put(_Fields.COLUMN_PARENT, new FieldMetaData("column_parent", TFieldRequirementType.REQUIRED,
new StructMetaData(TType.STRUCT, ColumnParent.class)));
@ -8495,7 +8495,7 @@ public class Cassandra {
}
public multiget_slice_args(
Set<byte[]> keys,
List<byte[]> keys,
ColumnParent column_parent,
SlicePredicate predicate,
ConsistencyLevel consistency_level)
@ -8512,7 +8512,7 @@ public class Cassandra {
*/
public multiget_slice_args(multiget_slice_args other) {
if (other.isSetKeys()) {
Set<byte[]> __this__keys = new HashSet<byte[]>();
List<byte[]> __this__keys = new ArrayList<byte[]>();
for (byte[] other_element : other.keys) {
byte[] temp_binary_element = new byte[other_element.length];
System.arraycopy(other_element, 0, temp_binary_element, 0, other_element.length);
@ -8550,16 +8550,16 @@ public class Cassandra {
public void addToKeys(byte[] elem) {
if (this.keys == null) {
this.keys = new HashSet<byte[]>();
this.keys = new ArrayList<byte[]>();
}
this.keys.add(elem);
}
public Set<byte[]> getKeys() {
public List<byte[]> getKeys() {
return this.keys;
}
public multiget_slice_args setKeys(Set<byte[]> keys) {
public multiget_slice_args setKeys(List<byte[]> keys) {
this.keys = keys;
return this;
}
@ -8665,7 +8665,7 @@ public class Cassandra {
if (value == null) {
unsetKeys();
} else {
setKeys((Set<byte[]>)value);
setKeys((List<byte[]>)value);
}
break;
@ -8856,17 +8856,17 @@ public class Cassandra {
}
switch (field.id) {
case 1: // KEYS
if (field.type == TType.SET) {
if (field.type == TType.LIST) {
{
TSet _set42 = iprot.readSetBegin();
this.keys = new HashSet<byte[]>(2*_set42.size);
for (int _i43 = 0; _i43 < _set42.size; ++_i43)
TList _list42 = iprot.readListBegin();
this.keys = new ArrayList<byte[]>(_list42.size);
for (int _i43 = 0; _i43 < _list42.size; ++_i43)
{
byte[] _elem44;
_elem44 = iprot.readBinary();
this.keys.add(_elem44);
}
iprot.readSetEnd();
iprot.readListEnd();
}
} else {
TProtocolUtil.skip(iprot, field.type);
@ -8913,12 +8913,12 @@ public class Cassandra {
if (this.keys != null) {
oprot.writeFieldBegin(KEYS_FIELD_DESC);
{
oprot.writeSetBegin(new TSet(TType.STRING, this.keys.size()));
oprot.writeListBegin(new TList(TType.STRING, this.keys.size()));
for (byte[] _iter45 : this.keys)
{
oprot.writeBinary(_iter45);
}
oprot.writeSetEnd();
oprot.writeListEnd();
}
oprot.writeFieldEnd();
}
@ -9614,12 +9614,12 @@ public class Cassandra {
public static class multiget_count_args implements TBase<multiget_count_args, multiget_count_args._Fields>, java.io.Serializable, Cloneable {
private static final TStruct STRUCT_DESC = new TStruct("multiget_count_args");
private static final TField KEYS_FIELD_DESC = new TField("keys", TType.SET, (short)1);
private static final TField KEYS_FIELD_DESC = new TField("keys", TType.LIST, (short)1);
private static final TField COLUMN_PARENT_FIELD_DESC = new TField("column_parent", TType.STRUCT, (short)2);
private static final TField PREDICATE_FIELD_DESC = new TField("predicate", TType.STRUCT, (short)3);
private static final TField CONSISTENCY_LEVEL_FIELD_DESC = new TField("consistency_level", TType.I32, (short)4);
public Set<byte[]> keys;
public List<byte[]> keys;
public ColumnParent column_parent;
public SlicePredicate predicate;
/**
@ -9705,7 +9705,7 @@ public class Cassandra {
static {
Map<_Fields, FieldMetaData> tmpMap = new EnumMap<_Fields, FieldMetaData>(_Fields.class);
tmpMap.put(_Fields.KEYS, new FieldMetaData("keys", TFieldRequirementType.REQUIRED,
new SetMetaData(TType.SET,
new ListMetaData(TType.LIST,
new FieldValueMetaData(TType.STRING))));
tmpMap.put(_Fields.COLUMN_PARENT, new FieldMetaData("column_parent", TFieldRequirementType.REQUIRED,
new StructMetaData(TType.STRUCT, ColumnParent.class)));
@ -9723,7 +9723,7 @@ public class Cassandra {
}
public multiget_count_args(
Set<byte[]> keys,
List<byte[]> keys,
ColumnParent column_parent,
SlicePredicate predicate,
ConsistencyLevel consistency_level)
@ -9740,7 +9740,7 @@ public class Cassandra {
*/
public multiget_count_args(multiget_count_args other) {
if (other.isSetKeys()) {
Set<byte[]> __this__keys = new HashSet<byte[]>();
List<byte[]> __this__keys = new ArrayList<byte[]>();
for (byte[] other_element : other.keys) {
byte[] temp_binary_element = new byte[other_element.length];
System.arraycopy(other_element, 0, temp_binary_element, 0, other_element.length);
@ -9778,16 +9778,16 @@ public class Cassandra {
public void addToKeys(byte[] elem) {
if (this.keys == null) {
this.keys = new HashSet<byte[]>();
this.keys = new ArrayList<byte[]>();
}
this.keys.add(elem);
}
public Set<byte[]> getKeys() {
public List<byte[]> getKeys() {
return this.keys;
}
public multiget_count_args setKeys(Set<byte[]> keys) {
public multiget_count_args setKeys(List<byte[]> keys) {
this.keys = keys;
return this;
}
@ -9893,7 +9893,7 @@ public class Cassandra {
if (value == null) {
unsetKeys();
} else {
setKeys((Set<byte[]>)value);
setKeys((List<byte[]>)value);
}
break;
@ -10084,17 +10084,17 @@ public class Cassandra {
}
switch (field.id) {
case 1: // KEYS
if (field.type == TType.SET) {
if (field.type == TType.LIST) {
{
TSet _set55 = iprot.readSetBegin();
this.keys = new HashSet<byte[]>(2*_set55.size);
for (int _i56 = 0; _i56 < _set55.size; ++_i56)
TList _list55 = iprot.readListBegin();
this.keys = new ArrayList<byte[]>(_list55.size);
for (int _i56 = 0; _i56 < _list55.size; ++_i56)
{
byte[] _elem57;
_elem57 = iprot.readBinary();
this.keys.add(_elem57);
}
iprot.readSetEnd();
iprot.readListEnd();
}
} else {
TProtocolUtil.skip(iprot, field.type);
@ -10141,12 +10141,12 @@ public class Cassandra {
if (this.keys != null) {
oprot.writeFieldBegin(KEYS_FIELD_DESC);
{
oprot.writeSetBegin(new TSet(TType.STRING, this.keys.size()));
oprot.writeListBegin(new TList(TType.STRING, this.keys.size()));
for (byte[] _iter58 : this.keys)
{
oprot.writeBinary(_iter58);
}
oprot.writeSetEnd();
oprot.writeListEnd();
}
oprot.writeFieldEnd();
}

View File

@ -42,6 +42,6 @@ import org.slf4j.LoggerFactory;
public class Constants {
public static final String VERSION = "15.0.0";
public static final String VERSION = "16.0.0";
}

View File

@ -256,11 +256,10 @@ public class CassandraServer implements Cassandra.Iface
logger.debug("get_slice");
clientState.hasKeyspaceAccess(Permission.READ_VALUE);
return multigetSliceInternal(clientState.getKeyspace(), Collections.singleton(key), column_parent, predicate, consistency_level).get(key);
return multigetSliceInternal(clientState.getKeyspace(), Arrays.asList(key), column_parent, predicate, consistency_level).get(key);
}
public Map<byte[], List<ColumnOrSuperColumn>> multiget_slice(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)
public Map<byte[], List<ColumnOrSuperColumn>> multiget_slice(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)
throws InvalidRequestException, UnavailableException, TimedOutException
{
if (logger.isDebugEnabled())
@ -271,7 +270,7 @@ public class CassandraServer implements Cassandra.Iface
return multigetSliceInternal(clientState.getKeyspace(), keys, column_parent, predicate, consistency_level);
}
private Map<byte[], List<ColumnOrSuperColumn>> multigetSliceInternal(String keyspace, Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)
private Map<byte[], List<ColumnOrSuperColumn>> multigetSliceInternal(String keyspace, List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)
throws InvalidRequestException, UnavailableException, TimedOutException
{
ThriftValidation.validateColumnParent(keyspace, column_parent);
@ -338,7 +337,7 @@ public class CassandraServer implements Cassandra.Iface
return get_slice(key, column_parent, predicate, consistency_level).size();
}
public Map<byte[], Integer> multiget_count(Set<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)
public Map<byte[], Integer> multiget_count(List<byte[]> keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level)
throws InvalidRequestException, UnavailableException, TimedOutException
{
if (logger.isDebugEnabled())