Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id A9A381781F for ; Fri, 30 Jan 2015 22:41:32 +0000 (UTC) Received: (qmail 54880 invoked by uid 500); 30 Jan 2015 22:41:33 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 54833 invoked by uid 500); 30 Jan 2015 22:41:33 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 54807 invoked by uid 99); 30 Jan 2015 22:41:33 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 30 Jan 2015 22:41:33 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 01203E00AA; Fri, 30 Jan 2015 22:41:32 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: tylerhobbs@apache.org To: commits@cassandra.apache.org Date: Fri, 30 Jan 2015 22:41:33 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [2/3] cassandra git commit: Disallow default_time_to_live on counter tables Disallow default_time_to_live on counter tables Patch by Jeff Jirsa; reviewed by Tyler Hobbs for CASSANDRA-8678 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d0005a83 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d0005a83 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d0005a83 Branch: refs/heads/cassandra-2.1 Commit: d0005a83ef9bfc1042747cbe45708ded1f2002ba Parents: 6ae8ada Author: Jeff Jirsa Authored: Fri Jan 30 16:33:56 2015 -0600 Committer: Tyler Hobbs Committed: Fri Jan 30 16:33:56 2015 -0600 ---------------------------------------------------------------------- CHANGES.txt | 5 ++++- src/java/org/apache/cassandra/config/CFMetaData.java | 5 +++++ .../apache/cassandra/cql3/statements/AlterTableStatement.java | 4 ++++ src/java/org/apache/cassandra/cql3/statements/CFPropDefs.java | 5 +++++ .../apache/cassandra/cql3/statements/CreateTableStatement.java | 6 ++++++ src/java/org/apache/cassandra/db/marshal/AbstractType.java | 5 +++++ .../org/apache/cassandra/db/marshal/CounterColumnType.java | 5 +++++ 7 files changed, 34 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/d0005a83/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 7fa5f63..4754867 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,8 @@ 2.0.13: - * Fix SSTableSimpleUnsortedWriter ConcurrentModificationException (CASSANDRA-8619) + * Prevent non-zero default_time_to_live on tables with counters + (CASSANDRA-8678) + * Fix SSTableSimpleUnsortedWriter ConcurrentModificationException + (CASSANDRA-8619) * Round up time deltas lower than 1ms in BulkLoader (CASSANDRA-8645) * Add batch remove iterator to ABSC (CASSANDRA-8414, 8666) http://git-wip-us.apache.org/repos/asf/cassandra/blob/d0005a83/src/java/org/apache/cassandra/config/CFMetaData.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java index 9d69710..04a5b01 100644 --- a/src/java/org/apache/cassandra/config/CFMetaData.java +++ b/src/java/org/apache/cassandra/config/CFMetaData.java @@ -2192,6 +2192,11 @@ public final class CFMetaData return true; } + public boolean isCounter() + { + return defaultValidator.isCounter(); + } + public boolean hasStaticColumns() { return !staticColumns.isEmpty(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/d0005a83/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java index 32f949f..f74670f 100644 --- a/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/AlterTableStatement.java @@ -268,6 +268,10 @@ public class AlterTableStatement extends SchemaAlteringStatement throw new InvalidRequestException(String.format("ALTER COLUMNFAMILY WITH invoked, but no parameters found")); cfProps.validate(); + + if (meta.isCounter() && cfProps.getDefaultTimeToLive() > 0) + throw new InvalidRequestException("Cannot set default_time_to_live on a table with counters"); + cfProps.applyToCFMetadata(cfm); break; case RENAME: http://git-wip-us.apache.org/repos/asf/cassandra/blob/d0005a83/src/java/org/apache/cassandra/cql3/statements/CFPropDefs.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/CFPropDefs.java b/src/java/org/apache/cassandra/cql3/statements/CFPropDefs.java index 6ce6406..11aa9b2 100644 --- a/src/java/org/apache/cassandra/cql3/statements/CFPropDefs.java +++ b/src/java/org/apache/cassandra/cql3/statements/CFPropDefs.java @@ -138,6 +138,11 @@ public class CFPropDefs extends PropertyDefinitions return compressionOptions; } + public Integer getDefaultTimeToLive() throws SyntaxException + { + return getInt(KW_DEFAULT_TIME_TO_LIVE, 0); + } + public void applyToCFMetadata(CFMetaData cfm) throws ConfigurationException, SyntaxException { if (hasProperty(KW_COMMENT)) http://git-wip-us.apache.org/repos/asf/cassandra/blob/d0005a83/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java index 5160d6f..5215118 100644 --- a/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java +++ b/src/java/org/apache/cassandra/cql3/statements/CreateTableStatement.java @@ -207,6 +207,7 @@ public class CreateTableStatement extends SchemaAlteringStatement CreateTableStatement stmt = new CreateTableStatement(cfName, properties, ifNotExists, staticColumns); + boolean hasCounters = false; Map definedCollections = null; for (Map.Entry entry : definitions.entrySet()) { @@ -218,6 +219,9 @@ public class CreateTableStatement extends SchemaAlteringStatement definedCollections = new HashMap(); definedCollections.put(id.key, (CollectionType)pt.getType()); } + else if (entry.getValue().isCounter()) + hasCounters = true; + stmt.columns.put(id, pt.getType()); // we'll remove what is not a column below } @@ -225,6 +229,8 @@ public class CreateTableStatement extends SchemaAlteringStatement throw new InvalidRequestException("No PRIMARY KEY specifed (exactly one required)"); else if (keyAliases.size() > 1) throw new InvalidRequestException("Multiple PRIMARY KEYs specifed (exactly one required)"); + else if (hasCounters && properties.getDefaultTimeToLive() > 0) + throw new InvalidRequestException("Cannot set default_time_to_live on a table with counters"); List kAliases = keyAliases.get(0); http://git-wip-us.apache.org/repos/asf/cassandra/blob/d0005a83/src/java/org/apache/cassandra/db/marshal/AbstractType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/marshal/AbstractType.java b/src/java/org/apache/cassandra/db/marshal/AbstractType.java index e92f272..dce521b 100644 --- a/src/java/org/apache/cassandra/db/marshal/AbstractType.java +++ b/src/java/org/apache/cassandra/db/marshal/AbstractType.java @@ -212,6 +212,11 @@ public abstract class AbstractType implements Comparator return false; } + public boolean isCounter() + { + return false; + } + public static AbstractType parseDefaultParameters(AbstractType baseType, TypeParser parser) throws SyntaxException { Map parameters = parser.getKeyValueParameters(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/d0005a83/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java b/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java index 6a77458..1ecdad9 100644 --- a/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java +++ b/src/java/org/apache/cassandra/db/marshal/CounterColumnType.java @@ -31,6 +31,11 @@ public class CounterColumnType extends AbstractCommutativeType CounterColumnType() {} // singleton + public boolean isCounter() + { + return true; + } + public int compare(ByteBuffer o1, ByteBuffer o2) { if (o1 == null)