You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2012/08/26 12:04:06 UTC

svn commit: r1377408 - in /camel/branches/camel-2.10.x: ./ camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java

Author: davsclaus
Date: Sun Aug 26 10:04:06 2012
New Revision: 1377408

URL: http://svn.apache.org/viewvc?rev=1377408&view=rev
Log:
CAMEL-5525: Fixe random load balancer logic to be more even.

Modified:
    camel/branches/camel-2.10.x/   (props changed)
    camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
  Merged /camel/trunk:r1377407

Propchange: camel/branches/camel-2.10.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java?rev=1377408&r1=1377407&r2=1377408&view=diff
==============================================================================
--- camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java (original)
+++ camel/branches/camel-2.10.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java Sun Aug 26 10:04:06 2012
@@ -17,6 +17,7 @@
 package org.apache.camel.processor.loadbalancer;
 
 import java.util.List;
+import java.util.Random;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -28,14 +29,20 @@ import org.apache.camel.Processor;
  */
 public class RandomLoadBalancer extends QueueLoadBalancer {
 
+    private static final Random random = new Random();
+
     protected synchronized Processor chooseProcessor(List<Processor> processors, Exchange exchange) {
         int size = processors.size();
-        while (true) {
-            int index = (int) Math.round(Math.random() * size);
-            if (index < size) {
-                return processors.get(index);
-            }
+        if (size == 0) {
+            return null;
+        } else if (size == 1) {
+            // there is only 1
+            return processors.get(0);
         }
+
+        // pick a random
+        int index = random.nextInt(size);
+        return processors.get(index);
     }
 
     public String toString() {