test and fix for CF clone bug during remove. patch by Jun Rao; reviewed by jbellis for #33

git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/trunk@766135 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Ellis 2009-04-17 20:08:17 +00:00
parent fa1f80f40d
commit 200d4937fa
2 changed files with 49 additions and 3 deletions

View File

@ -315,7 +315,7 @@ public class Memtable implements Comparable<Memtable>
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 @@ public class Memtable implements Comparable<Memtable>
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());
}
}

View File

@ -272,6 +272,29 @@ public class ColumnFamilyStoreTest extends ServerTest
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();
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);
@ -286,7 +309,30 @@ public class ColumnFamilyStoreTest extends ServerTest
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));
}