Updated Branches:
  refs/heads/cassandra-2.0 67accea1a -> 08167d6ac
  refs/heads/trunk 48cfe0b10 -> 414ba406d


Cancel read meter task when closing SSTR
patch by Tyler Hobbs; reviewed by jbellis for CASSANDRA-6358


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/08167d6a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/08167d6a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/08167d6a

Branch: refs/heads/cassandra-2.0
Commit: 08167d6ac784274a48ff8428f3ef4f6e92cd8ab0
Parents: 67accea
Author: Jonathan Ellis <jbel...@apache.org>
Authored: Sat Nov 16 10:34:22 2013 -0600
Committer: Jonathan Ellis <jbel...@apache.org>
Committed: Sat Nov 16 10:34:22 2013 -0600

----------------------------------------------------------------------
 CHANGES.txt                                          |  1 +
 .../apache/cassandra/io/sstable/SSTableReader.java   | 15 ++++++++++++---
 2 files changed, 13 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/08167d6a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index a283387..cd6895f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.0.3
+ * Cancel read meter task when closing SSTR (CASSANDRA-6358)
  * free off-heap IndexSummary during bulk (CASSANDRA-6359)
  * Recover from IOException in accept() thread (CASSANDRA-6349)
  * Improve Gossip tolerance of abnormally slow tasks (CASSANDRA-6338)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/08167d6a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
index 41cd0ba..10ac36c 100644
--- a/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
+++ b/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
@@ -22,6 +22,7 @@ import java.nio.ByteBuffer;
 import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ScheduledFuture;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -106,6 +107,7 @@ public class SSTableReader extends SSTable implements 
Closeable
 
     @VisibleForTesting
     public RestorableMeter readMeter;
+    private ScheduledFuture readMeterSyncFuture;
 
     public static long getApproximateKeyCount(Iterable<SSTableReader> 
sstables, CFMetaData metadata)
     {
@@ -331,17 +333,21 @@ public class SSTableReader extends SSTable implements 
Closeable
         if (Keyspace.SYSTEM_KS.equals(desc.ksname) || Config.isClientMode())
         {
             readMeter = null;
+            readMeterSyncFuture = null;
             return;
         }
 
         readMeter = SystemKeyspace.getSSTableReadMeter(desc.ksname, 
desc.cfname, desc.generation);
         // sync the average read rate to system.sstable_activity every five 
minutes, starting one minute from now
-        syncExecutor.scheduleAtFixedRate(new Runnable()
+        readMeterSyncFuture = syncExecutor.scheduleAtFixedRate(new Runnable()
         {
             public void run()
             {
-                meterSyncThrottle.acquire();
-                SystemKeyspace.persistSSTableReadMeter(desc.ksname, 
desc.cfname, desc.generation, readMeter);
+                if (!isCompacted.get())
+                {
+                    meterSyncThrottle.acquire();
+                    SystemKeyspace.persistSSTableReadMeter(desc.ksname, 
desc.cfname, desc.generation, readMeter);
+                }
             }
         }, 1, 5, TimeUnit.MINUTES);
     }
@@ -372,6 +378,9 @@ public class SSTableReader extends SSTable implements 
Closeable
      */
     public void close() throws IOException
     {
+        if (readMeterSyncFuture != null)
+            readMeterSyncFuture.cancel(false);
+
         // Force finalizing mmapping if necessary
         ifile.cleanup();
         dfile.cleanup();

Reply via email to