You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by sn...@apache.org on 2015/09/18 09:54:32 UTC
[1/3] cassandra git commit: Prevent ALTER TYPE from creating circular
references
Repository: cassandra
Updated Branches:
refs/heads/cassandra-3.0 6e5d16b37 -> e6f23e63c
Prevent ALTER TYPE from creating circular references
patch by Robert Stupp; reviewed by Sylvain Lebresne for CASSANDRA-10339
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/98c4a7cd
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/98c4a7cd
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/98c4a7cd
Branch: refs/heads/cassandra-3.0
Commit: 98c4a7cd02022c55f174da16d074e3fc62203aac
Parents: 0b8b67b
Author: Robert Stupp <sn...@snazy.de>
Authored: Fri Sep 18 09:48:17 2015 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Fri Sep 18 09:48:17 2015 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/statements/AlterTypeStatement.java | 6 ++-
.../cassandra/db/marshal/AbstractType.java | 8 ++++
.../cassandra/db/marshal/CompositeType.java | 11 +++++
.../apache/cassandra/db/marshal/ListType.java | 6 +++
.../apache/cassandra/db/marshal/MapType.java | 6 +++
.../cassandra/db/marshal/ReversedType.java | 5 ++
.../apache/cassandra/db/marshal/SetType.java | 6 +++
.../apache/cassandra/db/marshal/TupleType.java | 13 +++++-
.../cql3/validation/entities/UserTypesTest.java | 49 ++++++++++++++++++++
10 files changed, 108 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e2dd83a..166106d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.1.10
+ * Prevent ALTER TYPE from creating circular references (CASSANDRA-10339)
* Fix cache handling of 2i and base tables (CASSANDRA-10155, 10359)
* Fix NPE in nodetool compactionhistory (CASSANDRA-9758)
* (Pig) support BulkOutputFormat as a URL parameter (CASSANDRA-7410)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/src/java/org/apache/cassandra/cql3/statements/AlterTypeStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/AlterTypeStatement.java b/src/java/org/apache/cassandra/cql3/statements/AlterTypeStatement.java
index 74fafd6..6459e6b 100644
--- a/src/java/org/apache/cassandra/cql3/statements/AlterTypeStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/AlterTypeStatement.java
@@ -294,9 +294,13 @@ public abstract class AlterTypeStatement extends SchemaAlteringStatement
newNames.addAll(toUpdate.fieldNames());
newNames.add(fieldName.bytes);
+ AbstractType<?> addType = type.prepare(keyspace()).getType();
+ if (addType.references(toUpdate))
+ throw new InvalidRequestException(String.format("Cannot add new field %s of type %s to type %s as this would create a circular reference", fieldName, type, name));
+
List<AbstractType<?>> newTypes = new ArrayList<>(toUpdate.size() + 1);
newTypes.addAll(toUpdate.fieldTypes());
- newTypes.add(type.prepare(keyspace()).getType());
+ newTypes.add(addType);
return new UserType(toUpdate.keyspace, toUpdate.name, newNames, newTypes);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/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 863cd47..bcb33dc 100644
--- a/src/java/org/apache/cassandra/db/marshal/AbstractType.java
+++ b/src/java/org/apache/cassandra/db/marshal/AbstractType.java
@@ -262,6 +262,14 @@ public abstract class AbstractType<T> implements Comparator<ByteBuffer>
}
/**
+ * Checks whether this type or any of the types this type contains references the given type.
+ */
+ public boolean references(AbstractType<?> check)
+ {
+ return this.equals(check);
+ }
+
+ /**
* This must be overriden by subclasses if necessary so that for any
* AbstractType, this == TypeParser.parse(toString()).
*
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/src/java/org/apache/cassandra/db/marshal/CompositeType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/CompositeType.java b/src/java/org/apache/cassandra/db/marshal/CompositeType.java
index 9ee9fb3..f8ac22d 100644
--- a/src/java/org/apache/cassandra/db/marshal/CompositeType.java
+++ b/src/java/org/apache/cassandra/db/marshal/CompositeType.java
@@ -115,6 +115,17 @@ public class CompositeType extends AbstractCompositeType
this.types = ImmutableList.copyOf(types);
}
+ @Override
+ public boolean references(AbstractType<?> check)
+ {
+ if (super.references(check))
+ return true;
+ for (AbstractType<?> type : types)
+ if (type.references(check))
+ return true;
+ return false;
+ }
+
protected AbstractType<?> getComparator(int i, ByteBuffer bb)
{
try
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/src/java/org/apache/cassandra/db/marshal/ListType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/ListType.java b/src/java/org/apache/cassandra/db/marshal/ListType.java
index 510a526..c2f36c0 100644
--- a/src/java/org/apache/cassandra/db/marshal/ListType.java
+++ b/src/java/org/apache/cassandra/db/marshal/ListType.java
@@ -69,6 +69,12 @@ public class ListType<T> extends CollectionType<List<T>>
this.isMultiCell = isMultiCell;
}
+ @Override
+ public boolean references(AbstractType<?> check)
+ {
+ return super.references(check) || elements.references(check);
+ }
+
public AbstractType<T> getElementsType()
{
return elements;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/src/java/org/apache/cassandra/db/marshal/MapType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/MapType.java b/src/java/org/apache/cassandra/db/marshal/MapType.java
index 64f3e2a..0fb545d 100644
--- a/src/java/org/apache/cassandra/db/marshal/MapType.java
+++ b/src/java/org/apache/cassandra/db/marshal/MapType.java
@@ -70,6 +70,12 @@ public class MapType<K, V> extends CollectionType<Map<K, V>>
this.isMultiCell = isMultiCell;
}
+ @Override
+ public boolean references(AbstractType<?> check)
+ {
+ return super.references(check) || keys.references(check) || values.references(check);
+ }
+
public AbstractType<K> getKeysType()
{
return keys;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/src/java/org/apache/cassandra/db/marshal/ReversedType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/ReversedType.java b/src/java/org/apache/cassandra/db/marshal/ReversedType.java
index 1323dc6..0389a32 100644
--- a/src/java/org/apache/cassandra/db/marshal/ReversedType.java
+++ b/src/java/org/apache/cassandra/db/marshal/ReversedType.java
@@ -109,6 +109,11 @@ public class ReversedType<T> extends AbstractType<T>
return baseType.getSerializer();
}
+ public boolean references(AbstractType<?> check)
+ {
+ return super.references(check) || baseType.references(check);
+ }
+
@Override
public String toString()
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/src/java/org/apache/cassandra/db/marshal/SetType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/SetType.java b/src/java/org/apache/cassandra/db/marshal/SetType.java
index e10f2a1..b635208 100644
--- a/src/java/org/apache/cassandra/db/marshal/SetType.java
+++ b/src/java/org/apache/cassandra/db/marshal/SetType.java
@@ -64,6 +64,12 @@ public class SetType<T> extends CollectionType<Set<T>>
this.isMultiCell = isMultiCell;
}
+ @Override
+ public boolean references(AbstractType<?> check)
+ {
+ return super.references(check) || elements.references(check);
+ }
+
public AbstractType<T> getElementsType()
{
return elements;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/src/java/org/apache/cassandra/db/marshal/TupleType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/TupleType.java b/src/java/org/apache/cassandra/db/marshal/TupleType.java
index e07319b..dbce0db 100644
--- a/src/java/org/apache/cassandra/db/marshal/TupleType.java
+++ b/src/java/org/apache/cassandra/db/marshal/TupleType.java
@@ -23,8 +23,6 @@ import java.util.List;
import com.google.common.base.Objects;
-import org.apache.cassandra.exceptions.InvalidRequestException;
-
import org.apache.cassandra.cql3.CQL3Type;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.exceptions.SyntaxException;
@@ -54,6 +52,17 @@ public class TupleType extends AbstractType<ByteBuffer>
return new TupleType(types);
}
+ @Override
+ public boolean references(AbstractType<?> check)
+ {
+ if (super.references(check))
+ return true;
+ for (AbstractType<?> type : types)
+ if (type.references(check))
+ return true;
+ return false;
+ }
+
public AbstractType<?> type(int i)
{
return types.get(i);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/98c4a7cd/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java b/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java
index ee647d6..d96abdb 100644
--- a/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java
+++ b/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java
@@ -386,4 +386,53 @@ public class UserTypesTest extends CQLTester
execute("ALTER TYPE " + keyspace() + "." + typeName + " ADD foomap map <int,text>");
execute("INSERT INTO %s (key, data) VALUES (1, {fooint: 1, fooset: {'2'}, foomap: {3 : 'bar'}})");
}
+
+ @Test
+ public void testCircularReferences() throws Throwable
+ {
+ String type1 = createType("CREATE TYPE %s (foo int)");
+
+ String typeX = createType("CREATE TYPE %s (bar frozen<" + typeWithKs(type1) + ">)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<list<" + typeWithKs(type1) + ">>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<set<" + typeWithKs(type1) + ">>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<map<text, " + typeWithKs(type1) + ">>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<map<" + typeWithKs(type1) + ", text>>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ //
+
+ String type2 = createType("CREATE TYPE %s (foo frozen<" + typeWithKs(type1) + ">)");
+
+ typeX = createType("CREATE TYPE %s (bar frozen<" + keyspace() + '.' + type2 + ">)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<list<" + keyspace() + '.' + type2 + ">>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<set<" + keyspace() + '.' + type2 + ">>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<map<text, " + keyspace() + '.' + type2 + ">>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ typeX = createType("CREATE TYPE %s (bar frozen<map<" + keyspace() + '.' + type2 + ", text>>)");
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<" + typeWithKs(typeX) + '>');
+
+ //
+
+ assertInvalidMessage("would create a circular reference", "ALTER TYPE " + typeWithKs(type1) + " ADD needs_to_fail frozen<list<" + typeWithKs(type1) + ">>");
+ }
+
+ private String typeWithKs(String type1)
+ {
+ return keyspace() + '.' + type1;
+ }
}
[3/3] cassandra git commit: Merge branch 'cassandra-2.2' into
cassandra-3.0
Posted by sn...@apache.org.
Merge branch 'cassandra-2.2' into cassandra-3.0
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/e6f23e63
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/e6f23e63
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/e6f23e63
Branch: refs/heads/cassandra-3.0
Commit: e6f23e63c58368871a085201f73f139e112d4b3a
Parents: 6e5d16b 1de63e9
Author: Robert Stupp <sn...@snazy.de>
Authored: Fri Sep 18 09:52:08 2015 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Fri Sep 18 09:52:08 2015 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/statements/AlterTypeStatement.java | 6 ++-
.../cassandra/db/marshal/AbstractType.java | 8 ++++
.../cassandra/db/marshal/CompositeType.java | 11 +++++
.../apache/cassandra/db/marshal/ListType.java | 6 +++
.../apache/cassandra/db/marshal/MapType.java | 6 +++
.../cassandra/db/marshal/ReversedType.java | 5 ++
.../apache/cassandra/db/marshal/SetType.java | 6 +++
.../apache/cassandra/db/marshal/TupleType.java | 11 +++++
.../cql3/validation/entities/UserTypesTest.java | 49 ++++++++++++++++++++
10 files changed, 108 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 6a630fd,97858c5..a1ba955
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,18 -1,15 +1,19 @@@
-2.2.2
+3.0.0-rc1
+ * Improve MV schema representation (CASSANDRA-9921)
+ * Add flag to enable/disable coordinator batchlog for MV writes (CASSANDRA-10230)
+ * Update cqlsh COPY for new internal driver serialization interface (CASSANDRA-10318)
+ * Give index implementations more control over rebuild operations (CASSANDRA-10312)
+ * Update index file format (CASSANDRA-10314)
+ * Add "shadowable" row tombstones to deal with mv timestamp issues (CASSANDRA-10261)
+ * CFS.loadNewSSTables() broken for pre-3.0 sstables
+ * Cache selected index in read command to reduce lookups (CASSANDRA-10215)
+ * Small optimizations of sstable index serialization (CASSANDRA-10232)
+ * Support for both encrypted and unencrypted native transport connections (CASSANDRA-9590)
+Merged from 2.2:
* Defer default role manager setup until all nodes are on 2.2+ (CASSANDRA-9761)
- * Cancel transaction for sstables we wont redistribute index summary
- for (CASSANDRA-10270)
- * Handle missing RoleManager in config after upgrade to 2.2 (CASSANDRA-10209)
- * Retry snapshot deletion after compaction and gc on Windows (CASSANDRA-10222)
- * Fix failure to start with space in directory path on Windows (CASSANDRA-10239)
- * Fix repair hang when snapshot failed (CASSANDRA-10057)
- * Fall back to 1/4 commitlog volume for commitlog_total_space on small disks
- (CASSANDRA-10199)
+ * Handle missing RoleManager in config after upgrade to 2.2 (CASSANDRA-10209)
Merged from 2.1:
+ * Prevent ALTER TYPE from creating circular references (CASSANDRA-10339)
* Fix cache handling of 2i and base tables (CASSANDRA-10155, 10359)
* Fix NPE in nodetool compactionhistory (CASSANDRA-9758)
* (Pig) support BulkOutputFormat as a URL parameter (CASSANDRA-7410)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/cql3/statements/AlterTypeStatement.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/db/marshal/AbstractType.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/marshal/AbstractType.java
index 02a5539,b90e127..5c46823
--- a/src/java/org/apache/cassandra/db/marshal/AbstractType.java
+++ b/src/java/org/apache/cassandra/db/marshal/AbstractType.java
@@@ -357,50 -296,14 +357,58 @@@ public abstract class AbstractType<T> i
}
/**
+ * The length of values for this type if all values are of fixed length, -1 otherwise.
+ */
+ protected int valueLengthIfFixed()
+ {
+ return -1;
+ }
+
+ // This assumes that no empty values are passed
+ public void writeValue(ByteBuffer value, DataOutputPlus out) throws IOException
+ {
+ assert value.hasRemaining();
+ if (valueLengthIfFixed() >= 0)
+ out.write(value);
+ else
+ ByteBufferUtil.writeWithVIntLength(value, out);
+ }
+
+ public long writtenLength(ByteBuffer value)
+ {
+ assert value.hasRemaining();
+ return valueLengthIfFixed() >= 0
+ ? value.remaining()
+ : TypeSizes.sizeofWithVIntLength(value);
+ }
+
+ public ByteBuffer readValue(DataInputPlus in) throws IOException
+ {
+ int length = valueLengthIfFixed();
+ if (length >= 0)
+ return ByteBufferUtil.read(in, length);
+ else
+ return ByteBufferUtil.readWithVIntLength(in);
+ }
+
+ public void skipValue(DataInputPlus in) throws IOException
+ {
+ int length = valueLengthIfFixed();
+ if (length >= 0)
+ FileUtils.skipBytesFully(in, length);
+ else
+ ByteBufferUtil.skipWithVIntLength(in);
+ }
+
+ /**
+ * Checks whether this type or any of the types this type contains references the given type.
+ */
+ public boolean references(AbstractType<?> check)
+ {
+ return this.equals(check);
+ }
+
+ /**
* This must be overriden by subclasses if necessary so that for any
* AbstractType, this == TypeParser.parse(toString()).
*
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/db/marshal/CompositeType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/db/marshal/ListType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/db/marshal/MapType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/db/marshal/ReversedType.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/marshal/ReversedType.java
index 2f4fdb7,68a7e02..4f1f7a2
--- a/src/java/org/apache/cassandra/db/marshal/ReversedType.java
+++ b/src/java/org/apache/cassandra/db/marshal/ReversedType.java
@@@ -135,13 -128,12 +135,18 @@@ public class ReversedType<T> extends Ab
return baseType.getSerializer();
}
+ public boolean references(AbstractType<?> check)
+ {
+ return super.references(check) || baseType.references(check);
+ }
+
@Override
+ protected int valueLengthIfFixed()
+ {
+ return baseType.valueLengthIfFixed();
+ }
+
+ @Override
public boolean isReversed()
{
return true;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/db/marshal/SetType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/src/java/org/apache/cassandra/db/marshal/TupleType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/e6f23e63/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java
----------------------------------------------------------------------
[2/3] cassandra git commit: Merge branch 'cassandra-2.1' into
cassandra-2.2
Posted by sn...@apache.org.
Merge branch 'cassandra-2.1' into cassandra-2.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1de63e95
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1de63e95
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1de63e95
Branch: refs/heads/cassandra-3.0
Commit: 1de63e9516a672780192588f7cc6dc228c5b9b79
Parents: 93745c0 98c4a7c
Author: Robert Stupp <sn...@snazy.de>
Authored: Fri Sep 18 09:48:53 2015 +0200
Committer: Robert Stupp <sn...@snazy.de>
Committed: Fri Sep 18 09:48:53 2015 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cql3/statements/AlterTypeStatement.java | 6 ++-
.../cassandra/db/marshal/AbstractType.java | 8 ++++
.../cassandra/db/marshal/CompositeType.java | 11 +++++
.../apache/cassandra/db/marshal/ListType.java | 6 +++
.../apache/cassandra/db/marshal/MapType.java | 6 +++
.../cassandra/db/marshal/ReversedType.java | 5 ++
.../apache/cassandra/db/marshal/SetType.java | 6 +++
.../apache/cassandra/db/marshal/TupleType.java | 11 +++++
.../cql3/validation/entities/UserTypesTest.java | 49 ++++++++++++++++++++
10 files changed, 108 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 59a50a5,166106d..97858c5
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,14 -1,5 +1,15 @@@
-2.1.10
+2.2.2
+ * Defer default role manager setup until all nodes are on 2.2+ (CASSANDRA-9761)
+ * Cancel transaction for sstables we wont redistribute index summary
+ for (CASSANDRA-10270)
+ * Handle missing RoleManager in config after upgrade to 2.2 (CASSANDRA-10209)
+ * Retry snapshot deletion after compaction and gc on Windows (CASSANDRA-10222)
+ * Fix failure to start with space in directory path on Windows (CASSANDRA-10239)
+ * Fix repair hang when snapshot failed (CASSANDRA-10057)
+ * Fall back to 1/4 commitlog volume for commitlog_total_space on small disks
+ (CASSANDRA-10199)
+Merged from 2.1:
+ * Prevent ALTER TYPE from creating circular references (CASSANDRA-10339)
* Fix cache handling of 2i and base tables (CASSANDRA-10155, 10359)
* Fix NPE in nodetool compactionhistory (CASSANDRA-9758)
* (Pig) support BulkOutputFormat as a URL parameter (CASSANDRA-7410)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/src/java/org/apache/cassandra/db/marshal/AbstractType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/src/java/org/apache/cassandra/db/marshal/CompositeType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/src/java/org/apache/cassandra/db/marshal/ListType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/src/java/org/apache/cassandra/db/marshal/MapType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/src/java/org/apache/cassandra/db/marshal/ReversedType.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/marshal/ReversedType.java
index 2aea3cd,0389a32..68a7e02
--- a/src/java/org/apache/cassandra/db/marshal/ReversedType.java
+++ b/src/java/org/apache/cassandra/db/marshal/ReversedType.java
@@@ -128,13 -109,12 +128,18 @@@ public class ReversedType<T> extends Ab
return baseType.getSerializer();
}
+ public boolean references(AbstractType<?> check)
+ {
+ return super.references(check) || baseType.references(check);
+ }
+
@Override
+ public boolean isReversed()
+ {
+ return true;
+ }
+
+ @Override
public String toString()
{
return getClass().getName() + "(" + baseType + ")";
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/src/java/org/apache/cassandra/db/marshal/SetType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/src/java/org/apache/cassandra/db/marshal/TupleType.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1de63e95/test/unit/org/apache/cassandra/cql3/validation/entities/UserTypesTest.java
----------------------------------------------------------------------