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]

Reply via email to