You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by al...@apache.org on 2015/08/02 22:24:36 UTC
cassandra git commit: Fix dtest failures caused by CASSANDRA-8143
Repository: cassandra
Updated Branches:
refs/heads/trunk b623375c5 -> 6aa7d6ce8
Fix dtest failures caused by CASSANDRA-8143
patch by Branimir Lambov; reviewed by Aleksey Yeschenko
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6aa7d6ce
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6aa7d6ce
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6aa7d6ce
Branch: refs/heads/trunk
Commit: 6aa7d6ce89f155b72111bffce54e9bee66080b03
Parents: b623375
Author: Branimir Lambov <br...@datastax.com>
Authored: Sat Aug 1 18:17:11 2015 +0300
Committer: Aleksey Yeschenko <al...@apache.org>
Committed: Sun Aug 2 23:02:12 2015 +0300
----------------------------------------------------------------------
.../org/apache/cassandra/config/CFMetaData.java | 17 ++++++++++++++
.../db/marshal/PartitionerDefinedOrder.java | 22 +++++++++++++++++-
.../apache/cassandra/schema/SchemaKeyspace.java | 24 +++-----------------
.../cassandra/thrift/CassandraServer.java | 2 +-
.../utils/NativeSSTableLoaderClient.java | 15 +++++++-----
.../cassandra/db/marshal/TypeParserTest.java | 24 +++++++++++++++++---
6 files changed, 72 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6aa7d6ce/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 ffb7b5e..43c95ea 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -24,6 +24,7 @@ import java.nio.ByteBuffer;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ThreadLocalRandom;
+import java.util.stream.Collectors;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.MoreObjects;
@@ -1390,6 +1391,22 @@ public final class CFMetaData
: (isCompactTable() ? compactValueColumn().type : BytesType.instance);
}
+ public static Set<Flag> flagsFromStrings(Set<String> strings)
+ {
+ return strings.stream()
+ .map(String::toUpperCase)
+ .map(Flag::valueOf)
+ .collect(Collectors.toSet());
+ }
+
+ public static Set<String> flagsToStrings(Set<Flag> flags)
+ {
+ return flags.stream()
+ .map(Flag::toString)
+ .map(String::toLowerCase)
+ .collect(Collectors.toSet());
+ }
+
@Override
public String toString()
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6aa7d6ce/src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java b/src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java
index efaea53..88f9906 100644
--- a/src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java
+++ b/src/java/org/apache/cassandra/db/marshal/PartitionerDefinedOrder.java
@@ -18,14 +18,16 @@
package org.apache.cassandra.db.marshal;
import java.nio.ByteBuffer;
+import java.util.Iterator;
+import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.cql3.Term;
import org.apache.cassandra.db.PartitionPosition;
import org.apache.cassandra.serializers.TypeSerializer;
import org.apache.cassandra.serializers.MarshalException;
-
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.utils.ByteBufferUtil;
+import org.apache.cassandra.utils.FBUtilities;
/** for sorting columns representing row keys in the row ordering as determined by a partitioner.
* Not intended for user-defined CFs, and will in fact error out if used with such. */
@@ -38,6 +40,18 @@ public class PartitionerDefinedOrder extends AbstractType<ByteBuffer>
this.partitioner = partitioner;
}
+ public static AbstractType<?> getInstance(TypeParser parser)
+ {
+ IPartitioner partitioner = DatabaseDescriptor.getPartitioner();
+ Iterator<String> argIterator = parser.getKeyValueParameters().keySet().iterator();
+ if (argIterator.hasNext())
+ {
+ partitioner = FBUtilities.newPartitioner(argIterator.next());
+ assert !argIterator.hasNext();
+ }
+ return partitioner.partitionOrdering();
+ }
+
@Override
public ByteBuffer compose(ByteBuffer bytes)
{
@@ -88,4 +102,10 @@ public class PartitionerDefinedOrder extends AbstractType<ByteBuffer>
{
throw new UnsupportedOperationException("You can't do this with a local partitioner.");
}
+
+ @Override
+ public String toString()
+ {
+ return String.format("%s(%s)", getClass().getName(), partitioner.getClass().getName());
+ }
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6aa7d6ce/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
index b33ba76..ba6a2e1 100644
--- a/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
+++ b/src/java/org/apache/cassandra/schema/SchemaKeyspace.java
@@ -50,8 +50,6 @@ import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.concurrent.OpOrder;
-import static java.util.stream.Collectors.toSet;
-
import static org.apache.cassandra.cql3.QueryProcessor.executeOnceInternal;
import static org.apache.cassandra.utils.FBUtilities.fromJsonMap;
import static org.apache.cassandra.utils.FBUtilities.json;
@@ -835,7 +833,7 @@ public final class SchemaKeyspace
.map("caching", table.getCaching().asMap())
.map("compaction", buildCompactionMap(table))
.map("compression", table.compressionParameters().asMap())
- .set("flags", flagsToStrings(table.flags()))
+ .set("flags", CFMetaData.flagsToStrings(table.flags()))
.build();
if (withColumnsAndTriggers)
@@ -1080,7 +1078,7 @@ public final class SchemaKeyspace
UUID id = row.getUUID("id");
Set<CFMetaData.Flag> flags = row.has("flags")
- ? flagsFromStrings(row.getSet("flags", UTF8Type.instance))
+ ? CFMetaData.flagsFromStrings(row.getSet("flags", UTF8Type.instance))
: Collections.emptySet();
boolean isSuper = flags.contains(CFMetaData.Flag.SUPER);
@@ -1132,22 +1130,6 @@ public final class SchemaKeyspace
return cfm;
}
- public static Set<CFMetaData.Flag> flagsFromStrings(Set<String> strings)
- {
- return strings.stream()
- .map(String::toUpperCase)
- .map(CFMetaData.Flag::valueOf)
- .collect(toSet());
- }
-
- private static Set<String> flagsToStrings(Set<CFMetaData.Flag> flags)
- {
- return flags.stream()
- .map(CFMetaData.Flag::toString)
- .map(String::toLowerCase)
- .collect(toSet());
- }
-
/*
* Column metadata serialization/deserialization.
*/
@@ -1241,7 +1223,7 @@ public final class SchemaKeyspace
private static CFMetaData.DroppedColumn createDroppedColumnFromDroppedColumnRow(UntypedResultSet.Row row)
{
String name = row.getString("column_name");
- AbstractType type = TypeParser.parse(row.getString("type"));
+ AbstractType<?> type = TypeParser.parse(row.getString("type"));
long droppedTime = TimeUnit.MILLISECONDS.toMicros(row.getLong("dropped_time"));
return new CFMetaData.DroppedColumn(name, type, droppedTime);
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6aa7d6ce/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/thrift/CassandraServer.java b/src/java/org/apache/cassandra/thrift/CassandraServer.java
index a7b8b07..c679479 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -1766,7 +1766,7 @@ public class CassandraServer implements Cassandra.Iface
public String describe_partitioner() throws TException
{
- return StorageService.instance.getTokenMetadata().getClass().getName();
+ return StorageService.instance.getPartitionerName();
}
public String describe_snitch() throws TException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6aa7d6ce/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
index 435c505..5063245 100644
--- a/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
+++ b/src/java/org/apache/cassandra/utils/NativeSSTableLoaderClient.java
@@ -24,7 +24,6 @@ import com.datastax.driver.core.*;
import org.apache.cassandra.config.ColumnDefinition;
import org.apache.cassandra.config.CFMetaData;
-import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.cql3.ColumnIdentifier;
import org.apache.cassandra.db.marshal.*;
import org.apache.cassandra.dht.*;
@@ -68,7 +67,8 @@ public class NativeSSTableLoaderClient extends SSTableLoader.Client
Set<TokenRange> tokenRanges = metadata.getTokenRanges();
- TokenFactory tokenFactory = FBUtilities.newPartitioner(metadata.getPartitioner()).getTokenFactory();
+ IPartitioner partitioner = FBUtilities.newPartitioner(metadata.getPartitioner());
+ TokenFactory tokenFactory = partitioner.getTokenFactory();
for (TokenRange tokenRange : tokenRanges)
{
@@ -79,7 +79,7 @@ public class NativeSSTableLoaderClient extends SSTableLoader.Client
addRangeForEndpoint(range, endpoint.getAddress());
}
- tables.putAll(fetchTablesMetadata(keyspace, session));
+ tables.putAll(fetchTablesMetadata(keyspace, session, partitioner));
}
}
@@ -99,8 +99,11 @@ public class NativeSSTableLoaderClient extends SSTableLoader.Client
* SchemaKeyspace.createTableFromTableRowAndColumnRows().
* It might be safer to have a simple wrapper of the driver ResultSet/Row implementing
* UntypedResultSet/UntypedResultSet.Row and reuse the original method.
+ *
+ * Note: It is not safe for this class to use static methods from SchemaKeyspace (static final fields are ok)
+ * as that triggers initialization of the class, which fails in client mode.
*/
- private static Map<String, CFMetaData> fetchTablesMetadata(String keyspace, Session session)
+ private static Map<String, CFMetaData> fetchTablesMetadata(String keyspace, Session session, IPartitioner partitioner)
{
Map<String, CFMetaData> tables = new HashMap<>();
String query = String.format("SELECT * FROM %s.%s WHERE keyspace_name = ?", SchemaKeyspace.NAME, SchemaKeyspace.TABLES);
@@ -112,7 +115,7 @@ public class NativeSSTableLoaderClient extends SSTableLoader.Client
Set<CFMetaData.Flag> flags = row.isNull("flags")
? Collections.emptySet()
- : SchemaKeyspace.flagsFromStrings(row.getSet("flags", String.class));
+ : CFMetaData.flagsFromStrings(row.getSet("flags", String.class));
boolean isSuper = flags.contains(CFMetaData.Flag.SUPER);
boolean isCounter = flags.contains(CFMetaData.Flag.COUNTER);
@@ -137,7 +140,7 @@ public class NativeSSTableLoaderClient extends SSTableLoader.Client
isCounter,
isMaterializedView,
defs,
- DatabaseDescriptor.getPartitioner()));
+ partitioner));
}
return tables;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/6aa7d6ce/test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java b/test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java
index ee3052c..808a680 100644
--- a/test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java
+++ b/test/unit/org/apache/cassandra/db/marshal/TypeParserTest.java
@@ -19,8 +19,12 @@
package org.apache.cassandra.db.marshal;
import org.junit.Test;
+
+import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.dht.*;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.exceptions.SyntaxException;
@@ -29,7 +33,7 @@ public class TypeParserTest
@Test
public void testParse() throws ConfigurationException, SyntaxException
{
- AbstractType type;
+ AbstractType<?> type;
type = TypeParser.parse(null);
assert type == BytesType.instance;
@@ -54,11 +58,11 @@ public class TypeParserTest
type = TypeParser.parse("LongType(reversed=true)");
assert type == ReversedType.getInstance(LongType.instance);
- assert ((ReversedType)type).baseType == LongType.instance;
+ assert ((ReversedType<?>)type).baseType == LongType.instance;
type = TypeParser.parse("LongType(reversed)");
assert type == ReversedType.getInstance(LongType.instance);
- assert ((ReversedType)type).baseType == LongType.instance;
+ assert ((ReversedType<?>)type).baseType == LongType.instance;
}
@Test
@@ -80,4 +84,18 @@ public class TypeParserTest
catch (ConfigurationException e) {}
catch (SyntaxException e) {}
}
+
+ @Test
+ public void testParsePartitionerOrder() throws ConfigurationException, SyntaxException
+ {
+ for (IPartitioner partitioner: new IPartitioner[] { Murmur3Partitioner.instance,
+ ByteOrderedPartitioner.instance,
+ RandomPartitioner.instance,
+ OrderPreservingPartitioner.instance })
+ {
+ AbstractType<?> type = partitioner.partitionOrdering();
+ assertSame(type, TypeParser.parse(type.toString()));
+ }
+ assertSame(DatabaseDescriptor.getPartitioner().partitionOrdering(), TypeParser.parse("PartitionerDefinedOrder"));
+ }
}