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 2014/05/05 09:28:21 UTC
[1/4] git commit: Fixup for CASSANDRA-6831 on 2.1
Repository: cassandra
Updated Branches:
refs/heads/trunk f3945bce7 -> ddd2ff7d6
Fixup for CASSANDRA-6831 on 2.1
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/706afc30
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/706afc30
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/706afc30
Branch: refs/heads/trunk
Commit: 706afc300d9b298cb9456671a514cc9580b94ecc
Parents: a5266bc
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon May 5 09:20:18 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon May 5 09:20:18 2014 +0200
----------------------------------------------------------------------
interface/cassandra.thrift | 3 +-
.../org/apache/cassandra/config/CFMetaData.java | 108 +++++++++----------
.../cassandra/config/ColumnDefinition.java | 34 +++---
.../cassandra/config/ColumnDefinitionTest.java | 2 +-
4 files changed, 72 insertions(+), 75 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/706afc30/interface/cassandra.thrift
----------------------------------------------------------------------
diff --git a/interface/cassandra.thrift b/interface/cassandra.thrift
index 51d6786..4beb2eb 100644
--- a/interface/cassandra.thrift
+++ b/interface/cassandra.thrift
@@ -467,7 +467,6 @@ struct CfDef {
33: optional double bloom_filter_fp_chance,
34: optional string caching="keys_only",
37: optional double dclocal_read_repair_chance = 0.0,
- 38: optional bool populate_io_cache_on_flush,
39: optional i32 memtable_flush_period_in_ms,
40: optional i32 default_time_to_live,
42: optional string speculative_retry="NONE",
@@ -501,6 +500,8 @@ struct CfDef {
/** @deprecated */
31: optional i32 row_cache_keys_to_save,
/** @deprecated */
+ 38: optional bool populate_io_cache_on_flush,
+ /** @deprecated */
41: optional i32 index_interval,
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/706afc30/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 2e531e8..2df42ae 100644
--- a/src/java/org/apache/cassandra/config/CFMetaData.java
+++ b/src/java/org/apache/cassandra/config/CFMetaData.java
@@ -58,7 +58,6 @@ import org.apache.cassandra.cql3.statements.CreateTableStatement;
import org.apache.cassandra.db.AbstractCell;
import org.apache.cassandra.db.AtomDeserializer;
import org.apache.cassandra.db.CFRowAdder;
-import org.apache.cassandra.db.Cell;
import org.apache.cassandra.db.ColumnFamily;
import org.apache.cassandra.db.ColumnFamilyStore;
import org.apache.cassandra.db.ColumnFamilyType;
@@ -69,7 +68,6 @@ import org.apache.cassandra.db.Mutation;
import org.apache.cassandra.db.OnDiskAtom;
import org.apache.cassandra.db.RangeTombstone;
import org.apache.cassandra.db.Row;
-import org.apache.cassandra.db.SuperColumns;
import org.apache.cassandra.db.SystemKeyspace;
import org.apache.cassandra.db.compaction.AbstractCompactionStrategy;
import org.apache.cassandra.db.compaction.LeveledCompactionStrategy;
@@ -97,6 +95,7 @@ import org.apache.cassandra.io.compress.CompressionParameters;
import org.apache.cassandra.io.compress.LZ4Compressor;
import org.apache.cassandra.io.sstable.Descriptor;
import org.apache.cassandra.serializers.MarshalException;
+import org.apache.cassandra.thrift.CfDef;
import org.apache.cassandra.thrift.CqlResult;
import org.apache.cassandra.thrift.CqlRow;
import org.apache.cassandra.tracing.Tracing;
@@ -999,45 +998,18 @@ public final class CFMetaData
}
}
- public static CFMetaData fromThrift(org.apache.cassandra.thrift.CfDef cf_def) throws InvalidRequestException, ConfigurationException
+ public static CFMetaData fromThrift(CfDef cf_def) throws InvalidRequestException, ConfigurationException
{
- CFMetaData cfm = internalFromThrift(cf_def);
-
- if (cf_def.isSetKey_alias() && !(cfm.keyValidator instanceof CompositeType))
- cfm.addOrReplaceColumnDefinition(ColumnDefinition.partitionKeyDef(cfm, cf_def.key_alias, cfm.keyValidator, null));
-
- return cfm.rebuild();
+ return internalFromThrift(cf_def, Collections.<ColumnDefinition>emptyList());
}
- public static CFMetaData fromThriftForUpdate(org.apache.cassandra.thrift.CfDef cf_def, CFMetaData toUpdate) throws InvalidRequestException, ConfigurationException
+ public static CFMetaData fromThriftForUpdate(CfDef cf_def, CFMetaData toUpdate) throws InvalidRequestException, ConfigurationException
{
- CFMetaData cfm = internalFromThrift(cf_def);
-
- // Thrift update can't have CQL metadata, and so we'll copy the ones of the updated metadata (to make
- // sure we don't override anything existing -- see #6831). One exception (for historical reasons) is
- // the partition key column name however, which can be provided through thrift. If it is, make sure
- // we use the one of the update.
- boolean hasKeyAlias = cf_def.isSetKey_alias() && !(cfm.keyValidator instanceof CompositeType);
- if (hasKeyAlias)
- cfm.addOrReplaceColumnDefinition(ColumnDefinition.partitionKeyDef(cfm, cf_def.key_alias, cfm.keyValidator, null));
-
- for (ColumnDefinition def : toUpdate.allColumns())
- {
- // isPartOfCellName basically means 'is not just a CQL metadata'
- if (def.isPartOfCellName())
- continue;
-
- if (def.kind == ColumnDefinition.Kind.PARTITION_KEY && hasKeyAlias)
- continue;
-
- cfm.addOrReplaceColumnDefinition(def);
- }
-
- return cfm.rebuild();
+ return internalFromThrift(cf_def, toUpdate.allColumns());
}
- // Do most of the work, but don't handle CQL metadata (i.e. skip key_alias and don't rebuild())
- private static CFMetaData internalFromThrift(org.apache.cassandra.thrift.CfDef cf_def) throws InvalidRequestException, ConfigurationException
+ // Convert a thrift CfDef, given a list of ColumnDefinitions to copy over to the created CFMetadata before the CQL metadata are rebuild
+ private static CFMetaData internalFromThrift(CfDef cf_def, Collection<ColumnDefinition> previousCQLMetadata) throws InvalidRequestException, ConfigurationException
{
ColumnFamilyType cfType = ColumnFamilyType.create(cf_def.column_type);
if (cfType == null)
@@ -1052,25 +1024,52 @@ public final class CFMetaData
? null
: cf_def.subcomparator_type == null ? BytesType.instance : TypeParser.parse(cf_def.subcomparator_type);
- // Dense for thrit is simplified as all column metadata are REGULAR
- boolean isDense = (cf_def.column_metadata == null || cf_def.column_metadata.isEmpty()) && !isCQL3OnlyPKComparator(rawComparator);
- CellNameType comparator = CellNames.fromAbstractType(makeRawAbstractType(rawComparator, subComparator), isDense);
+ AbstractType<?> fullRawComparator = makeRawAbstractType(rawComparator, subComparator);
+
+ AbstractType<?> keyValidator = cf_def.isSetKey_validation_class() ? TypeParser.parse(cf_def.key_validation_class) : null;
+
+ // Convert the REGULAR definitions from the input CfDef
+ List<ColumnDefinition> defs = ColumnDefinition.fromThrift(cf_def.keyspace, cf_def.name, rawComparator, subComparator, cf_def.column_metadata);
+
+ // Add the keyAlias if there is one, since that's on CQL metadata that thrift can actually change (for
+ // historical reasons)
+ boolean hasKeyAlias = cf_def.isSetKey_alias() && keyValidator != null && !(keyValidator instanceof CompositeType);
+ if (hasKeyAlias)
+ defs.add(ColumnDefinition.partitionKeyDef(cf_def.keyspace, cf_def.name, cf_def.key_alias, keyValidator, null));
+
+ // Now add any CQL metadata that we want to copy, skipping the keyAlias if there was one
+ for (ColumnDefinition def : previousCQLMetadata)
+ {
+ // isPartOfCellName basically means 'is not just a CQL metadata'
+ if (def.isPartOfCellName())
+ continue;
+
+ if (def.kind == ColumnDefinition.Kind.PARTITION_KEY && hasKeyAlias)
+ continue;
+
+ defs.add(def);
+ }
+
+ CellNameType comparator = CellNames.fromAbstractType(fullRawComparator, isDense(fullRawComparator, defs));
UUID cfId = Schema.instance.getId(cf_def.keyspace, cf_def.name);
if (cfId == null)
cfId = UUIDGen.getTimeUUID();
- CFMetaData newCFMD = new CFMetaData(cf_def.keyspace,
- cf_def.name,
- cfType,
- comparator,
- cfId);
+ CFMetaData newCFMD = new CFMetaData(cf_def.keyspace, cf_def.name, cfType, comparator, cfId);
- if (cf_def.isSetGc_grace_seconds()) { newCFMD.gcGraceSeconds(cf_def.gc_grace_seconds); }
- if (cf_def.isSetMin_compaction_threshold()) { newCFMD.minCompactionThreshold(cf_def.min_compaction_threshold); }
- if (cf_def.isSetMax_compaction_threshold()) { newCFMD.maxCompactionThreshold(cf_def.max_compaction_threshold); }
+ newCFMD.addAllColumnDefinitions(defs);
+
+ if (keyValidator != null)
+ newCFMD.keyValidator(keyValidator);
+ if (cf_def.isSetGc_grace_seconds())
+ newCFMD.gcGraceSeconds(cf_def.gc_grace_seconds);
+ if (cf_def.isSetMin_compaction_threshold())
+ newCFMD.minCompactionThreshold(cf_def.min_compaction_threshold);
+ if (cf_def.isSetMax_compaction_threshold())
+ newCFMD.maxCompactionThreshold(cf_def.max_compaction_threshold);
if (cf_def.isSetCompaction_strategy())
- newCFMD.compactionStrategyClass = createCompactionStrategy(cf_def.compaction_strategy);
+ newCFMD.compactionStrategyClass(createCompactionStrategy(cf_def.compaction_strategy));
if (cf_def.isSetCompaction_strategy_options())
newCFMD.compactionStrategyOptions(new HashMap<>(cf_def.compaction_strategy_options));
if (cf_def.isSetBloom_filter_fp_chance())
@@ -1091,18 +1090,13 @@ public final class CFMetaData
newCFMD.maxIndexInterval(cf_def.max_index_interval);
if (cf_def.isSetSpeculative_retry())
newCFMD.speculativeRetry(SpeculativeRetry.fromString(cf_def.speculative_retry));
- if (cf_def.isSetPopulate_io_cache_on_flush())
if (cf_def.isSetTriggers())
newCFMD.triggers(TriggerDefinition.fromThrift(cf_def.triggers));
- CompressionParameters cp = CompressionParameters.create(cf_def.compression_options);
-
- if (cf_def.isSetKey_validation_class()) { newCFMD.keyValidator(TypeParser.parse(cf_def.key_validation_class)); }
-
- return newCFMD.addAllColumnDefinitions(ColumnDefinition.fromThrift(newCFMD, cf_def.column_metadata))
- .comment(cf_def.comment)
+ return newCFMD.comment(cf_def.comment)
.defaultValidator(TypeParser.parse(cf_def.default_validation_class))
- .compressionParameters(cp);
+ .compressionParameters(CompressionParameters.create(cf_def.compression_options))
+ .rebuild();
}
catch (SyntaxException | MarshalException e)
{
@@ -1788,7 +1782,6 @@ public final class CFMetaData
cfm.minIndexInterval(result.getInt("min_index_interval"));
else if (result.has("index_interval"))
cfm.minIndexInterval(result.getInt("index_interval"));
-
if (result.has("max_index_interval"))
cfm.maxIndexInterval(result.getInt("max_index_interval"));
@@ -1803,7 +1796,6 @@ public final class CFMetaData
cfm.addColumnMetadataFromAliases(aliasesFromStrings(fromJsonList(result.getString("key_aliases"))), cfm.keyValidator, ColumnDefinition.Kind.PARTITION_KEY);
if (result.has("column_aliases"))
cfm.addColumnMetadataFromAliases(aliasesFromStrings(fromJsonList(result.getString("column_aliases"))), cfm.comparator.asAbstractType(), ColumnDefinition.Kind.CLUSTERING_COLUMN);
-
if (result.has("value_alias"))
cfm.addColumnMetadataFromAliases(Collections.singletonList(result.getBytes("value_alias")), cfm.defaultValidator, ColumnDefinition.Kind.COMPACT_VALUE);
@@ -2240,7 +2232,7 @@ public final class CFMetaData
.append("comparator", comparator)
.append("comment", comment)
.append("readRepairChance", readRepairChance)
- .append("dclocalReadRepairChance", dcLocalReadRepairChance)
+ .append("dcLocalReadRepairChance", dcLocalReadRepairChance)
.append("gcGraceSeconds", gcGraceSeconds)
.append("defaultValidator", defaultValidator)
.append("keyValidator", keyValidator)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/706afc30/src/java/org/apache/cassandra/config/ColumnDefinition.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/config/ColumnDefinition.java b/src/java/org/apache/cassandra/config/ColumnDefinition.java
index ee8884e..cbb3e75 100644
--- a/src/java/org/apache/cassandra/config/ColumnDefinition.java
+++ b/src/java/org/apache/cassandra/config/ColumnDefinition.java
@@ -98,6 +98,11 @@ public class ColumnDefinition extends ColumnSpecification
return new ColumnDefinition(cfm, name, validator, componentIndex, Kind.PARTITION_KEY);
}
+ public static ColumnDefinition partitionKeyDef(String ksName, String cfName, ByteBuffer name, AbstractType<?> validator, Integer componentIndex)
+ {
+ return new ColumnDefinition(ksName, cfName, new ColumnIdentifier(name, UTF8Type.instance), validator, null, null, null, componentIndex, Kind.PARTITION_KEY);
+ }
+
public static ColumnDefinition clusteringKeyDef(CFMetaData cfm, ByteBuffer name, AbstractType<?> validator, Integer componentIndex)
{
return new ColumnDefinition(cfm, name, validator, componentIndex, Kind.CLUSTERING_COLUMN);
@@ -265,11 +270,11 @@ public class ColumnDefinition extends ColumnSpecification
return cd;
}
- public static ColumnDefinition fromThrift(CFMetaData cfm, ColumnDef thriftColumnDef) throws SyntaxException, ConfigurationException
+ public static ColumnDefinition fromThrift(String ksName, String cfName, AbstractType<?> thriftComparator, AbstractType<?> thriftSubcomparator, ColumnDef thriftColumnDef) throws SyntaxException, ConfigurationException
{
// For super columns, the componentIndex is 1 because the ColumnDefinition applies to the column component.
- Integer componentIndex = cfm.isSuper() ? 1 : null;
- AbstractType<?> comparator = cfm.getComponentComparator(componentIndex, Kind.REGULAR);
+ Integer componentIndex = thriftSubcomparator != null ? 1 : null;
+ AbstractType<?> comparator = thriftSubcomparator == null ? thriftComparator : thriftSubcomparator;
try
{
comparator.validate(thriftColumnDef.name);
@@ -279,26 +284,25 @@ public class ColumnDefinition extends ColumnSpecification
throw new ConfigurationException(String.format("Column name %s is not valid for comparator %s", ByteBufferUtil.bytesToHex(thriftColumnDef.name), comparator));
}
- ColumnDefinition cd = new ColumnDefinition(cfm,
- ByteBufferUtil.clone(thriftColumnDef.name),
- TypeParser.parse(thriftColumnDef.validation_class),
- componentIndex,
- Kind.REGULAR);
-
- cd.setIndex(thriftColumnDef.index_name,
- thriftColumnDef.index_type == null ? null : IndexType.valueOf(thriftColumnDef.index_type.name()),
- thriftColumnDef.index_options);
- return cd;
+ return new ColumnDefinition(ksName,
+ cfName,
+ new ColumnIdentifier(ByteBufferUtil.clone(thriftColumnDef.name), comparator),
+ TypeParser.parse(thriftColumnDef.validation_class),
+ thriftColumnDef.index_type == null ? null : IndexType.valueOf(thriftColumnDef.index_type.name()),
+ thriftColumnDef.index_options,
+ thriftColumnDef.index_name,
+ componentIndex,
+ Kind.REGULAR);
}
- public static List<ColumnDefinition> fromThrift(CFMetaData cfm, List<ColumnDef> thriftDefs) throws SyntaxException, ConfigurationException
+ public static List<ColumnDefinition> fromThrift(String ksName, String cfName, AbstractType<?> thriftComparator, AbstractType<?> thriftSubcomparator, List<ColumnDef> thriftDefs) throws SyntaxException, ConfigurationException
{
if (thriftDefs == null)
return Collections.emptyList();
List<ColumnDefinition> defs = new ArrayList<>(thriftDefs.size());
for (ColumnDef thriftColumnDef : thriftDefs)
- defs.add(fromThrift(cfm, thriftColumnDef));
+ defs.add(fromThrift(ksName, cfName, thriftComparator, thriftSubcomparator, thriftColumnDef));
return defs;
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/706afc30/test/unit/org/apache/cassandra/config/ColumnDefinitionTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/config/ColumnDefinitionTest.java b/test/unit/org/apache/cassandra/config/ColumnDefinitionTest.java
index 8ae2d5f..890c46c 100644
--- a/test/unit/org/apache/cassandra/config/ColumnDefinitionTest.java
+++ b/test/unit/org/apache/cassandra/config/ColumnDefinitionTest.java
@@ -45,7 +45,7 @@ public class ColumnDefinitionTest
protected void testSerializeDeserialize(CFMetaData cfm, ColumnDefinition cd) throws Exception
{
- ColumnDefinition newCd = ColumnDefinition.fromThrift(cfm, cd.toThrift());
+ ColumnDefinition newCd = ColumnDefinition.fromThrift(cfm.ksName, cfm.cfName, cfm.comparator.asAbstractType(), null, cd.toThrift());
Assert.assertNotSame(cd, newCd);
Assert.assertEquals(cd.hashCode(), newCd.hashCode());
Assert.assertEquals(cd, newCd);
[4/4] git commit: Merge branch 'cassandra-2.1' into trunk
Posted by sl...@apache.org.
Merge branch 'cassandra-2.1' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/ddd2ff7d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/ddd2ff7d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/ddd2ff7d
Branch: refs/heads/trunk
Commit: ddd2ff7d63c9a9977eb2dd25936cecbb2ecd1cfb
Parents: f3945bc 3aa41fb
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon May 5 09:28:12 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon May 5 09:28:12 2014 +0200
----------------------------------------------------------------------
CHANGES.txt | 2 +
interface/cassandra.thrift | 3 +-
.../org/apache/cassandra/config/CFMetaData.java | 108 +++++++++----------
.../cassandra/config/ColumnDefinition.java | 34 +++---
.../org/apache/cassandra/db/SuperColumns.java | 5 +-
.../composites/CompoundDenseCellNameType.java | 8 +-
.../cassandra/thrift/CassandraServer.java | 14 ++-
.../cassandra/config/ColumnDefinitionTest.java | 2 +-
8 files changed, 92 insertions(+), 84 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ddd2ff7d/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index bc6db0d,2f55eee..f587a55
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,13 -1,7 +1,15 @@@
+3.0
+ * Move sstable RandomAccessReader to nio2, which allows using the
+ FILE_SHARE_DELETE flag on Windows (CASSANDRA-4050)
+ * Remove CQL2 (CASSANDRA-5918)
+ * Add Thrift get_multi_slice call (CASSANDRA-6757)
+ * Optimize fetching multiple cells by name (CASSANDRA-6933)
+ * Allow compilation in java 8 (CASSANDRA-7208)
+
2.1.0-rc1
* Parallel streaming for sstableloader (CASSANDRA-3668)
+ * Fix bugs in supercolumns handling (CASSANDRA-7138)
+ * Fix ClassClassException on composite dense tables (CASSANDRA-7112)
Merged from 2.0:
* Make batchlog replica selection rack-aware (CASSANDRA-6551)
* Suggest CTRL-C or semicolon after three blank lines in cqlsh (CASSANDRA-7142)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ddd2ff7d/interface/cassandra.thrift
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ddd2ff7d/src/java/org/apache/cassandra/config/CFMetaData.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ddd2ff7d/src/java/org/apache/cassandra/config/ColumnDefinition.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/ddd2ff7d/src/java/org/apache/cassandra/thrift/CassandraServer.java
----------------------------------------------------------------------
[3/4] git commit: Fix ClassCastException on composite dense tables
Posted by sl...@apache.org.
Fix ClassCastException on composite dense tables
patch by slebresne; reviewed by thobbs for CASSANDRA-7112
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/3aa41fbc
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/3aa41fbc
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/3aa41fbc
Branch: refs/heads/trunk
Commit: 3aa41fbce807d07e3952cbc78beec7cbc2d743e7
Parents: 7e8efd1
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon May 5 09:23:27 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon May 5 09:23:27 2014 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/db/composites/CompoundDenseCellNameType.java | 8 ++++----
2 files changed, 5 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3aa41fbc/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index ddcb09c..2f55eee 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,6 +1,7 @@
2.1.0-rc1
* Parallel streaming for sstableloader (CASSANDRA-3668)
* Fix bugs in supercolumns handling (CASSANDRA-7138)
+ * Fix ClassClassException on composite dense tables (CASSANDRA-7112)
Merged from 2.0:
* Make batchlog replica selection rack-aware (CASSANDRA-6551)
* Suggest CTRL-C or semicolon after three blank lines in cqlsh (CASSANDRA-7142)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3aa41fbc/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
index 0fd2f4b..e3c2831 100644
--- a/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
+++ b/src/java/org/apache/cassandra/db/composites/CompoundDenseCellNameType.java
@@ -67,10 +67,10 @@ public class CompoundDenseCellNameType extends AbstractCompoundCellNameType
protected Composite makeWith(ByteBuffer[] components, int size, Composite.EOC eoc, boolean isStatic)
{
assert !isStatic;
- if (size < fullSize || eoc != Composite.EOC.NONE)
- return new CompoundComposite(components, size, false).withEOC(eoc);
-
- return new CompoundDenseCellName(components, size);
+ // A composite dense table cell name don't have to have all the component set to qualify as a
+ // proper CellName (for backward compatibility reasons mostly), so always return a cellName
+ Composite c = new CompoundDenseCellName(components, size);
+ return eoc != Composite.EOC.NONE ? c.withEOC(eoc) : c;
}
protected Composite copyAndMakeWith(ByteBuffer[] components, int size, Composite.EOC eoc, boolean isStatic)
[2/4] git commit: Fix super column filter conversion
Posted by sl...@apache.org.
Fix super column filter conversion
patch by slebresne; reviewed by thobbs for CASSANDRA-7138
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/7e8efd1b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/7e8efd1b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/7e8efd1b
Branch: refs/heads/trunk
Commit: 7e8efd1bbc8e25c9503883bee895df168e5a99b8
Parents: 706afc3
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Mon May 5 09:21:46 2014 +0200
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Mon May 5 09:21:46 2014 +0200
----------------------------------------------------------------------
CHANGES.txt | 1 +
src/java/org/apache/cassandra/db/SuperColumns.java | 5 ++++-
.../org/apache/cassandra/thrift/CassandraServer.java | 14 ++++++++++----
3 files changed, 15 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7e8efd1b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 5332c65..ddcb09c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,6 @@
2.1.0-rc1
* Parallel streaming for sstableloader (CASSANDRA-3668)
+ * Fix bugs in supercolumns handling (CASSANDRA-7138)
Merged from 2.0:
* Make batchlog replica selection rack-aware (CASSANDRA-6551)
* Suggest CTRL-C or semicolon after three blank lines in cqlsh (CASSANDRA-7142)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7e8efd1b/src/java/org/apache/cassandra/db/SuperColumns.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/SuperColumns.java b/src/java/org/apache/cassandra/db/SuperColumns.java
index bab46eb..2006cbd 100644
--- a/src/java/org/apache/cassandra/db/SuperColumns.java
+++ b/src/java/org/apache/cassandra/db/SuperColumns.java
@@ -184,7 +184,10 @@ public class SuperColumns
int i = 0;
for (CellName name : filter.columns)
{
- slices[i++] = name.slice();
+ // Note that, because the filter in argument is the one from thrift, 'name' are SimpleDenseCellName.
+ // So calling name.slice() would be incorrect, as simple cell names don't handle the EOC properly.
+ // This is why we call toByteBuffer() and rebuild a Composite of the right type before call slice().
+ slices[i++] = type.make(name.toByteBuffer()).slice();
}
return new SliceQueryFilter(slices, false, slices.length, 1);
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/7e8efd1b/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 069cec7..5a296f3 100644
--- a/src/java/org/apache/cassandra/thrift/CassandraServer.java
+++ b/src/java/org/apache/cassandra/thrift/CassandraServer.java
@@ -381,12 +381,18 @@ public class CassandraServer implements Cassandra.Iface
private SliceQueryFilter toInternalFilter(CFMetaData metadata, ColumnParent parent, SliceRange range)
{
+ if (metadata.isSuper())
+ {
+ CellNameType columnType = new SimpleDenseCellNameType(metadata.comparator.subtype(parent.isSetSuper_column() ? 1 : 0));
+ Composite start = columnType.fromByteBuffer(range.start);
+ Composite finish = columnType.fromByteBuffer(range.finish);
+ SliceQueryFilter filter = new SliceQueryFilter(start, finish, range.reversed, range.count);
+ return SuperColumns.fromSCSliceFilter(metadata.comparator, parent.bufferForSuper_column(), filter);
+ }
+
Composite start = metadata.comparator.fromByteBuffer(range.start);
Composite finish = metadata.comparator.fromByteBuffer(range.finish);
- SliceQueryFilter filter = new SliceQueryFilter(start, finish, range.reversed, range.count);
- if (metadata.isSuper())
- filter = SuperColumns.fromSCSliceFilter(metadata.comparator, parent.bufferForSuper_column(), filter);
- return filter;
+ return new SliceQueryFilter(start, finish, range.reversed, range.count);
}
private IDiskAtomFilter toInternalFilter(CFMetaData metadata, ColumnParent parent, SlicePredicate predicate)