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]