Author: jbellis
Date: Wed Sep 22 03:41:26 2010
New Revision: 999740

URL: http://svn.apache.org/viewvc?rev=999740&view=rev
Log:
extract addIndex method
patch by jbellis; reviewed by gdusbabek for CASSANDRA-1415


Modified:
    cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java

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=999740&r1=999739&r2=999740&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Wed 
Sep 22 03:41:26 2010
@@ -236,6 +236,27 @@ public final class CFMetaData
              column_metadata);
     }
 
+    public static CFMetaData newIndexMetadata(String table, String parentCf, 
ColumnDefinition info, AbstractType columnComparator)
+    {
+        return new CFMetaData(table,
+                              parentCf + "." + (info.index_name == null ? 
FBUtilities.bytesToHex(info.name) : info.index_name),
+                              ColumnFamilyType.Standard,
+                              ClockType.Timestamp,
+                              columnComparator,
+                              null,
+                              TimestampReconciler.instance,
+                              "",
+                              0,
+                              false,
+                              0,
+                              0,
+                              DEFAULT_GC_GRACE_SECONDS,
+                              BytesType.instance,
+                              DEFAULT_MIN_COMPACTION_THRESHOLD,
+                              DEFAULT_MAX_COMPACTION_THRESHOLD,
+                              Collections.<byte[], 
ColumnDefinition>emptyMap());
+    }
+
     /** clones an existing CFMetaData using the same id. */
     public static CFMetaData rename(CFMetaData cfm, String newName)
     {

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=999740&r1=999739&r2=999740&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Wed 
Sep 22 03:41:26 2010
@@ -171,43 +171,15 @@ public class ColumnFamilyStore implement
         ssTables = new SSTableTracker(table, columnFamilyName);
         ssTables.add(sstables);
 
+        // create the private ColumnFamilyStores for the secondary column 
indexes
         indexedColumns = new TreeMap<byte[], 
ColumnFamilyStore>(getComparator());
-        for (Map.Entry<byte[], ColumnDefinition> entry : 
metadata.column_metadata.entrySet())
+        for (ColumnDefinition info : metadata.column_metadata.values())
         {
-            byte[] column = entry.getKey();
-            ColumnDefinition info = entry.getValue();
-            if (info.index_type == null)
-                continue;
-
-            String indexedCfName = columnFamily + "." + (info.index_name == 
null ? FBUtilities.bytesToHex(column) : info.index_name);
-            IPartitioner rowPartitioner = StorageService.getPartitioner();
-            AbstractType columnComparator = (rowPartitioner instanceof 
OrderPreservingPartitioner || rowPartitioner instanceof ByteOrderedPartitioner)
-                                            ? BytesType.instance
-                                            : new 
LocalByPartionerType(StorageService.getPartitioner());
-            CFMetaData indexedCfMetadata = new CFMetaData(table,
-                                                          indexedCfName,
-                                                          
ColumnFamilyType.Standard,
-                                                          ClockType.Timestamp,
-                                                          columnComparator,
-                                                          null,
-                                                          
TimestampReconciler.instance,
-                                                          "",
-                                                          0,
-                                                          false,
-                                                          0,
-                                                          0,
-                                                          
CFMetaData.DEFAULT_GC_GRACE_SECONDS,
-                                                          BytesType.instance,
-                                                          
CFMetaData.DEFAULT_MIN_COMPACTION_THRESHOLD,
-                                                          
CFMetaData.DEFAULT_MAX_COMPACTION_THRESHOLD,
-                                                          Collections.<byte[], 
ColumnDefinition>emptyMap());
-            ColumnFamilyStore indexedCfs = 
ColumnFamilyStore.createColumnFamilyStore(table, 
-                                                                               
      indexedCfName,
-                                                                               
      new LocalPartitioner(metadata.column_metadata.get(column).validator),
-                                                                               
      indexedCfMetadata);
-            indexedColumns.put(column, indexedCfs);
+            if (info.index_type != null)
+                addIndex(table, info);
         }
-        
+
+        // register the mbean
         String type = this.partitioner instanceof LocalPartitioner ? 
"IndexColumnFamilies" : "ColumnFamilies";
         mbeanName = "org.apache.cassandra.db:type=" + type + ",keyspace=" + 
this.table + ",columnfamily=" + columnFamily;
         try
@@ -221,7 +193,21 @@ public class ColumnFamilyStore implement
             throw new RuntimeException(e);
         }
     }
-    
+
+    private void addIndex(String table, ColumnDefinition info)
+    {
+        IPartitioner rowPartitioner = StorageService.getPartitioner();
+        AbstractType columnComparator = (rowPartitioner instanceof 
OrderPreservingPartitioner || rowPartitioner instanceof ByteOrderedPartitioner)
+                                        ? BytesType.instance
+                                        : new 
LocalByPartionerType(StorageService.getPartitioner());
+        CFMetaData indexedCfMetadata = CFMetaData.newIndexMetadata(table, 
columnFamily, info, columnComparator);
+        ColumnFamilyStore indexedCfs = 
ColumnFamilyStore.createColumnFamilyStore(table,
+                                                                               
  indexedCfMetadata.cfName,
+                                                                               
  new LocalPartitioner(metadata.column_metadata.get(info.name).validator),
+                                                                               
  indexedCfMetadata);
+        indexedColumns.put(info.name, indexedCfs);
+    }
+
     // called when dropping or renaming a CF. Performs mbean housekeeping.
     void unregisterMBean()
     {
@@ -353,7 +339,6 @@ public class ColumnFamilyStore implement
             // NB: we never "accept" a file in the FilenameFilter sense: they 
are added to the sstable map
             new File(directory).list(new FilenameFilter()
             {
-                @Override
                 public boolean accept(File dir, String name)
                 {
                     Pair<Descriptor,Component> component = 
SSTable.tryComponentFromFilename(dir, name);


Reply via email to