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));
}