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 2013/01/29 19:10:09 UTC
[3/4] git commit: Fix bug in compact storage metadata handling
Fix bug in compact storage metadata handling
patch by slebresne; reviewed by jasobrown for CASSANDRA-5189
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/be36736d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/be36736d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/be36736d
Branch: refs/heads/trunk
Commit: be36736d38eb5793bab6040817260fd5c6cd166b
Parents: 4feb87d
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Tue Jan 29 19:08:41 2013 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Tue Jan 29 19:08:41 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../statements/CreateColumnFamilyStatement.java | 14 ++++++++------
2 files changed, 9 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/be36736d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 46d79cc..e1af9ee 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
1.2.2
* fix symlinks under data dir not working (CASSANDRA-5185)
+ * fix bug in compact storage metadata handling (CASSANDRA-5189)
1.2.1
* stream undelivered hints on decommission (CASSANDRA-5128)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/be36736d/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
index 4b96167..483e083 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateColumnFamilyStatement.java
@@ -276,13 +276,10 @@ public class CreateColumnFamilyStatement extends SchemaAlteringStatement
}
}
- if (useCompactStorage && stmt.columns.size() <= 1)
+ if (useCompactStorage && !stmt.columnAliases.isEmpty())
{
if (stmt.columns.isEmpty())
{
- if (columnAliases.isEmpty())
- throw new InvalidRequestException(String.format("COMPACT STORAGE with non-composite PRIMARY KEY require one column not part of the PRIMARY KEY (got: %s)", StringUtils.join(stmt.columns.keySet(), ", ")));
-
// The only value we'll insert will be the empty one, so the default validator don't matter
stmt.defaultValidator = BytesType.instance;
// We need to distinguish between
@@ -293,6 +290,9 @@ public class CreateColumnFamilyStatement extends SchemaAlteringStatement
}
else
{
+ if (stmt.columns.size() > 1)
+ throw new InvalidRequestException(String.format("COMPACT STORAGE with composite PRIMARY KEY allows no more than one column not part of the PRIMARY KEY (got: %s)", StringUtils.join(stmt.columns.keySet(), ", ")));
+
Map.Entry<ColumnIdentifier, AbstractType> lastEntry = stmt.columns.entrySet().iterator().next();
stmt.defaultValidator = lastEntry.getValue();
stmt.valueAlias = lastEntry.getKey().key;
@@ -301,8 +301,10 @@ public class CreateColumnFamilyStatement extends SchemaAlteringStatement
}
else
{
- if (useCompactStorage && !columnAliases.isEmpty())
- throw new InvalidRequestException(String.format("COMPACT STORAGE with composite PRIMARY KEY allows no more than one column not part of the PRIMARY KEY (got: %s)", StringUtils.join(stmt.columns.keySet(), ", ")));
+ // For compact, we are in the "static" case, so we need at least one column defined. For non-compact however, having
+ // just the PK is fine since we have CQL3 row marker.
+ if (useCompactStorage && stmt.columns.isEmpty())
+ throw new InvalidRequestException("COMPACT STORAGE with non-composite PRIMARY KEY require one column not part of the PRIMARY KEY, none given");
// There is no way to insert/access a column that is not defined for non-compact storage, so
// the actual validator don't matter much (except that we want to recognize counter CF as limitation apply to them).