You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2010/11/23 17:28:21 UTC
svn commit: r1038192 - in /cassandra/branches/cassandra-0.7: CHANGES.txt
src/java/org/apache/cassandra/config/CFMetaData.java
test/unit/org/apache/cassandra/db/DefsTest.java
Author: gdusbabek
Date: Tue Nov 23 16:28:20 2010
New Revision: 1038192
URL: http://svn.apache.org/viewvc?rev=1038192&view=rev
Log:
fix add/remove bugs in CFMetadata. patch by gdusbabek, reviewed by tjake. CASSANDRA-1768
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1038192&r1=1038191&r2=1038192&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Tue Nov 23 16:28:20 2010
@@ -5,6 +5,7 @@ dev
o.a.c.request.Request_responseStage -> RequestResponseStage,
o.a.c.internal.Internal_responseStage -> InternalResponseStage
* add AbstractType.fromString (CASSANDRA-1767)
+ * fix add/remove index bugs in CFMetadata (CASSANDRA-1768)
0.7.0-rc1
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1038192&r1=1038191&r2=1038192&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/CFMetaData.java Tue Nov 23 16:28:20 2010
@@ -21,6 +21,7 @@ package org.apache.cassandra.config;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -215,7 +216,7 @@ public final class CFMetaData
? DEFAULT_MEMTABLE_OPERATIONS_IN_MILLIONS
: memtableOperationsInMillions;
this.cfId = cfId;
- this.column_metadata = Collections.unmodifiableMap(column_metadata);
+ this.column_metadata = new HashMap<ByteBuffer, ColumnDefinition>(column_metadata);
}
/** adds this cfm to the map. */
@@ -662,6 +663,8 @@ public final class CFMetaData
// update the ones staying
for (org.apache.cassandra.avro.ColumnDef def : cf_def.column_metadata)
{
+ if (!column_metadata.containsKey(def.name))
+ continue;
column_metadata.get(def.name).setIndexType(def.index_type == null ? null : org.apache.cassandra.thrift.IndexType.valueOf(def.index_type.name()));
column_metadata.get(def.name).setIndexName(def.index_name == null ? null : def.index_name.toString());
}
@@ -734,7 +737,7 @@ public final class CFMetaData
def.key_cache_size = cfm.keyCacheSize;
def.read_repair_chance = cfm.readRepairChance;
def.gc_grace_seconds = cfm.gcGraceSeconds;
- def.default_validation_class = cfm.defaultValidator.getClass().getName();
+ def.default_validation_class = cfm.defaultValidator == null ? null : cfm.defaultValidator.getClass().getName();
def.min_compaction_threshold = cfm.minCompactionThreshold;
def.max_compaction_threshold = cfm.maxCompactionThreshold;
def.row_cache_save_period_in_seconds = cfm.rowCacheSavePeriodInSeconds;
Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java?rev=1038192&r1=1038191&r2=1038192&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java Tue Nov 23 16:28:20 2010
@@ -26,7 +26,9 @@ import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.UUID;
@@ -56,6 +58,7 @@ import org.apache.cassandra.locator.OldN
import org.apache.cassandra.locator.SimpleStrategy;
import org.apache.cassandra.thrift.CfDef;
import org.apache.cassandra.thrift.ColumnDef;
+import org.apache.cassandra.thrift.IndexType;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.UUIDGen;
import org.junit.Test;
@@ -74,6 +77,63 @@ public class DefsTest extends CleanupHel
}
@Test
+ public void testCFMetaDataApply() throws ConfigurationException
+ {
+ Map<ByteBuffer, ColumnDefinition> indexes = new HashMap<ByteBuffer, ColumnDefinition>();
+ for (int i = 0; i < 5; i++)
+ {
+ ByteBuffer name = ByteBuffer.wrap(new byte[] { (byte)i });
+ indexes.put(name, new ColumnDefinition(name, null, IndexType.KEYS, Integer.toString(i)));
+ }
+ CFMetaData cfm = new CFMetaData("Keyspace1",
+ "TestApplyCFM_CF",
+ ColumnFamilyType.Standard,
+ BytesType.instance,
+ null,
+ "No comment",
+ 1.0,
+ 1.0,
+ 0.5,
+ 100000,
+ null,
+ 500,
+ 500,
+ 500,
+ 500,
+ 500,
+ 500,
+ 500.0,
+ indexes);
+
+ // we'll be adding this one later. make sure it's not already there.
+ assert cfm.getColumn_metadata().get(ByteBuffer.wrap(new byte[] { 5 })) == null;
+ org.apache.cassandra.avro.CfDef cfDef = CFMetaData.convertToAvro(cfm);
+
+ // add one.
+ org.apache.cassandra.avro.ColumnDef addIndexDef = new org.apache.cassandra.avro.ColumnDef();
+ addIndexDef.index_name = "5";
+ addIndexDef.index_type = org.apache.cassandra.avro.IndexType.KEYS;
+ addIndexDef.name = ByteBuffer.wrap(new byte[] { 5 });
+ addIndexDef.validation_class = BytesType.class.getName();
+ cfDef.column_metadata.add(addIndexDef);
+
+ // remove one.
+ org.apache.cassandra.avro.ColumnDef removeIndexDef = new org.apache.cassandra.avro.ColumnDef();
+ removeIndexDef.index_name = "0";
+ removeIndexDef.index_type = org.apache.cassandra.avro.IndexType.KEYS;
+ removeIndexDef.name = ByteBuffer.wrap(new byte[] { 0 });
+ removeIndexDef.validation_class = BytesType.class.getName();
+ assert cfDef.column_metadata.remove(removeIndexDef);
+
+ cfm.apply(cfDef);
+
+ for (int i = 1; i < indexes.size(); i++)
+ assert cfm.getColumn_metadata().get(ByteBuffer.wrap(new byte[] { 1 })) != null;
+ assert cfm.getColumn_metadata().get(ByteBuffer.wrap(new byte[] { 0 })) == null;
+ assert cfm.getColumn_metadata().get(ByteBuffer.wrap(new byte[] { 5 })) != null;
+ }
+
+ @Test
public void testInvalidNames() throws IOException
{
String[] valid = {"1", "a", "_1", "b_", "__", "1_a"};