From ec0316708be4788e2a3e0175bb5447a1aa04d790 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Sat, 18 Sep 2010 10:08:49 +0000 Subject: [PATCH] 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 --- CHANGES.txt | 1 - NEWS.txt | 3 - interface/cassandra.thrift | 6 +- .../apache/cassandra/thrift/Cassandra.java | 92 +++++++++---------- .../apache/cassandra/thrift/Constants.java | 2 +- .../cassandra/thrift/CassandraServer.java | 9 +- 6 files changed, 54 insertions(+), 59 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3d8d807975..6f0ba97807 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -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] diff --git a/NEWS.txt b/NEWS.txt index c9e58ae0e2..a91c18ba22 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -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 diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift index 2af2f33b5b..58072f1608 100644 --- a/interface/cassandra.thrift +++ b/interface/cassandra.thrift @@ -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> multiget_slice(1:required set keys, + map> multiget_slice(1:required list 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 keys. The return value maps keys to the count found. */ - map multiget_count(1:required set keys, + map multiget_count(1:required list keys, 2:required ColumnParent column_parent, 3:required SlicePredicate predicate, 4:required ConsistencyLevel consistency_level=ONE) diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java index 7270aa1d82..b5782dac77 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/Cassandra.java @@ -94,7 +94,7 @@ public class Cassandra { * @param predicate * @param consistency_level */ - public Map> multiget_slice(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException; + public Map> multiget_slice(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException; /** * Perform a get_count in parallel on the given list keys. The return value maps keys to the count found. @@ -104,7 +104,7 @@ public class Cassandra { * @param predicate * @param consistency_level */ - public Map multiget_count(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException; + public Map multiget_count(List 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 resultHandler) throws TException; - public void multiget_slice(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler) throws TException; + public void multiget_slice(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler) throws TException; - public void multiget_count(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler) throws TException; + public void multiget_count(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler) throws TException; public void get_range_slices(ColumnParent column_parent, SlicePredicate predicate, KeyRange range, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler) throws TException; @@ -613,13 +613,13 @@ public class Cassandra { throw new TApplicationException(TApplicationException.MISSING_RESULT, "get_count failed: unknown result"); } - public Map> multiget_slice(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException + public Map> multiget_slice(List 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 keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws TException + public void send_multiget_slice(List 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 multiget_count(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException, TException + public Map multiget_count(List 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 keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws TException + public void send_multiget_count(List 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 keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler) throws TException { + public void multiget_slice(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback 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 keys; + private List keys; private ColumnParent column_parent; private SlicePredicate predicate; private ConsistencyLevel consistency_level; - public multiget_slice_call(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler, TAsyncClient client, TProtocolFactory protocolFactory, TNonblockingTransport transport) throws TException { + public multiget_slice_call(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback 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 keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler) throws TException { + public void multiget_count(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback 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 keys; + private List keys; private ColumnParent column_parent; private SlicePredicate predicate; private ConsistencyLevel consistency_level; - public multiget_count_call(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback resultHandler, TAsyncClient client, TProtocolFactory protocolFactory, TNonblockingTransport transport) throws TException { + public multiget_count_call(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level, AsyncMethodCallback 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, 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 keys; + public List 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 keys, + List 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 __this__keys = new HashSet(); + List __this__keys = new ArrayList(); 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(); + this.keys = new ArrayList(); } this.keys.add(elem); } - public Set getKeys() { + public List getKeys() { return this.keys; } - public multiget_slice_args setKeys(Set keys) { + public multiget_slice_args setKeys(List keys) { this.keys = keys; return this; } @@ -8665,7 +8665,7 @@ public class Cassandra { if (value == null) { unsetKeys(); } else { - setKeys((Set)value); + setKeys((List)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(2*_set42.size); - for (int _i43 = 0; _i43 < _set42.size; ++_i43) + TList _list42 = iprot.readListBegin(); + this.keys = new ArrayList(_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, 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 keys; + public List 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 keys, + List 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 __this__keys = new HashSet(); + List __this__keys = new ArrayList(); 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(); + this.keys = new ArrayList(); } this.keys.add(elem); } - public Set getKeys() { + public List getKeys() { return this.keys; } - public multiget_count_args setKeys(Set keys) { + public multiget_count_args setKeys(List keys) { this.keys = keys; return this; } @@ -9893,7 +9893,7 @@ public class Cassandra { if (value == null) { unsetKeys(); } else { - setKeys((Set)value); + setKeys((List)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(2*_set55.size); - for (int _i56 = 0; _i56 < _set55.size; ++_i56) + TList _list55 = iprot.readListBegin(); + this.keys = new ArrayList(_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(); } diff --git a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java index 42c6d950f0..59c83e35e5 100644 --- a/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java +++ b/interface/thrift/gen-java/org/apache/cassandra/thrift/Constants.java @@ -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"; } diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java index 776cf3fa06..944c42d454 100644 --- a/src/java/org/apache/cassandra/thrift/CassandraServer.java +++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java @@ -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> multiget_slice(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) + public Map> multiget_slice(List 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> multigetSliceInternal(String keyspace, Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) + private Map> multigetSliceInternal(String keyspace, List 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 multiget_count(Set keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) + public Map multiget_count(List keys, ColumnParent column_parent, SlicePredicate predicate, ConsistencyLevel consistency_level) throws InvalidRequestException, UnavailableException, TimedOutException { if (logger.isDebugEnabled())