Author: jbellis
Date: Thu May 7 15:30:53 2009
New Revision: 772680
URL: http://svn.apache.org/viewvc?rev=772680&view=rev
Log:
use explicit dirty flag instead of trying to cheat and use executor taskcount,
which is race-prone. patch by jbellis; reviewed by Eric Evans for CASSANDRA-134
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java?rev=772680&r1=772679&r2=772680&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
(original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/Memtable.java
Thu May 7 15:30:53 2009
@@ -57,6 +57,7 @@
private MemtableThreadPoolExecutor executor_;
private volatile boolean isFrozen_;
+ private volatile boolean isDirty_;
private volatile boolean isFlushed_; // for tests, in particular
forceBlockingFlush asserts this
private int threshold_ = DatabaseDescriptor.getMemtableSize()*1024*1024;
@@ -195,6 +196,7 @@
*/
void put(String key, ColumnFamily columnFamily, CommitLog.CommitLogContext
cLogCtx) throws IOException
{
+ isDirty_ = true;
executor_.submit(new Putter(key, columnFamily));
if (isThresholdViolated())
{
@@ -411,6 +413,8 @@
public boolean isClean()
{
- return columnFamilies_.isEmpty() && executor_.getPendingTasks() == 0;
+ // executor taskcount is inadequate for our needs here -- it can
return zero under certain
+ // race conditions even though a task has been processed.
+ return !isDirty_;
}
}