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 2011/07/09 05:34:02 UTC
svn commit: r1144586 - in
/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction:
CompactionController.java CompactionIterator.java
Author: jbellis
Date: Sat Jul 9 03:34:02 2011
New Revision: 1144586
URL: http://svn.apache.org/viewvc?rev=1144586&view=rev
Log:
make throttle resolution finer grained, especially for large rows
patch by jbellis
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionController.java
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java
Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionController.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionController.java?rev=1144586&r1=1144585&r2=1144586&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionController.java (original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionController.java Sat Jul 9 03:34:02 2011
@@ -46,6 +46,7 @@ public class CompactionController
public final boolean isMajor;
public final int gcBefore;
+ private int throttleResolution;
public CompactionController(ColumnFamilyStore cfs, Collection<SSTableReader> sstables, int gcBefore, boolean forceDeserialize)
{
@@ -55,15 +56,22 @@ public class CompactionController
this.gcBefore = gcBefore;
this.forceDeserialize = forceDeserialize;
isMajor = cfs.isCompleteSSTables(this.sstables);
+ // how many rows we expect to compact in 100ms
+ throttleResolution = (int) (DatabaseDescriptor.getCompactionThroughputMbPerSec() * 1024 * 1024 / (10 * cfs.getMeanRowSize()));
+ if (throttleResolution <= 0)
+ throttleResolution = 1;
+ }
+
+ public int getThrottleResolution()
+ {
+ return throttleResolution;
}
- /** @return the keyspace name */
public String getKeyspace()
{
return cfs.table.name;
}
- /** @return the column family name */
public String getColumnFamily()
{
return cfs.columnFamily;
Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java?rev=1144586&r1=1144585&r2=1144586&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java (original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/compaction/CompactionIterator.java Sat Jul 9 03:34:02 2011
@@ -137,13 +137,11 @@ implements Closeable, CompactionInfo.Hol
finally
{
rows.clear();
- if ((row++ % 1000) == 0)
+ if ((row++ % controller.getThrottleResolution()) == 0)
{
bytesRead = 0;
for (SSTableScanner scanner : getScanners())
- {
bytesRead += scanner.getFilePointer();
- }
throttle();
}
}
@@ -164,9 +162,7 @@ implements Closeable, CompactionInfo.Hol
int newTarget = totalBytesPerMS /
Math.max(1, CompactionManager.instance.getActiveCompactions());
if (newTarget != targetBytesPerMS)
- logger.info(String.format("%s now compacting at %d bytes/ms.",
- this,
- newTarget));
+ logger.debug("{} now compacting at {} bytes/ms.", this, newTarget);
targetBytesPerMS = newTarget;
// the excess bytes that were compacted in this period
@@ -179,7 +175,14 @@ implements Closeable, CompactionInfo.Hol
if (logger.isTraceEnabled())
logger.trace(String.format("Compacted %d bytes in %d ms: throttling for %d ms",
bytesSinceLast, msSinceLast, timeToDelay));
- try { Thread.sleep(timeToDelay); } catch (InterruptedException e) { throw new AssertionError(e); }
+ try
+ {
+ Thread.sleep(timeToDelay);
+ }
+ catch (InterruptedException e)
+ {
+ throw new AssertionError(e);
+ }
}
bytesAtLastDelay = bytesRead;
timeAtLastDelay = System.currentTimeMillis();