Merge branch 'cassandra-2.0' into cassandra-2.1
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/049a965b Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/049a965b Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/049a965b Branch: refs/heads/trunk Commit: 049a965bf1e57d30cac13141bdf228268765ebeb Parents: 2c8e810 58de86b Author: Tyler Hobbs <tylerho...@apache.org> Authored: Thu May 7 10:31:52 2015 -0500 Committer: Tyler Hobbs <tylerho...@apache.org> Committed: Thu May 7 10:31:52 2015 -0500 ---------------------------------------------------------------------- CHANGES.txt | 3 ++- src/java/org/apache/cassandra/db/PagedRangeCommand.java | 7 +++++++ src/java/org/apache/cassandra/db/RangeSliceCommand.java | 7 +++++++ src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java | 7 +++++++ src/java/org/apache/cassandra/db/SliceFromReadCommand.java | 7 +++++++ 5 files changed, 30 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/CHANGES.txt ---------------------------------------------------------------------- diff --cc CHANGES.txt index 41e0340,8473777..d512973 --- a/CHANGES.txt +++ b/CHANGES.txt @@@ -1,21 -1,6 +1,22 @@@ -2.0.15: +2.1.6 + * Improve sstable exclusion from partition tombstones (CASSANDRA-9298) + * Validate the indexed column rather than the cell's contents for 2i (CASSANDRA-9057) + * Add support for top-k custom 2i queries (CASSANDRA-8717) + * Fix error when dropping table during compaction (CASSANDRA-9251) + * cassandra-stress supports validation operations over user profiles (CASSANDRA-8773) + * Add support for rate limiting log messages (CASSANDRA-9029) + * Log the partition key with tombstone warnings (CASSANDRA-8561) + * Reduce runWithCompactionsDisabled poll interval to 1ms (CASSANDRA-9271) + * Fix PITR commitlog replay (CASSANDRA-9195) + * GCInspector logs very different times (CASSANDRA-9124) + * Fix deleting from an empty list (CASSANDRA-9198) + * Update tuple and collection types that use a user-defined type when that UDT + is modified (CASSANDRA-9148, CASSANDRA-9192) + * Use higher timeout for prepair and snapshot in repair (CASSANDRA-9261) + * Fix anticompaction blocking ANTI_ENTROPY stage (CASSANDRA-9151) +Merged from 2.0: - 2.0.15: + * Log warning message when a table is queried before the schema has fully + propagated (CASSANDRA-9136) * Overload SecondaryIndex#indexes to accept the column definition (CASSANDRA-9314) * (cqlsh) Add SERIAL and LOCAL_SERIAL consistency levels (CASSANDRA-8051) * Fix index selection during rebuild with certain table layouts (CASSANDRA-9281) http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/PagedRangeCommand.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/db/PagedRangeCommand.java index 614f0f7,3bc6539..70325a8 --- a/src/java/org/apache/cassandra/db/PagedRangeCommand.java +++ b/src/java/org/apache/cassandra/db/PagedRangeCommand.java @@@ -156,16 -154,23 +156,23 @@@ public class PagedRangeCommand extends { String keyspace = in.readUTF(); String columnFamily = in.readUTF(); + long timestamp = in.readLong(); - if (Schema.instance.getCFMetaData(keyspace, columnFamily) == null) + AbstractBounds<RowPosition> keyRange = AbstractBounds.serializer.deserialize(in, version).toRowBounds(); + + CFMetaData metadata = Schema.instance.getCFMetaData(keyspace, columnFamily); ++ if (metadata == null) + { + String message = String.format("Got paged range command for nonexistent table %s.%s. If the table was just " + + "created, this is likely due to the schema not being fully propagated. Please wait for schema " + + "agreement on table creation." , keyspace, columnFamily); + throw new UnknownColumnFamilyException(message, null); + } - long timestamp = in.readLong(); + SliceQueryFilter predicate = metadata.comparator.sliceQueryFilterSerializer().deserialize(in, version); - AbstractBounds<RowPosition> keyRange = AbstractBounds.serializer.deserialize(in, version).toRowBounds(); - - SliceQueryFilter predicate = SliceQueryFilter.serializer.deserialize(in, version); - - ByteBuffer start = ByteBufferUtil.readWithShortLength(in); - ByteBuffer stop = ByteBufferUtil.readWithShortLength(in); + Composite start = metadata.comparator.serializer().deserialize(in); + Composite stop = metadata.comparator.serializer().deserialize(in); int filterCount = in.readInt(); List<IndexExpression> rowFilter = new ArrayList<IndexExpression>(filterCount); http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/RangeSliceCommand.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/db/RangeSliceCommand.java index 4d2955b,553f111..a7da39f --- a/src/java/org/apache/cassandra/db/RangeSliceCommand.java +++ b/src/java/org/apache/cassandra/db/RangeSliceCommand.java @@@ -182,11 -209,50 +182,18 @@@ class RangeSliceCommandSerializer imple { String keyspace = in.readUTF(); String columnFamily = in.readUTF(); - - long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong(); + long timestamp = in.readLong(); CFMetaData metadata = Schema.instance.getCFMetaData(keyspace, columnFamily); + if (metadata == null) + { + String message = String.format("Got range slice command for nonexistent table %s.%s. If the table was just " + + "created, this is likely due to the schema not being fully propagated. Please wait for schema " + + "agreement on table creation." , keyspace, columnFamily); + throw new UnknownColumnFamilyException(message, null); + } - IDiskAtomFilter predicate; - if (version < MessagingService.VERSION_20) - { - int scLength = in.readInt(); - ByteBuffer superColumn = null; - if (scLength > 0) - { - byte[] buf = new byte[scLength]; - in.readFully(buf); - superColumn = ByteBuffer.wrap(buf); - } - - AbstractType<?> comparator; - if (metadata.cfType == ColumnFamilyType.Super) - { - CompositeType type = (CompositeType)metadata.comparator; - comparator = superColumn == null ? type.types.get(0) : type.types.get(1); - } - else - { - comparator = metadata.comparator; - } - - predicate = IDiskAtomFilter.Serializer.instance.deserialize(in, version, comparator); - - if (metadata.cfType == ColumnFamilyType.Super) - predicate = SuperColumns.fromSCFilter((CompositeType)metadata.comparator, superColumn, predicate); - } - else - { - predicate = IDiskAtomFilter.Serializer.instance.deserialize(in, version, metadata.comparator); - } + IDiskAtomFilter predicate = metadata.comparator.diskAtomFilterSerializer().deserialize(in, version); List<IndexExpression> rowFilter; int filterCount = in.readInt(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java index 22f795e,ec7c439..65eefaa --- a/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java +++ b/src/java/org/apache/cassandra/db/SliceByNamesReadCommand.java @@@ -91,11 -103,64 +91,18 @@@ class SliceByNamesReadCommandSerialize boolean isDigest = in.readBoolean(); String keyspaceName = in.readUTF(); ByteBuffer key = ByteBufferUtil.readWithShortLength(in); - - String cfName; - ByteBuffer sc = null; - if (version < MessagingService.VERSION_20) - { - QueryPath path = QueryPath.deserialize(in); - cfName = path.columnFamilyName; - sc = path.superColumnName; - } - else - { - cfName = in.readUTF(); - } - - long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong(); - + String cfName = in.readUTF(); + long timestamp = in.readLong(); CFMetaData metadata = Schema.instance.getCFMetaData(keyspaceName, cfName); + if (metadata == null) + { + String message = String.format("Got slice command for nonexistent table %s.%s. If the table was just " + + "created, this is likely due to the schema not being fully propagated. Please wait for schema " + - "agreement on table creation." , keyspaceName, cfName); ++ "agreement on table creation.", keyspaceName, cfName); + throw new UnknownColumnFamilyException(message, null); + } - - ReadCommand command; - if (version < MessagingService.VERSION_20) - { - AbstractType<?> comparator; - if (metadata.cfType == ColumnFamilyType.Super) - { - CompositeType type = (CompositeType)metadata.comparator; - comparator = sc == null ? type.types.get(0) : type.types.get(1); - } - else - { - comparator = metadata.comparator; - } - - IDiskAtomFilter filter = NamesQueryFilter.serializer.deserialize(in, version, comparator); - - if (metadata.cfType == ColumnFamilyType.Super) - filter = SuperColumns.fromSCFilter((CompositeType)metadata.comparator, sc, filter); - - // Due to SC compat, it's possible we get back a slice filter at this point - if (filter instanceof NamesQueryFilter) - command = new SliceByNamesReadCommand(keyspaceName, key, cfName, timestamp, (NamesQueryFilter)filter); - else - command = new SliceFromReadCommand(keyspaceName, key, cfName, timestamp, (SliceQueryFilter)filter); - } - else - { - NamesQueryFilter filter = NamesQueryFilter.serializer.deserialize(in, version, metadata.comparator); - command = new SliceByNamesReadCommand(keyspaceName, key, cfName, timestamp, filter); - } - - command.setDigestQuery(isDigest); - return command; + NamesQueryFilter filter = metadata.comparator.namesQueryFilterSerializer().deserialize(in, version); + return new SliceByNamesReadCommand(keyspaceName, key, cfName, timestamp, filter).setIsDigestQuery(isDigest); } public long serializedSize(ReadCommand cmd, int version) http://git-wip-us.apache.org/repos/asf/cassandra/blob/049a965b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java ---------------------------------------------------------------------- diff --cc src/java/org/apache/cassandra/db/SliceFromReadCommand.java index 2259f22,afca338..80a624d --- a/src/java/org/apache/cassandra/db/SliceFromReadCommand.java +++ b/src/java/org/apache/cassandra/db/SliceFromReadCommand.java @@@ -145,11 -164,47 +145,18 @@@ class SliceFromReadCommandSerializer im boolean isDigest = in.readBoolean(); String keyspaceName = in.readUTF(); ByteBuffer key = ByteBufferUtil.readWithShortLength(in); - - String cfName; - ByteBuffer sc = null; - if (version < MessagingService.VERSION_20) - { - QueryPath path = QueryPath.deserialize(in); - cfName = path.columnFamilyName; - sc = path.superColumnName; - } - else - { - cfName = in.readUTF(); - } - - long timestamp = version < MessagingService.VERSION_20 ? System.currentTimeMillis() : in.readLong(); - + String cfName = in.readUTF(); + long timestamp = in.readLong(); CFMetaData metadata = Schema.instance.getCFMetaData(keyspaceName, cfName); + if (metadata == null) + { + String message = String.format("Got slice command for nonexistent table %s.%s. If the table was just " + + "created, this is likely due to the schema not being fully propagated. Please wait for schema " + - "agreement on table creation." , keyspaceName, cfName); ++ "agreement on table creation.", keyspaceName, cfName); + throw new UnknownColumnFamilyException(message, null); + } - - SliceQueryFilter filter; - if (version < MessagingService.VERSION_20) - { - filter = SliceQueryFilter.serializer.deserialize(in, version); - - if (metadata.cfType == ColumnFamilyType.Super) - filter = SuperColumns.fromSCSliceFilter((CompositeType)metadata.comparator, sc, filter); - } - else - { - filter = SliceQueryFilter.serializer.deserialize(in, version); - } - - ReadCommand command = new SliceFromReadCommand(keyspaceName, key, cfName, timestamp, filter); - command.setDigestQuery(isDigest); - return command; + SliceQueryFilter filter = metadata.comparator.sliceQueryFilterSerializer().deserialize(in, version); + return new SliceFromReadCommand(keyspaceName, key, cfName, timestamp, filter).setIsDigestQuery(isDigest); } public long serializedSize(ReadCommand cmd, int version)