Author: davsclaus Date: Sun Aug 26 10:14:26 2012 New Revision: 1377410 URL: http://svn.apache.org/viewvc?rev=1377410&view=rev Log: CAMEL-5525: Fixe random load balancer logic to be more even.
Modified: camel/branches/camel-2.9.x/ (props changed) camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Merged /camel/trunk:r1377407 Merged /camel/branches/camel-2.10.x:r1377408 Propchange: camel/branches/camel-2.9.x/ ------------------------------------------------------------------------------ Binary property 'svnmerge-integrated' - no diff available. Modified: camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java URL: http://svn.apache.org/viewvc/camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java?rev=1377410&r1=1377409&r2=1377410&view=diff ============================================================================== --- camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java (original) +++ camel/branches/camel-2.9.x/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java Sun Aug 26 10:14:26 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() {