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/02/25 21:31:12 UTC
svn commit: r1074685 - in /cassandra/branches/cassandra-0.7: CHANGES.txt
src/java/org/apache/cassandra/db/ColumnFamilyStore.java
src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
Author: jbellis
Date: Fri Feb 25 20:31:12 2011
New Revision: 1074685
URL: http://svn.apache.org/viewvc?rev=1074685&view=rev
Log:
add [get|set][row|key]cacheSavePeriod to JMX
patch by Jon Hermes; reviewed by jbellis for CASSANDRA-2100
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1074685&r1=1074684&r2=1074685&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Fri Feb 25 20:31:12 2011
@@ -33,6 +33,7 @@
from supercolumn's (CASSANDRA-2104)
* fix starting up on Windows when CASSANDRA_HOME contains whitespace
(CASSANDRA-2237)
+ * add [get|set][row|key]cacheSavePeriod to JMX (CASSANDRA-2100)
0.7.2
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1074685&r1=1074684&r2=1074685&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStore.java Fri Feb 25 20:31:12 2011
@@ -26,6 +26,7 @@ import java.util.concurrent.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Pattern;
+import javax.management.JMX;
import javax.management.MBeanServer;
import javax.management.ObjectName;
@@ -133,6 +134,12 @@ public class ColumnFamilyStore implement
private volatile DefaultInteger memtime;
private volatile DefaultInteger memsize;
private volatile DefaultDouble memops;
+ private volatile DefaultInteger rowCacheSaveInSeconds;
+ private volatile DefaultInteger keyCacheSaveInSeconds;
+
+ // Locally held row/key cache scheduled tasks
+ private volatile ScheduledFuture<?> saveRowCacheTask;
+ private volatile ScheduledFuture<?> saveKeyCacheTask;
public void reload()
{
@@ -149,8 +156,13 @@ public class ColumnFamilyStore implement
memsize = new DefaultInteger(metadata.getMemtableThroughputInMb());
if (!memops.isModified())
memops = new DefaultDouble(metadata.getMemtableOperationsInMillions());
+ if (!rowCacheSaveInSeconds.isModified())
+ rowCacheSaveInSeconds = new DefaultInteger(metadata.getRowCacheSavePeriodInSeconds());
+ if (!keyCacheSaveInSeconds.isModified())
+ keyCacheSaveInSeconds = new DefaultInteger(metadata.getKeyCacheSavePeriodInSeconds());
ssTables.updateCacheSizes();
+ scheduleCacheSaving(rowCacheSaveInSeconds.value(), keyCacheSaveInSeconds.value());
// figure out what needs to be added and dropped.
// future: if/when we have modifiable settings for secondary indexes, they'll need to be handled here.
@@ -186,6 +198,8 @@ public class ColumnFamilyStore implement
this.memtime = new DefaultInteger(metadata.getMemtableFlushAfterMins());
this.memsize = new DefaultInteger(metadata.getMemtableThroughputInMb());
this.memops = new DefaultDouble(metadata.getMemtableOperationsInMillions());
+ this.rowCacheSaveInSeconds = new DefaultInteger(metadata.getRowCacheSavePeriodInSeconds());
+ this.keyCacheSaveInSeconds = new DefaultInteger(metadata.getKeyCacheSavePeriodInSeconds());
this.partitioner = partitioner;
fileIndexGenerator.set(generation);
memtable = new Memtable(this);
@@ -529,6 +543,16 @@ public class ColumnFamilyStore implement
ssTables.getRowCache().getSize(),
table.name,
columnFamily));
+ scheduleCacheSaving(rowCacheSavePeriodInSeconds, keyCacheSavePeriodInSeconds);
+ }
+
+ public void scheduleCacheSaving(int rowCacheSavePeriodInSeconds, int keyCacheSavePeriodInSeconds)
+ {
+ if (saveRowCacheTask != null)
+ {
+ saveRowCacheTask.cancel(false); // Do not interrupt an in-progress save
+ saveRowCacheTask = null;
+ }
if (rowCacheSavePeriodInSeconds > 0)
{
Runnable runnable = new WrappedRunnable()
@@ -538,12 +562,17 @@ public class ColumnFamilyStore implement
submitRowCacheWrite();
}
};
- StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
- rowCacheSavePeriodInSeconds,
- rowCacheSavePeriodInSeconds,
- TimeUnit.SECONDS);
+ saveRowCacheTask = StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
+ rowCacheSavePeriodInSeconds,
+ rowCacheSavePeriodInSeconds,
+ TimeUnit.SECONDS);
}
+ if (saveKeyCacheTask != null)
+ {
+ saveKeyCacheTask.cancel(false); // Do not interrupt an in-progress save
+ saveKeyCacheTask = null;
+ }
if (keyCacheSavePeriodInSeconds > 0)
{
Runnable runnable = new WrappedRunnable()
@@ -553,10 +582,10 @@ public class ColumnFamilyStore implement
submitKeyCacheWrite();
}
};
- StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
- keyCacheSavePeriodInSeconds,
- keyCacheSavePeriodInSeconds,
- TimeUnit.SECONDS);
+ saveKeyCacheTask = StorageService.scheduledTasks.scheduleWithFixedDelay(runnable,
+ keyCacheSavePeriodInSeconds,
+ keyCacheSavePeriodInSeconds,
+ TimeUnit.SECONDS);
}
}
@@ -1909,6 +1938,22 @@ public class ColumnFamilyStore implement
')';
}
+ public void disableAutoCompaction()
+ {
+ minCompactionThreshold.set(0);
+ maxCompactionThreshold.set(0);
+ }
+
+ /*
+ JMX getters and setters for the Default<T>s.
+ - get/set minCompactionThreshold
+ - get/set maxCompactionThreshold
+ - get memsize
+ - get memops
+ - get/set memtime
+ - get/set rowCacheSavePeriodInSeconds
+ - get/set keyCacheSavePeriodInSeconds
+ */
public int getMinimumCompactionThreshold()
{
return minCompactionThreshold.value();
@@ -1916,7 +1961,8 @@ public class ColumnFamilyStore implement
public void setMinimumCompactionThreshold(int minCompactionThreshold)
{
- if ((minCompactionThreshold > this.maxCompactionThreshold.value()) && this.maxCompactionThreshold.value() != 0) {
+ if ((minCompactionThreshold > this.maxCompactionThreshold.value()) && this.maxCompactionThreshold.value() != 0)
+ {
throw new RuntimeException("The min_compaction_threshold cannot be larger than the max.");
}
this.minCompactionThreshold.set(minCompactionThreshold);
@@ -1929,25 +1975,21 @@ public class ColumnFamilyStore implement
public void setMaximumCompactionThreshold(int maxCompactionThreshold)
{
- if (maxCompactionThreshold < this.minCompactionThreshold.value()) {
+ if (maxCompactionThreshold < this.minCompactionThreshold.value())
+ {
throw new RuntimeException("The max_compaction_threshold cannot be smaller than the min.");
}
this.maxCompactionThreshold.set(maxCompactionThreshold);
}
- public void disableAutoCompaction()
- {
- minCompactionThreshold.set(0);
- maxCompactionThreshold.set(0);
- }
-
public int getMemtableFlushAfterMins()
{
return memtime.value();
}
public void setMemtableFlushAfterMins(int time)
{
- if (time <= 0) {
+ if (time <= 0)
+ {
throw new RuntimeException("MemtableFlushAfterMins must be greater than 0.");
}
this.memtime.set(time);
@@ -1973,6 +2015,35 @@ public class ColumnFamilyStore implement
memops.set(ops);
}
+ public int getRowCacheSavePeriodInSeconds()
+ {
+ return rowCacheSaveInSeconds.value();
+ }
+ public void setRowCacheSavePeriodInSeconds(int rcspis)
+ {
+ if (rcspis < 0)
+ {
+ throw new RuntimeException("RowCacheSavePeriodInSeconds must be non-negative.");
+ }
+ this.rowCacheSaveInSeconds.set(rcspis);
+ scheduleCacheSaving(rowCacheSaveInSeconds.value(), keyCacheSaveInSeconds.value());
+ }
+
+ public int getKeyCacheSavePeriodInSeconds()
+ {
+ return keyCacheSaveInSeconds.value();
+ }
+ public void setKeyCacheSavePeriodInSeconds(int kcspis)
+ {
+ if (kcspis < 0)
+ {
+ throw new RuntimeException("KeyCacheSavePeriodInSeconds must be non-negative.");
+ }
+ this.keyCacheSaveInSeconds.set(kcspis);
+ scheduleCacheSaving(rowCacheSaveInSeconds.value(), keyCacheSaveInSeconds.value());
+ }
+ // End JMX get/set.
+
public long estimateKeys()
{
return ssTables.estimatedKeys();
Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java?rev=1074685&r1=1074684&r2=1074685&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java (original)
+++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyStoreMBean.java Fri Feb 25 20:31:12 2011
@@ -228,4 +228,10 @@ public interface ColumnFamilyStoreMBean
* @return list of the index names
*/
public List<String> getBuiltIndexes();
+
+ public int getRowCacheSavePeriodInSeconds();
+ public void setRowCacheSavePeriodInSeconds(int rcspis);
+
+ public int getKeyCacheSavePeriodInSeconds();
+ public void setKeyCacheSavePeriodInSeconds(int kcspis);
}