Author: gdusbabek
Date: Fri May 21 18:39:19 2010
New Revision: 947121

URL: http://svn.apache.org/viewvc?rev=947121&view=rev
Log:
add easy reverse lookup from id cf. Patch by Stu Hood, reviewed by Gary 
Dusbabek. CASSANDRA-956

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
    cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
    cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
    cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
    
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.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=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Fri 
May 21 18:39:19 2010
@@ -38,6 +38,8 @@ import org.apache.cassandra.db.ColumnFam
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.utils.Pair;
 
+import com.google.common.collect.*;
+
 public final class CFMetaData
 {
     public final static double DEFAULT_READ_REPAIR_CHANCE = 1.0;
@@ -50,29 +52,43 @@ public final class CFMetaData
     
     private static final Map<Integer, String> currentCfNames = new 
HashMap<Integer, String>();
     
-    private static final Map<Pair<String, String>, Integer> cfIdMap = new 
HashMap<Pair<String, String>, Integer>();
+    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, new UTF8Type(), null, "persistent metadata for the 
local node", 0, false, 0.01, 0);
     public static final CFMetaData HintsCf = new 
CFMetaData(Table.SYSTEM_TABLE, HintedHandOffManager.HINTS_CF, 
ColumnFamilyType.Super, new UTF8Type(), new BytesType(), "hinted handoff data", 
0, false, 0.01, 1);
     public static final CFMetaData MigrationsCf = new 
CFMetaData(Table.SYSTEM_TABLE, Migration.MIGRATIONS_CF, 
ColumnFamilyType.Standard, new TimeUUIDType(), null, "individual schema 
mutations", 0, false, 2);
     public static final CFMetaData SchemaCf = new 
CFMetaData(Table.SYSTEM_TABLE, Migration.SCHEMA_CF, ColumnFamilyType.Standard, 
new UTF8Type(), null, "current state of the schema", 0, false, 3);
 
-    public static final Map<Pair<String, String>, Integer> getCfIdMap()
+    /**
+     * @return An immutable mapping of (ksname,cfname) to id.
+     */
+    public static final Map<Pair<String, String>, Integer> getCfToIdMap()
+    {
+        return Collections.unmodifiableMap(cfIdMap);
+    }
+    
+    /**
+     * @return An immutable mapping of id to (ksname,cfname).
+     */
+    public static final Map<Integer, Pair<String, String>> getIdToCfMap()
     {
-        return Collections.unmodifiableMap(cfIdMap);    
+        return Collections.unmodifiableMap(cfIdMap.inverse());
     }
     
-    public static final String getCurrentName(int id)
+    /**
+     * @return The (ksname,cfname) pair for the given id, or null if it has 
been dropped.
+     */
+    public static final Pair<String,String> getCF(int id)
     {
-        return currentCfNames.get(id);
+        return cfIdMap.inverse().get(Integer.valueOf(id));
     }
     
-    public static final int getId(String table, String cfName)
+    /**
+     * @return The id for the given (ksname,cfname) pair, or null if it has 
been dropped.
+     */
+    public static final Integer getId(String table, String cfName)
     {
-        Integer id = cfIdMap.get(new Pair<String, String>(table, cfName));
-        if (id == null)
-            throw new IllegalArgumentException(String.format("Illegal table/cf 
pair (%s.%s)", table, cfName));
-        return id;
+        return cfIdMap.get(new Pair<String, String>(table, cfName));
     }
     
     // this gets called after initialization to make sure that id generation 
happens properly.

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
Fri May 21 18:39:19 2010
@@ -32,6 +32,7 @@ import org.apache.cassandra.locator.Abst
 import org.apache.cassandra.io.util.FileUtils;
 import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.utils.FBUtilities;
+import org.apache.cassandra.utils.Pair;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.cassandra.locator.IEndpointSnitch;
@@ -655,6 +656,14 @@ public class DatabaseDescriptor
         return ksm.cfMetaData().get(cfName);
     }
     
+    public static CFMetaData getCFMetaData(int cfid)
+    {
+        Pair<String,String> cf = CFMetaData.getCF(cfid);
+        if (cf == null)
+            return null;
+        return getCFMetaData(cf.left, cf.right);
+    }
+
     public static ColumnFamilyType getColumnFamilyType(String tableName, 
String cfName)
     {
         assert tableName != null && cfName != null;

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java Fri May 
21 18:39:19 2010
@@ -58,7 +58,9 @@ public class ColumnFamily implements ICo
         ColumnFamilyType cfType = 
DatabaseDescriptor.getColumnFamilyType(tableName, cfName);
         AbstractType comparator = DatabaseDescriptor.getComparator(tableName, 
cfName);
         AbstractType subcolumnComparator = 
DatabaseDescriptor.getSubComparator(tableName, cfName);
-        int id = CFMetaData.getId(tableName, cfName);
+        Integer id = CFMetaData.getId(tableName, cfName);
+        if (id == null)
+            throw new RuntimeException("Cannot create ColumnFamily for 
non-existant table/cf pair.");
         return new ColumnFamily(cfName, cfType, comparator, 
subcolumnComparator, id);
     }
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/Table.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/Table.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Fri May 21 
18:39:19 2010
@@ -132,7 +132,10 @@ public class Table 
     @Deprecated
     public ColumnFamilyStore getColumnFamilyStore(String cfName)
     {
-        return columnFamilyStores.get(CFMetaData.getId(name, cfName));
+        Integer id = CFMetaData.getId(name, cfName);
+        if (id == null)
+            throw new IllegalArgumentException(String.format("Unknown table/cf 
pair (%s.%s)", name, cfName));
+        return columnFamilyStores.get(id);
     }
 
     /**

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLog.java 
Fri May 21 18:39:19 2010
@@ -250,12 +250,9 @@ public class CommitLog
                         // thing based on the cfid instead.
                         for (ColumnFamily columnFamily : columnFamilies)
                         {
-                            // make sure to use the current name of the cf 
(null means its been dropped).
-                            String currentName = 
CFMetaData.getCurrentName(columnFamily.id());
-                            if (currentName == null)
+                            if (CFMetaData.getCF(columnFamily.id()) == null)
+                                // null means the cf has been dropped
                                 continue;
-                            else if (!currentName.equals(columnFamily.name()))
-                                columnFamily.rename(currentName);
                             
                             if (clHeader.isDirty(columnFamily.id()) && 
entryLocation >= clHeader.getPosition(columnFamily.id()))
                                 newRm.add(columnFamily);

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java?rev=947121&r1=947120&r2=947121&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/commitlog/CommitLogHeader.java 
Fri May 21 18:39:19 2010
@@ -56,7 +56,7 @@ class CommitLogHeader
     
     CommitLogHeader()
     {
-        this(new HashMap<Integer, Integer>(), CFMetaData.getCfIdMap().size());
+        this(new HashMap<Integer, Integer>(), 
CFMetaData.getCfToIdMap().size());
     }
     
     /*


Reply via email to