Author: davsclaus Date: Sat May 8 09:12:47 2010 New Revision: 942352 URL: http://svn.apache.org/viewvc?rev=942352&view=rev Log: Fixed failover load balancer in round robin mode.
Added: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinGoodBadTest.java - copied, changed from r942015, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinTest.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java?rev=942352&r1=942351&r2=942352&view=diff ============================================================================== --- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java (original) +++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java Sat May 8 09:12:47 2010 @@ -132,12 +132,8 @@ public class FailOverLoadBalancer extend index++; counter++; - if (index < list.size()) { - // try again but prepare exchange before we failover - prepareExchangeForFailover(exchange); - processor = list.get(index); - processExchange(processor, exchange, attempts); - } else { + if (index >= list.size()) { + // out of bounds if (isRoundRobin()) { log.debug("Failover is round robin enabled and therefore starting from the first endpoint"); index = 0; @@ -148,6 +144,11 @@ public class FailOverLoadBalancer extend break; } } + + // try again but prepare exchange before we failover + prepareExchangeForFailover(exchange); + processor = list.get(index); + processExchange(processor, exchange, attempts); } } Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinGoodBadTest.java (from r942015, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinTest.java) URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinGoodBadTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinGoodBadTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinTest.java&r1=942015&r2=942352&rev=942352&view=diff ============================================================================== --- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinTest.java (original) +++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FailoverRoundRobinGoodBadTest.java Sat May 8 09:12:47 2010 @@ -22,28 +22,13 @@ import org.apache.camel.builder.RouteBui /** * @version $Revision$ */ -public class FailoverRoundRobinTest extends ContextTestSupport { +public class FailoverRoundRobinGoodBadTest extends ContextTestSupport { public void testFailoverRoundRobin() throws Exception { - getMockEndpoint("mock:bad").expectedBodiesReceived("Hello World"); - getMockEndpoint("mock:bad2").expectedBodiesReceived("Hello World"); - getMockEndpoint("mock:good").expectedBodiesReceived("Hello World"); - getMockEndpoint("mock:good2").expectedMessageCount(0); + getMockEndpoint("mock:good").expectedBodiesReceived("Hello World", "Bye World"); + getMockEndpoint("mock:bad").expectedBodiesReceived("Bye World"); template.sendBody("direct:start", "Hello World"); - - assertMockEndpointsSatisfied(); - - // as its round robin based it remembers that last good endpoint - // and will invoke the next - - resetMocks(); - - getMockEndpoint("mock:bad").expectedMessageCount(0); - getMockEndpoint("mock:bad2").expectedMessageCount(0); - getMockEndpoint("mock:good").expectedMessageCount(0); - getMockEndpoint("mock:good2").expectedBodiesReceived("Bye World"); - template.sendBody("direct:start", "Bye World"); assertMockEndpointsSatisfied(); @@ -54,31 +39,18 @@ public class FailoverRoundRobinTest exte return new RouteBuilder() { @Override public void configure() throws Exception { - // START SNIPPET: e1 from("direct:start") - // Use failover load balancer in stateful round robin mode - // which mean it will failover immediately in case of an exception - // as it does NOT inherit error handler. It will also keep retrying as - // its configured to newer exhaust. - .loadBalance().failover(-1, false, true). - to("direct:bad", "direct:bad2", "direct:good", "direct:good2"); - // END SNIPPET: e1 - - from("direct:bad") - .to("mock:bad") - .throwException(new IllegalArgumentException("Damn")); - - from("direct:bad2") - .to("mock:bad2") - .throwException(new IllegalArgumentException("Damn Again")); + .loadBalance().failover(1, true, true). + to("direct:good", "direct:bad"); from("direct:good") .to("mock:good"); - from("direct:good2") - .to("mock:good2"); + from("direct:bad") + .to("mock:bad") + .throwException(new IllegalArgumentException("Damn")); } }; } -} +} \ No newline at end of file