Author: markt
Date: Tue Nov 16 17:48:07 2010
New Revision: 1035709

URL: http://svn.apache.org/viewvc?rev=1035709&view=rev
Log:
Session manager performance
Big performance improvement for Windows. Don't try to create randomIS on every 
single session creation call 

Modified:
    tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
    tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java

Modified: tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java?rev=1035709&r1=1035708&r2=1035709&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java (original)
+++ tomcat/trunk/java/org/apache/catalina/session/ManagerBase.java Tue Nov 16 
17:48:07 2010
@@ -73,8 +73,9 @@ public abstract class ManagerBase extend
 
     // ----------------------------------------------------- Instance Variables
 
-    protected DataInputStream randomIS=null;
-    protected String devRandomSource="/dev/urandom";
+    protected DataInputStream randomIS = null;
+    protected String devRandomSource = "/dev/urandom";
+    protected boolean devRandomSourceIsValid = true;
 
     /**
      * The default message digest algorithm to use if we cannot use
@@ -244,9 +245,13 @@ public abstract class ManagerBase extend
         
         @Override
         public DataInputStream run(){
+            devRandomSourceIsValid = true;
             try {
                 File f=new File( devRandomSource );
-                if( ! f.exists() ) return null;
+                if( ! f.exists() ) {
+                    devRandomSourceIsValid = false;
+                    return null;
+                }
                 randomIS= new DataInputStream( new FileInputStream(f));
                 randomIS.readLong();
                 if( log.isDebugEnabled() )
@@ -261,7 +266,7 @@ public abstract class ManagerBase extend
                         log.warn("Failed to close randomIS.");
                     }
                 }
-                devRandomSource = null;
+                devRandomSourceIsValid = false;
                 randomIS=null;
                 return null;
             }            
@@ -554,6 +559,8 @@ public abstract class ManagerBase extend
      *  - so use it if available.
      */
     public void setRandomFile( String s ) {
+        // Assume the source is valid until proved otherwise
+        devRandomSourceIsValid = true;
         // as a hack, you can use a static file - and generate the same
         // session ids ( good for strange debugging )
         if (Globals.IS_SECURITY_ENABLED){
@@ -562,7 +569,10 @@ public abstract class ManagerBase extend
             try{
                 devRandomSource=s;
                 File f=new File( devRandomSource );
-                if( ! f.exists() ) return;
+                if (!f.exists()) {
+                    devRandomSourceIsValid = false;
+                    return;
+                }
                 randomIS= new DataInputStream( new FileInputStream(f));
                 randomIS.readLong();
                 if( log.isDebugEnabled() )
@@ -576,7 +586,7 @@ public abstract class ManagerBase extend
                         log.warn("Failed to close randomIS.");
                     }
                 }
-                devRandomSource = null;
+                devRandomSourceIsValid = false;
                 randomIS=null;
             }
         }
@@ -951,7 +961,7 @@ public abstract class ManagerBase extend
 
     protected void getRandomBytes(byte bytes[]) {
         // Generate a byte array containing a session identifier
-        if (devRandomSource != null && randomIS == null) {
+        if (devRandomSourceIsValid && randomIS == null) {
             setRandomFile(devRandomSource);
         }
         if (randomIS != null) {
@@ -965,7 +975,7 @@ public abstract class ManagerBase extend
             } catch (Exception ex) {
                 // Ignore
             }
-            devRandomSource = null;
+            devRandomSourceIsValid = false;
             
             try {
                 randomIS.close();

Modified: tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java?rev=1035709&r1=1035708&r2=1035709&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java (original)
+++ tomcat/trunk/test/org/apache/catalina/session/Benchmarks.java Tue Nov 16 
17:48:07 2010
@@ -108,10 +108,10 @@ public class Benchmarks extends TestCase
     
     /*
      * Results on markt's 4-core dev box
-     *  1 thread  -  ~2,300ms
-     *  2 threads -  ~4,600ms
-     *  4 threads - ~12,300ms
-     * 16 threads - ~51,000ms
+     *  1 thread  -  ~860ms
+     *  2 threads -  ~800ms
+     *  4 threads - ~1,600ms
+     * 16 threads - ~6,900ms
      */
     public void testManagerBaseCreateSession() {
         doTestManagerBaseCreateSession(1, 100000);



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to