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 2013/10/14 11:39:09 UTC
[01/11] git commit: typos
Updated Branches:
refs/heads/cassandra-1.2 1797b49e2 -> d40f3c8d7
refs/heads/cassandra-2.0 a7c654122 -> 810f0678c
refs/heads/trunk 1353e0a37 -> 13f21db96
typos
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/4284d98a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/4284d98a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/4284d98a
Branch: refs/heads/trunk
Commit: 4284d98ae4f2cc47af8fead1222ddeb81552b656
Parents: 639c01a
Author: Brandon Williams <br...@apache.org>
Authored: Sun Oct 13 17:52:28 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Sun Oct 13 17:52:28 2013 -0500
----------------------------------------------------------------------
.../org/apache/cassandra/cql3/statements/CreateUserStatement.java | 2 +-
.../org/apache/cassandra/cql3/statements/DropUserStatement.java | 2 +-
src/java/org/apache/cassandra/service/StorageProxy.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4284d98a/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
index df3a5e7..a82b38d 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
@@ -57,7 +57,7 @@ public class CreateUserStatement extends AuthenticationStatement
public void checkAccess(ClientState state) throws UnauthorizedException
{
if (!state.getUser().isSuper())
- throw new UnauthorizedException("Only superusers are allowed to perfrom CREATE USER queries");
+ throw new UnauthorizedException("Only superusers are allowed to perform CREATE USER queries");
}
public ResultMessage execute(ClientState state) throws RequestValidationException, RequestExecutionException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4284d98a/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java b/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
index d55566c..0894db0 100644
--- a/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
@@ -52,7 +52,7 @@ public class DropUserStatement extends AuthenticationStatement
public void checkAccess(ClientState state) throws UnauthorizedException
{
if (!state.getUser().isSuper())
- throw new UnauthorizedException("Only superusers are allowed to perfrom DROP USER queries");
+ throw new UnauthorizedException("Only superusers are allowed to perform DROP USER queries");
}
public ResultMessage execute(ClientState state) throws RequestValidationException, RequestExecutionException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/4284d98a/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index cdb0bd6..f195285 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -384,7 +384,7 @@ public class StorageProxy implements StorageProxyMBean
return responseHandler;
}
- // same as above except does not initiate writes (but does perfrom availability checks).
+ // same as above except does not initiate writes (but does perform availability checks).
private static WriteResponseHandlerWrapper wrapResponseHandler(RowMutation mutation, ConsistencyLevel consistency_level, WriteType writeType)
{
AbstractReplicationStrategy rs = Table.open(mutation.getTable()).getReplicationStrategy();
[04/11] git commit: typos
Posted by jb...@apache.org.
typos
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1797b49e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1797b49e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1797b49e
Branch: refs/heads/cassandra-2.0
Commit: 1797b49e215b5710cda540d734a08429840ac788
Parents: 7290abd
Author: Brandon Williams <br...@apache.org>
Authored: Sun Oct 13 17:52:28 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Sun Oct 13 17:54:17 2013 -0500
----------------------------------------------------------------------
.../org/apache/cassandra/cql3/statements/CreateUserStatement.java | 2 +-
.../org/apache/cassandra/cql3/statements/DropUserStatement.java | 2 +-
src/java/org/apache/cassandra/service/StorageProxy.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1797b49e/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
index df3a5e7..a82b38d 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
@@ -57,7 +57,7 @@ public class CreateUserStatement extends AuthenticationStatement
public void checkAccess(ClientState state) throws UnauthorizedException
{
if (!state.getUser().isSuper())
- throw new UnauthorizedException("Only superusers are allowed to perfrom CREATE USER queries");
+ throw new UnauthorizedException("Only superusers are allowed to perform CREATE USER queries");
}
public ResultMessage execute(ClientState state) throws RequestValidationException, RequestExecutionException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1797b49e/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java b/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
index d55566c..0894db0 100644
--- a/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
@@ -52,7 +52,7 @@ public class DropUserStatement extends AuthenticationStatement
public void checkAccess(ClientState state) throws UnauthorizedException
{
if (!state.getUser().isSuper())
- throw new UnauthorizedException("Only superusers are allowed to perfrom DROP USER queries");
+ throw new UnauthorizedException("Only superusers are allowed to perform DROP USER queries");
}
public ResultMessage execute(ClientState state) throws RequestValidationException, RequestExecutionException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1797b49e/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index cdb0bd6..f195285 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -384,7 +384,7 @@ public class StorageProxy implements StorageProxyMBean
return responseHandler;
}
- // same as above except does not initiate writes (but does perfrom availability checks).
+ // same as above except does not initiate writes (but does perform availability checks).
private static WriteResponseHandlerWrapper wrapResponseHandler(RowMutation mutation, ConsistencyLevel consistency_level, WriteType writeType)
{
AbstractReplicationStrategy rs = Table.open(mutation.getTable()).getReplicationStrategy();
[03/11] git commit: Merge branch 'cassandra-2.0' of
https://git-wip-us.apache.org/repos/asf/cassandra into cassandra-2.0
Posted by jb...@apache.org.
Merge branch 'cassandra-2.0' of https://git-wip-us.apache.org/repos/asf/cassandra into cassandra-2.0
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a7c65412
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a7c65412
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a7c65412
Branch: refs/heads/trunk
Commit: a7c6541220f6e3673075284bd5e398caa9641a54
Parents: c9a906c 53b2d9d
Author: Brandon Williams <br...@apache.org>
Authored: Sun Oct 13 17:53:17 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Sun Oct 13 17:53:17 2013 -0500
----------------------------------------------------------------------
CHANGES.txt | 2 ++
NEWS.txt | 3 +-
.../org/apache/cassandra/config/CFMetaData.java | 10 ++++--
.../apache/cassandra/db/ColumnFamilyStore.java | 8 ++---
.../AbstractSimplePerColumnSecondaryIndex.java | 19 ------------
.../apache/cassandra/utils/StatusLogger.java | 2 +-
.../org/apache/cassandra/stress/Session.java | 32 ++++++++++++++++++--
7 files changed, 44 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
[05/11] git commit: typos
Posted by jb...@apache.org.
typos
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/1797b49e
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/1797b49e
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/1797b49e
Branch: refs/heads/trunk
Commit: 1797b49e215b5710cda540d734a08429840ac788
Parents: 7290abd
Author: Brandon Williams <br...@apache.org>
Authored: Sun Oct 13 17:52:28 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Sun Oct 13 17:54:17 2013 -0500
----------------------------------------------------------------------
.../org/apache/cassandra/cql3/statements/CreateUserStatement.java | 2 +-
.../org/apache/cassandra/cql3/statements/DropUserStatement.java | 2 +-
src/java/org/apache/cassandra/service/StorageProxy.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1797b49e/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java b/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
index df3a5e7..a82b38d 100644
--- a/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/CreateUserStatement.java
@@ -57,7 +57,7 @@ public class CreateUserStatement extends AuthenticationStatement
public void checkAccess(ClientState state) throws UnauthorizedException
{
if (!state.getUser().isSuper())
- throw new UnauthorizedException("Only superusers are allowed to perfrom CREATE USER queries");
+ throw new UnauthorizedException("Only superusers are allowed to perform CREATE USER queries");
}
public ResultMessage execute(ClientState state) throws RequestValidationException, RequestExecutionException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1797b49e/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java b/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
index d55566c..0894db0 100644
--- a/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
+++ b/src/java/org/apache/cassandra/cql3/statements/DropUserStatement.java
@@ -52,7 +52,7 @@ public class DropUserStatement extends AuthenticationStatement
public void checkAccess(ClientState state) throws UnauthorizedException
{
if (!state.getUser().isSuper())
- throw new UnauthorizedException("Only superusers are allowed to perfrom DROP USER queries");
+ throw new UnauthorizedException("Only superusers are allowed to perform DROP USER queries");
}
public ResultMessage execute(ClientState state) throws RequestValidationException, RequestExecutionException
http://git-wip-us.apache.org/repos/asf/cassandra/blob/1797b49e/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageProxy.java b/src/java/org/apache/cassandra/service/StorageProxy.java
index cdb0bd6..f195285 100644
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@ -384,7 +384,7 @@ public class StorageProxy implements StorageProxyMBean
return responseHandler;
}
- // same as above except does not initiate writes (but does perfrom availability checks).
+ // same as above except does not initiate writes (but does perform availability checks).
private static WriteResponseHandlerWrapper wrapResponseHandler(RowMutation mutation, ConsistencyLevel consistency_level, WriteType writeType)
{
AbstractReplicationStrategy rs = Table.open(mutation.getTable()).getReplicationStrategy();
[09/11] git commit: merge from 1.2
Posted by jb...@apache.org.
merge from 1.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/810f0678
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/810f0678
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/810f0678
Branch: refs/heads/trunk
Commit: 810f0678ccd598b8f99b7b5df459c5cbe76ee9b8
Parents: a7c6541 d40f3c8
Author: Jonathan Ellis <jb...@apache.org>
Authored: Mon Oct 14 10:37:32 2013 +0100
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Mon Oct 14 10:37:32 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/DataTracker.java | 30 ++++++++++++++------
.../cassandra/io/sstable/SSTableReader.java | 4 +--
3 files changed, 25 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/810f0678/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 4668ae2,53bc848..cd06acc
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -48,43 -23,10 +48,44 @@@ Merged from 1.2
* (Hadoop) Fetch no more than 128 splits in parallel (CASSANDRA-6169)
* stress: add username/password authentication support (CASSANDRA-6068)
* Fix indexed queries with row cache enabled on parent table (CASSANDRA-5732)
+ * Fix compaction race during columnfamily drop (CASSANDRA-5957)
-1.2.10
+2.0.1
+ * Fix bug that could allow reading deleted data temporarily (CASSANDRA-6025)
+ * Improve memory use defaults (CASSANDRA-5069)
+ * Make ThriftServer more easlly extensible (CASSANDRA-6058)
+ * Remove Hadoop dependency from ITransportFactory (CASSANDRA-6062)
+ * add file_cache_size_in_mb setting (CASSANDRA-5661)
+ * Improve error message when yaml contains invalid properties (CASSANDRA-5958)
+ * Improve leveled compaction's ability to find non-overlapping L0 compactions
+ to work on concurrently (CASSANDRA-5921)
+ * Notify indexer of columns shadowed by range tombstones (CASSANDRA-5614)
+ * Log Merkle tree stats (CASSANDRA-2698)
+ * Switch from crc32 to adler32 for compressed sstable checksums (CASSANDRA-5862)
+ * Improve offheap memcpy performance (CASSANDRA-5884)
+ * Use a range aware scanner for cleanup (CASSANDRA-2524)
+ * Cleanup doesn't need to inspect sstables that contain only local data
+ (CASSANDRA-5722)
+ * Add ability for CQL3 to list partition keys (CASSANDRA-4536)
+ * Improve native protocol serialization (CASSANDRA-5664)
+ * Upgrade Thrift to 0.9.1 (CASSANDRA-5923)
+ * Require superuser status for adding triggers (CASSANDRA-5963)
+ * Make standalone scrubber handle old and new style leveled manifest
+ (CASSANDRA-6005)
+ * Fix paxos bugs (CASSANDRA-6012, 6013, 6023)
+ * Fix paged ranges with multiple replicas (CASSANDRA-6004)
+ * Fix potential AssertionError during tracing (CASSANDRA-6041)
+ * Fix NPE in sstablesplit (CASSANDRA-6027)
+ * Migrate pre-2.0 key/value/column aliases to system.schema_columns
+ (CASSANDRA-6009)
+ * Paging filter empty rows too agressively (CASSANDRA-6040)
+ * Support variadic parameters for IN clauses (CASSANDRA-4210)
+ * cqlsh: return the result of CAS writes (CASSANDRA-5796)
+ * Fix validation of IN clauses with 2ndary indexes (CASSANDRA-6050)
+ * Support named bind variables in CQL (CASSANDRA-6033)
+Merged from 1.2:
+ * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
* Avoid second-guessing out-of-space state (CASSANDRA-5605)
* Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)
* (Hadoop) Fix CQLRW for thrift tables (CASSANDRA-6002)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/810f0678/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/DataTracker.java
index 1a19fef,4fe0a5e..365d607
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@@ -199,19 -188,20 +199,20 @@@ public class DataTracke
}
/**
- * Removes files from compacting status: this is different from 'markCompacted'
+ * Removes files from compacting status: this is different from 'markObsolete'
* because it should be run regardless of whether a compaction succeeded.
*/
- public void unmarkCompacting(Collection<SSTableReader> unmark)
+ public void unmarkCompacting(Iterable<SSTableReader> unmark)
{
- if (!cfstore.isValid())
+ boolean isValid = cfstore.isValid();
+ if (!isValid)
{
- // We don't know if the original compaction suceeded or failed, which makes it difficult to know
- // if the sstable reference has already been released.
- // A "good enough" approach is to mark the sstables involved compacted, which if compaction succeeded
+ // The CF has been dropped. We don't know if the original compaction suceeded or failed,
+ // which makes it difficult to know if the sstable reference has already been released.
+ // A "good enough" approach is to mark the sstables involved obsolete, which if compaction succeeded
// is harmlessly redundant, and if it failed ensures that at least the sstable will get deleted on restart.
for (SSTableReader sstable : unmark)
- sstable.markCompacted();
+ sstable.markObsolete();
}
View currentView, newView;
@@@ -221,9 -211,17 +222,17 @@@
newView = currentView.unmarkCompacting(unmark);
}
while (!view.compareAndSet(currentView, newView));
+
+ if (!isValid)
+ {
+ // when the CFS is invalidated, it will call unreferenceSSTables(). However, unreferenceSSTables only deals
+ // with sstables that aren't currently being compacted. If there are ongoing compactions that finish or are
+ // interrupted after the CFS is invalidated, those sstables need to be unreferenced as well, so we do that here.
+ unreferenceSSTables();
+ }
}
- public void markCompacted(Collection<SSTableReader> sstables, OperationType compactionType)
+ public void markObsolete(Collection<SSTableReader> sstables, OperationType compactionType)
{
replace(sstables, Collections.<SSTableReader>emptyList());
notifySSTablesChanged(sstables, Collections.<SSTableReader>emptyList(), compactionType);
@@@ -360,8 -360,13 +369,13 @@@
long size = sstable.bytesOnDisk();
StorageMetrics.load.dec(size);
cfstore.metric.liveDiskSpaceUsed.dec(size);
+
+ // tolerateCompacted will be true when the CFS is no longer valid (dropped). If there were ongoing
+ // compactions when it was invalidated, sstables may already be marked compacted, so we should
+ // tolerate that (see CASSANDRA-5957)
- boolean firstToCompact = sstable.markCompacted();
+ boolean firstToCompact = sstable.markObsolete();
- assert firstToCompact : sstable + " was already marked compacted";
+ assert (tolerateCompacted || firstToCompact) : sstable + " was already marked compacted";
+
sstable.releaseReference();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/810f0678/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index abd7c9f,ed221d9..cb0873d
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@@ -1102,10 -1003,10 +1102,10 @@@ public class SSTableReader extends SSTa
* When calling this function, the caller must ensure that the SSTableReader is not referenced anywhere
* except for threads holding a reference.
*
- * @return true if the this is the first time the file was marked compacted. Calling this
- * multiple times would be buggy.
- * @return true if the this is the first time the file was marked compacted. With rare exceptions
- * (see DataTracker.unmarkCompacted) calling this multiple times would be buggy.
++ * @return true if the this is the first time the file was marked obsolete. Calling this
++ * multiple times is usually buggy (see exceptions in DataTracker.unmarkCompacting and removeOldSSTablesSize).
*/
- public boolean markCompacted()
+ public boolean markObsolete()
{
if (logger.isDebugEnabled())
logger.debug("Marking " + getFilename() + " compacted");
[07/11] git commit: Fix compaction race during columnfamily drop
patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-5957
Posted by jb...@apache.org.
Fix compaction race during columnfamily drop
patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-5957
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d40f3c8d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d40f3c8d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d40f3c8d
Branch: refs/heads/trunk
Commit: d40f3c8d7f826e88c4e2d23dfa2712b258b9857f
Parents: 1797b49
Author: Jonathan Ellis <jb...@apache.org>
Authored: Mon Oct 14 10:35:10 2013 +0100
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Mon Oct 14 10:35:10 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/DataTracker.java | 30 ++++++++++++++------
2 files changed, 23 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d40f3c8d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7f43031..53bc848 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -23,6 +23,7 @@
* (Hadoop) Fetch no more than 128 splits in parallel (CASSANDRA-6169)
* stress: add username/password authentication support (CASSANDRA-6068)
* Fix indexed queries with row cache enabled on parent table (CASSANDRA-5732)
+ * Fix compaction race during columnfamily drop (CASSANDRA-5957)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d40f3c8d/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java
index b2f52a9..4fe0a5e 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -193,7 +193,8 @@ public class DataTracker
*/
public void unmarkCompacting(Collection<SSTableReader> unmark)
{
- if (!cfstore.isValid())
+ boolean isValid = cfstore.isValid();
+ if (!isValid)
{
// We don't know if the original compaction suceeded or failed, which makes it difficult to know
// if the sstable reference has already been released.
@@ -210,6 +211,14 @@ public class DataTracker
newView = currentView.unmarkCompacting(unmark);
}
while (!view.compareAndSet(currentView, newView));
+
+ if (!isValid)
+ {
+ // when the CFS is invalidated, it will call unreferenceSSTables(). However, unreferenceSSTables only deals
+ // with sstables that aren't currently being compacted. If there are ongoing compactions that finish or are
+ // interrupted after the CFS is invalidated, those sstables need to be unreferenced as well, so we do that here.
+ unreferenceSSTables();
+ }
}
public void markCompacted(Collection<SSTableReader> sstables, OperationType compactionType)
@@ -262,7 +271,7 @@ public class DataTracker
return;
}
notifySSTablesChanged(notCompacting, Collections.<SSTableReader>emptySet(), OperationType.UNKNOWN);
- postReplace(notCompacting, Collections.<SSTableReader>emptySet());
+ postReplace(notCompacting, Collections.<SSTableReader>emptySet(), true);
}
/**
@@ -305,7 +314,7 @@ public class DataTracker
{
if (!cfstore.isValid())
{
- removeOldSSTablesSize(replacements);
+ removeOldSSTablesSize(replacements, false);
replacements = Collections.emptyList();
}
@@ -317,13 +326,13 @@ public class DataTracker
}
while (!view.compareAndSet(currentView, newView));
- postReplace(oldSSTables, replacements);
+ postReplace(oldSSTables, replacements, false);
}
- private void postReplace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements)
+ private void postReplace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements, boolean tolerateCompacted)
{
addNewSSTablesSize(replacements);
- removeOldSSTablesSize(oldSSTables);
+ removeOldSSTablesSize(oldSSTables, tolerateCompacted);
}
private void addNewSSTablesSize(Iterable<SSTableReader> newSSTables)
@@ -341,7 +350,7 @@ public class DataTracker
}
}
- private void removeOldSSTablesSize(Iterable<SSTableReader> oldSSTables)
+ private void removeOldSSTablesSize(Iterable<SSTableReader> oldSSTables, boolean tolerateCompacted)
{
for (SSTableReader sstable : oldSSTables)
{
@@ -351,8 +360,13 @@ public class DataTracker
long size = sstable.bytesOnDisk();
StorageMetrics.load.dec(size);
cfstore.metric.liveDiskSpaceUsed.dec(size);
+
+ // tolerateCompacted will be true when the CFS is no longer valid (dropped). If there were ongoing
+ // compactions when it was invalidated, sstables may already be marked compacted, so we should
+ // tolerate that (see CASSANDRA-5957)
boolean firstToCompact = sstable.markCompacted();
- assert firstToCompact : sstable + " was already marked compacted";
+ assert (tolerateCompacted || firstToCompact) : sstable + " was already marked compacted";
+
sstable.releaseReference();
}
}
[11/11] git commit: Merge branch 'cassandra-2.0' into trunk
Posted by jb...@apache.org.
Merge branch 'cassandra-2.0' into trunk
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/13f21db9
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/13f21db9
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/13f21db9
Branch: refs/heads/trunk
Commit: 13f21db96f403705ad8cedb3413ab87228d4c4e9
Parents: 1353e0a 810f067
Author: Jonathan Ellis <jb...@apache.org>
Authored: Mon Oct 14 10:38:30 2013 +0100
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Mon Oct 14 10:38:30 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/DataTracker.java | 30 ++++++++++++++------
.../cassandra/io/sstable/SSTableReader.java | 4 +--
3 files changed, 25 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/13f21db9/CHANGES.txt
----------------------------------------------------------------------
[10/11] git commit: merge from 1.2
Posted by jb...@apache.org.
merge from 1.2
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/810f0678
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/810f0678
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/810f0678
Branch: refs/heads/cassandra-2.0
Commit: 810f0678ccd598b8f99b7b5df459c5cbe76ee9b8
Parents: a7c6541 d40f3c8
Author: Jonathan Ellis <jb...@apache.org>
Authored: Mon Oct 14 10:37:32 2013 +0100
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Mon Oct 14 10:37:32 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/DataTracker.java | 30 ++++++++++++++------
.../cassandra/io/sstable/SSTableReader.java | 4 +--
3 files changed, 25 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/810f0678/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 4668ae2,53bc848..cd06acc
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -48,43 -23,10 +48,44 @@@ Merged from 1.2
* (Hadoop) Fetch no more than 128 splits in parallel (CASSANDRA-6169)
* stress: add username/password authentication support (CASSANDRA-6068)
* Fix indexed queries with row cache enabled on parent table (CASSANDRA-5732)
+ * Fix compaction race during columnfamily drop (CASSANDRA-5957)
-1.2.10
+2.0.1
+ * Fix bug that could allow reading deleted data temporarily (CASSANDRA-6025)
+ * Improve memory use defaults (CASSANDRA-5069)
+ * Make ThriftServer more easlly extensible (CASSANDRA-6058)
+ * Remove Hadoop dependency from ITransportFactory (CASSANDRA-6062)
+ * add file_cache_size_in_mb setting (CASSANDRA-5661)
+ * Improve error message when yaml contains invalid properties (CASSANDRA-5958)
+ * Improve leveled compaction's ability to find non-overlapping L0 compactions
+ to work on concurrently (CASSANDRA-5921)
+ * Notify indexer of columns shadowed by range tombstones (CASSANDRA-5614)
+ * Log Merkle tree stats (CASSANDRA-2698)
+ * Switch from crc32 to adler32 for compressed sstable checksums (CASSANDRA-5862)
+ * Improve offheap memcpy performance (CASSANDRA-5884)
+ * Use a range aware scanner for cleanup (CASSANDRA-2524)
+ * Cleanup doesn't need to inspect sstables that contain only local data
+ (CASSANDRA-5722)
+ * Add ability for CQL3 to list partition keys (CASSANDRA-4536)
+ * Improve native protocol serialization (CASSANDRA-5664)
+ * Upgrade Thrift to 0.9.1 (CASSANDRA-5923)
+ * Require superuser status for adding triggers (CASSANDRA-5963)
+ * Make standalone scrubber handle old and new style leveled manifest
+ (CASSANDRA-6005)
+ * Fix paxos bugs (CASSANDRA-6012, 6013, 6023)
+ * Fix paged ranges with multiple replicas (CASSANDRA-6004)
+ * Fix potential AssertionError during tracing (CASSANDRA-6041)
+ * Fix NPE in sstablesplit (CASSANDRA-6027)
+ * Migrate pre-2.0 key/value/column aliases to system.schema_columns
+ (CASSANDRA-6009)
+ * Paging filter empty rows too agressively (CASSANDRA-6040)
+ * Support variadic parameters for IN clauses (CASSANDRA-4210)
+ * cqlsh: return the result of CAS writes (CASSANDRA-5796)
+ * Fix validation of IN clauses with 2ndary indexes (CASSANDRA-6050)
+ * Support named bind variables in CQL (CASSANDRA-6033)
+Merged from 1.2:
+ * Allow cache-keys-to-save to be set at runtime (CASSANDRA-5980)
* Avoid second-guessing out-of-space state (CASSANDRA-5605)
* Tuning knobs for dealing with large blobs and many CFs (CASSANDRA-5982)
* (Hadoop) Fix CQLRW for thrift tables (CASSANDRA-6002)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/810f0678/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/db/DataTracker.java
index 1a19fef,4fe0a5e..365d607
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@@ -199,19 -188,20 +199,20 @@@ public class DataTracke
}
/**
- * Removes files from compacting status: this is different from 'markCompacted'
+ * Removes files from compacting status: this is different from 'markObsolete'
* because it should be run regardless of whether a compaction succeeded.
*/
- public void unmarkCompacting(Collection<SSTableReader> unmark)
+ public void unmarkCompacting(Iterable<SSTableReader> unmark)
{
- if (!cfstore.isValid())
+ boolean isValid = cfstore.isValid();
+ if (!isValid)
{
- // We don't know if the original compaction suceeded or failed, which makes it difficult to know
- // if the sstable reference has already been released.
- // A "good enough" approach is to mark the sstables involved compacted, which if compaction succeeded
+ // The CF has been dropped. We don't know if the original compaction suceeded or failed,
+ // which makes it difficult to know if the sstable reference has already been released.
+ // A "good enough" approach is to mark the sstables involved obsolete, which if compaction succeeded
// is harmlessly redundant, and if it failed ensures that at least the sstable will get deleted on restart.
for (SSTableReader sstable : unmark)
- sstable.markCompacted();
+ sstable.markObsolete();
}
View currentView, newView;
@@@ -221,9 -211,17 +222,17 @@@
newView = currentView.unmarkCompacting(unmark);
}
while (!view.compareAndSet(currentView, newView));
+
+ if (!isValid)
+ {
+ // when the CFS is invalidated, it will call unreferenceSSTables(). However, unreferenceSSTables only deals
+ // with sstables that aren't currently being compacted. If there are ongoing compactions that finish or are
+ // interrupted after the CFS is invalidated, those sstables need to be unreferenced as well, so we do that here.
+ unreferenceSSTables();
+ }
}
- public void markCompacted(Collection<SSTableReader> sstables, OperationType compactionType)
+ public void markObsolete(Collection<SSTableReader> sstables, OperationType compactionType)
{
replace(sstables, Collections.<SSTableReader>emptyList());
notifySSTablesChanged(sstables, Collections.<SSTableReader>emptyList(), compactionType);
@@@ -360,8 -360,13 +369,13 @@@
long size = sstable.bytesOnDisk();
StorageMetrics.load.dec(size);
cfstore.metric.liveDiskSpaceUsed.dec(size);
+
+ // tolerateCompacted will be true when the CFS is no longer valid (dropped). If there were ongoing
+ // compactions when it was invalidated, sstables may already be marked compacted, so we should
+ // tolerate that (see CASSANDRA-5957)
- boolean firstToCompact = sstable.markCompacted();
+ boolean firstToCompact = sstable.markObsolete();
- assert firstToCompact : sstable + " was already marked compacted";
+ assert (tolerateCompacted || firstToCompact) : sstable + " was already marked compacted";
+
sstable.releaseReference();
}
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/810f0678/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index abd7c9f,ed221d9..cb0873d
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@@ -1102,10 -1003,10 +1102,10 @@@ public class SSTableReader extends SSTa
* When calling this function, the caller must ensure that the SSTableReader is not referenced anywhere
* except for threads holding a reference.
*
- * @return true if the this is the first time the file was marked compacted. Calling this
- * multiple times would be buggy.
- * @return true if the this is the first time the file was marked compacted. With rare exceptions
- * (see DataTracker.unmarkCompacted) calling this multiple times would be buggy.
++ * @return true if the this is the first time the file was marked obsolete. Calling this
++ * multiple times is usually buggy (see exceptions in DataTracker.unmarkCompacting and removeOldSSTablesSize).
*/
- public boolean markCompacted()
+ public boolean markObsolete()
{
if (logger.isDebugEnabled())
logger.debug("Marking " + getFilename() + " compacted");
[08/11] git commit: Fix compaction race during columnfamily drop
patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-5957
Posted by jb...@apache.org.
Fix compaction race during columnfamily drop
patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-5957
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d40f3c8d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d40f3c8d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d40f3c8d
Branch: refs/heads/cassandra-1.2
Commit: d40f3c8d7f826e88c4e2d23dfa2712b258b9857f
Parents: 1797b49
Author: Jonathan Ellis <jb...@apache.org>
Authored: Mon Oct 14 10:35:10 2013 +0100
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Mon Oct 14 10:35:10 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/DataTracker.java | 30 ++++++++++++++------
2 files changed, 23 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d40f3c8d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7f43031..53bc848 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -23,6 +23,7 @@
* (Hadoop) Fetch no more than 128 splits in parallel (CASSANDRA-6169)
* stress: add username/password authentication support (CASSANDRA-6068)
* Fix indexed queries with row cache enabled on parent table (CASSANDRA-5732)
+ * Fix compaction race during columnfamily drop (CASSANDRA-5957)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d40f3c8d/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java
index b2f52a9..4fe0a5e 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -193,7 +193,8 @@ public class DataTracker
*/
public void unmarkCompacting(Collection<SSTableReader> unmark)
{
- if (!cfstore.isValid())
+ boolean isValid = cfstore.isValid();
+ if (!isValid)
{
// We don't know if the original compaction suceeded or failed, which makes it difficult to know
// if the sstable reference has already been released.
@@ -210,6 +211,14 @@ public class DataTracker
newView = currentView.unmarkCompacting(unmark);
}
while (!view.compareAndSet(currentView, newView));
+
+ if (!isValid)
+ {
+ // when the CFS is invalidated, it will call unreferenceSSTables(). However, unreferenceSSTables only deals
+ // with sstables that aren't currently being compacted. If there are ongoing compactions that finish or are
+ // interrupted after the CFS is invalidated, those sstables need to be unreferenced as well, so we do that here.
+ unreferenceSSTables();
+ }
}
public void markCompacted(Collection<SSTableReader> sstables, OperationType compactionType)
@@ -262,7 +271,7 @@ public class DataTracker
return;
}
notifySSTablesChanged(notCompacting, Collections.<SSTableReader>emptySet(), OperationType.UNKNOWN);
- postReplace(notCompacting, Collections.<SSTableReader>emptySet());
+ postReplace(notCompacting, Collections.<SSTableReader>emptySet(), true);
}
/**
@@ -305,7 +314,7 @@ public class DataTracker
{
if (!cfstore.isValid())
{
- removeOldSSTablesSize(replacements);
+ removeOldSSTablesSize(replacements, false);
replacements = Collections.emptyList();
}
@@ -317,13 +326,13 @@ public class DataTracker
}
while (!view.compareAndSet(currentView, newView));
- postReplace(oldSSTables, replacements);
+ postReplace(oldSSTables, replacements, false);
}
- private void postReplace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements)
+ private void postReplace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements, boolean tolerateCompacted)
{
addNewSSTablesSize(replacements);
- removeOldSSTablesSize(oldSSTables);
+ removeOldSSTablesSize(oldSSTables, tolerateCompacted);
}
private void addNewSSTablesSize(Iterable<SSTableReader> newSSTables)
@@ -341,7 +350,7 @@ public class DataTracker
}
}
- private void removeOldSSTablesSize(Iterable<SSTableReader> oldSSTables)
+ private void removeOldSSTablesSize(Iterable<SSTableReader> oldSSTables, boolean tolerateCompacted)
{
for (SSTableReader sstable : oldSSTables)
{
@@ -351,8 +360,13 @@ public class DataTracker
long size = sstable.bytesOnDisk();
StorageMetrics.load.dec(size);
cfstore.metric.liveDiskSpaceUsed.dec(size);
+
+ // tolerateCompacted will be true when the CFS is no longer valid (dropped). If there were ongoing
+ // compactions when it was invalidated, sstables may already be marked compacted, so we should
+ // tolerate that (see CASSANDRA-5957)
boolean firstToCompact = sstable.markCompacted();
- assert firstToCompact : sstable + " was already marked compacted";
+ assert (tolerateCompacted || firstToCompact) : sstable + " was already marked compacted";
+
sstable.releaseReference();
}
}
[02/11] git commit: Merge branch 'cassandra-1.2' into cassandra-2.0
Posted by jb...@apache.org.
Merge branch 'cassandra-1.2' into cassandra-2.0
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/c9a906c4
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/c9a906c4
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/c9a906c4
Branch: refs/heads/trunk
Commit: c9a906c473d14f2c51a0541de4388e5dd64231ed
Parents: 3e7ebf8 4284d98
Author: Brandon Williams <br...@apache.org>
Authored: Sun Oct 13 17:52:36 2013 -0500
Committer: Brandon Williams <br...@apache.org>
Committed: Sun Oct 13 17:52:36 2013 -0500
----------------------------------------------------------------------
.../org/apache/cassandra/cql3/statements/CreateUserStatement.java | 2 +-
.../org/apache/cassandra/cql3/statements/DropUserStatement.java | 2 +-
src/java/org/apache/cassandra/service/StorageProxy.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/c9a906c4/src/java/org/apache/cassandra/service/StorageProxy.java
----------------------------------------------------------------------
diff --cc src/java/org/apache/cassandra/service/StorageProxy.java
index cac38a3,f195285..259d2f5
--- a/src/java/org/apache/cassandra/service/StorageProxy.java
+++ b/src/java/org/apache/cassandra/service/StorageProxy.java
@@@ -736,14 -384,14 +736,14 @@@ public class StorageProxy implements St
return responseHandler;
}
- // same as above except does not initiate writes (but does perfrom availability checks).
+ // same as above except does not initiate writes (but does perform availability checks).
private static WriteResponseHandlerWrapper wrapResponseHandler(RowMutation mutation, ConsistencyLevel consistency_level, WriteType writeType)
{
- AbstractReplicationStrategy rs = Table.open(mutation.getTable()).getReplicationStrategy();
- String table = mutation.getTable();
+ AbstractReplicationStrategy rs = Keyspace.open(mutation.getKeyspaceName()).getReplicationStrategy();
+ String keyspaceName = mutation.getKeyspaceName();
Token tk = StorageService.getPartitioner().getToken(mutation.key());
- List<InetAddress> naturalEndpoints = StorageService.instance.getNaturalEndpoints(table, tk);
- Collection<InetAddress> pendingEndpoints = StorageService.instance.getTokenMetadata().pendingEndpointsFor(tk, table);
+ List<InetAddress> naturalEndpoints = StorageService.instance.getNaturalEndpoints(keyspaceName, tk);
+ Collection<InetAddress> pendingEndpoints = StorageService.instance.getTokenMetadata().pendingEndpointsFor(tk, keyspaceName);
AbstractWriteResponseHandler responseHandler = rs.getWriteResponseHandler(naturalEndpoints, pendingEndpoints, consistency_level, null, writeType);
return new WriteResponseHandlerWrapper(responseHandler, mutation);
}
[06/11] git commit: Fix compaction race during columnfamily drop
patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-5957
Posted by jb...@apache.org.
Fix compaction race during columnfamily drop
patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-5957
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/d40f3c8d
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/d40f3c8d
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/d40f3c8d
Branch: refs/heads/cassandra-2.0
Commit: d40f3c8d7f826e88c4e2d23dfa2712b258b9857f
Parents: 1797b49
Author: Jonathan Ellis <jb...@apache.org>
Authored: Mon Oct 14 10:35:10 2013 +0100
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Mon Oct 14 10:35:10 2013 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/db/DataTracker.java | 30 ++++++++++++++------
2 files changed, 23 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d40f3c8d/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7f43031..53bc848 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -23,6 +23,7 @@
* (Hadoop) Fetch no more than 128 splits in parallel (CASSANDRA-6169)
* stress: add username/password authentication support (CASSANDRA-6068)
* Fix indexed queries with row cache enabled on parent table (CASSANDRA-5732)
+ * Fix compaction race during columnfamily drop (CASSANDRA-5957)
1.2.10
http://git-wip-us.apache.org/repos/asf/cassandra/blob/d40f3c8d/src/java/org/apache/cassandra/db/DataTracker.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/DataTracker.java b/src/java/org/apache/cassandra/db/DataTracker.java
index b2f52a9..4fe0a5e 100644
--- a/src/java/org/apache/cassandra/db/DataTracker.java
+++ b/src/java/org/apache/cassandra/db/DataTracker.java
@@ -193,7 +193,8 @@ public class DataTracker
*/
public void unmarkCompacting(Collection<SSTableReader> unmark)
{
- if (!cfstore.isValid())
+ boolean isValid = cfstore.isValid();
+ if (!isValid)
{
// We don't know if the original compaction suceeded or failed, which makes it difficult to know
// if the sstable reference has already been released.
@@ -210,6 +211,14 @@ public class DataTracker
newView = currentView.unmarkCompacting(unmark);
}
while (!view.compareAndSet(currentView, newView));
+
+ if (!isValid)
+ {
+ // when the CFS is invalidated, it will call unreferenceSSTables(). However, unreferenceSSTables only deals
+ // with sstables that aren't currently being compacted. If there are ongoing compactions that finish or are
+ // interrupted after the CFS is invalidated, those sstables need to be unreferenced as well, so we do that here.
+ unreferenceSSTables();
+ }
}
public void markCompacted(Collection<SSTableReader> sstables, OperationType compactionType)
@@ -262,7 +271,7 @@ public class DataTracker
return;
}
notifySSTablesChanged(notCompacting, Collections.<SSTableReader>emptySet(), OperationType.UNKNOWN);
- postReplace(notCompacting, Collections.<SSTableReader>emptySet());
+ postReplace(notCompacting, Collections.<SSTableReader>emptySet(), true);
}
/**
@@ -305,7 +314,7 @@ public class DataTracker
{
if (!cfstore.isValid())
{
- removeOldSSTablesSize(replacements);
+ removeOldSSTablesSize(replacements, false);
replacements = Collections.emptyList();
}
@@ -317,13 +326,13 @@ public class DataTracker
}
while (!view.compareAndSet(currentView, newView));
- postReplace(oldSSTables, replacements);
+ postReplace(oldSSTables, replacements, false);
}
- private void postReplace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements)
+ private void postReplace(Collection<SSTableReader> oldSSTables, Iterable<SSTableReader> replacements, boolean tolerateCompacted)
{
addNewSSTablesSize(replacements);
- removeOldSSTablesSize(oldSSTables);
+ removeOldSSTablesSize(oldSSTables, tolerateCompacted);
}
private void addNewSSTablesSize(Iterable<SSTableReader> newSSTables)
@@ -341,7 +350,7 @@ public class DataTracker
}
}
- private void removeOldSSTablesSize(Iterable<SSTableReader> oldSSTables)
+ private void removeOldSSTablesSize(Iterable<SSTableReader> oldSSTables, boolean tolerateCompacted)
{
for (SSTableReader sstable : oldSSTables)
{
@@ -351,8 +360,13 @@ public class DataTracker
long size = sstable.bytesOnDisk();
StorageMetrics.load.dec(size);
cfstore.metric.liveDiskSpaceUsed.dec(size);
+
+ // tolerateCompacted will be true when the CFS is no longer valid (dropped). If there were ongoing
+ // compactions when it was invalidated, sstables may already be marked compacted, so we should
+ // tolerate that (see CASSANDRA-5957)
boolean firstToCompact = sstable.markCompacted();
- assert firstToCompact : sstable + " was already marked compacted";
+ assert (tolerateCompacted || firstToCompact) : sstable + " was already marked compacted";
+
sstable.releaseReference();
}
}