Author: psteitz
Date: Sat Dec 25 05:34:52 2010
New Revision: 1052754

URL: http://svn.apache.org/viewvc?rev=1052754&view=rev
Log:
Added passivateInvalidationProbability config property (instances will 'go bad' 
with this probability on passivation).  Made WaiterFactory config fields final.

Modified:
    
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/PoolSoak.java
    
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/WaiterFactory.java

Modified: 
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/PoolSoak.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/PoolSoak.java?rev=1052754&r1=1052753&r2=1052754&view=diff
==============================================================================
--- 
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/PoolSoak.java
 (original)
+++ 
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/PoolSoak.java
 Sat Dec 25 05:34:52 2010
@@ -70,6 +70,7 @@ public class PoolSoak extends LoadGenera
     private long passivateLatency;
     private long validateLatency;
     private long waiterLatency;
+    private double passivateInvalidationProbability;
     
     /**
      * Add pool configuration to parameters loaded by super.
@@ -78,7 +79,7 @@ public class PoolSoak extends LoadGenera
     protected void configure() throws Exception {
         super.configure();
         digester.addCallMethod("configuration/factory", 
-                "configureFactory", 6);
+                "configureFactory", 7);
         digester.addCallParam(
                 "configuration/factory/activate-latency", 0);
         digester.addCallParam(
@@ -90,7 +91,9 @@ public class PoolSoak extends LoadGenera
         digester.addCallParam(
                 "configuration/factory/validate-latency", 4);
         digester.addCallParam(
-                "configuration/factory/waiter-latency", 5);   
+                "configuration/factory/waiter-latency", 5); 
+        digester.addCallParam(
+                "configuration/factory/passivate-invalidation-probability", 
6);    
         digester.addCallMethod("configuration/pool", 
                 "configurePool", 15);
         digester.addCallParam(
@@ -143,7 +146,7 @@ public class PoolSoak extends LoadGenera
         // Create factory
         WaiterFactory factory = new WaiterFactory(activateLatency, 
destroyLatency,
                 makeLatency, passivateLatency, validateLatency, waiterLatency,
-                maxActive, maxActivePerKey); 
+                maxActive, maxActivePerKey, passivateInvalidationProbability); 
         
         // Create object pool
         if (poolType.equals("GenericObjectPool")) {
@@ -278,7 +281,7 @@ public class PoolSoak extends LoadGenera
     // 
------------------------------------------------------------------------       
     public void configureFactory(String activateLatency, String destroyLatency,
             String makeLatency, String passivateLatency, String 
validateLatency,
-            String waiterLatency) {
+            String waiterLatency, String passivateInvalidationProbability) {
        
         this.activateLatency = Long.parseLong(activateLatency);
         this.destroyLatency = Long.parseLong(destroyLatency);
@@ -286,6 +289,8 @@ public class PoolSoak extends LoadGenera
         this.passivateLatency = Long.parseLong(passivateLatency);
         this.validateLatency = Long.parseLong(validateLatency);
         this.waiterLatency = Long.parseLong(waiterLatency);
+        this.passivateInvalidationProbability = 
+            Double.parseDouble(passivateInvalidationProbability);
     }
     
     public void configurePool(String maxActive, String maxActivePerKey,

Modified: 
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/WaiterFactory.java
URL: 
http://svn.apache.org/viewvc/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/WaiterFactory.java?rev=1052754&r1=1052753&r2=1052754&view=diff
==============================================================================
--- 
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/WaiterFactory.java
 (original)
+++ 
commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/pool/WaiterFactory.java
 Sat Dec 25 05:34:52 2010
@@ -35,12 +35,13 @@ public class WaiterFactory implements Po
 KeyedPoolableObjectFactory {
     
     // TODO: implement protected getters so these can be stochastic
-    private long activateLatency = 0;
-    private long destroyLatency = 0;
-    private long makeLatency = 0;
-    private long passivateLatency = 0;
-    private long validateLatency = 0;
-    private long waiterLatency = 0;
+    private final long activateLatency;
+    private final long destroyLatency;
+    private final long makeLatency;
+    private final long passivateLatency;
+    private final long validateLatency;
+    private final long waiterLatency;
+    private final double passivateInvalidationProbability;
     
     /** Count of (makes - destroys) since last reset */
     private long activeCount = 0;
@@ -50,17 +51,18 @@ KeyedPoolableObjectFactory {
         new HashMap<Object, AtomicInteger>();
     
     /** Maximum of (makes - destroys) - if exceeded IllegalStateException */
-    private long maxActive = Long.MAX_VALUE;
+    private final long maxActive;
     
     /** Maximum of (makes - destroys) per key */
-    private long maxActivePerKey = Long.MAX_VALUE;
+    private final long maxActivePerKey;
     
     protected static final Logger logger = 
         Logger.getLogger(WaiterFactory.class.getName());
 
     public WaiterFactory(long activateLatency, long destroyLatency,
             long makeLatency, long passivateLatency, long validateLatency,
-            long waiterLatency,long maxActive, long maxActivePerKey) {
+            long waiterLatency,long maxActive, long maxActivePerKey,
+            double passivateInvalidationProbability) {
         this.activateLatency = activateLatency;
         this.destroyLatency = destroyLatency;
         this.makeLatency = makeLatency;
@@ -69,20 +71,21 @@ KeyedPoolableObjectFactory {
         this.waiterLatency = waiterLatency;
         this.maxActive = maxActive;
         this.maxActivePerKey = maxActivePerKey;
+        this.passivateInvalidationProbability = 
passivateInvalidationProbability;
     }
     
     public WaiterFactory(long activateLatency, long destroyLatency,
             long makeLatency, long passivateLatency, long validateLatency,
             long waiterLatency) {
         this(activateLatency, destroyLatency, makeLatency, passivateLatency,
-                validateLatency, waiterLatency, Long.MAX_VALUE, 
Long.MAX_VALUE);
+                validateLatency, waiterLatency, Long.MAX_VALUE, 
Long.MAX_VALUE, 0);
     }
     
     public WaiterFactory(long activateLatency, long destroyLatency,
             long makeLatency, long passivateLatency, long validateLatency,
             long waiterLatency,long maxActive) {
         this(activateLatency, destroyLatency, makeLatency, passivateLatency,
-                validateLatency, waiterLatency, maxActive, Long.MAX_VALUE);
+                validateLatency, waiterLatency, maxActive, Long.MAX_VALUE, 0);
     }
 
     public void activateObject(Object obj) throws Exception {
@@ -129,6 +132,9 @@ KeyedPoolableObjectFactory {
         }
         ((Waiter) arg0).setActive(false);
         doWait(passivateLatency);
+        if (Math.random() < passivateInvalidationProbability) {
+            ((Waiter) arg0).setValid(false);
+        }
     }
 
     public boolean validateObject(Object arg0) {
@@ -165,13 +171,6 @@ KeyedPoolableObjectFactory {
         return maxActive;
     }
 
-    /**
-     * @param maxActive the maxActive to set
-     */
-    public synchronized void setMaxActive(long maxActive) {
-        this.maxActive = maxActive;
-    }
-
     // KeyedPoolableObjectFactory methods
     
     public void activateObject(Object key, Object obj) throws Exception {
@@ -180,7 +179,9 @@ KeyedPoolableObjectFactory {
 
     public void destroyObject(Object key, Object obj) throws Exception {
         destroyObject(obj);
-        ((AtomicInteger) activeCounts.get(key)).getAndDecrement(); 
+        synchronized (this) {
+            ((AtomicInteger) activeCounts.get(key)).getAndDecrement(); 
+        }
     }
 
     public Object makeObject(Object key) throws Exception {


Reply via email to