Author: psteitz
Date: Sun Jul 22 14:19:48 2007
New Revision: 558551

URL: http://svn.apache.org/viewvc?view=rev&rev=558551
Log:
Moved ConfigurationException to performance package
Renamed build.xml, config.xml to *-dbcp
Made peak and min mean load both configurable
Fixed some errors in ClientThread delay method

Added:
    jakarta/commons/sandbox/performance/trunk/build-dbcp.xml
      - copied unchanged from r557160, 
jakarta/commons/sandbox/performance/trunk/build.xml
    jakarta/commons/sandbox/performance/trunk/config-dbcp.xml
      - copied, changed from r557160, 
jakarta/commons/sandbox/performance/trunk/config.xml
    
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ConfigurationException.java
Removed:
    jakarta/commons/sandbox/performance/trunk/build.xml
    jakarta/commons/sandbox/performance/trunk/config.xml
    
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/ConfigurationException.java
Modified:
    
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ClientThread.java
    
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPClientThread.java
    
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPSoak.java

Copied: jakarta/commons/sandbox/performance/trunk/config-dbcp.xml (from 
r557160, jakarta/commons/sandbox/performance/trunk/config.xml)
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/performance/trunk/config-dbcp.xml?view=diff&rev=558551&p1=jakarta/commons/sandbox/performance/trunk/config.xml&r1=557160&p2=jakarta/commons/sandbox/performance/trunk/config-dbcp.xml&r2=558551
==============================================================================
--- jakarta/commons/sandbox/performance/trunk/config.xml (original)
+++ jakarta/commons/sandbox/performance/trunk/config-dbcp.xml Sun Jul 22 
14:19:48 2007
@@ -72,7 +72,8 @@
     <query-type>integerIndexed</query-type>
     <iterations>1000</iterations>
     <clients>50</clients>
-    <delay-mean>250</delay-mean>
+    <delay-min>250</delay-min>
+    <delay-max>500</delay-max>
     <delay-sigma>50</delay-sigma>
     <!-- constant, gaussian, or poisson -->
     <delay-type>gaussian</delay-type>

Modified: 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ClientThread.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ClientThread.java?view=diff&rev=558551&r1=558550&r2=558551
==============================================================================
--- 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ClientThread.java
 (original)
+++ 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ClientThread.java
 Sun Jul 22 14:19:48 2007
@@ -36,8 +36,10 @@
 
     /** Number of iterations */
     protected long iterations;
-    /** Mean time between requests */
-    protected long delay;
+    /** Minimum mean time between requests */
+    protected long minDelay;
+    /** Maxiimum mean time between requests */
+    protected long maxDelay;
     /** Standard deviation of delay distribution */
     protected double sigma;
     /** Delay type - determines how next start times are computed */
@@ -67,19 +69,21 @@
      * Create a client thread.
      * 
      * @param iterations number of iterations
-     * @param delay mean time between client requests
+     * @param minDelay minumum mean time between client requests
+     * @param maxDelay maximum mean time between client requests
      * @param delayType distribution of time between client requests
      * @param period period of cycle for cyclic load
      * @param cycleType type of cycle for mean delay
      * @param logger common logger shared by all clients
      * @param statsList List of SummaryStatistics to add results to
      */
-    public ClientThread(long iterations, long delay, double sigma, 
-            String delayType, long period, String cycleType,
-            String rampType, Logger logger, 
+    public ClientThread(long iterations, long minDelay, long maxDelay,
+            double sigma, String delayType, long period, String cycleType,
+            String rampType, Logger logger,
             List <SummaryStatistics> statsList) {
         this.iterations = iterations;
-        this.delay = delay;
+        this.minDelay = minDelay;
+        this.maxDelay = maxDelay;
         this.sigma = sigma;
         this.delayType = delayType;
         this.period = period;
@@ -105,7 +109,7 @@
         SummaryStatistics stats = new SummaryStatisticsImpl();
         randomData = new RandomDataImpl();
         periodStart = System.currentTimeMillis();
-        lastMean = (double) (2 * delay); // Ramp up, if any, starts here
+        lastMean = (double) maxDelay; // Ramp up, if any, starts here
         for (int i = 0; i < iterations; i++) {
             try {
                 setup();
@@ -163,24 +167,24 @@
     
     /**
      * <p>Computes the next interarrival time (time to wait between requests)
-     * based on configured values for mean delay, delay type, cycle type, 
+     * based on configured values for min/max delay, delay type, cycle type, 
      * ramp type and period.
      * </p>
-     * <p>Currently supports constant (just returning mean delay time), Poisson
-     * and Gaussian distributed random time delays, linear and random ramps,
-     * and oscillating / non-oscillating cycle types.
+     * <p>Currently supports constant (always returning minDelay delay time),
+     * Poisson and Gaussian distributed random time delays, linear and random
+     * ramps, and oscillating / non-oscillating cycle types.
      * </p>
-     * <p>If delayType = "constant" the configured delay mean is always 
returned.
-     * If delayType is "gaussian" or "exponential" and cycleType is "none",
+     * <p>If delayType = "constant" the configured minDelay is always returned.
+     * If delayType is "gaussian" or "poisson" and cycleType is "none",
      * random deviates with the configured parameters are returned.
      * </p>
      * <p>If delayType is not "constant" and cycleType is "oscillating", means
-     * of random deviates ramp up and down between delay and twice delay. Ramp
+     * of random deviates ramp up and down between minDelay and maxDelay. Ramp
      * type is controlled by rampType.  Linear rampType means the means
      * increase or decrease linearly over the time of the period.  Random
      * makes random jumps up or down toward the next peak or trough. "None" for
-     * rampType under oscillating cycleType makes the means alternate bttween
-     * peak (delay) and trough (twice delay) with no ramp between.
+     * rampType under oscillating cycleType makes the means alternate between
+     * peak (minDelay) and trough (maxDelay) with no ramp between.
      * </p>
      * <p>For non-oscillating, non-constant runs, linear and random rampTypes
      * work similarly, but over just one ramp up period at the beginning of
@@ -195,67 +199,67 @@
         double mean = 0;
         if (delayType.equals("constant")) { 
             //TODO: should support single ramp up to constant
-            return delay;
+            return minDelay;
         } else { // delay not constant, use random variate
-            
             // Determine mean to use 
-            double doubleDelay = (double) delay;
-            double top = 2d * doubleDelay; // delay is peak, ramp starts at top
+            double dMinDelay = (double) minDelay;
+            double dMaxDelay = (double) maxDelay;
+            double delayDifference = dMaxDelay - dMinDelay;
             if (cycleType.equals("none")) {
                 if (rampType.equals("none") || 
-                        (currentTime - startTime) > period) { 
-                    // use configured mean
-                    mean = doubleDelay;
+                        (currentTime - startTime) > period) { // ramped up
+                    mean = dMinDelay;
                 } else if (rampType.equals("linear")) { // single period linear
-                    double prop = (double) (currentTime - startTime) / period ;
-                    mean =  top - doubleDelay * prop;
+                    double prop = 
+                        (double) (currentTime - startTime) / (double) period;
+                    mean =  dMaxDelay - delayDifference * prop;
                 } else { // Random jumps down to delay - single period
-                    // Where we last were as proportion of way down to delay
+                    // TODO: govern size of jumps as in oscillating
+                    // Where we last were as proportion of way down to minDelay
                     double lastProp = 
-                        (top - lastMean) / doubleDelay;
+                        (dMaxDelay - lastMean) / delayDifference;
                     // Make a random jump toward 1 (1 = all the way down)
                     double prop = randomData.nextUniform(lastProp, 1);
-                    mean = top - doubleDelay * prop;
+                    mean = dMaxDelay - delayDifference * prop;
                 }
             } else if (cycleType.equals("oscillating")) {
                 // First check if we need to change directions
                 if ((currentTime - periodStart) >= period) {
                     if (rampingUp) {
                         rampingUp = false;
-                        lastMean = doubleDelay;
+                        lastMean = dMinDelay;
                     } else {
                         rampingUp = true;
-                        lastMean = top;
+                        lastMean = dMaxDelay;
                     }
                     periodStart = currentTime;
                 }
-                if (rampType.equals("none")) { // mean or twice mean, no ramp
+                if (rampType.equals("none")) { // minDelay or maxDelay, no ramp
                     if (rampingUp) {
-                        mean = top;
+                        mean = dMaxDelay;
                     } else {
-                        mean = doubleDelay;
+                        mean = dMinDelay;
                     }
                 } else if (rampType.equals("linear")) { // ramp down, then up
                     double prop = 
                         (double)(currentTime - periodStart) / (double) period;
                     if (rampingUp) {
-                        mean =  top - doubleDelay * prop; 
+                        mean =  dMaxDelay - delayDifference * prop; 
                     } else {
-                        mean = doubleDelay + doubleDelay * prop;
+                        mean = dMinDelay + delayDifference * prop;
                     }
                 } else { // random jumps down, then back up
-                    // Where we last were as proportion of way down to delay
+                    // Where we last were as proportion of way down to minDelay
                     double lastProp = 
-                        (top - lastMean) / doubleDelay;
+                        (dMaxDelay - lastMean) / delayDifference;
                     // Where we would be if this were a linear ramp
                     double linearProp = 
                         (double)(currentTime - periodStart) / (double) period;
                     // Need to govern size of jumps, otherwise "convergence"
                     // can be too fast - use linear ramp as governor
                     if ((rampingUp && (lastProp > linearProp)) || 
-                       (!rampingUp && (lastProp < linearProp))) { // Slow down
-                        lastProp = linearProp;
-                    }
+                            (!rampingUp && ((1 - lastProp) > linearProp))) 
+                        lastProp = rampingUp ? linearProp : (1 - linearProp);
                     double prop = 0;
                     if (rampingUp) { // Random jump toward 1
                         prop = randomData.nextUniform(lastProp, 1);
@@ -264,23 +268,24 @@
                     }
                     // Make sure sequence is monotone
                     if (rampingUp) {
-                        mean = Math.min(lastMean, top - doubleDelay * prop);
+                        mean = Math.min(lastMean, 
+                                maxDelay - delayDifference * prop);
                     } else {
-                        mean = Math.max(lastMean, top - doubleDelay * prop);
+                        mean = Math.max(lastMean, 
+                                minDelay + delayDifference * prop);
                     }
                 }
             }
-            
+
             // Remember last mean for ramp up / down
             lastMean = mean;
-            
+
             // Generate and return random deviate
             if (delayType.equals("gaussian")) {
                 return Math.round(randomData.nextGaussian(mean, sigma));
             } else { // must be Poisson
                 return Math.round(randomData.nextPoisson(mean));
             }
-        }  
+        } 
     }
-
 }

Added: 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ConfigurationException.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ConfigurationException.java?view=auto&rev=558551
==============================================================================
--- 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ConfigurationException.java
 (added)
+++ 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/ConfigurationException.java
 Sun Jul 22 14:19:48 2007
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.performance;
+
+public class ConfigurationException extends Exception {
+
+    public ConfigurationException() {
+        super();
+    }
+
+    public ConfigurationException(String arg0, Throwable arg1) {
+        super(arg0, arg1);
+    }
+
+    public ConfigurationException(String arg0) {
+        super(arg0);
+    }
+
+    public ConfigurationException(Throwable arg0) {
+        super(arg0);
+    }
+
+}

Modified: 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPClientThread.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPClientThread.java?view=diff&rev=558551&r1=558550&r2=558551
==============================================================================
--- 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPClientThread.java
 (original)
+++ 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPClientThread.java
 Sun Jul 22 14:19:48 2007
@@ -59,12 +59,12 @@
      * @param dataSource DataSource for connections
      * @param statsList List of SummaryStatistics to add results to
      */
-    public DBCPClientThread(long iterations, long delay, double sigma, 
-            String delayType, String queryType, long period, String cycleType,
-            String rampType, Logger logger, DataSource dataSource,
-            List <SummaryStatistics> statsList) {
+    public DBCPClientThread(long iterations, long minDelay, long maxDelay,
+            double sigma, String delayType, String queryType, long period,
+            String cycleType, String rampType, Logger logger, 
+            DataSource dataSource,List <SummaryStatistics> statsList) {
         
-        super(iterations, delay, sigma, delayType, period, cycleType,
+        super(iterations, minDelay, maxDelay, sigma, delayType, period, 
cycleType,
                 rampType, logger, statsList);
         
         this.dataSource = dataSource;

Modified: 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPSoak.java
URL: 
http://svn.apache.org/viewvc/jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPSoak.java?view=diff&rev=558551&r1=558550&r2=558551
==============================================================================
--- 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPSoak.java
 (original)
+++ 
jakarta/commons/sandbox/performance/trunk/src/java/org/apache/commons/performance/dbcp/DBCPSoak.java
 Sun Jul 22 14:19:48 2007
@@ -16,6 +16,8 @@
  */
 
 package org.apache.commons.performance.dbcp;
+
+import org.apache.commons.performance.ConfigurationException;
 import java.sql.Connection;
 import java.sql.Driver;
 import java.sql.DriverManager;
@@ -74,7 +76,8 @@
     private int maxIdle;
     private int minIdle;
     private long maxWait;
-    private long delay;
+    private long minDelay;
+    private long maxDelay;
     private double sigma;
     private String delayType;
     private String queryType;
@@ -181,9 +184,9 @@
         // Spawn and execute client threads
                ExecutorService ex = 
Executors.newFixedThreadPool((int)numClients);
                for (int i = 0; i < numClients; i++) {
-                       ex.execute(new DBCPClientThread(iterations, delay, 
sigma, delayType,
-                    queryType, period, cycleType, rampType, logger,
-                    dataSource, statsList));
+                       ex.execute(new DBCPClientThread(iterations, minDelay, 
maxDelay,
+                    sigma, delayType, queryType, period, cycleType, rampType,
+                    logger, dataSource, statsList));
                } 
         ex.shutdown();
         // hard time limit of one day for now 
@@ -274,13 +277,15 @@
     }
     
     public void configureRun(String queryType, String iterations,
-            String clients, String delay, String sigma, String delayType,
-            String rampType, String period, String cycleType) 
+            String clients, String minDelay, String maxDelay, String sigma,
+            String delayType, String rampType, String period, String 
cycleType) 
             throws ConfigurationException {
+     
         this.queryType = queryType;
         this.iterations = Long.parseLong(iterations);
         this.numClients = Long.parseLong(clients);
-        this.delay = Long.parseLong(delay);
+        this.minDelay = Long.parseLong(minDelay);
+        this.maxDelay = Long.parseLong(maxDelay);
         this.sigma = Double.parseDouble(sigma);
         this.delayType = delayType;
         this.rampType = rampType;
@@ -380,7 +385,7 @@
                 "configuration/pool/type", 11);
         
         digester.addCallMethod("configuration/run", 
-                "configureRun", 9);
+                "configureRun", 10);
         digester.addCallParam(
                 "configuration/run/query-type", 0);
         digester.addCallParam(
@@ -388,17 +393,19 @@
         digester.addCallParam(
                 "configuration/run/clients", 2);
         digester.addCallParam(
-                "configuration/run/delay-mean", 3);
+                "configuration/run/delay-min", 3);
+        digester.addCallParam(
+                "configuration/run/delay-max", 4);
         digester.addCallParam(
-                "configuration/run/delay-sigma", 4);
+                "configuration/run/delay-sigma", 5);
         digester.addCallParam(
-                "configuration/run/delay-type", 5);
+                "configuration/run/delay-type", 6);
         digester.addCallParam(
-                "configuration/run/ramp-type", 6);
+                "configuration/run/ramp-type", 7);
         digester.addCallParam(
-                "configuration/run/period", 7);
+                "configuration/run/period", 8);
         digester.addCallParam(
-                "configuration/run/cycle-type", 8);
+                "configuration/run/cycle-type", 9);
         
         digester.addCallMethod("configuration/abandoned-config",
                 "configureAbandonedConfig", 3);
@@ -409,7 +416,7 @@
         digester.addCallParam(
                 "configuration/abandoned-config/abandoned-timeout", 2);
         
-        digester.parse("/home/phil/dbcpTest/config.xml");
+        digester.parse("config-dbcp.xml");
         
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to