Author: gdusbabek
Date: Fri May 28 15:54:28 2010
New Revision: 949210

URL: http://svn.apache.org/viewvc?rev=949210&view=rev
Log:
additional test to check if a CF can be added to an empty KS after creation. 
patch by Erik Onnen, reviewed by Gary Dusbabek. CASSANDRA-1082

Modified:
    cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java

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=949210&r1=949209&r2=949210&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java Fri May 28 
15:54:28 2010
@@ -25,8 +25,6 @@ import org.apache.cassandra.config.CFMet
 import org.apache.cassandra.config.ConfigurationException;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.config.KSMetaData;
-import org.apache.cassandra.db.commitlog.CommitLog;
-import org.apache.cassandra.db.commitlog.CommitLogSegment;
 import org.apache.cassandra.db.filter.QueryFilter;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.db.marshal.BytesType;
@@ -42,7 +40,6 @@ import org.apache.cassandra.utils.FBUtil
 import org.apache.cassandra.db.marshal.UTF8Type;
 import org.apache.cassandra.utils.UUIDGen;
 
-import org.junit.Before;
 import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
@@ -165,10 +162,8 @@ public class DefsTest extends CleanupHel
         KSMetaData original = DatabaseDescriptor.getTableDefinition(ks);
 
         CFMetaData newCf = new CFMetaData(original.name, cf, 
ColumnFamilyType.Standard, ClockType.Timestamp, new UTF8Type(), null, "A New 
Column Family", 0, false, 0);
-        int clSegments = CommitLog.instance().getSegmentCount();
         assert 
!DatabaseDescriptor.getTableDefinition(ks).cfMetaData().containsKey(newCf.cfName);
         new AddColumnFamily(newCf).apply();
-        assert CommitLog.instance().getSegmentCount() == clSegments + 1;
 
         assert 
DatabaseDescriptor.getTableDefinition(ks).cfMetaData().containsKey(newCf.cfName);
         assert 
DatabaseDescriptor.getTableDefinition(ks).cfMetaData().get(newCf.cfName).equals(newCf);
@@ -283,9 +278,7 @@ public class DefsTest extends CleanupHel
         CFMetaData newCf = new CFMetaData("NewKeyspace1", "AddedStandard1", 
ColumnFamilyType.Standard, ClockType.Timestamp, new UTF8Type(), null, "A new cf 
for a new ks", 0, false, 0);
         KSMetaData newKs = new KSMetaData(newCf.tableName, 
RackUnawareStrategy.class, 5, newCf);
         
-        int segmentCount = CommitLog.instance().getSegmentCount();
         new AddKeyspace(newKs).apply();
-        assert CommitLog.instance().getSegmentCount() == segmentCount + 1;
         
         assert DatabaseDescriptor.getTableDefinition(newCf.tableName) != null;
         assert DatabaseDescriptor.getTableDefinition(newCf.tableName) == newKs;
@@ -427,4 +420,40 @@ public class DefsTest extends CleanupHel
         // tests old write.
         assert Arrays.equals(cfam.getColumn("col1".getBytes()).value(), 
"value".getBytes());
     }
+
+    @Test
+    public void createEmptyKsAddNewCf() throws ConfigurationException, 
IOException, ExecutionException, InterruptedException
+    {
+        assert DatabaseDescriptor.getTableDefinition("EmptyKeyspace") == null;
+        
+        KSMetaData newKs = new KSMetaData("EmptyKeyspace", 
RackUnawareStrategy.class, 5, new CFMetaData[]{});
+
+        new AddKeyspace(newKs).apply();
+        assert DatabaseDescriptor.getTableDefinition("EmptyKeyspace") != null;
+
+        CFMetaData newCf = new CFMetaData("EmptyKeyspace", "AddedLater", 
ColumnFamilyType.Standard, ClockType.Timestamp, new UTF8Type(), null, "A new CF 
to add to an empty KS", 0, false, 0);
+
+        //should not exist until apply
+        assert 
!DatabaseDescriptor.getTableDefinition(newKs.name).cfMetaData().containsKey(newCf.cfName);
+
+        //add the new CF to the empty space
+        new AddColumnFamily(newCf).apply();
+
+        assert 
DatabaseDescriptor.getTableDefinition(newKs.name).cfMetaData().containsKey(newCf.cfName);
+        assert 
DatabaseDescriptor.getTableDefinition(newKs.name).cfMetaData().get(newCf.cfName).equals(newCf);
+
+        // now read and write to it.
+        DecoratedKey dk = Util.dk("key0");
+        RowMutation rm = new RowMutation(newKs.name, dk.key);
+        rm.add(new QueryPath(newCf.cfName, null, "col0".getBytes()), 
"value0".getBytes(), new TimestampClock(1L));
+        rm.apply();
+        ColumnFamilyStore store = 
Table.open(newKs.name).getColumnFamilyStore(newCf.cfName);
+        assert store != null;
+        store.forceBlockingFlush();
+
+        ColumnFamily cfam = 
store.getColumnFamily(QueryFilter.getNamesFilter(dk, new 
QueryPath(newCf.cfName), "col0".getBytes()));
+        assert cfam.getColumn("col0".getBytes()) != null;
+        IColumn col = cfam.getColumn("col0".getBytes());
+        assert Arrays.equals("value0".getBytes(), col.value());
+    }
 }


Reply via email to