Author: pmouawad
Date: Thu Oct 20 19:07:13 2011
New Revision: 1186994
URL: http://svn.apache.org/viewvc?rev=1186994&view=rev
Log:
Bug 52064 - OutOfMemory Risk in CacheManager
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/CacheManagerGui.java
jakarta/jmeter/trunk/xdocs/changes.xml
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties?rev=1186994&r1=1186993&r2=1186994&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages.properties
Thu Oct 20 19:07:13 2011
@@ -111,6 +111,7 @@ bsh_script_reset_interpreter=Reset bsh.I
bsh_script_variables=The following variables are defined for the
script\:\nSampleResult, ResponseCode, ResponseMessage, IsSuccess, Label,
FileName, ctx, vars, props, log
busy_testing=I'm busy testing, please stop the test before changing settings
cache_manager_title=HTTP Cache Manager
+cache_manager_size=Max Number of elements in cache
cache_session_id=Cache Session Id?
cancel=Cancel
cancel_exit_to_save=There are test items that have not been saved. Do you
wish to save before exiting?
Modified:
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties?rev=1186994&r1=1186993&r2=1186994&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
(original)
+++
jakarta/jmeter/trunk/src/core/org/apache/jmeter/resources/messages_fr.properties
Thu Oct 20 19:07:13 2011
@@ -100,6 +100,7 @@ bsh_script_reset_interpreter=R\u00E9init
bsh_script_variables=Les variables suivantes sont d\u00E9finies pour le script
\:\nSampleResult, ResponseCode, ResponseMessage, IsSuccess, Label, FileName,
ctx, vars, props, log
busy_testing=Je suis occup\u00E9 \u00E0 tester, veuillez arr\u00EAter le test
avant de changer le param\u00E8trage
cache_manager_title=Gestionnaire de cache HTTP
+cache_manager_size=Nombre maximum d'\u00E9l\u00E9ments dans le cache
cache_session_id=Identifiant de session de cache ?
cancel=Annuler
cancel_exit_to_save=Il y a des \u00E9l\u00E9ments qui n'ont pas \u00E9t\u00E9
sauv\u00E9s. Voulez-vous enregistrer avant de sortir ?
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java?rev=1186994&r1=1186993&r2=1186994&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/control/CacheManager.java
Thu Oct 20 19:07:13 2011
@@ -24,10 +24,11 @@ import java.io.Serializable;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
+import java.util.Collections;
import java.util.Date;
import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
+import org.apache.commons.collections.map.LRUMap;
import org.apache.commons.httpclient.HttpMethod;
import org.apache.commons.httpclient.URIException;
import org.apache.commons.httpclient.util.DateParseException;
@@ -55,12 +56,15 @@ public class CacheManager extends Config
//+ JMX attributes, do not change values
public static final String CLEAR = "clearEachIteration"; // $NON-NLS-1$
public static final String USE_EXPIRES = "useExpires"; // $NON-NLS-1$
+ public static final String MAX_SIZE = "maxSize"; // $NON-NLS-1$
//-
private transient InheritableThreadLocal<Map<String, CacheEntry>>
threadCache;
private transient boolean useExpires; // Cached value
+ private static final int DEFAULT_MAX_SIZE = 5000;
+
public CacheManager() {
setProperty(new BooleanProperty(CLEAR, false));
setProperty(new BooleanProperty(USE_EXPIRES, false));
@@ -319,6 +323,21 @@ public class CacheManager extends Config
public void setUseExpires(boolean expires) {
setProperty(new BooleanProperty(USE_EXPIRES, expires));
}
+
+ /**
+ * @return int cache max size
+ */
+ public int getMaxSize() {
+ return getPropertyAsInt(MAX_SIZE, DEFAULT_MAX_SIZE);
+ }
+
+ /**
+ * @param size int cache max size
+ */
+ public void setMaxSize(int size) {
+ setProperty(MAX_SIZE, size, DEFAULT_MAX_SIZE);
+ }
+
@Override
public void clear(){
@@ -332,7 +351,7 @@ public class CacheManager extends Config
@Override
protected Map<String, CacheEntry> initialValue(){
// Bug 51942 - this map may be used from multiple threads
- return new ConcurrentHashMap<String, CacheEntry>();
+ return Collections.<String, CacheEntry>synchronizedMap(new
LRUMap(getMaxSize()));
}
};
}
Modified:
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/CacheManagerGui.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/CacheManagerGui.java?rev=1186994&r1=1186993&r2=1186994&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/CacheManagerGui.java
(original)
+++
jakarta/jmeter/trunk/src/protocol/http/org/apache/jmeter/protocol/http/gui/CacheManagerGui.java
Thu Oct 20 19:07:13 2011
@@ -21,7 +21,9 @@ package org.apache.jmeter.protocol.http.
import java.awt.BorderLayout;
import javax.swing.JCheckBox;
+import javax.swing.JLabel;
import javax.swing.JPanel;
+import javax.swing.JTextField;
import org.apache.jmeter.config.gui.AbstractConfigGui;
import org.apache.jmeter.protocol.http.control.CacheManager;
@@ -41,6 +43,8 @@ public class CacheManagerGui extends Abs
private JCheckBox useExpires;
+ private JTextField maxCacheSize;
+
/**
* Create a new LoginConfigGui as a standalone component.
*/
@@ -67,6 +71,7 @@ public class CacheManagerGui extends Abs
final CacheManager cacheManager = (CacheManager)element;
clearEachIteration.setSelected(cacheManager.getClearEachIteration());
useExpires.setSelected(cacheManager.getUseExpires());
+ maxCacheSize.setText(Integer.toString(cacheManager.getMaxSize()));
}
/* Implements JMeterGUIComponent.createTestElement() */
@@ -82,6 +87,11 @@ public class CacheManagerGui extends Abs
final CacheManager cacheManager = (CacheManager)element;
cacheManager.setClearEachIteration(clearEachIteration.isSelected());
cacheManager.setUseExpires(useExpires.isSelected());
+ try {
+ cacheManager.setMaxSize(Integer.parseInt(maxCacheSize.getText()));
+ } catch (NumberFormatException e) {
+ // NOOP
+ }
}
/**
@@ -92,6 +102,7 @@ public class CacheManagerGui extends Abs
super.clearGui();
clearEachIteration.setSelected(false);
useExpires.setSelected(false);
+ maxCacheSize.setText(""); //$NON-NLS-1$
}
/**
@@ -109,6 +120,16 @@ public class CacheManagerGui extends Abs
northPanel.add(makeTitlePanel());
northPanel.add(clearEachIteration);
northPanel.add(useExpires);
+
+ JLabel label = new
JLabel(JMeterUtils.getResString("cache_manager_size")); //$NON-NLS-1$
+
+ maxCacheSize = new JTextField(20);
+ maxCacheSize.setName(CacheManager.MAX_SIZE);
+ label.setLabelFor(maxCacheSize);
+ JPanel maxCacheSizePanel = new JPanel(new BorderLayout(5, 0));
+ maxCacheSizePanel.add(label, BorderLayout.WEST);
+ maxCacheSizePanel.add(maxCacheSize, BorderLayout.CENTER);
+ northPanel.add(maxCacheSizePanel);
add(northPanel, BorderLayout.NORTH);
}
Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=1186994&r1=1186993&r2=1186994&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Thu Oct 20 19:07:13 2011
@@ -90,6 +90,7 @@ Mirror server now uses default port 8081
<li>Bug 51957 - Concurrent get can hang if a task does not complete</li>
<li>Bug 51925 - Calling Stop on Test leaks executor threads when concurrent
download of resources is on</li>
<li>Bug 51980 - HtmlParserHTMLParser double-counts images used in links</li>
+<li>Bug 52064 - OutOfMemory Risk in CacheManager</li>
</ul>
<h3>Other Samplers</h3>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]