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


Reply via email to