You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2008/11/09 02:25:03 UTC

svn commit: r712458 - in /jakarta/jmeter/trunk: src/components/org/apache/jmeter/control/ThroughputController.java xdocs/changes.xml

Author: sebb
Date: Sat Nov  8 17:25:03 2008
New Revision: 712458

URL: http://svn.apache.org/viewvc?rev=712458&view=rev
Log:
Bug 44941 - Throughput controllers should not share global counters

Modified:
    jakarta/jmeter/trunk/src/components/org/apache/jmeter/control/ThroughputController.java
    jakarta/jmeter/trunk/xdocs/changes.xml

Modified: jakarta/jmeter/trunk/src/components/org/apache/jmeter/control/ThroughputController.java
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/components/org/apache/jmeter/control/ThroughputController.java?rev=712458&r1=712457&r2=712458&view=diff
==============================================================================
--- jakarta/jmeter/trunk/src/components/org/apache/jmeter/control/ThroughputController.java (original)
+++ jakarta/jmeter/trunk/src/components/org/apache/jmeter/control/ThroughputController.java Sat Nov  8 17:25:03 2008
@@ -54,11 +54,25 @@
 
     private static final String PERCENTTHROUGHPUT = "ThroughputController.percentThroughput";// $NON-NLS-1$
 
-    private static int globalNumExecutions;
+    private static class MutableInteger{
+        private int integer;
+        MutableInteger(int value){
+            integer=value;
+        }
+        int incr(){
+            return ++integer;
+        }
+        public int intValue() {
+            return integer;
+        }
+    }
+    
+    // These items are shared between threads in a group by the clone() method
+    private MutableInteger globalNumExecutions;
 
-    private static int globalIteration;
+    private MutableInteger globalIteration;
 
-    private static final Object counterLock = new Object(); // ensure counts are updated correctly
+    private Object counterLock = new Object(); // ensure counts are updated correctly
 
     /**
      * Number of iterations on which we've chosen to deliver samplers.
@@ -154,7 +168,7 @@
     private int getExecutions() {
         if (!isPerThread()) {
             synchronized (counterLock) {
-                return globalNumExecutions;
+                return globalNumExecutions.intValue();
             }
         }
         return numExecutions;
@@ -199,16 +213,20 @@
         clone.numExecutions = numExecutions;
         clone.iteration = iteration;
         clone.runThisTime = false;
+        // Ensure global counters and lock are shared across threads in the group
+        clone.globalIteration = globalIteration;
+        clone.globalNumExecutions = globalNumExecutions;
+        clone.counterLock = counterLock;
         return clone;
     }
 
     public void iterationStart(LoopIterationEvent iterEvent) {
         if (!isPerThread()) {
             synchronized (counterLock) {
-                globalIteration++;
-                runThisTime = decide(globalNumExecutions, globalIteration);
+                globalIteration.incr();
+                runThisTime = decide(globalNumExecutions.intValue(), globalIteration.intValue());
                 if (runThisTime) {
-                    globalNumExecutions++;
+                    globalNumExecutions.incr();
                 }
             }
         } else {
@@ -222,8 +240,8 @@
 
     public void testStarted() {
         synchronized (counterLock) {
-            globalNumExecutions = 0;
-            globalIteration = -1;
+            globalNumExecutions = new MutableInteger(0);
+            globalIteration = new MutableInteger(-1);
         }
     }
 

Modified: jakarta/jmeter/trunk/xdocs/changes.xml
URL: http://svn.apache.org/viewvc/jakarta/jmeter/trunk/xdocs/changes.xml?rev=712458&r1=712457&r2=712458&view=diff
==============================================================================
--- jakarta/jmeter/trunk/xdocs/changes.xml (original)
+++ jakarta/jmeter/trunk/xdocs/changes.xml Sat Nov  8 17:25:03 2008
@@ -156,6 +156,7 @@
 <li>Bug 45460 - JMS TestPlan elements depend on resource property</li>
 <li>Bug 34096 - Duplicate samples not eliminated when writing to CSV files</li>
 <li>Bug 44521 - empty variables for a POST in the HTTP Request don't get ignored</li>
+<li>Bug 44941 - Throughput controllers should not share global counters</li>
 </ul>
 
 <h3>Improvements</h3>



---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org