You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/07/04 04:48:24 UTC
svn commit: r960290 - in /cassandra/trunk:
src/java/org/apache/cassandra/avro/ src/java/org/apache/cassandra/config/
src/java/org/apache/cassandra/utils/ test/unit/org/apache/cassandra/db/
Author: jbellis
Date: Sun Jul 4 02:48:23 2010
New Revision: 960290
URL: http://svn.apache.org/viewvc?rev=960290&view=rev
Log:
r/m ByteArrayKey in favor of using TreeMaps with a byte[] comparator. patch by jbellis
Removed:
cassandra/trunk/src/java/org/apache/cassandra/utils/ByteArrayKey.java
Modified:
cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
cassandra/trunk/src/java/org/apache/cassandra/config/ColumnDefinition.java
cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java
cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java
cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
Modified: cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java?rev=960290&r1=960289&r2=960290&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Sun Jul 4 02:48:23 2010
@@ -55,7 +55,6 @@ import org.apache.cassandra.db.migration
import org.apache.cassandra.locator.AbstractReplicationStrategy;
import org.apache.cassandra.service.StorageProxy;
import org.apache.cassandra.service.StorageService;
-import org.apache.cassandra.utils.ByteArrayKey;
import static org.apache.cassandra.avro.AvroRecordFactory.*;
import static org.apache.cassandra.avro.ErrorFactory.*;
@@ -599,7 +598,7 @@ public class CassandraServer implements
cfDef.preload_row_cache == null ? CFMetaData.DEFAULT_PRELOAD_ROW_CACHE : cfDef.preload_row_cache,
cfDef.key_cache_size == null ? CFMetaData.DEFAULT_KEY_CACHE_SIZE : cfDef.key_cache_size,
cfDef.read_repair_chance == null ? CFMetaData.DEFAULT_READ_REPAIR_CHANCE : cfDef.read_repair_chance,
- Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
+ Collections.<byte[], ColumnDefinition>emptyMap());
cfDefs.add(cfmeta);
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java?rev=960290&r1=960289&r2=960290&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Sun Jul 4 02:48:23 2010
@@ -19,9 +19,7 @@
package org.apache.cassandra.config;
import java.io.*;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.commons.lang.builder.EqualsBuilder;
@@ -39,7 +37,7 @@ import org.apache.cassandra.db.marshal.*
import org.apache.cassandra.db.migration.Migration;
import org.apache.cassandra.locator.DatacenterShardStrategy;
import org.apache.cassandra.service.ColumnValidator;
-import org.apache.cassandra.utils.ByteArrayKey;
+import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.Pair;
@@ -59,10 +57,10 @@ public final class CFMetaData
private static final BiMap<Pair<String, String>, Integer> cfIdMap = HashBiMap.<Pair<String, String>, Integer>create();
- public static final CFMetaData StatusCf = new CFMetaData(Table.SYSTEM_TABLE, SystemTable.STATUS_CF, ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "persistent metadata for the local node", 0, false, 0.01, 0, Collections.<ByteArrayKey,ColumnDefinition>emptyMap());
- public static final CFMetaData HintsCf = new CFMetaData(Table.SYSTEM_TABLE, HintedHandOffManager.HINTS_CF, ColumnFamilyType.Super, ClockType.Timestamp, UTF8Type.instance, BytesType.instance, new TimestampReconciler(), "hinted handoff data", 0, false, 0.01, 1, Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
- public static final CFMetaData MigrationsCf = new CFMetaData(Table.SYSTEM_TABLE, Migration.MIGRATIONS_CF, ColumnFamilyType.Standard, ClockType.Timestamp, TimeUUIDType.instance, null, new TimestampReconciler(), "individual schema mutations", 0, false, 0.01, 2, Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
- public static final CFMetaData SchemaCf = new CFMetaData(Table.SYSTEM_TABLE, Migration.SCHEMA_CF, ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "current state of the schema", 0, false, 0.01, 3, Collections. <ByteArrayKey, ColumnDefinition>emptyMap());
+ public static final CFMetaData StatusCf = new CFMetaData(Table.SYSTEM_TABLE, SystemTable.STATUS_CF, ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "persistent metadata for the local node", 0, false, 0.01, 0, Collections.<byte[],ColumnDefinition>emptyMap());
+ public static final CFMetaData HintsCf = new CFMetaData(Table.SYSTEM_TABLE, HintedHandOffManager.HINTS_CF, ColumnFamilyType.Super, ClockType.Timestamp, UTF8Type.instance, BytesType.instance, new TimestampReconciler(), "hinted handoff data", 0, false, 0.01, 1, Collections.<byte[], ColumnDefinition>emptyMap());
+ public static final CFMetaData MigrationsCf = new CFMetaData(Table.SYSTEM_TABLE, Migration.MIGRATIONS_CF, ColumnFamilyType.Standard, ClockType.Timestamp, TimeUUIDType.instance, null, new TimestampReconciler(), "individual schema mutations", 0, false, 0.01, 2, Collections.<byte[], ColumnDefinition>emptyMap());
+ public static final CFMetaData SchemaCf = new CFMetaData(Table.SYSTEM_TABLE, Migration.SCHEMA_CF, ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "current state of the schema", 0, false, 0.01, 3, Collections. <byte[], ColumnDefinition>emptyMap());
/**
* @return An immutable mapping of (ksname,cfname) to id.
@@ -118,9 +116,22 @@ public final class CFMetaData
public boolean preloadRowCache;
// BytesToken because byte[].hashCode|equals is inherited from Object. gggrrr...
- public final Map<ByteArrayKey, ColumnDefinition> column_metadata;
+ public final Map<byte[], ColumnDefinition> column_metadata;
- private CFMetaData(String tableName, String cfName, ColumnFamilyType cfType, ClockType clockType, AbstractType comparator, AbstractType subcolumnComparator, AbstractReconciler reconciler, String comment, double rowCacheSize, boolean preloadRowCache, double keyCacheSize, double readRepairChance, Integer cfId, Map<ByteArrayKey, ColumnDefinition> column_metadata)
+ private CFMetaData(String tableName,
+ String cfName,
+ ColumnFamilyType cfType,
+ ClockType clockType,
+ AbstractType comparator,
+ AbstractType subcolumnComparator,
+ AbstractReconciler reconciler,
+ String comment,
+ double rowCacheSize,
+ boolean preloadRowCache,
+ double keyCacheSize,
+ double readRepairChance,
+ Integer cfId,
+ Map<byte[], ColumnDefinition> column_metadata)
{
assert column_metadata != null;
this.tableName = tableName;
@@ -154,7 +165,7 @@ public final class CFMetaData
}
}
- public CFMetaData(String tableName, String cfName, ColumnFamilyType cfType, ClockType clockType, AbstractType comparator, AbstractType subcolumnComparator, AbstractReconciler reconciler, String comment, double rowCacheSize, boolean preloadRowCache, double keyCacheSize, double readRepairChance, Map<ByteArrayKey, ColumnDefinition> column_metadata)
+ public CFMetaData(String tableName, String cfName, ColumnFamilyType cfType, ClockType clockType, AbstractType comparator, AbstractType subcolumnComparator, AbstractReconciler reconciler, String comment, double rowCacheSize, boolean preloadRowCache, double keyCacheSize, double readRepairChance, Map<byte[], ColumnDefinition> column_metadata)
{
this(tableName, cfName, cfType, clockType, comparator, subcolumnComparator, reconciler, comment, rowCacheSize, preloadRowCache, keyCacheSize, readRepairChance, nextId(), column_metadata);
}
@@ -246,7 +257,7 @@ public final class CFMetaData
double readRepairChance = din.readDouble();
int cfId = din.readInt();
int columnMetadataSize = din.readInt();
- Map<ByteArrayKey, ColumnDefinition> column_metadata = new HashMap<ByteArrayKey, ColumnDefinition>(columnMetadataSize);
+ Map<byte[], ColumnDefinition> column_metadata = new TreeMap<byte[], ColumnDefinition>(FBUtilities.byteArrayComparator);
while (columnMetadataSize > 0)
{
int cdSize = din.readInt();
@@ -254,7 +265,7 @@ public final class CFMetaData
if (in.read(cdBytes) != cdSize)
throw new IOException("short read of ColumnDefinition");
ColumnDefinition cd = ColumnDefinition.deserialize(cdBytes);
- column_metadata.put(new ByteArrayKey(cd.name), cd);
+ column_metadata.put(cd.name, cd);
}
return new CFMetaData(tableName, cfName, cfType, clockType, comparator, subcolumnComparator, reconciler, comment, rowCacheSize, preloadRowCache, keyCacheSize, readRepairChance, cfId, column_metadata);
}
@@ -315,7 +326,7 @@ public final class CFMetaData
public ColumnValidator getColumnValidator(byte[] column)
{
ColumnValidator validator = null;
- ColumnDefinition columnDefinition = column_metadata.get(new ByteArrayKey(column));
+ ColumnDefinition columnDefinition = column_metadata.get(column);
if (columnDefinition != null)
{
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/ColumnDefinition.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/ColumnDefinition.java?rev=960290&r1=960289&r2=960290&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/ColumnDefinition.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/ColumnDefinition.java Sun Jul 4 02:48:23 2010
@@ -1,16 +1,13 @@
package org.apache.cassandra.config;
import java.io.*;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.cassandra.thrift.ColumnDef;
-import org.apache.cassandra.utils.ByteArrayKey;
+import org.apache.cassandra.utils.FBUtilities;
public class ColumnDefinition {
public byte[] name;
@@ -124,18 +121,17 @@ public class ColumnDefinition {
return cd;
}
- public static Map<ByteArrayKey, ColumnDefinition> fromColumnDef(List<ColumnDef> thriftDefs)
+ public static Map<byte[], ColumnDefinition> fromColumnDef(List<ColumnDef> thriftDefs)
{
if (thriftDefs == null)
- return Collections.<ByteArrayKey, ColumnDefinition>emptyMap();
+ return Collections.emptyMap();
- //where are my simple map/reduce/lambda constructs!? gggrrr...
- Map<ByteArrayKey, ColumnDefinition> cds = new HashMap<ByteArrayKey, ColumnDefinition>();
+ Map<byte[], ColumnDefinition> cds = new TreeMap<byte[], ColumnDefinition>(FBUtilities.byteArrayComparator);
for (ColumnDef thriftColumnDef : thriftDefs)
{
- cds.put(new ByteArrayKey(thriftColumnDef.name), fromColumnDef(thriftColumnDef));
+ cds.put(thriftColumnDef.name, fromColumnDef(thriftColumnDef));
}
- return Collections.<ByteArrayKey, ColumnDefinition>unmodifiableMap(cds);
+ return Collections.unmodifiableMap(cds);
}
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java?rev=960290&r1=960289&r2=960290&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java Sun Jul 4 02:48:23 2010
@@ -5,7 +5,6 @@ import java.util.Map;
import org.apache.cassandra.db.ClockType;
import org.apache.cassandra.db.ColumnFamilyType;
-import org.apache.cassandra.utils.ByteArrayKey;
public class ColumnFamily {
public String name;
@@ -19,5 +18,5 @@ public class ColumnFamily {
public double keys_cached = CFMetaData.DEFAULT_KEY_CACHE_SIZE;
public double read_repair_chance = CFMetaData.DEFAULT_READ_REPAIR_CHANCE;
public boolean preload_row_cache = CFMetaData.DEFAULT_PRELOAD_ROW_CACHE;
- public Map<ByteArrayKey, ColumnDefinition> column_metata = Collections.<ByteArrayKey, ColumnDefinition>emptyMap();
+ public Map<byte[], ColumnDefinition> column_metata = Collections.emptyMap();
}
Modified: cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java?rev=960290&r1=960289&r2=960290&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/utils/FBUtilities.java Sun Jul 4 02:48:23 2010
@@ -66,6 +66,14 @@ public class FBUtilities
public static final int MAX_UNSIGNED_SHORT = 0xFFFF;
+ public static final Comparator<byte[]> byteArrayComparator = new Comparator<byte[]>()
+ {
+ public int compare(byte[] o1, byte[] o2)
+ {
+ return compareByteArrays(o1, o2);
+ }
+ };
+
/**
* Parses a string representing either a fraction, absolute value or percentage.
*/
Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java?rev=960290&r1=960289&r2=960290&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java Sun Jul 4 02:48:23 2010
@@ -17,7 +17,6 @@
*/
package org.apache.cassandra.db;
-import org.apache.cassandra.utils.ByteArrayKey;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -37,9 +36,7 @@ import org.apache.cassandra.db.filter.Qu
import org.apache.cassandra.db.marshal.BytesType;
import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.db.migration.*;
-import org.apache.cassandra.dht.BytesToken;
import org.apache.cassandra.locator.RackUnawareStrategy;
-import org.apache.cassandra.utils.ByteArrayKey;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.UUIDGen;
@@ -65,7 +62,7 @@ public class DefsTest extends CleanupHel
@Test
public void addNewCfToBogusTable() throws InterruptedException
{
- CFMetaData newCf = new CFMetaData("MadeUpKeyspace", "NewCF", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "new cf", 0, false, 1.0, 0, Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
+ CFMetaData newCf = new CFMetaData("MadeUpKeyspace", "NewCF", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "new cf", 0, false, 1.0, 0, Collections.<byte[], ColumnDefinition>emptyMap());
try
{
new AddColumnFamily(newCf).apply();
@@ -90,7 +87,7 @@ public class DefsTest extends CleanupHel
assert DatabaseDescriptor.getDefsVersion().equals(prior);
// add a cf.
- CFMetaData newCf1 = new CFMetaData("Keyspace1", "MigrationCf_1", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "Migration CF ", 0, false, 1.0, 0, Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
+ CFMetaData newCf1 = new CFMetaData("Keyspace1", "MigrationCf_1", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "Migration CF ", 0, false, 1.0, 0, Collections.<byte[], ColumnDefinition>emptyMap());
Migration m1 = new AddColumnFamily(newCf1);
m1.apply();
UUID ver1 = m1.getVersion();
@@ -149,7 +146,7 @@ public class DefsTest extends CleanupHel
final String cf = "BrandNewCf";
KSMetaData original = DatabaseDescriptor.getTableDefinition(ks);
- CFMetaData newCf = new CFMetaData(original.name, cf, ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "A New Column Family", 0, false, 1.0, 0, Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
+ CFMetaData newCf = new CFMetaData(original.name, cf, ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "A New Column Family", 0, false, 1.0, 0, Collections.<byte[], ColumnDefinition>emptyMap());
assert !DatabaseDescriptor.getTableDefinition(ks).cfMetaData().containsKey(newCf.cfName);
new AddColumnFamily(newCf).apply();
@@ -178,7 +175,7 @@ public class DefsTest extends CleanupHel
String cf = "ValidatorColumnFamily";
KSMetaData original = DatabaseDescriptor.getTableDefinition(ks);
- Map<ByteArrayKey, ColumnDefinition> column_metadata = new HashMap<ByteArrayKey, ColumnDefinition>();
+ Map<byte[], ColumnDefinition> column_metadata = new TreeMap<byte[], ColumnDefinition>(FBUtilities.byteArrayComparator);
ColumnDefinition cd0 = new ColumnDefinition();
cd0.name = "TestColumn1".getBytes("UTF8");
@@ -192,8 +189,8 @@ public class DefsTest extends CleanupHel
cd1.index_name = "some name";
cd1.index_type = "some type";
- column_metadata.put(new ByteArrayKey(cd0.name), cd0);
- column_metadata.put(new ByteArrayKey(cd1.name), cd1);
+ column_metadata.put(cd0.name, cd0);
+ column_metadata.put(cd1.name, cd1);
CFMetaData newCf = new CFMetaData(original.name, cf, ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "A New Column Family", 0, false, 1.0, 0, column_metadata);
assert !DatabaseDescriptor.getTableDefinition(ks).cfMetaData().containsKey(newCf.cfName);
@@ -300,7 +297,7 @@ public class DefsTest extends CleanupHel
public void addNewKS() throws ConfigurationException, IOException, ExecutionException, InterruptedException
{
DecoratedKey dk = Util.dk("key0");
- CFMetaData newCf = new CFMetaData("NewKeyspace1", "AddedStandard1", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "A new cf for a new ks", 0, false, 1.0, 0, Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
+ CFMetaData newCf = new CFMetaData("NewKeyspace1", "AddedStandard1", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "A new cf for a new ks", 0, false, 1.0, 0, Collections.<byte[], ColumnDefinition>emptyMap());
KSMetaData newKs = new KSMetaData(newCf.tableName, RackUnawareStrategy.class, 5, newCf);
new AddKeyspace(newKs).apply();
@@ -456,7 +453,7 @@ public class DefsTest extends CleanupHel
new AddKeyspace(newKs).apply();
assert DatabaseDescriptor.getTableDefinition("EmptyKeyspace") != null;
- CFMetaData newCf = new CFMetaData("EmptyKeyspace", "AddedLater", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "A new CF to add to an empty KS", 0, false, 1.0, 0, Collections.<ByteArrayKey, ColumnDefinition>emptyMap());
+ CFMetaData newCf = new CFMetaData("EmptyKeyspace", "AddedLater", ColumnFamilyType.Standard, ClockType.Timestamp, UTF8Type.instance, null, new TimestampReconciler(), "A new CF to add to an empty KS", 0, false, 1.0, 0, Collections.<byte[], ColumnDefinition>emptyMap());
//should not exist until apply
assert !DatabaseDescriptor.getTableDefinition(newKs.name).cfMetaData().containsKey(newCf.cfName);