Author: gdusbabek
Date: Tue Apr  6 16:02:52 2010
New Revision: 931204

URL: http://svn.apache.org/viewvc?rev=931204&view=rev
Log:
use cfid for all mutations. Patch by Gary Dusbabek, reviewed by Jonthan Ellis. 
CASSANDRA-827

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.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/migration/AddColumnFamily.java
    
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
    cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java
    
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
    cassandra/trunk/test/unit/org/apache/cassandra/Util.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/MultitableTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/NameSortTest.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManagerTest.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=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Tue 
Apr  6 16:02:52 2010
@@ -60,6 +60,14 @@ public final class CFMetaData
         return currentCfNames.get(id);
     }
     
+    public static final int 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;
+    }
+    
     // this gets called after initialization to make sure that id generation 
happens properly.
     public static final void fixMaxId()
     {

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=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java Tue Apr  
6 16:02:52 2010
@@ -29,6 +29,7 @@ import java.security.NoSuchAlgorithmExce
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.concurrent.atomic.AtomicLong;
 
+import org.apache.cassandra.config.CFMetaData;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -72,22 +73,25 @@ public class ColumnFamily implements ICo
         String columnType = DatabaseDescriptor.getColumnFamilyType(tableName, 
cfName);
         AbstractType comparator = DatabaseDescriptor.getComparator(tableName, 
cfName);
         AbstractType subcolumnComparator = 
DatabaseDescriptor.getSubComparator(tableName, cfName);
-        return new ColumnFamily(cfName, columnType, comparator, 
subcolumnComparator);
+        int id = CFMetaData.getId(tableName, cfName);
+        return new ColumnFamily(cfName, columnType, comparator, 
subcolumnComparator, id);
     }
 
     private String name_;
+    private final int id_;
 
     private transient ICompactSerializer2<IColumn> columnSerializer_;
     AtomicLong markedForDeleteAt = new AtomicLong(Long.MIN_VALUE);
     AtomicInteger localDeletionTime = new AtomicInteger(Integer.MIN_VALUE);
     private ConcurrentSkipListMap<byte[], IColumn> columns_;
 
-    public ColumnFamily(String cfName, String columnType, AbstractType 
comparator, AbstractType subcolumnComparator)
+    public ColumnFamily(String cfName, String columnType, AbstractType 
comparator, AbstractType subcolumnComparator, int id)
     {
         name_ = cfName;
         type_ = columnType;
         columnSerializer_ = columnType.equals("Standard") ? 
Column.serializer() : SuperColumn.serializer(subcolumnComparator);
         columns_ = new ConcurrentSkipListMap<byte[], IColumn>(comparator);
+        id_ = id;
     }
     
     /** called during CL recovery when it is determined that a CF name was 
changed. */
@@ -98,7 +102,7 @@ public class ColumnFamily implements ICo
 
     public ColumnFamily cloneMeShallow()
     {
-        ColumnFamily cf = new ColumnFamily(name_, type_, getComparator(), 
getSubComparator());
+        ColumnFamily cf = new ColumnFamily(name_, type_, getComparator(), 
getSubComparator(), id_);
         cf.markedForDeleteAt = markedForDeleteAt;
         cf.localDeletionTime = localDeletionTime;
         return cf;
@@ -120,6 +124,11 @@ public class ColumnFamily implements ICo
     {
         return name_;
     }
+    
+    public int id()
+    {
+        return id_;
+    }
 
     /*
      *  We need to go through each column
@@ -264,7 +273,7 @@ public class ColumnFamily implements ICo
      */
     public ColumnFamily diff(ColumnFamily cfComposite)
     {
-       ColumnFamily cfDiff = new ColumnFamily(cfComposite.name(), 
cfComposite.type_, getComparator(), getSubComparator());
+       ColumnFamily cfDiff = new ColumnFamily(cfComposite.name(), 
cfComposite.type_, getComparator(), getSubComparator(), cfComposite.id());
         if (cfComposite.getMarkedForDeleteAt() > getMarkedForDeleteAt())
         {
             cfDiff.delete(cfComposite.getLocalDeletionTime(), 
cfComposite.getMarkedForDeleteAt());
@@ -314,9 +323,15 @@ public class ColumnFamily implements ICo
         return size;
     }
 
+    private transient int hash_ = 0;
     public int hashCode()
     {
-        return name().hashCode();
+        if (hash_ == 0)
+        {
+            int h = id_ * 7 + name().hashCode();
+            hash_ = h;
+        }
+        return hash_;
     }
 
     public boolean equals(Object o)

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java 
Tue Apr  6 16:02:52 2010
@@ -62,6 +62,7 @@ public class ColumnFamilySerializer impl
             }
 
             dos.writeUTF(columnFamily.name());
+            dos.writeInt(columnFamily.id());
             dos.writeUTF(columnFamily.type_);
             dos.writeUTF(columnFamily.getComparatorName());
             dos.writeUTF(columnFamily.getSubComparatorName());
@@ -104,7 +105,8 @@ public class ColumnFamilySerializer impl
         String cfName = dis.readUTF();
         if (cfName.isEmpty())
             return null;
-        ColumnFamily cf = deserializeFromSSTableNoColumns(cfName, 
dis.readUTF(), readComparator(dis), readComparator(dis), dis);
+        int id = dis.readInt();
+        ColumnFamily cf = deserializeFromSSTableNoColumns(cfName, 
dis.readUTF(), readComparator(dis), readComparator(dis), id, dis);
         deserializeColumns(dis, cf);
         return cf;
     }
@@ -141,9 +143,9 @@ public class ColumnFamilySerializer impl
         }
     }
 
-    public ColumnFamily deserializeFromSSTableNoColumns(String name, String 
type, AbstractType comparator, AbstractType subComparator, DataInput input) 
throws IOException
+    private ColumnFamily deserializeFromSSTableNoColumns(String name, String 
type, AbstractType comparator, AbstractType subComparator, int id, DataInput 
input) throws IOException
     {
-        ColumnFamily cf = new ColumnFamily(name, type, comparator, 
subComparator);
+        ColumnFamily cf = new ColumnFamily(name, type, comparator, 
subComparator, id);
         return deserializeFromSSTableNoColumns(cf, input);
     }
 

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=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/Table.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/Table.java Tue Apr  6 
16:02:52 2010
@@ -23,13 +23,12 @@ import java.util.*;
 import java.io.IOException;
 import java.io.File;
 import java.util.concurrent.ExecutionException;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantLock;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 import java.util.concurrent.Future;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Iterables;
+import org.apache.cassandra.config.CFMetaData;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.commitlog.CommitLog;
 import org.apache.cassandra.db.commitlog.CommitLogSegment;
@@ -41,7 +40,6 @@ import org.apache.cassandra.io.util.File
 import java.net.InetAddress;
 
 import org.apache.cassandra.service.StorageService;
-import org.apache.cassandra.utils.*;
 import org.apache.cassandra.db.filter.*;
 import org.cliffc.high_scale_lib.NonBlockingHashMap;
 
@@ -82,7 +80,9 @@ public class Table 
     /* Table name. */
     public final String name;
     /* ColumnFamilyStore per column family */
-    private final Map<String, ColumnFamilyStore> columnFamilyStores = new 
HashMap<String, ColumnFamilyStore>();
+    private final Map<Integer, ColumnFamilyStore> columnFamilyStores = new 
HashMap<Integer, ColumnFamilyStore>();
+    /* map to make it easier to look up cfs by name */
+    private final Map<String, Integer> cfNameMap = new HashMap<String, 
Integer>();
     // cache application CFs since Range queries ask for them a _lot_
     private SortedSet<String> applicationColumnFamilies;
     private final TimerTask flushTask;
@@ -120,7 +120,7 @@ public class Table 
     
     public Set<String> getColumnFamilies()
     {
-        return 
DatabaseDescriptor.getTableDefinition(name).cfMetaData().keySet();
+        return cfNameMap.keySet();
     }
 
     public Collection<ColumnFamilyStore> getColumnFamilyStores()
@@ -130,7 +130,7 @@ public class Table 
 
     public ColumnFamilyStore getColumnFamilyStore(String cfName)
     {
-        return columnFamilyStores.get(cfName);
+        return columnFamilyStores.get(cfNameMap.get(cfName));
     }
 
     /**
@@ -141,13 +141,8 @@ public class Table 
         if (name.equals(SYSTEM_TABLE))
             throw new RuntimeException("Cleanup of the system table is neither 
necessary nor wise");
 
-        Set<String> columnFamilies = getColumnFamilies();
-        for ( String columnFamily : columnFamilies )
-        {
-            ColumnFamilyStore cfStore = columnFamilyStores.get( columnFamily );
-            if ( cfStore != null )
-                cfStore.forceCleanup();
-        }   
+        for (ColumnFamilyStore cfStore : columnFamilyStores.values())
+            cfStore.forceCleanup();
     }
     
     
@@ -198,10 +193,8 @@ public class Table 
     public List<SSTableReader> forceAntiCompaction(Collection<Range> ranges, 
InetAddress target)
     {
         List<SSTableReader> allResults = new ArrayList<SSTableReader>();
-        Set<String> columnFamilies = getColumnFamilies();
-        for ( String columnFamily : columnFamilies )
+        for (ColumnFamilyStore cfStore : columnFamilyStores.values())
         {
-            ColumnFamilyStore cfStore = columnFamilyStores.get( columnFamily );
             try
             {
                 
allResults.addAll(CompactionManager.instance.submitAnticompaction(cfStore, 
ranges, target).get());
@@ -220,25 +213,15 @@ public class Table 
     */
     public void forceCompaction()
     {
-        Set<String> columnFamilies = getColumnFamilies();
-        for ( String columnFamily : columnFamilies )
-        {
-            ColumnFamilyStore cfStore = columnFamilyStores.get( columnFamily );
-            if ( cfStore != null )
-                CompactionManager.instance.submitMajor(cfStore);
-        }
+        for (ColumnFamilyStore cfStore : columnFamilyStores.values())
+            CompactionManager.instance.submitMajor(cfStore);
     }
 
     List<SSTableReader> getAllSSTablesOnDisk()
     {
         List<SSTableReader> list = new ArrayList<SSTableReader>();
-        Set<String> columnFamilies = getColumnFamilies();
-        for ( String columnFamily : columnFamilies )
-        {
-            ColumnFamilyStore cfStore = columnFamilyStores.get( columnFamily );
-            if ( cfStore != null )
-                list.addAll(cfStore.getSSTables());
-        }
+        for (ColumnFamilyStore cfStore : columnFamilyStores.values())
+            list.addAll(cfStore.getSSTables());
         return list;
     }
 
@@ -265,9 +248,10 @@ public class Table 
             }
         }
       
-        for (String columnFamily : getColumnFamilies())
+        for (CFMetaData cfm : 
DatabaseDescriptor.getTableDefinition(table).cfMetaData().values())
         {
-            columnFamilyStores.put(columnFamily, 
ColumnFamilyStore.createColumnFamilyStore(table, columnFamily));
+            columnFamilyStores.put(cfm.cfId, 
ColumnFamilyStore.createColumnFamilyStore(table, cfm.cfName));
+            cfNameMap.put(cfm.cfName, cfm.cfId);
         }
 
         // check 10x as often as the lifetime, so we can exceed lifetime by 
10% at most
@@ -286,12 +270,13 @@ public class Table 
     }
     
     /** removes a cf from internal structures (doesn't change disk files). */
-    public void dropCf(String cfName) throws IOException
+    public void dropCf(int cfId) throws IOException
     {
-        assert columnFamilyStores.containsKey(cfName);
-        ColumnFamilyStore cfs = columnFamilyStores.remove(cfName);
+        assert columnFamilyStores.containsKey(cfId);
+        ColumnFamilyStore cfs = columnFamilyStores.remove(cfId);
         if (cfs != null)
         {
+            cfNameMap.remove(cfs.getColumnFamilyName());
             try
             {
                 cfs.forceBlockingFlush();
@@ -308,33 +293,23 @@ public class Table 
     }
     
     /** adds a cf to internal structures, ends up creating disk files). */
-    public void addCf(String cfName)
+    public void initCf(int cfId, String cfName)
     {
-        assert !columnFamilyStores.containsKey(cfName) : cfName;
-        columnFamilyStores.put(cfName, 
ColumnFamilyStore.createColumnFamilyStore(name, cfName));
+        assert !columnFamilyStores.containsKey(cfId) : cfId;
+        columnFamilyStores.put(cfId, 
ColumnFamilyStore.createColumnFamilyStore(name, cfName));
+        cfNameMap.put(cfName, cfId);
     }
     
     /** basically a combined drop and add */
-    public void renameCf(String oldName, String newName) throws IOException
-    {
-        dropCf(oldName);
-        addCf(newName);
-    }
-
-    /**
-     * Selects the specified column family for the specified key.
-    */
-    @Deprecated // single CFs could be larger than memory
-    public ColumnFamily get(String key, String cfName) throws IOException
+    public void renameCf(int cfId, String newName) throws IOException
     {
-        ColumnFamilyStore cfStore = columnFamilyStores.get(cfName);
-        assert cfStore != null : "Column family " + cfName + " has not been 
defined";
-        return cfStore.getColumnFamily(QueryFilter.getIdentityFilter(key, new 
QueryPath(cfName)));
+        dropCf(cfId);
+        initCf(cfId, newName);
     }
 
     public Row getRow(QueryFilter filter) throws IOException
     {
-        ColumnFamilyStore cfStore = 
columnFamilyStores.get(filter.getColumnFamilyName());
+        ColumnFamilyStore cfStore = 
columnFamilyStores.get(cfNameMap.get(filter.getColumnFamilyName()));
         ColumnFamily columnFamily = cfStore.getColumnFamily(filter);
         return new Row(filter.key, columnFamily);
     }
@@ -371,7 +346,7 @@ public class Table 
             for (ColumnFamily columnFamily : mutation.getColumnFamilies())
             {
                 Memtable memtableToFlush;
-                ColumnFamilyStore cfs = 
columnFamilyStores.get(columnFamily.name());
+                ColumnFamilyStore cfs = 
columnFamilyStores.get(columnFamily.id());
                 if (cfs == null)
                 {
                     logger.error("Attempting to mutate non-existant column 
family " + columnFamily.name());
@@ -400,9 +375,9 @@ public class Table 
     public List<Future<?>> flush() throws IOException
     {
         List<Future<?>> futures = new ArrayList<Future<?>>();
-        for (String cfName : columnFamilyStores.keySet())
+        for (Integer cfId : columnFamilyStores.keySet())
         {
-            Future<?> future = columnFamilyStores.get(cfName).forceFlush();
+            Future<?> future = columnFamilyStores.get(cfId).forceFlush();
             if (future != null)
                 futures.add(future);
         }
@@ -419,7 +394,7 @@ public class Table 
             Collection<IColumn> columns = columnFamily.getSortedColumns();
             for (IColumn column : columns)
             {
-                ColumnFamilyStore cfStore = columnFamilyStores.get(new 
String(column.name(), "UTF-8"));
+                ColumnFamilyStore cfStore = 
columnFamilyStores.get(cfNameMap.get(new String(column.name(), "UTF-8")));
                 cfStore.applyBinary(key, column.value());
             }
         }

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=931204&r1=931203&r2=931204&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 
Tue Apr  6 16:02:52 2010
@@ -241,20 +241,18 @@ public class CommitLog
                         RowMutation newRm = new RowMutation(rm.getTable(), 
rm.key());
                         
                         // Rebuild the row mutation, omitting column families 
that a) have already been flushed,
-                        // b) are part of a cf that was dropped. Keep in mind 
that a cf might have been renamed. (this
-                        // is why the old RM is not used in the actual 
transaction.
+                        // b) are part of a cf that was dropped. Keep in mind 
that the cf.name() is suspect. do every
+                        // thing based on the cfid instead.
                         for (ColumnFamily columnFamily : columnFamilies)
                         {
-                            Pair<String, String> key = new Pair<String, 
String>(table.name, columnFamily.name()); 
-                            int id = cfIdMap.get(key);
                             // make sure to use the current name of the cf 
(null means its been dropped).
-                            String currentName = CFMetaData.getCurrentName(id);
+                            String currentName = 
CFMetaData.getCurrentName(columnFamily.id());
                             if (currentName == null)
                                 continue;
                             else if (!currentName.equals(columnFamily.name()))
                                 columnFamily.rename(currentName);
                             
-                            if (clHeader.isDirty(id) && entryLocation >= 
clHeader.getPosition(id))
+                            if (clHeader.isDirty(columnFamily.id()) && 
entryLocation >= clHeader.getPosition(columnFamily.id()))
                                 newRm.add(columnFamily);
                         }
                         if (!newRm.isEmpty())

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java 
Tue Apr  6 16:02:52 2010
@@ -77,7 +77,7 @@ public class AddColumnFamily extends Mig
         // reinitialize the table.
         KSMetaData ksm = DatabaseDescriptor.getTableDefinition(cfm.tableName);
         ksm = makeNewKeyspaceDefinition(ksm);
-        Table.open(ksm.name).addCf(cfm.cfName);
+        Table.open(ksm.name).initCf(cfm.cfId, cfm.cfName);
         DatabaseDescriptor.setTableDefinition(ksm, newVersion);
         
         // force creation of a new commit log segment.

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
 Tue Apr  6 16:02:52 2010
@@ -97,7 +97,7 @@ public class DropColumnFamily extends Mi
         KSMetaData ksm = makeNewKeyspaceDefinition(existing);
         CFMetaData.purge(cfm);
         DatabaseDescriptor.setTableDefinition(ksm, newVersion);
-        Table.open(ksm.name).dropCf(cfm.cfName);
+        Table.open(ksm.name).dropCf(cfm.cfId);
         
         // indicate that some files need to be deleted (eventually)
         SystemTable.markForRemoval(cfm);

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/DropKeyspace.java 
Tue Apr  6 16:02:52 2010
@@ -80,7 +80,7 @@ public class DropKeyspace extends Migrat
         for (CFMetaData cfm : ksm.cfMetaData().values())
         {
             CFMetaData.purge(cfm);
-            table.dropCf(cfm.cfName);
+            table.dropCf(cfm.cfId);
             SystemTable.markForRemoval(cfm);
         }
                         

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/migration/RenameColumnFamily.java
 Tue Apr  6 16:02:52 2010
@@ -47,6 +47,7 @@ public class RenameColumnFamily extends 
     private String tableName;
     private String oldName;
     private String newName;
+    private int cfId;
     
     RenameColumnFamily(DataInputStream din) throws IOException
     {
@@ -55,8 +56,11 @@ public class RenameColumnFamily extends 
         tableName = din.readUTF();
         oldName = din.readUTF();
         newName = din.readUTF();
+        cfId = din.readInt();
     }
     
+    // this this constructor sets the cfid, it can only be called form a node 
that is starting the migration. It cannot
+    // be called during deserialization of this migration.
     public RenameColumnFamily(String tableName, String oldName, String 
newName) throws ConfigurationException, IOException
     {
         super(UUIDGen.makeType1UUIDFromHost(FBUtilities.getLocalAddress()), 
DatabaseDescriptor.getDefsVersion());
@@ -72,6 +76,8 @@ public class RenameColumnFamily extends 
         if (ksm.cfMetaData().containsKey(newName))
             throw new ConfigurationException("CF is already defined in that 
keyspace.");
         
+        cfId = ksm.cfMetaData().get(oldName).cfId;
+        
         // clone the ksm, replacing cfm with the new one.
         KSMetaData newKsm = makeNewKeyspaceDefinition(ksm);
         rm = Migration.makeDefinitionMutation(newKsm, null, newVersion);
@@ -104,7 +110,7 @@ public class RenameColumnFamily extends 
         // reset defs.
         KSMetaData ksm = 
makeNewKeyspaceDefinition(DatabaseDescriptor.getTableDefinition(tableName));
         DatabaseDescriptor.setTableDefinition(ksm, newVersion);
-        Table.open(ksm.name).renameCf(oldName, newName);
+        Table.open(ksm.name).renameCf(cfId, newName);
         
         CommitLog.instance().forceNewSegment();
     }
@@ -142,6 +148,7 @@ public class RenameColumnFamily extends 
             dos.writeUTF(renameColumnFamily.tableName);
             dos.writeUTF(renameColumnFamily.oldName);
             dos.writeUTF(renameColumnFamily.newName);
+            dos.writeInt(renameColumnFamily.cfId);
         }
 
         public RenameColumnFamily deserialize(DataInputStream dis) throws 
IOException

Modified: cassandra/trunk/test/unit/org/apache/cassandra/Util.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/Util.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/Util.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/Util.java Tue Apr  6 
16:02:52 2010
@@ -27,6 +27,7 @@ import java.nio.ByteBuffer;
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
+import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.commons.lang.ArrayUtils;
 
 import org.apache.cassandra.db.*;
@@ -95,4 +96,11 @@ public class Util
         store.forceBlockingFlush();
         return store;
     }
+    
+    public static ColumnFamily getColumnFamily(Table table, String key, String 
cfName) throws IOException
+    {
+        ColumnFamilyStore cfStore = table.getColumnFamilyStore(cfName);
+        assert cfStore != null : "Column family " + cfName + " has not been 
defined";
+        return cfStore.getColumnFamily(QueryFilter.getIdentityFilter(key, new 
QueryPath(cfName)));
+    }
 }

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/MultitableTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/MultitableTest.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/MultitableTest.java 
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/MultitableTest.java Tue 
Apr  6 16:02:52 2010
@@ -24,6 +24,7 @@ package org.apache.cassandra.db;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 
+import org.apache.cassandra.Util;
 import org.junit.Test;
 
 import static org.apache.cassandra.db.TableTest.assertColumns;
@@ -56,7 +57,7 @@ public class MultitableTest extends Clea
         table1.getColumnFamilyStore("Standard1").forceBlockingFlush();
         table2.getColumnFamilyStore("Standard1").forceBlockingFlush();
 
-        assertColumns(table1.get("keymulti", "Standard1"), "col1");
-        assertColumns(table2.get("keymulti", "Standard1"), "col2");
+        assertColumns(Util.getColumnFamily(table1, "keymulti", "Standard1"), 
"col1");
+        assertColumns(Util.getColumnFamily(table2, "keymulti", "Standard1"), 
"col2");
     }
 }

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/NameSortTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/NameSortTest.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/NameSortTest.java 
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/NameSortTest.java Tue Apr 
 6 16:02:52 2010
@@ -24,6 +24,7 @@ import java.util.Collection;
 import java.util.Arrays;
 import java.nio.ByteBuffer;
 
+import org.apache.cassandra.Util;
 import org.junit.Test;
 
 import org.apache.cassandra.CleanupHelper;
@@ -101,7 +102,7 @@ public class NameSortTest extends Cleanu
             String key = Integer.toString(i);
             ColumnFamily cf;
 
-            cf = table.get(key, "Standard1");
+            cf = Util.getColumnFamily(table, key, "Standard1");
             Collection<IColumn> columns = cf.getSortedColumns();
             for (IColumn column : columns)
             {
@@ -110,7 +111,7 @@ public class NameSortTest extends Cleanu
                 assert Arrays.equals(bytes, column.value());
             }
 
-            cf = table.get(key, "Super1");
+            cf = Util.getColumnFamily(table, key, "Super1");
             assert cf != null : "key " + key + " is missing!";
             Collection<IColumn> superColumns = cf.getSortedColumns();
             assert superColumns.size() == 8 : cf;

Modified: 
cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManagerTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManagerTest.java?rev=931204&r1=931203&r2=931204&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManagerTest.java 
(original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/RecoveryManagerTest.java 
Tue Apr  6 16:02:52 2010
@@ -21,6 +21,7 @@ package org.apache.cassandra.db;
 import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 
+import org.apache.cassandra.Util;
 import org.junit.Test;
 
 import org.apache.cassandra.CleanupHelper;
@@ -63,7 +64,7 @@ public class RecoveryManagerTest extends
 
         CommitLog.recover();
 
-        assertColumns(table1.get("keymulti", "Standard1"), "col1");
-        assertColumns(table2.get("keymulti", "Standard3"), "col2");
+        assertColumns(Util.getColumnFamily(table1, "keymulti", "Standard1"), 
"col1");
+        assertColumns(Util.getColumnFamily(table2, "keymulti", "Standard3"), 
"col2");
     }
 }


Reply via email to