You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sl...@apache.org on 2016/05/02 12:16:56 UTC
[1/2] cassandra git commit: Don't try to validate values for cell
tombstones
Repository: cassandra
Updated Branches:
refs/heads/trunk 1800a5b62 -> a62f70dd1
Don't try to validate values for cell tombstones
patch by slebresne; reviewed by blerer for CASSANDRA-11618
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c83f20a3
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c83f20a3
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c83f20a3
Branch: refs/heads/trunk
Commit: c83f20a3e426cc2c3ee957409898f0b41f19916e
Parents: 620efdc
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Apr 20 15:57:48 2016 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon May 2 12:15:01 2016 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/db/rows/AbstractCell.java | 15 ++--
test/unit/org/apache/cassandra/db/CellTest.java | 77 +++++++++++++++++++-
3 files changed, 86 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c83f20a3/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 64bcbd8..887ed19 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.0.6
+ * Potential error replaying commitlog with smallint/tinyint/date/time types (CASSANDRA-11618)
* Improve tombstone printing in sstabledump (CASSANDRA-11655)
* Fix paging for range queries where all clustering columns are specified (CASSANDRA-11669)
* Don't require HEAP_NEW_SIZE to be set when using G1 (CASSANDRA-11600)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c83f20a3/src/java/org/apache/cassandra/db/rows/AbstractCell.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/rows/AbstractCell.java b/src/java/org/apache/cassandra/db/rows/AbstractCell.java
index 882c0e0..00fc286 100644
--- a/src/java/org/apache/cassandra/db/rows/AbstractCell.java
+++ b/src/java/org/apache/cassandra/db/rows/AbstractCell.java
@@ -52,8 +52,6 @@ public abstract class AbstractCell extends Cell
public void validate()
{
- column().validateCellValue(value());
-
if (ttl() < 0)
throw new MarshalException("A TTL should not be negative");
if (localDeletionTime() < 0)
@@ -61,9 +59,16 @@ public abstract class AbstractCell extends Cell
if (isExpiring() && localDeletionTime() == NO_DELETION_TIME)
throw new MarshalException("Shoud not have a TTL without an associated local deletion time");
- // If cell is a tombstone, it shouldn't have a value.
- if (isTombstone() && value().hasRemaining())
- throw new MarshalException("A tombstone should not have a value");
+ if (isTombstone())
+ {
+ // If cell is a tombstone, it shouldn't have a value.
+ if (value().hasRemaining())
+ throw new MarshalException("A tombstone should not have a value");
+ }
+ else
+ {
+ column().validateCellValue(value());
+ }
if (path() != null)
column().validateCellPath(path());
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c83f20a3/test/unit/org/apache/cassandra/db/CellTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/CellTest.java b/test/unit/org/apache/cassandra/db/CellTest.java
index 5953255..9072f98 100644
--- a/test/unit/org/apache/cassandra/db/CellTest.java
+++ b/test/unit/org/apache/cassandra/db/CellTest.java
@@ -30,12 +30,12 @@ import org.junit.Test;
import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.cql3.ColumnIdentifier;
-import org.apache.cassandra.db.marshal.IntegerType;
-import org.apache.cassandra.db.marshal.MapType;
+import org.apache.cassandra.db.marshal.*;
import org.apache.cassandra.db.rows.*;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.SchemaLoader;
import org.apache.cassandra.schema.KeyspaceParams;
+import org.apache.cassandra.serializers.MarshalException;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
@@ -53,6 +53,8 @@ public class CellTest
.addRegularColumn("m", MapType.getInstance(IntegerType.instance, IntegerType.instance, true))
.build();
+ private static final CFMetaData fakeMetadata = CFMetaData.createFake("fakeKS", "fakeTable");
+
@BeforeClass
public static void defineSchema() throws ConfigurationException
{
@@ -60,6 +62,16 @@ public class CellTest
SchemaLoader.createKeyspace(KEYSPACE1, KeyspaceParams.simple(1), cfm, cfm2);
}
+ private static ColumnDefinition fakeColumn(String name, AbstractType<?> type)
+ {
+ return new ColumnDefinition(fakeMetadata.ksName,
+ fakeMetadata.cfName,
+ ColumnIdentifier.getInterned(name, false),
+ type,
+ ColumnDefinition.NO_POSITION,
+ ColumnDefinition.Kind.REGULAR);
+ }
+
@Test
public void testConflictingTypeEquality()
{
@@ -83,6 +95,67 @@ public class CellTest
}
}
+ private void assertValid(Cell cell)
+ {
+ try
+ {
+ cell.validate();
+ }
+ catch (Exception e)
+ {
+ Assert.fail("Cell should be valid but got error: " + e);
+ }
+ }
+
+ private void assertInvalid(Cell cell)
+ {
+ try
+ {
+ cell.validate();
+ Assert.fail("Cell " + cell + " should be invalid");
+ }
+ catch (MarshalException e)
+ {
+ // Note that we shouldn't get anything else than a MarshalException so let other escape and fail the test
+ }
+ }
+
+ @Test
+ public void testValidate()
+ {
+ ColumnDefinition c;
+
+ // Valid cells
+ c = fakeColumn("c", Int32Type.instance);
+ assertValid(BufferCell.live(fakeMetadata, c, 0, ByteBufferUtil.EMPTY_BYTE_BUFFER));
+ assertValid(BufferCell.live(fakeMetadata, c, 0, ByteBufferUtil.bytes(4)));
+
+ assertValid(BufferCell.expiring(c, 0, 4, 4, ByteBufferUtil.EMPTY_BYTE_BUFFER));
+ assertValid(BufferCell.expiring(c, 0, 4, 4, ByteBufferUtil.bytes(4)));
+
+ assertValid(BufferCell.tombstone(c, 0, 4));
+
+ // Invalid value (we don't all empty values for smallint)
+ c = fakeColumn("c", ShortType.instance);
+ assertInvalid(BufferCell.live(fakeMetadata, c, 0, ByteBufferUtil.EMPTY_BYTE_BUFFER));
+ // But this should be valid even though the underlying value is an empty BB (catches bug #11618)
+ assertValid(BufferCell.tombstone(c, 0, 4));
+ // And of course, this should be valid with a proper value
+ assertValid(BufferCell.live(fakeMetadata, c, 0, ByteBufferUtil.bytes((short)4)));
+
+ // Invalid ttl
+ assertInvalid(BufferCell.expiring(c, 0, -4, 4, ByteBufferUtil.bytes(4)));
+ // Invalid local deletion times
+ assertInvalid(BufferCell.expiring(c, 0, 4, -4, ByteBufferUtil.bytes(4)));
+ assertInvalid(BufferCell.expiring(c, 0, 4, Cell.NO_DELETION_TIME, ByteBufferUtil.bytes(4)));
+
+ c = fakeColumn("c", MapType.getInstance(Int32Type.instance, Int32Type.instance, true));
+ // Valid cell path
+ assertValid(BufferCell.live(fakeMetadata, c, 0, ByteBufferUtil.bytes(4), CellPath.create(ByteBufferUtil.bytes(4))));
+ // Invalid cell path (int values should be 0 or 4 bytes)
+ assertInvalid(BufferCell.live(fakeMetadata, c, 0, ByteBufferUtil.bytes(4), CellPath.create(ByteBufferUtil.bytes((long)4))));
+ }
+
@Test
public void testExpiringCellReconile()
{
[2/2] cassandra git commit: Merge branch 'cassandra-3.0' into trunk
Posted by sl...@apache.org.
Merge branch 'cassandra-3.0' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a62f70dd
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a62f70dd
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a62f70dd
Branch: refs/heads/trunk
Commit: a62f70dd1a8eda18368e845dcee0627df10e9191
Parents: 1800a5b c83f20a
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon May 2 12:16:42 2016 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon May 2 12:16:42 2016 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../apache/cassandra/db/rows/AbstractCell.java | 15 ++--
test/unit/org/apache/cassandra/db/CellTest.java | 77 +++++++++++++++++++-
3 files changed, 86 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a62f70dd/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index d30b7a4,887ed19..d557846
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,68 -1,5 +1,69 @@@
-3.0.6
+3.6
+ * Add units to stress ouput (CASSANDRA-11352)
+ * Fix PER PARTITION LIMIT for single and multi partitions queries (CASSANDRA-11603)
+ * Add uncompressed chunk cache for RandomAccessReader (CASSANDRA-5863)
+ * Clarify ClusteringPrefix hierarchy (CASSANDRA-11213)
+ * Always perform collision check before joining ring (CASSANDRA-10134)
+ * SSTableWriter output discrepancy (CASSANDRA-11646)
+ * Fix potential timeout in NativeTransportService.testConcurrentDestroys (CASSANDRA-10756)
+ * Support large partitions on the 3.0 sstable format (CASSANDRA-11206)
+ * Add support to rebuild from specific range (CASSANDRA-10406)
+ * Optimize the overlapping lookup by calculating all the
+ bounds in advance (CASSANDRA-11571)
+ * Support json/yaml output in noetool tablestats (CASSANDRA-5977)
+ * (stress) Add datacenter option to -node options (CASSANDRA-11591)
+ * Fix handling of empty slices (CASSANDRA-11513)
+ * Make number of cores used by cqlsh COPY visible to testing code (CASSANDRA-11437)
+ * Allow filtering on clustering columns for queries without secondary indexes (CASSANDRA-11310)
+ * Refactor Restriction hierarchy (CASSANDRA-11354)
+ * Eliminate allocations in R/W path (CASSANDRA-11421)
+ * Update Netty to 4.0.36 (CASSANDRA-11567)
+ * Fix PER PARTITION LIMIT for queries requiring post-query ordering (CASSANDRA-11556)
+ * Allow instantiation of UDTs and tuples in UDFs (CASSANDRA-10818)
+ * Support UDT in CQLSSTableWriter (CASSANDRA-10624)
+ * Support for non-frozen user-defined types, updating
+ individual fields of user-defined types (CASSANDRA-7423)
+ * Make LZ4 compression level configurable (CASSANDRA-11051)
+ * Allow per-partition LIMIT clause in CQL (CASSANDRA-7017)
+ * Make custom filtering more extensible with UserExpression (CASSANDRA-11295)
+ * Improve field-checking and error reporting in cassandra.yaml (CASSANDRA-10649)
+ * Print CAS stats in nodetool proxyhistograms (CASSANDRA-11507)
+ * More user friendly error when providing an invalid token to nodetool (CASSANDRA-9348)
+ * Add static column support to SASI index (CASSANDRA-11183)
+ * Support EQ/PREFIX queries in SASI CONTAINS mode without tokenization (CASSANDRA-11434)
+ * Support LIKE operator in prepared statements (CASSANDRA-11456)
+ * Add a command to see if a Materialized View has finished building (CASSANDRA-9967)
+ * Log endpoint and port associated with streaming operation (CASSANDRA-8777)
+ * Print sensible units for all log messages (CASSANDRA-9692)
+ * Upgrade Netty to version 4.0.34 (CASSANDRA-11096)
+ * Break the CQL grammar into separate Parser and Lexer (CASSANDRA-11372)
+ * Compress only inter-dc traffic by default (CASSANDRA-8888)
+ * Add metrics to track write amplification (CASSANDRA-11420)
+ * cassandra-stress: cannot handle "value-less" tables (CASSANDRA-7739)
+ * Add/drop multiple columns in one ALTER TABLE statement (CASSANDRA-10411)
+ * Add require_endpoint_verification opt for internode encryption (CASSANDRA-9220)
+ * Add auto import java.util for UDF code block (CASSANDRA-11392)
+ * Add --hex-format option to nodetool getsstables (CASSANDRA-11337)
+ * sstablemetadata should print sstable min/max token (CASSANDRA-7159)
+ * Do not wrap CassandraException in TriggerExecutor (CASSANDRA-9421)
+ * COPY TO should have higher double precision (CASSANDRA-11255)
+ * Stress should exit with non-zero status after failure (CASSANDRA-10340)
+ * Add client to cqlsh SHOW_SESSION (CASSANDRA-8958)
+ * Fix nodetool tablestats keyspace level metrics (CASSANDRA-11226)
+ * Store repair options in parent_repair_history (CASSANDRA-11244)
+ * Print current leveling in sstableofflinerelevel (CASSANDRA-9588)
+ * Change repair message for keyspaces with RF 1 (CASSANDRA-11203)
+ * Remove hard-coded SSL cipher suites and protocols (CASSANDRA-10508)
+ * Improve concurrency in CompactionStrategyManager (CASSANDRA-10099)
+ * (cqlsh) interpret CQL type for formatting blobs (CASSANDRA-11274)
+ * Refuse to start and print txn log information in case of disk
+ corruption (CASSANDRA-10112)
+ * Resolve some eclipse-warnings (CASSANDRA-11086)
+ * (cqlsh) Show static columns in a different color (CASSANDRA-11059)
+ * Allow to remove TTLs on table with default_time_to_live (CASSANDRA-11207)
+Merged from 3.0:
+ * Potential error replaying commitlog with smallint/tinyint/date/time types (CASSANDRA-11618)
+ * Fix queries with filtering on counter columns (CASSANDRA-11629)
* Improve tombstone printing in sstabledump (CASSANDRA-11655)
* Fix paging for range queries where all clustering columns are specified (CASSANDRA-11669)
* Don't require HEAP_NEW_SIZE to be set when using G1 (CASSANDRA-11600)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a62f70dd/src/java/org/apache/cassandra/db/rows/AbstractCell.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a62f70dd/test/unit/org/apache/cassandra/db/CellTest.java
----------------------------------------------------------------------