Author: jbellis
Date: Fri Apr 17 20:08:17 2009
New Revision: 766135

URL: http://svn.apache.org/viewvc?rev=766135&view=rev
Log:
test and fix for CF clone bug during remove.  patch by Jun Rao; reviewed by 
jbellis for #33

Modified:
    incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java
    
incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java

Modified: incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java?rev=766135&r1=766134&r2=766135&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java 
(original)
+++ incubator/cassandra/trunk/src/org/apache/cassandra/db/Memtable.java Fri Apr 
17 20:08:17 2009
@@ -315,7 +315,7 @@
                 IColumn column = cFamily.getColumn(values[1]); // super or 
normal column
                 if (column != null )
                 {
-                    columnFamily = new ColumnFamily(cfName_, cFamily.type());
+                    columnFamily = cFamily.cloneMeShallow();
                     columnFamily.addColumn(column);
                 }
                }
@@ -328,7 +328,7 @@
                     IColumn subColumn = superColumn.getSubColumn(values[2]);
                     if (subColumn != null)
                     {
-                        columnFamily = new ColumnFamily(cfName_, 
cFamily.type());
+                        columnFamily = cFamily.cloneMeShallow();
                         columnFamily.addColumn(values[1] + ":" + values[2], 
subColumn.value(), subColumn.timestamp(), subColumn.isMarkedForDelete());
                     }
                 }

Modified: 
incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java
URL: 
http://svn.apache.org/viewvc/incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java?rev=766135&r1=766134&r2=766135&view=diff
==============================================================================
--- 
incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java
 (original)
+++ 
incubator/cassandra/trunk/test/org/apache/cassandra/db/ColumnFamilyStoreTest.java
 Fri Apr 17 20:08:17 2009
@@ -275,6 +275,29 @@
         // add data
         rm = new RowMutation("Table1", "key1");
         rm.add("Standard1:Column1", "asdf".getBytes(), 0);
+        rm.apply();
+
+        // remove
+        rm = new RowMutation("Table1", "key1");
+        rm.delete("Standard1", 1);
+        rm.apply();
+
+        ColumnFamily retrieved = store.getColumnFamily("key1", 
"Standard1:Column1", new IdentityFilter());
+        assert retrieved.isMarkedForDelete();
+        assertNull(retrieved.getColumn("Column1"));
+        assertNull(ColumnFamilyStore.removeDeleted(retrieved, 
Integer.MAX_VALUE));
+    }
+
+    @Test
+    public void testRemoveColumnFamilyWithFlush1() throws IOException, 
ColumnFamilyNotDefinedException, ExecutionException, InterruptedException
+    {
+        Table table = Table.open("Table1");
+        ColumnFamilyStore store = table.getColumnFamilyStore("Standard1");
+        RowMutation rm;
+
+        // add data
+        rm = new RowMutation("Table1", "key1");
+        rm.add("Standard1:Column1", "asdf".getBytes(), 0);
         rm.add("Standard1:Column2", "asdf".getBytes(), 0);
         rm.apply();
         store.forceBlockingFlush();
@@ -286,7 +309,30 @@
 
         ColumnFamily retrieved = store.getColumnFamily("key1", "Standard1", 
new IdentityFilter());
         assert retrieved.isMarkedForDelete();
-        assertEquals(retrieved.getColumnCount(), 0);
+        assertNull(retrieved.getColumn("Column1"));
+        assertNull(ColumnFamilyStore.removeDeleted(retrieved, 
Integer.MAX_VALUE));
+    }
+
+    @Test
+    public void testRemoveColumnFamilyWithFlush2() throws IOException, 
ColumnFamilyNotDefinedException, ExecutionException, InterruptedException
+    {
+        Table table = Table.open("Table1");
+        ColumnFamilyStore store = table.getColumnFamilyStore("Standard1");
+        RowMutation rm;
+
+        // add data
+        rm = new RowMutation("Table1", "key1");
+        rm.add("Standard1:Column1", "asdf".getBytes(), 0);
+        rm.apply();
+        // remove
+        rm = new RowMutation("Table1", "key1");
+        rm.delete("Standard1", 1);
+        rm.apply();
+        store.forceBlockingFlush();
+
+        ColumnFamily retrieved = store.getColumnFamily("key1", 
"Standard1:Column1", new IdentityFilter());
+        assert retrieved.isMarkedForDelete();
+        assertNull(retrieved.getColumn("Column1"));
         assertNull(ColumnFamilyStore.removeDeleted(retrieved, 
Integer.MAX_VALUE));
     }
 


Reply via email to