From ab272f53d46bcf3b970f6356061044b34a36b023 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Tue, 29 Mar 2011 19:30:55 +0000 Subject: [PATCH 1/3] update CHANGES git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1086696 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 4b751f08b6..123dc0073d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -63,8 +63,7 @@ * fixes for cache save/load (CASSANDRA-2172, -2174) * Handle whole-row deletions in CFOutputFormat (CASSANDRA-2014) * Make memtable_flush_writers flush in parallel (CASSANDRA-2178) - * make key cache preheating default to false; enable with - -Dcompaction_preheat_key_cache=true (CASSANDRA-2175) + * Add compaction_preheat_key_cache option (CASSANDRA-2175) * refactor stress.py to have only one copy of the format string used for creating row keys (CASSANDRA-2108) * validate index names for \w+ (CASSANDRA-2196) From acde48fb3db47e3c523b9e2b5fddb1517d7d9f64 Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Wed, 30 Mar 2011 16:18:39 +0000 Subject: [PATCH 2/3] stress.java rejects arbitrary arguments. Patch by Pavel Yaskevich, reviewed by brandonwilliams for CASSANDRA-2323 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1087008 13f79535-47bb-0310-9956-ffa450edef68 --- .../src/org/apache/cassandra/contrib/stress/Session.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java b/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java index adad267c37..55c13d904e 100644 --- a/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java +++ b/contrib/stress/src/org/apache/cassandra/contrib/stress/Session.java @@ -115,6 +115,12 @@ public class Session { CommandLine cmd = parser.parse(availableOptions, arguments); + if (cmd.getArgs().length > 0) + { + System.err.println("Application does not allow arbitrary arguments: " + StringUtils.join(cmd.getArgList(), ", ")); + System.exit(1); + } + if (cmd.hasOption("h")) throw new IllegalArgumentException("help"); From 95809de5861b48eb6323381fa0756084fbb2ceeb Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Thu, 31 Mar 2011 18:34:56 +0000 Subject: [PATCH 3/3] snapshot must be performed before flushlock must be acquired, or we deadlock. See #2381 patch by jbellis git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-0.7@1087402 13f79535-47bb-0310-9956-ffa450edef68 --- .../db/migration/DropColumnFamily.java | 3 ++- .../cassandra/db/migration/DropKeyspace.java | 2 +- .../org/apache/cassandra/db/DefsTest.java | 25 +++++++++++++++++-- 3 files changed, 26 insertions(+), 4 deletions(-) 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 {