You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by db...@apache.org on 2012/10/10 04:08:34 UTC
[2/2] git commit: preflight check ttl for maximum of 20 years patch
by dbrosius reviewed by slebresne for cassandra-4771
preflight check ttl for maximum of 20 years
patch by dbrosius reviewed by slebresne for cassandra-4771
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/46fc843b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/46fc843b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/46fc843b
Branch: refs/heads/trunk
Commit: 46fc843bbd39bf6b007fb6d1c8e823f8b3ba2425
Parents: f34bd79
Author: Dave Brosius <db...@apache.org>
Authored: Tue Oct 9 21:57:17 2012 -0400
Committer: Dave Brosius <db...@apache.org>
Committed: Tue Oct 9 21:57:17 2012 -0400
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/statements/ModificationStatement.java | 5 +++-
.../org/apache/cassandra/db/ExpiringColumn.java | 2 +
.../apache/cassandra/thrift/ThriftValidation.java | 20 +++++++++------
4 files changed, 19 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46fc843b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f3ef292..7863d56 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
1.1.6
+ * preflight check ttl for maximum of 20 years (CASSANDRA-4771)
* Fix HH to compact with correct gcBefore, which avoids wiping out
undelivered hints (CASSANDRA-4772)
* LCS will merge up to 32 L0 sstables as intended (CASSANDRA-4778)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46fc843b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
index e47f7f2..23d96e0 100644
--- a/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/ModificationStatement.java
@@ -25,7 +25,7 @@ import java.util.concurrent.TimeoutException;
import org.apache.cassandra.auth.Permission;
import org.apache.cassandra.cql3.*;
import org.apache.cassandra.db.IMutation;
-import org.apache.cassandra.db.marshal.AbstractType;
+import org.apache.cassandra.db.ExpiringColumn;
import org.apache.cassandra.service.ClientState;
import org.apache.cassandra.service.StorageProxy;
import org.apache.cassandra.thrift.ConsistencyLevel;
@@ -70,6 +70,9 @@ public abstract class ModificationStatement extends CFStatement implements CQLSt
if (timeToLive < 0)
throw new InvalidRequestException("A TTL must be greater or equal to 0");
+ if (timeToLive > ExpiringColumn.MAX_TTL)
+ throw new InvalidRequestException(String.format("ttl is too large. requested (%d) maximum (%d)", timeToLive, ExpiringColumn.MAX_TTL));
+
ThriftValidation.validateConsistencyLevel(keyspace(), getConsistencyLevel(), RequestType.WRITE);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46fc843b/src/java/org/apache/cassandra/db/ExpiringColumn.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ExpiringColumn.java b/src/java/org/apache/cassandra/db/ExpiringColumn.java
index 2eb981d..fe1b57c 100644
--- a/src/java/org/apache/cassandra/db/ExpiringColumn.java
+++ b/src/java/org/apache/cassandra/db/ExpiringColumn.java
@@ -43,6 +43,8 @@ import org.apache.cassandra.utils.HeapAllocator;
*/
public class ExpiringColumn extends Column
{
+ public static final int MAX_TTL = 20 * 365 * 24 * 60 * 60; // 20 years in seconds
+
private final int localExpirationTime;
private final int timeToLive;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/46fc843b/src/java/org/apache/cassandra/thrift/ThriftValidation.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/ThriftValidation.java b/src/java/org/apache/cassandra/thrift/ThriftValidation.java
index fe53060..c673a9c 100644
--- a/src/java/org/apache/cassandra/thrift/ThriftValidation.java
+++ b/src/java/org/apache/cassandra/thrift/ThriftValidation.java
@@ -29,15 +29,12 @@ import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.*;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.marshal.AbstractType;
-import org.apache.cassandra.db.marshal.AsciiType;
import org.apache.cassandra.db.marshal.MarshalException;
-import org.apache.cassandra.db.marshal.TypeParser;
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.dht.RandomPartitioner;
import org.apache.cassandra.dht.Token;
import org.apache.cassandra.locator.*;
import org.apache.cassandra.service.StorageService;
-import org.apache.cassandra.io.compress.CompressionParameters;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
@@ -337,12 +334,19 @@ public class ThriftValidation
private static void validateTtl(Column column) throws InvalidRequestException
{
- if (column.isSetTtl() && column.ttl <= 0)
+ if (column.isSetTtl())
{
- throw new InvalidRequestException("ttl must be positive");
+ if (column.ttl <= 0)
+ throw new InvalidRequestException("ttl must be positive");
+
+ if (column.ttl > ExpiringColumn.MAX_TTL)
+ throw new InvalidRequestException(String.format("ttl is too large. requested (%d) maximum (%d)", column.ttl, ExpiringColumn.MAX_TTL));
+ }
+ else
+ {
+ // if it's not set, then it should be zero -- here we are just checking to make sure Thrift doesn't change that contract with us.
+ assert column.ttl == 0;
}
- // if it's not set, then it should be zero -- here we are just checking to make sure Thrift doesn't change that contract with us.
- assert column.isSetTtl() || column.ttl == 0;
}
public static void validateMutation(CFMetaData metadata, Mutation mut)
@@ -441,7 +445,7 @@ public class ThriftValidation
(isSubColumn ? metadata.subcolumnComparator : metadata.comparator).getString(column.name)));
}
- // Indexed column values cannot be larger than 64K. See CASSANDRA-3057/4240 for more details
+ // Indexed column values cannot be larger than 64K. See CASSANDRA-3057/4240 for more details
if (!Table.open(metadata.ksName).getColumnFamilyStore(metadata.cfName).indexManager.validate(column))
throw new InvalidRequestException(String.format("Can't index column value of size %d for index %s in CF %s of KS %s",
column.value.remaining(),