diff --git a/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java b/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java index e27d3d0ccb..17bd84d66f 100644 --- a/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java +++ b/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java @@ -80,11 +80,12 @@ public class DropColumnFamily extends Migration if (!clientMode) { + cfs.snapshot(Table.getTimestampedSnapshotName(null)); + CompactionManager.instance.getCompactionLock().lock(); cfs.flushLock.lock(); try { - cfs.snapshot(Table.getTimestampedSnapshotName(null)); Table.open(ksm.name).dropCf(cfm.cfId); } finally diff --git a/src/java/org/apache/cassandra/db/migration/DropKeyspace.java b/src/java/org/apache/cassandra/db/migration/DropKeyspace.java index 1fefbdaf4d..cdfcc231d3 100644 --- a/src/java/org/apache/cassandra/db/migration/DropKeyspace.java +++ b/src/java/org/apache/cassandra/db/migration/DropKeyspace.java @@ -63,10 +63,10 @@ public class DropKeyspace extends Migration CFMetaData.purge(cfm); if (!clientMode) { + cfs.snapshot(snapshotName); cfs.flushLock.lock(); try { - cfs.snapshot(snapshotName); Table.open(ksm.name).dropCf(cfm.cfId); } finally diff --git a/test/unit/org/apache/cassandra/db/DefsTest.java b/test/unit/org/apache/cassandra/db/DefsTest.java index a9a2bb5cdc..aa6833df91 100644 --- a/test/unit/org/apache/cassandra/db/DefsTest.java +++ b/test/unit/org/apache/cassandra/db/DefsTest.java @@ -411,7 +411,7 @@ public class DefsTest extends CleanupHelper assert ks != null; final CFMetaData cfm = ks.cfMetaData().get("Standard2"); assert cfm != null; - + // write some data, force a flush, then verify that files exist on disk. RowMutation rm = new RowMutation(ks.name, dk.key); for (int i = 0; i < 100; i++) @@ -451,7 +451,28 @@ public class DefsTest extends CleanupHelper assert th instanceof NullPointerException; } } - + + @Test + public void dropKSUnflushed() throws ConfigurationException, IOException, ExecutionException, InterruptedException + { + DecoratedKey dk = Util.dk("dropKs"); + // sanity + final KSMetaData ks = DatabaseDescriptor.getTableDefinition("Keyspace3"); + assert ks != null; + final CFMetaData cfm = ks.cfMetaData().get("Standard1"); + assert cfm != null; + + // write some data + RowMutation rm = new RowMutation(ks.name, dk.key); + for (int i = 0; i < 100; i++) + rm.add(new QueryPath(cfm.cfName, null, ByteBufferUtil.bytes(("col" + i))), ByteBufferUtil.bytes("anyvalue"), 1L); + rm.apply(); + + new DropKeyspace(ks.name).apply(); + + assert DatabaseDescriptor.getTableDefinition(ks.name) == null; + } + @Test public void renameKs() throws ConfigurationException, IOException, ExecutionException, InterruptedException {