You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by yu...@apache.org on 2012/12/19 15:58:37 UTC

[3/3] git commit: Log compaction merge counts; patch by yukim reviewed by jbellis for CASSANDRA-4894

Log compaction merge counts; patch by yukim reviewed by jbellis for CASSANDRA-4894


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

Branch: refs/heads/cassandra-1.2
Commit: 0207bdf5ff07b60d9a44f7d592061a7b74d034e1
Parents: fca00ac
Author: Yuki Morishita <yu...@apache.org>
Authored: Wed Dec 19 08:56:52 2012 -0600
Committer: Yuki Morishita <yu...@apache.org>
Committed: Wed Dec 19 08:56:52 2012 -0600

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../db/compaction/AbstractCompactionIterable.java  |   24 +++++++++++++++
 .../db/compaction/CompactionIterable.java          |    1 +
 .../cassandra/db/compaction/CompactionTask.java    |    4 +-
 .../db/compaction/ParallelCompactionIterable.java  |    1 +
 5 files changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/0207bdf5/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index d3a0077..5f1ff2b 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -9,6 +9,7 @@
  * Add debug logging to list filenames processed by Directories.migrateFile 
    method (CASSANDRA-4939)
  * Expose black-listed directories via JMX (CASSANDRA-4848)
+ * Log compaction merge counts (CASSANDRA-4894)
 
 
 1.2.0-rc2

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0207bdf5/src/java/org/apache/cassandra/db/compaction/AbstractCompactionIterable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionIterable.java b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionIterable.java
index def7191..d7b9f63 100644
--- a/src/java/org/apache/cassandra/db/compaction/AbstractCompactionIterable.java
+++ b/src/java/org/apache/cassandra/db/compaction/AbstractCompactionIterable.java
@@ -18,6 +18,7 @@
 package org.apache.cassandra.db.compaction;
 
 import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
 
 import org.apache.cassandra.utils.CloseableIterator;
 
@@ -28,6 +29,12 @@ public abstract class AbstractCompactionIterable extends CompactionInfo.Holder i
     protected final long totalBytes;
     protected volatile long bytesRead;
     protected final List<ICompactionScanner> scanners;
+    /*
+     * counters for merged rows.
+     * array index represents (number of merged rows - 1), so index 0 is counter for no merge (1 row),
+     * index 1 is counter for 2 rows merged, and so on.
+     */
+    protected final AtomicInteger[] mergeCounters;
 
     public AbstractCompactionIterable(CompactionController controller, OperationType type, List<ICompactionScanner> scanners)
     {
@@ -40,6 +47,9 @@ public abstract class AbstractCompactionIterable extends CompactionInfo.Holder i
         for (ICompactionScanner scanner : scanners)
             bytes += scanner.getLengthInBytes();
         this.totalBytes = bytes;
+        mergeCounters = new AtomicInteger[scanners.size()];
+        for (int i = 0; i < mergeCounters.length; i++)
+            mergeCounters[i] = new AtomicInteger();
     }
 
     public CompactionInfo getCompactionInfo()
@@ -50,5 +60,19 @@ public abstract class AbstractCompactionIterable extends CompactionInfo.Holder i
                                   totalBytes);
     }
 
+    protected void updateCounterFor(int rows)
+    {
+        assert rows > 0 && rows - 1 < mergeCounters.length;
+        mergeCounters[rows - 1].incrementAndGet();
+    }
+
+    public int[] getMergedRowCounts()
+    {
+        int[] counters = new int[mergeCounters.length];
+        for (int i = 0; i < counters.length; i++)
+            counters[i] = mergeCounters[i].get();
+        return counters;
+    }
+
     public abstract CloseableIterator<AbstractCompactedRow> iterator();
 }

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0207bdf5/src/java/org/apache/cassandra/db/compaction/CompactionIterable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionIterable.java b/src/java/org/apache/cassandra/db/compaction/CompactionIterable.java
index f095a57..9f4f7a0 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionIterable.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionIterable.java
@@ -67,6 +67,7 @@ public class CompactionIterable extends AbstractCompactionIterable
         {
             assert !rows.isEmpty();
 
+            CompactionIterable.this.updateCounterFor(rows.size());
             try
             {
                 AbstractCompactedRow compactedRow = controller.getCompactedRow(new ArrayList<SSTableIdentityIterator>(rows));

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0207bdf5/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
index 4eeeaf2..481b7f4 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionTask.java
@@ -238,8 +238,8 @@ public class CompactionTask extends AbstractCompactionTask
         builder.append("]");
 
         double mbps = dTime > 0 ? (double)endsize/(1024*1024)/((double)dTime/1000) : 0;
-        logger.info(String.format("Compacted to %s.  %,d to %,d (~%d%% of original) bytes for %,d keys at %fMB/s.  Time: %,dms.",
-                                  builder.toString(), startsize, endsize, (int) (ratio * 100), totalkeysWritten, mbps, dTime));
+        logger.info(String.format("Compacted to %s.  %,d to %,d (~%d%% of original) bytes for %,d keys at %fMB/s.  Time: %,dms.  Compaction merge counts: %s.",
+                                  builder.toString(), startsize, endsize, (int) (ratio * 100), totalkeysWritten, mbps, dTime, Arrays.toString(ci.getMergedRowCounts())));
         logger.debug(String.format("CF Total Bytes Compacted: %,d", CompactionTask.addToTotalBytesCompacted(endsize)));
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0207bdf5/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java b/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
index 8f04205..eaf35f2 100644
--- a/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
+++ b/src/java/org/apache/cassandra/db/compaction/ParallelCompactionIterable.java
@@ -158,6 +158,7 @@ public class ParallelCompactionIterable extends AbstractCompactionIterable
         {
             assert rows.size() > 0;
 
+            ParallelCompactionIterable.this.updateCounterFor(rows.size());
             CompactedRowContainer compacted = getCompactedRow(rows);
             rows.clear();
             if ((row++ % 1000) == 0)