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);