Author: ningjiang
Date: Fri Jan 14 05:11:40 2011
New Revision: 1058853
URL: http://svn.apache.org/viewvc?rev=1058853&view=rev
Log:
CAMEL-3240 applied patch with thanks to Ben
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ShutdownRouteGracefulGiveUpTest.java
(with props)
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java?rev=1058853&r1=1058852&r2=1058853&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultCamelContext.java
Fri Jan 14 05:11:40 2011
@@ -735,9 +735,9 @@ public class DefaultCamelContext extends
boolean completed = getShutdownStrategy().shutdown(this, routes,
timeout, timeUnit, giveUp);
if (completed) {
- // must stop route service as well
- routeService.setRemovingRoutes(false);
- stopRouteService(routeService);
+ // must stop route service as well
+ routeService.setRemovingRoutes(false);
+ stopRouteService(routeService);
}
}
}
Modified:
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java?rev=1058853&r1=1058852&r2=1058853&view=diff
==============================================================================
---
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
(original)
+++
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
Fri Jan 14 05:11:40 2011
@@ -133,17 +133,17 @@ public class DefaultShutdownStrategy ext
future.cancel(true);
//if set, stop processing and return false to indicate that the
shutdown is giving up
- if( giveUp ) {
+ if (giveUp) {
LOG.warn("Timeout occurred. Giving up now.");
- return false;
+ return false;
} else {
- if (shutdownNowOnTimeout) {
- LOG.warn("Timeout occurred. Now forcing the routes to
be shutdown now.");
- // force the routes to shutdown now
- shutdownRoutesNow(routesOrdered);
- } else {
- LOG.warn("Timeout occurred. Will ignore shutting down
the remainder routes.");
- }
+ if (shutdownNowOnTimeout) {
+ LOG.warn("Timeout occurred. Now forcing the routes to be
shutdown now.");
+ // force the routes to shutdown now
+ shutdownRoutesNow(routesOrdered);
+ } else {
+ LOG.warn("Timeout occurred. Will ignore shutting down the
remainder routes.");
+ }
}
} catch (ExecutionException e) {
// unwrap execution exception
Added:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ShutdownRouteGracefulGiveUpTest.java
URL:
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ShutdownRouteGracefulGiveUpTest.java?rev=1058853&view=auto
==============================================================================
---
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ShutdownRouteGracefulGiveUpTest.java
(added)
+++
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ShutdownRouteGracefulGiveUpTest.java
Fri Jan 14 05:11:40 2011
@@ -0,0 +1,77 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.impl;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+
+/**
+ * @version $Revision$
+ */
+public class ShutdownRouteGracefulGiveUpTest extends ContextTestSupport {
+
+ private static String foo = "";
+
+ public void testShutdownRouteGraceful() throws Exception {
+ getMockEndpoint("mock:foo").expectedMessageCount(1);
+
+ template.sendBody("seda:foo", "A");
+ template.sendBody("seda:foo", "B");
+ template.sendBody("seda:foo", "C");
+ template.sendBody("seda:foo", "D");
+ template.sendBody("seda:foo", "E");
+
+ assertMockEndpointsSatisfied();
+
+ // now stop the route before its complete
+ // timeout after 2 seconds, then give up
+ foo = foo + "stop";
+ context.stopRoute("seda", 2, TimeUnit.SECONDS, true);
+
+ // should not be able to complete all messages as timeout occurred
+ assertNotSame("Should not able able to complete all pending messages",
"stopABCDE", foo);
+ assertEquals("bar should still be running", true,
context.getRouteStatus("bar").isStarted());
+ assertEquals("Seda should still be running", true,
context.getRouteStatus("seda").isStarted());
+
+ context.stop();
+ Thread.sleep(4000);
+
+ assertEquals("bar should be stopped", true,
context.getRouteStatus("bar").isStopped());
+ assertEquals("Seda should be stopped", true,
context.getRouteStatus("seda").isStopped());
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() throws Exception {
+ return new RouteBuilder() {
+ @Override
+ public void configure() throws Exception {
+ context.getShutdownStrategy().setTimeout(2);
+
from("seda:foo").routeId("seda").to("mock:foo").delay(1000).process(new
Processor() {
+ public void process(Exchange exchange) throws Exception {
+ foo = foo + exchange.getIn().getBody(String.class);
+ }
+ });
+
+ from("direct:bar").routeId("bar").to("mock:bar");
+ }
+ };
+ }
+}
\ No newline at end of file
Propchange:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ShutdownRouteGracefulGiveUpTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
camel/trunk/camel-core/src/test/java/org/apache/camel/impl/ShutdownRouteGracefulGiveUpTest.java
------------------------------------------------------------------------------
svn:keywords = Rev Date