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();