Repository: cassandra Updated Branches: refs/heads/cassandra-2.1 c93765772 -> 1d285eada
Handle negative timestamps in writetime method patch by slebresne; reviewed by thobbs for CASSANDRA-8139 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/748b01d1 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/748b01d1 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/748b01d1 Branch: refs/heads/cassandra-2.1 Commit: 748b01d1d6c6591d0a241ced3f0f729a84ee3ef6 Parents: 1b332bc Author: Sylvain Lebresne <sylv...@datastax.com> Authored: Wed Oct 29 10:34:26 2014 +0100 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Wed Oct 29 10:34:26 2014 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + src/java/org/apache/cassandra/cql3/UpdateParameters.java | 6 ++++++ src/java/org/apache/cassandra/cql3/statements/Selection.java | 4 ++-- 3 files changed, 9 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/748b01d1/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 11f6517..d2cb003 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.12: + * Handle negative timestamp in writetime method (CASSANDRA-8139) * Pig: Remove errant LIMIT clause in CqlNativeStorage (CASSANDRA-8166) * Throw ConfigurationException when hsha is used with the default rpc_max_threads setting of 'unlimited' (CASSANDRA-8116) http://git-wip-us.apache.org/repos/asf/cassandra/blob/748b01d1/src/java/org/apache/cassandra/cql3/UpdateParameters.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/UpdateParameters.java b/src/java/org/apache/cassandra/cql3/UpdateParameters.java index c543d6c..6c71911 100644 --- a/src/java/org/apache/cassandra/cql3/UpdateParameters.java +++ b/src/java/org/apache/cassandra/cql3/UpdateParameters.java @@ -43,6 +43,7 @@ public class UpdateParameters private final Map<ByteBuffer, ColumnGroupMap> prefetchedLists; public UpdateParameters(CFMetaData metadata, List<ByteBuffer> variables, long timestamp, int ttl, Map<ByteBuffer, ColumnGroupMap> prefetchedLists) + throws InvalidRequestException { this.metadata = metadata; this.variables = variables; @@ -50,6 +51,11 @@ public class UpdateParameters this.ttl = ttl; this.localDeletionTime = (int)(System.currentTimeMillis() / 1000); this.prefetchedLists = prefetchedLists; + + // We use MIN_VALUE internally to mean the absence of of timestamp (in Selection, in sstable stats, ...), so exclude + // it to avoid potential confusion. + if (timestamp == Long.MIN_VALUE) + throw new InvalidRequestException(String.format("Out of bound timestamp, must be in [%d, %d]", Long.MIN_VALUE + 1, Long.MAX_VALUE)); } public Column makeColumn(ByteBuffer name, ByteBuffer value) throws InvalidRequestException http://git-wip-us.apache.org/repos/asf/cassandra/blob/748b01d1/src/java/org/apache/cassandra/cql3/statements/Selection.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/Selection.java b/src/java/org/apache/cassandra/cql3/statements/Selection.java index 37ab384..18ca177 100644 --- a/src/java/org/apache/cassandra/cql3/statements/Selection.java +++ b/src/java/org/apache/cassandra/cql3/statements/Selection.java @@ -277,7 +277,7 @@ public abstract class Selection current.add(isDead(c) ? null : value(c)); if (timestamps != null) { - timestamps[current.size() - 1] = isDead(c) ? -1 : c.timestamp(); + timestamps[current.size() - 1] = isDead(c) ? Long.MIN_VALUE : c.timestamp(); } if (ttls != null) { @@ -437,7 +437,7 @@ public abstract class Selection if (isWritetime) { long ts = rs.timestamps[idx]; - return ts >= 0 ? ByteBufferUtil.bytes(ts) : null; + return ts != Long.MIN_VALUE ? ByteBufferUtil.bytes(ts) : null; } int ttl = rs.ttls[idx];