You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2013/08/12 16:01:10 UTC
git commit: CAMEL-6476: Added option for configure if heap memeory
limit is committed or max.
Updated Branches:
refs/heads/master a7b103d92 -> b96c92e56
CAMEL-6476: Added option for configure if heap memeory limit is committed or max.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/b96c92e5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/b96c92e5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/b96c92e5
Branch: refs/heads/master
Commit: b96c92e562e049d4f5b27daa52c78b007fe014e5
Parents: a7b103d
Author: Claus Ibsen <da...@apache.org>
Authored: Mon Aug 12 16:01:00 2013 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Mon Aug 12 16:01:00 2013 +0200
----------------------------------------------------------------------
.../ManagedStreamCachingStrategyMBean.java | 7 +++++
.../impl/DefaultStreamCachingStrategy.java | 29 ++++++++++++++++----
.../mbean/ManagedStreamCachingStrategy.java | 8 ++++++
.../apache/camel/spi/StreamCachingStrategy.java | 17 ++++++++++++
.../xml/AbstractCamelContextFactoryBean.java | 6 +++-
.../CamelStreamCachingStrategyDefinition.java | 11 ++++++++
6 files changed, 71 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/b96c92e5/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStreamCachingStrategyMBean.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStreamCachingStrategyMBean.java b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStreamCachingStrategyMBean.java
index a576f81..5f6f9e3 100644
--- a/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStreamCachingStrategyMBean.java
+++ b/camel-core/src/main/java/org/apache/camel/api/management/mbean/ManagedStreamCachingStrategyMBean.java
@@ -18,6 +18,7 @@ package org.apache.camel.api.management.mbean;
import org.apache.camel.api.management.ManagedAttribute;
import org.apache.camel.api.management.ManagedOperation;
+import org.apache.camel.spi.StreamCachingStrategy;
public interface ManagedStreamCachingStrategyMBean {
@@ -42,6 +43,12 @@ public interface ManagedStreamCachingStrategyMBean {
@ManagedAttribute(description = "Percentage (1-99) of used heap memory threshold to activate spooling to disk")
int getSpoolUsedHeapMemoryThreshold();
+ @ManagedAttribute(description = "Whether used heap memory limit is committed or maximum")
+ void setSpoolUsedHeapMemoryLimit(StreamCachingStrategy.SpoolUsedHeapMemoryLimit limit);
+
+ @ManagedAttribute(description = "Whether used heap memory limit is committed or maximum")
+ StreamCachingStrategy.SpoolUsedHeapMemoryLimit getSpoolUsedHeapMemoryLimit();
+
@ManagedAttribute(description = "Buffer size in bytes to use when coping between buffers")
void setBufferSize(int bufferSize);
http://git-wip-us.apache.org/repos/asf/camel/blob/b96c92e5/camel-core/src/main/java/org/apache/camel/impl/DefaultStreamCachingStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultStreamCachingStrategy.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultStreamCachingStrategy.java
index ed2b767..e119a49 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultStreamCachingStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultStreamCachingStrategy.java
@@ -56,6 +56,7 @@ public class DefaultStreamCachingStrategy extends org.apache.camel.support.Servi
private transient String spoolDirectoryName = "${java.io.tmpdir}camel-tmp-#uuid#";
private long spoolThreshold = StreamCache.DEFAULT_SPOOL_THRESHOLD;
private int spoolUsedHeapMemoryThreshold;
+ private SpoolUsedHeapMemoryLimit spoolUsedHeapMemoryLimit;
private String spoolChiper;
private int bufferSize = IOHelper.DEFAULT_BUFFER_SIZE;
private boolean removeSpoolDirectoryWhenStopping = true;
@@ -103,6 +104,14 @@ public class DefaultStreamCachingStrategy extends org.apache.camel.support.Servi
this.spoolUsedHeapMemoryThreshold = spoolHeapMemoryWatermarkThreshold;
}
+ public SpoolUsedHeapMemoryLimit getSpoolUsedHeapMemoryLimit() {
+ return spoolUsedHeapMemoryLimit;
+ }
+
+ public void setSpoolUsedHeapMemoryLimit(SpoolUsedHeapMemoryLimit spoolUsedHeapMemoryLimit) {
+ this.spoolUsedHeapMemoryLimit = spoolUsedHeapMemoryLimit;
+ }
+
public void setSpoolThreshold(long spoolThreshold) {
this.spoolThreshold = spoolThreshold;
}
@@ -291,7 +300,11 @@ public class DefaultStreamCachingStrategy extends org.apache.camel.support.Servi
spoolRules.add(new FixedThresholdSpoolRule());
}
if (spoolUsedHeapMemoryThreshold > 0) {
- spoolRules.add(new UsedHeapMemorySpoolRule());
+ if (spoolUsedHeapMemoryLimit == null) {
+ // use max by default
+ spoolUsedHeapMemoryLimit = SpoolUsedHeapMemoryLimit.Max;
+ }
+ spoolRules.add(new UsedHeapMemorySpoolRule(spoolUsedHeapMemoryLimit));
}
}
@@ -351,8 +364,10 @@ public class DefaultStreamCachingStrategy extends org.apache.camel.support.Servi
private final class UsedHeapMemorySpoolRule implements SpoolRule {
private final MemoryMXBean heapUsage;
+ private final SpoolUsedHeapMemoryLimit limit;
- private UsedHeapMemorySpoolRule() {
+ private UsedHeapMemorySpoolRule(SpoolUsedHeapMemoryLimit limit) {
+ this.limit = limit;
this.heapUsage = ManagementFactory.getMemoryMXBean();
}
@@ -360,14 +375,16 @@ public class DefaultStreamCachingStrategy extends org.apache.camel.support.Servi
if (spoolUsedHeapMemoryThreshold > 0) {
// must use double to calculate with decimals for the percentage
double used = heapUsage.getHeapMemoryUsage().getUsed();
- double committed = heapUsage.getHeapMemoryUsage().getCommitted();
- double calc = (used / committed) * 100;
+ double upper = limit == SpoolUsedHeapMemoryLimit.Committed ?
+ heapUsage.getHeapMemoryUsage().getCommitted() : heapUsage.getHeapMemoryUsage().getMax();
+ double calc = (used / upper) * 100;
int percentage = (int) calc;
if (LOG.isTraceEnabled()) {
long u = heapUsage.getHeapMemoryUsage().getUsed();
long c = heapUsage.getHeapMemoryUsage().getCommitted();
- LOG.trace("Heap memory: [used={}M ({}%), committed={}M]", new Object[]{u >> 20, percentage, c >> 20});
+ long m = heapUsage.getHeapMemoryUsage().getMax();
+ LOG.trace("Heap memory: [used={}M ({}%), committed={}M, max={}M]", new Object[]{u >> 20, percentage, c >> 20, m >> 20});
}
if (percentage > spoolUsedHeapMemoryThreshold) {
@@ -379,7 +396,7 @@ public class DefaultStreamCachingStrategy extends org.apache.camel.support.Servi
}
public String toString() {
- return "Spool > " + spoolUsedHeapMemoryThreshold + "% used heap memory";
+ return "Spool > " + spoolUsedHeapMemoryThreshold + "% used of " + limit + " heap memory";
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/b96c92e5/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStreamCachingStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStreamCachingStrategy.java b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStreamCachingStrategy.java
index b57a010..284ac52 100644
--- a/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStreamCachingStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/management/mbean/ManagedStreamCachingStrategy.java
@@ -74,6 +74,14 @@ public class ManagedStreamCachingStrategy extends ManagedService implements Mana
return streamCachingStrategy.getSpoolUsedHeapMemoryThreshold();
}
+ public void setSpoolUsedHeapMemoryLimit(StreamCachingStrategy.SpoolUsedHeapMemoryLimit limit) {
+ streamCachingStrategy.setSpoolUsedHeapMemoryLimit(limit);
+ }
+
+ public StreamCachingStrategy.SpoolUsedHeapMemoryLimit getSpoolUsedHeapMemoryLimit() {
+ return streamCachingStrategy.getSpoolUsedHeapMemoryLimit();
+ }
+
public void setBufferSize(int bufferSize) {
streamCachingStrategy.setBufferSize(bufferSize);
}
http://git-wip-us.apache.org/repos/asf/camel/blob/b96c92e5/camel-core/src/main/java/org/apache/camel/spi/StreamCachingStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/StreamCachingStrategy.java b/camel-core/src/main/java/org/apache/camel/spi/StreamCachingStrategy.java
index e6d851c..80ee1de 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/StreamCachingStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/StreamCachingStrategy.java
@@ -81,6 +81,13 @@ public interface StreamCachingStrategy extends StaticService {
}
/**
+ * Used for selecting if the memory limit is <tt>committed</tt> or <tt>maximum</tt> heap memory setting.
+ */
+ enum SpoolUsedHeapMemoryLimit {
+ Committed, Max
+ }
+
+ /**
* Rule for determine if stream caching should be spooled to disk or kept in-memory.
*/
interface SpoolRule {
@@ -139,6 +146,16 @@ public interface StreamCachingStrategy extends StaticService {
int getSpoolUsedHeapMemoryThreshold();
/**
+ * Sets what the upper bounds should be when {@link #setSpoolUsedHeapMemoryThreshold(int)}
+ * is in use.
+ *
+ * @param bounds the bounds
+ */
+ void setSpoolUsedHeapMemoryLimit(SpoolUsedHeapMemoryLimit bounds);
+
+ SpoolUsedHeapMemoryLimit getSpoolUsedHeapMemoryLimit();
+
+ /**
* Sets the buffer size to use when allocating in-memory buffers used for in-memory stream caches.
* <p/>
* The default size is {@link org.apache.camel.util.IOHelper#DEFAULT_BUFFER_SIZE}
http://git-wip-us.apache.org/repos/asf/camel/blob/b96c92e5/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
----------------------------------------------------------------------
diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 76b0c69..f158d63 100644
--- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -39,7 +39,6 @@ import org.apache.camel.component.properties.PropertiesComponent;
import org.apache.camel.component.properties.PropertiesParser;
import org.apache.camel.component.properties.PropertiesResolver;
import org.apache.camel.management.DefaultManagementAgent;
-import org.apache.camel.management.DefaultManagementLifecycleStrategy;
import org.apache.camel.management.DefaultManagementStrategy;
import org.apache.camel.management.ManagedManagementStrategy;
import org.apache.camel.model.ContextScanDefinition;
@@ -404,6 +403,11 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
if (spoolUsedHeap != null) {
getContext().getStreamCachingStrategy().setSpoolUsedHeapMemoryThreshold(spoolUsedHeap);
}
+ String limit = CamelContextHelper.parseText(getContext(), streamCaching.getSpoolUsedHeapMemoryLimit());
+ if (limit != null) {
+ StreamCachingStrategy.SpoolUsedHeapMemoryLimit ul = CamelContextHelper.mandatoryConvertTo(getContext(), StreamCachingStrategy.SpoolUsedHeapMemoryLimit.class, limit);
+ getContext().getStreamCachingStrategy().setSpoolUsedHeapMemoryLimit(ul);
+ }
String spoolChiper = CamelContextHelper.parseText(getContext(), streamCaching.getSpoolChiper());
if (spoolChiper != null) {
getContext().getStreamCachingStrategy().setSpoolChiper(spoolChiper);
http://git-wip-us.apache.org/repos/asf/camel/blob/b96c92e5/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelStreamCachingStrategyDefinition.java
----------------------------------------------------------------------
diff --git a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelStreamCachingStrategyDefinition.java b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelStreamCachingStrategyDefinition.java
index 9a3ce52..d8f7781 100644
--- a/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelStreamCachingStrategyDefinition.java
+++ b/components/camel-core-xml/src/main/java/org/apache/camel/core/xml/CamelStreamCachingStrategyDefinition.java
@@ -48,6 +48,9 @@ public class CamelStreamCachingStrategyDefinition extends IdentifiedType {
private String spoolUsedHeapMemoryThreshold;
@XmlAttribute
+ private String spoolUsedHeapMemoryLimit;
+
+ @XmlAttribute
private String spoolRules;
@XmlAttribute
@@ -102,6 +105,14 @@ public class CamelStreamCachingStrategyDefinition extends IdentifiedType {
this.spoolUsedHeapMemoryThreshold = spoolUsedHeapMemoryThreshold;
}
+ public String getSpoolUsedHeapMemoryLimit() {
+ return spoolUsedHeapMemoryLimit;
+ }
+
+ public void setSpoolUsedHeapMemoryLimit(String spoolUsedHeapMemoryLimit) {
+ this.spoolUsedHeapMemoryLimit = spoolUsedHeapMemoryLimit;
+ }
+
public String getSpoolRules() {
return spoolRules;
}