You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2011/03/31 20:34:57 UTC
svn commit: r1087402 - in /cassandra/branches/cassandra-0.7:
src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
src/java/org/apache/cassandra/db/migration/DropKeyspace.java
test/unit/org/apache/cassandra/db/DefsTest.java
Author: jbellis
Date: Thu Mar 31 18:34:56 2011
New Revision: 1087402
URL: http://svn.apache.org/viewvc?rev=1087402&view=rev
Log:
snapshot must be performed before flushlock must be acquired, or we deadlock. See #2381
patch by jbellis
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropKeyspace.java
cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java?rev=1087402&r1=1087401&r2=1087402&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java Thu Mar 31 18:34:56 2011
@@ -80,11 +80,12 @@ public class DropColumnFamily extends Mi
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
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropKeyspace.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropKeyspace.java?rev=1087402&r1=1087401&r2=1087402&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropKeyspace.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/migration/DropKeyspace.java Thu Mar 31 18:34:56 2011
@@ -63,10 +63,10 @@ public class DropKeyspace extends Migrat
CFMetaData.purge(cfm);
if (!clientMode)
{
+ cfs.snapshot(snapshotName);
cfs.flushLock.lock();
try
{
- cfs.snapshot(snapshotName);
Table.open(ksm.name).dropCf(cfm.cfId);
}
finally
Modified: cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java?rev=1087402&r1=1087401&r2=1087402&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java (original)
+++ cassandra/branches/cassandra-0.7/test/unit/org/apache/cassandra/db/DefsTest.java Thu Mar 31 18:34:56 2011
@@ -411,7 +411,7 @@ public class DefsTest extends CleanupHel
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 CleanupHel
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
{