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 2015/09/22 10:27:52 UTC

[1/8] camel git commit: CAMEL-9150: Seda suspend/resume should not trigger start/stop logic

Repository: camel
Updated Branches:
  refs/heads/master 59eb278ca -> 969f29034


CAMEL-9150: Seda suspend/resume should not trigger start/stop logic


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/de2aab16
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/de2aab16
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/de2aab16

Branch: refs/heads/master
Commit: de2aab16048ff5ecc98b16f52333d19a0c0b612b
Parents: 59eb278
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 09:18:15 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 09:18:15 2015 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/component/seda/SedaConsumer.java     | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/de2aab16/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java b/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
index 5ddd0b5..14e4372 100644
--- a/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
+++ b/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
@@ -167,8 +167,8 @@ public class SedaConsumer extends ServiceSupport implements Consumer, Runnable,
                 continue;
             }
 
-            // do not poll if we are suspended
-            if (isSuspending() || isSuspended()) {
+            // do not poll if we are suspended or starting again after resuming
+            if (isSuspending() || isSuspended() || isStarting()) {
                 if (shutdownPending && queue.isEmpty()) {
                     LOG.trace("Consumer is suspended and shutdown is pending, so this consumer thread is breaking out because the task queue is empty.");
                     // we want to shutdown so break out if there queue is empty
@@ -312,7 +312,7 @@ public class SedaConsumer extends ServiceSupport implements Consumer, Runnable,
 
     @Override
     protected void doResume() throws Exception {
-        doStart();
+        endpoint.onStarted(this);
     }
 
     protected void doStop() throws Exception {


[5/8] camel git commit: CAMEL-9150: Seda suspend/resume should not trigger start/stop logic

Posted by da...@apache.org.
CAMEL-9150: Seda suspend/resume should not trigger start/stop logic


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/e75d37b3
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/e75d37b3
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/e75d37b3

Branch: refs/heads/master
Commit: e75d37b3918eb957924e5122672accc6c01c72fc
Parents: 20ec49a
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 09:52:37 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 09:52:37 2015 +0200

----------------------------------------------------------------------
 .../camel/component/direct/DirectConsumer.java  |  2 +-
 .../camel/component/seda/SedaConsumer.java      |  9 ++++++++-
 .../camel/impl/DefaultShutdownStrategy.java     | 20 ++++++++++++--------
 .../impl/ScheduledBatchPollingConsumer.java     |  2 +-
 .../camel/processor/RedeliveryErrorHandler.java |  2 +-
 .../processor/aggregate/AggregateProcessor.java |  2 +-
 .../org/apache/camel/spi/ShutdownPrepared.java  |  5 +++--
 ...ntextSuspendResumeRouteStartupOrderTest.java |  4 ++++
 ...faultCamelContextSuspendResumeRouteTest.java |  6 ++++++
 .../camel/impl/TwoRouteSuspendResumeTest.java   |  3 +++
 10 files changed, 40 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/main/java/org/apache/camel/component/direct/DirectConsumer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/direct/DirectConsumer.java b/camel-core/src/main/java/org/apache/camel/component/direct/DirectConsumer.java
index 83dbbca..a5be34f 100644
--- a/camel-core/src/main/java/org/apache/camel/component/direct/DirectConsumer.java
+++ b/camel-core/src/main/java/org/apache/camel/component/direct/DirectConsumer.java
@@ -82,7 +82,7 @@ public class DirectConsumer extends DefaultConsumer implements ShutdownAware, Su
         return 0;
     }
 
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
         // noop
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java b/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
index 14e4372..c0970fb 100644
--- a/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
+++ b/camel-core/src/main/java/org/apache/camel/component/seda/SedaConsumer.java
@@ -109,7 +109,14 @@ public class SedaConsumer extends ServiceSupport implements Consumer, Runnable,
     }
 
     @Override
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
+        // if we are suspending then we want to keep the thread running but just not route the exchange
+        // this logic is only when we stop or shutdown the consumer
+        if (suspendOnly) {
+            LOG.debug("Skip preparing to shutdown as consumer is being suspended");
+            return;
+        }
+
         // signal we want to shutdown
         shutdownPending = true;
         forceShutdown = forced;

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
index 4d1395e..0657f15 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultShutdownStrategy.java
@@ -184,7 +184,11 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
             Collections.reverse(routesOrdered);
         }
 
-        LOG.info("Starting to graceful shutdown " + routesOrdered.size() + " routes (timeout " + timeout + " " + timeUnit.toString().toLowerCase(Locale.ENGLISH) + ")");
+        if (suspendOnly) {
+            LOG.info("Starting to graceful suspend " + routesOrdered.size() + " routes (timeout " + timeout + " " + timeUnit.toString().toLowerCase(Locale.ENGLISH) + ")");
+        } else {
+            LOG.info("Starting to graceful shutdown " + routesOrdered.size() + " routes (timeout " + timeout + " " + timeUnit.toString().toLowerCase(Locale.ENGLISH) + ")");
+        }
 
         // use another thread to perform the shutdowns so we can support timeout
         timeoutOccurred.set(false);
@@ -230,7 +234,7 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
                     // now the route consumers has been shutdown, then prepare route services for shutdown now (forced)
                     for (RouteStartupOrder order : routes) {
                         for (Service service : order.getServices()) {
-                            prepareShutdown(service, true, true, isSuppressLoggingOnTimeout());
+                            prepareShutdown(service, false, true, true, isSuppressLoggingOnTimeout());
                         }
                     }
                 } else {
@@ -430,14 +434,14 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
     }
 
     /**
-     * Prepares the services for shutdown, by invoking the {@link ShutdownPrepared#prepareShutdown(boolean)} method
+     * Prepares the services for shutdown, by invoking the {@link ShutdownPrepared#prepareShutdown(boolean, boolean)} method
      * on the service if it implement this interface.
      *
      * @param service the service
      * @param forced  whether to force shutdown
      * @param includeChildren whether to prepare the child of the service as well
      */
-    private static void prepareShutdown(Service service, boolean forced, boolean includeChildren, boolean suppressLogging) {
+    private static void prepareShutdown(Service service, boolean suspendOnly, boolean forced, boolean includeChildren, boolean suppressLogging) {
         Set<Service> list;
         if (includeChildren) {
             // include error handlers as we want to prepare them for shutdown as well
@@ -451,7 +455,7 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
             if (child instanceof ShutdownPrepared) {
                 try {
                     LOG.trace("Preparing {} shutdown on {}", forced ? "forced" : "", child);
-                    ((ShutdownPrepared) child).prepareShutdown(forced);
+                    ((ShutdownPrepared) child).prepareShutdown(suspendOnly, forced);
                 } catch (Exception e) {
                     if (suppressLogging) {
                         LOG.trace("Error during prepare shutdown on " + child + ". This exception will be ignored.", e);
@@ -580,7 +584,7 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
                     if (service instanceof Consumer) {
                         continue;
                     }
-                    prepareShutdown(service, false, true, false);
+                    prepareShutdown(service, suspendOnly, false, true, false);
                 }
             }
 
@@ -643,7 +647,7 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
                     LOG.trace("Route: {} preparing to shutdown.", deferred.getRoute().getId());
                     boolean forced = context.getShutdownStrategy().forceShutdown(consumer);
                     boolean suppress = context.getShutdownStrategy().isSuppressLoggingOnTimeout();
-                    prepareShutdown(consumer, forced, false, suppress);
+                    prepareShutdown(consumer, suspendOnly, forced, false, suppress);
                     LOG.debug("Route: {} preparing to shutdown complete.", deferred.getRoute().getId());
                 }
             }
@@ -665,7 +669,7 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
                 for (Service service : order.getServices()) {
                     boolean forced = context.getShutdownStrategy().forceShutdown(service);
                     boolean suppress = context.getShutdownStrategy().isSuppressLoggingOnTimeout();
-                    prepareShutdown(service, forced, true, suppress);
+                    prepareShutdown(service, suspendOnly, forced, true, suppress);
                 }
             }
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/main/java/org/apache/camel/impl/ScheduledBatchPollingConsumer.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/ScheduledBatchPollingConsumer.java b/camel-core/src/main/java/org/apache/camel/impl/ScheduledBatchPollingConsumer.java
index b16a5c4..a39263c 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/ScheduledBatchPollingConsumer.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/ScheduledBatchPollingConsumer.java
@@ -77,7 +77,7 @@ public abstract class ScheduledBatchPollingConsumer extends ScheduledPollConsume
     }
 
     @Override
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
         // reset task as the state of the task is not to be preserved
         // which otherwise may cause isBatchAllowed() to return a wrong answer
         this.shutdownRunningTask = null;

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java b/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
index d15d2a1..04784eb 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/RedeliveryErrorHandler.java
@@ -323,7 +323,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport impleme
     }
 
     @Override
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
         // prepare for shutdown, eg do not allow redelivery if configured
         log.trace("Prepare shutdown on error handler {}", this);
         preparingShutdown = true;

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java b/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
index 4e3403c..5c400f6 100644
--- a/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
+++ b/camel-core/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
@@ -1381,7 +1381,7 @@ public class AggregateProcessor extends ServiceSupport implements AsyncProcessor
     }
 
     @Override
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
         // we are shutting down, so force completion if this option was enabled
         // but only do this when forced=false, as that is when we have chance to
         // send out new messages to be routed by Camel. When forced=true, then

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java b/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
index 2721d7b..b6f1dd9 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
@@ -42,8 +42,9 @@ public interface ShutdownPrepared {
      * For forced shutdown, then the service is expected to aggressively shutdown any child services, such
      * as thread pools etc. This is the last chance it has to perform such duties.
      * 
-     * @param forced <tt>true</tt> is forcing a more aggressive shutdown, <tt>false</tt> is for preparing to shutdown. 
+     * @param suspendOnly <tt>true</tt> if the intention is to only suspend the service, and not stop/shutdown the service.
+     * @param forced <tt>true</tt> is forcing a more aggressive shutdown, <tt>false</tt> is for preparing to shutdown.
      */
-    void prepareShutdown(boolean forced);
+    void prepareShutdown(boolean suspendOnly, boolean forced);
 
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteStartupOrderTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteStartupOrderTest.java b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteStartupOrderTest.java
index 9eea103..a8c4c1a 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteStartupOrderTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteStartupOrderTest.java
@@ -41,6 +41,10 @@ public class DefaultCamelContextSuspendResumeRouteStartupOrderTest extends Conte
         resetMocks();
         mock.expectedMessageCount(0);
         context.suspend();
+
+        // need to give seda consumer thread time to idle
+        Thread.sleep(500);
+
         template.sendBody("seda:foo", "B");
         mock.assertIsSatisfied(1000);
 

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteTest.java b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteTest.java
index fd4db6d..f7b6643 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/DefaultCamelContextSuspendResumeRouteTest.java
@@ -40,8 +40,14 @@ public class DefaultCamelContextSuspendResumeRouteTest extends ContextTestSuppor
         // now suspend and dont expect a message to be routed
         resetMocks();
         mock.expectedMessageCount(0);
+
         context.suspend();
+
+        // need to give seda consumer thread time to idle
+        Thread.sleep(500);
+
         template.sendBody("seda:foo", "B");
+
         mock.assertIsSatisfied(1000);
 
         assertTrue(context.isSuspended());

http://git-wip-us.apache.org/repos/asf/camel/blob/e75d37b3/camel-core/src/test/java/org/apache/camel/impl/TwoRouteSuspendResumeTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/TwoRouteSuspendResumeTest.java b/camel-core/src/test/java/org/apache/camel/impl/TwoRouteSuspendResumeTest.java
index 1c36f48..5f9f4ea 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/TwoRouteSuspendResumeTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/TwoRouteSuspendResumeTest.java
@@ -44,6 +44,9 @@ public class TwoRouteSuspendResumeTest extends ContextTestSupport {
 
         context.suspendRoute("foo");
 
+        // need to give seda consumer thread time to idle
+        Thread.sleep(500);
+
         template.sendBody("seda:foo", "B");
         template.sendBody("direct:bar", "C");
 


[3/8] camel git commit: CAMEL-7800: camel-swagger-java - work in progress

Posted by da...@apache.org.
CAMEL-7800: camel-swagger-java - work in progress


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/c909f163
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/c909f163
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/c909f163

Branch: refs/heads/master
Commit: c909f163b0c73ceabae22d9d66f2279660c969b3
Parents: bd022bc
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 09:28:09 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 09:28:09 2015 +0200

----------------------------------------------------------------------
 .../apache/camel/component/rest/FromRestExplicitComponentTest.java  | 1 +
 .../apache/camel/component/rest/FromRestIdAndDescriptionTest.java   | 1 +
 2 files changed, 2 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/c909f163/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java
index 9db9cab..74164c5 100644
--- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestExplicitComponentTest.java
@@ -41,6 +41,7 @@ public class FromRestExplicitComponentTest extends FromRestGetTest {
                         .defaultValue("b").allowMultiple(true).name("header_letter").required(false).access("acc2")
                         .endParam()
                         .responseMessage().code(300).message("test msg").responseModel(Integer.class).endResponseMessage()
+                        .responseMessage().code("error").message("does not work").endResponseMessage()
                         .to("direct:bye")
                         .post().to("mock:update");
 

http://git-wip-us.apache.org/repos/asf/camel/blob/c909f163/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java
index b42d7bf..8f6c69a 100644
--- a/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java
+++ b/camel-core/src/test/java/org/apache/camel/component/rest/FromRestIdAndDescriptionTest.java
@@ -59,6 +59,7 @@ public class FromRestIdAndDescriptionTest extends FromRestGetTest {
                         .defaultValue("b").allowMultiple(true).name("header_letter").required(false).access("acc2")
                         .endParam()
                         .responseMessage().code(300).message("test msg").responseModel(Integer.class).endResponseMessage()
+                        .responseMessage().code("error").message("does not work").endResponseMessage()
                         .to("direct:bye")
                         .post().description("Updates the bye message").to("mock:update");
 


[7/8] camel git commit: Polished

Posted by da...@apache.org.
Polished


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/205f1dc5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/205f1dc5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/205f1dc5

Branch: refs/heads/master
Commit: 205f1dc5916e095186ea57fb744a0d0873ae73e0
Parents: d3c654f
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 10:26:17 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 10:26:17 2015 +0200

----------------------------------------------------------------------
 .../processor/validation/DefaultValidationErrorHandlerTest.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/205f1dc5/camel-core/src/test/java/org/apache/camel/processor/validation/DefaultValidationErrorHandlerTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/processor/validation/DefaultValidationErrorHandlerTest.java b/camel-core/src/test/java/org/apache/camel/processor/validation/DefaultValidationErrorHandlerTest.java
index f27a0e2..6bf3310 100644
--- a/camel-core/src/test/java/org/apache/camel/processor/validation/DefaultValidationErrorHandlerTest.java
+++ b/camel-core/src/test/java/org/apache/camel/processor/validation/DefaultValidationErrorHandlerTest.java
@@ -96,7 +96,7 @@ public class DefaultValidationErrorHandlerTest extends ContextTestSupport {
             assertTrue(e.getMessage().contains("errors: ["));
             assertTrue(e.getMessage().contains("org.xml.sax.SAXParseException: foo, Line : 3, Column : 5"));
             assertTrue(e.getMessage().contains("org.xml.sax.SAXParseException: bar, Line : 9, Column : 12"));
-            assertTrue(e.getMessage().contains("Exchange[null]"));
+            assertTrue(e.getMessage().contains("Exchange[]"));
         }
     }
 
@@ -123,7 +123,7 @@ public class DefaultValidationErrorHandlerTest extends ContextTestSupport {
             assertTrue(e.getMessage().contains("errors: ["));
             assertTrue(e.getMessage().contains("org.xml.sax.SAXParseException: foo, Line : 3, Column : 5"));
             assertTrue(e.getMessage().contains("org.xml.sax.SAXParseException: bar, Line : 9, Column : 12"));
-            assertTrue(e.getMessage().contains("Exchange[null]"));
+            assertTrue(e.getMessage().contains("Exchange[]"));
         }
     }
 


[6/8] camel git commit: CAMEL-9150: Seda suspend/resume should not trigger start/stop logic. Requires a little api change.

Posted by da...@apache.org.
CAMEL-9150: Seda suspend/resume should not trigger start/stop logic. Requires a little api change.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d3c654f6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d3c654f6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d3c654f6

Branch: refs/heads/master
Commit: d3c654f6816459f76ea572e57cb9d2c05015ed3f
Parents: e75d37b
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 10:17:33 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 10:17:33 2015 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/camel/spi/ShutdownPrepared.java  | 7 +++++--
 .../apache/camel/component/disruptor/DisruptorConsumer.java   | 3 +--
 .../org/apache/camel/component/kestrel/KestrelConsumer.java   | 2 +-
 .../component/routebox/direct/RouteboxDirectConsumer.java     | 2 +-
 .../camel/component/routebox/seda/RouteboxSedaConsumer.java   | 7 +++++--
 5 files changed, 13 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/d3c654f6/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java b/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
index b6f1dd9..c65e925 100644
--- a/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
+++ b/camel-core/src/main/java/org/apache/camel/spi/ShutdownPrepared.java
@@ -30,15 +30,18 @@ package org.apache.camel.spi;
 public interface ShutdownPrepared {
 
     /**
-     * Prepares for shutdown.
+     * Prepares for stop/shutdown.
      * <p/>
      * The {@link ShutdownStrategy} supports preparing for shutdown using two steps.
      * First a regular preparation, where the given forced parameter will be <tt>false</tt>.
      * And if the shutdown times out, then the {@link ShutdownStrategy} performs a more aggressive
      * shutdown, calling this method a second time with <tt>true</tt> for the given forced parameter.
-     * <p/>
      * For example by graceful stopping any threads or the likes.
      * <p/>
+     * In addition a service can also be suspended (not stopped), and when this happens the parameter
+     * <tt>suspendOnly</tt> has the value <tt>true</tt>. This can be used to prepare the service
+     * for suspension, such as marking a worker thread to skip action.
+     * <p/>
      * For forced shutdown, then the service is expected to aggressively shutdown any child services, such
      * as thread pools etc. This is the last chance it has to perform such duties.
      * 

http://git-wip-us.apache.org/repos/asf/camel/blob/d3c654f6/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
index a59f077..3806d50 100644
--- a/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
+++ b/components/camel-disruptor/src/main/java/org/apache/camel/component/disruptor/DisruptorConsumer.java
@@ -14,7 +14,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package org.apache.camel.component.disruptor;
 
 import java.util.HashSet;
@@ -114,7 +113,7 @@ public class DisruptorConsumer extends ServiceSupport implements Consumer, Suspe
     }
 
     @Override
-    public void prepareShutdown(final boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
         // nothing
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/d3c654f6/components/camel-kestrel/src/main/java/org/apache/camel/component/kestrel/KestrelConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-kestrel/src/main/java/org/apache/camel/component/kestrel/KestrelConsumer.java b/components/camel-kestrel/src/main/java/org/apache/camel/component/kestrel/KestrelConsumer.java
index 71ed5b1..dd592d3 100644
--- a/components/camel-kestrel/src/main/java/org/apache/camel/component/kestrel/KestrelConsumer.java
+++ b/components/camel-kestrel/src/main/java/org/apache/camel/component/kestrel/KestrelConsumer.java
@@ -106,7 +106,7 @@ public class KestrelConsumer extends DefaultConsumer implements ShutdownAware {
     }
 
     @Override
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
         // Signal to our threads that shutdown is happening
         shutdownPending = true;
 

http://git-wip-us.apache.org/repos/asf/camel/blob/d3c654f6/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/direct/RouteboxDirectConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/direct/RouteboxDirectConsumer.java b/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/direct/RouteboxDirectConsumer.java
index bee0980..5d557d4 100644
--- a/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/direct/RouteboxDirectConsumer.java
+++ b/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/direct/RouteboxDirectConsumer.java
@@ -96,7 +96,7 @@ public class RouteboxDirectConsumer extends RouteboxServiceSupport implements Ro
     }
 
     @Override
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
         // noop
     }
     

http://git-wip-us.apache.org/repos/asf/camel/blob/d3c654f6/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/seda/RouteboxSedaConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/seda/RouteboxSedaConsumer.java b/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/seda/RouteboxSedaConsumer.java
index 32dc64f..0bb9ca3 100644
--- a/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/seda/RouteboxSedaConsumer.java
+++ b/components/camel-routebox/src/main/java/org/apache/camel/component/routebox/seda/RouteboxSedaConsumer.java
@@ -118,12 +118,15 @@ public class RouteboxSedaConsumer extends RouteboxServiceSupport implements Rout
     }
 
     public int getPendingExchangesSize() {
-        // TODO: Get size of queue
+        BlockingQueue<Exchange> queue = ((RouteboxSedaEndpoint)getRouteboxEndpoint()).getQueue();
+        if (queue != null) {
+            return queue.size();
+        }
         return 0;
     }
 
     @Override
-    public void prepareShutdown(boolean forced) {
+    public void prepareShutdown(boolean suspendOnly, boolean forced) {
     }
     
     public void setProcessor(AsyncProcessor processor) {


[8/8] camel git commit: CAMEL-9150: Seda suspend/resume should not trigger start/stop logic

Posted by da...@apache.org.
CAMEL-9150: Seda suspend/resume should not trigger start/stop logic


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/969f2903
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/969f2903
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/969f2903

Branch: refs/heads/master
Commit: 969f29034d73e0ddee78cc41e9ba75e7f89d19de
Parents: 205f1dc
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 10:27:01 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 10:27:01 2015 +0200

----------------------------------------------------------------------
 .../java/org/apache/camel/impl/RouteSedaSuspendResumeTest.java    | 3 +++
 1 file changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/969f2903/camel-core/src/test/java/org/apache/camel/impl/RouteSedaSuspendResumeTest.java
----------------------------------------------------------------------
diff --git a/camel-core/src/test/java/org/apache/camel/impl/RouteSedaSuspendResumeTest.java b/camel-core/src/test/java/org/apache/camel/impl/RouteSedaSuspendResumeTest.java
index cc103ee..94937b4 100644
--- a/camel-core/src/test/java/org/apache/camel/impl/RouteSedaSuspendResumeTest.java
+++ b/camel-core/src/test/java/org/apache/camel/impl/RouteSedaSuspendResumeTest.java
@@ -48,6 +48,9 @@ public class RouteSedaSuspendResumeTest extends ContextTestSupport {
             assertEquals("Suspended", ((StatefulService) route).getStatus().name());
         }
 
+        // need to give seda consumer thread time to idle
+        Thread.sleep(500);
+
         template.sendBody("seda:foo", "B");
         mock.assertIsSatisfied(1000);
 


[4/8] camel git commit: Polished

Posted by da...@apache.org.
Polished


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/20ec49a6
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/20ec49a6
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/20ec49a6

Branch: refs/heads/master
Commit: 20ec49a628a5e1ef0eeef241113b8404afed29fd
Parents: c909f16
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 09:47:39 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 09:47:39 2015 +0200

----------------------------------------------------------------------
 .../src/main/java/org/apache/camel/impl/DefaultExchange.java       | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/20ec49a6/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
----------------------------------------------------------------------
diff --git a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
index 05ffd76..58aa50b 100644
--- a/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
+++ b/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
@@ -80,7 +80,7 @@ public final class DefaultExchange implements Exchange {
 
     @Override
     public String toString() {
-        return String.format("Exchange[%s][%s]", exchangeId, out == null ? in : out);
+        return String.format("Exchange[%s][%s]", exchangeId == null ? "" : exchangeId, out == null ? in : out);
     }
 
     public Exchange copy() {


[2/8] camel git commit: CAMEL-9131: Add more labels to Camel components for options.

Posted by da...@apache.org.
CAMEL-9131: Add more labels to Camel components for options.


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/bd022bc5
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/bd022bc5
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/bd022bc5

Branch: refs/heads/master
Commit: bd022bc560686dbeafbbc12155fb77cc9f257d8c
Parents: de2aab1
Author: Claus Ibsen <da...@apache.org>
Authored: Tue Sep 22 09:26:28 2015 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Tue Sep 22 09:26:28 2015 +0200

----------------------------------------------------------------------
 .../component/netty/NettyConfiguration.java     | 32 +++++++-------
 .../NettyServerBootstrapConfiguration.java      | 44 ++++++++++----------
 2 files changed, 38 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/bd022bc5/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
index 5a148c0..3c0a82f 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyConfiguration.java
@@ -60,45 +60,45 @@ public class NettyConfiguration extends NettyServerBootstrapConfiguration implem
     private List<ChannelHandler> decoders = new ArrayList<ChannelHandler>();
     @UriParam
     private boolean disconnect;
-    @UriParam(label = "producer", defaultValue = "true")
+    @UriParam(label = "producer,advanced", defaultValue = "true")
     private boolean lazyChannelCreation = true;
-    @UriParam
+    @UriParam(label = "advanced")
     private boolean transferExchange;
     @UriParam(label = "consumer", defaultValue = "true")
     private boolean disconnectOnNoReply = true;
-    @UriParam(label = "consumer", defaultValue = "WARN")
+    @UriParam(label = "consumer,advanced", defaultValue = "WARN")
     private LoggingLevel noReplyLogLevel = LoggingLevel.WARN;
-    @UriParam(label = "consumer", defaultValue = "WARN")
+    @UriParam(label = "consumer,advanced", defaultValue = "WARN")
     private LoggingLevel serverExceptionCaughtLogLevel = LoggingLevel.WARN;
-    @UriParam(label = "consumer", defaultValue = "DEBUG")
+    @UriParam(label = "consumer,advanced", defaultValue = "DEBUG")
     private LoggingLevel serverClosedChannelExceptionCaughtLogLevel = LoggingLevel.DEBUG;
     @UriParam(defaultValue = "true")
     private boolean allowDefaultCodec = true;
-    @UriParam(label = "producer")
+    @UriParam(label = "producer,advanced")
     private ClientPipelineFactory clientPipelineFactory;
     //CAMEL-8031 Moved this option to NettyComponent
     private int maximumPoolSize = 16;
-    @UriParam(label = "consumer", defaultValue = "true")
+    @UriParam(label = "consumer,advanced", defaultValue = "true")
     private boolean orderedThreadPoolExecutor = true;
-    @UriParam(label = "producer", defaultValue = "-1")
+    @UriParam(label = "producer,advanced", defaultValue = "-1")
     private int producerPoolMaxActive = -1;
-    @UriParam(label = "producer")
+    @UriParam(label = "producer,advanced")
     private int producerPoolMinIdle;
-    @UriParam(label = "producer", defaultValue = "100")
+    @UriParam(label = "producer,advanced", defaultValue = "100")
     private int producerPoolMaxIdle = 100;
-    @UriParam(label = "producer", defaultValue = "" + 5 * 60 * 1000L)
+    @UriParam(label = "producer,advanced", defaultValue = "" + 5 * 60 * 1000L)
     private long producerPoolMinEvictableIdle = 5 * 60 * 1000L;
-    @UriParam(label = "producer", defaultValue = "true")
+    @UriParam(label = "producer,advanced", defaultValue = "true")
     private boolean producerPoolEnabled = true;
-    @UriParam(label = "producer")
+    @UriParam(label = "producer,advanced")
     private boolean udpConnectionlessSending;
     @UriParam(label = "consumer")
     private boolean clientMode;
-    @UriParam(label = "producer")
+    @UriParam(label = "producer,advanced")
     private boolean useChannelBuffer;
-    @UriParam(label = "consumer", defaultValue = "" + 10 * 1024 * 1024L)
+    @UriParam(label = "consumer,advanced", defaultValue = "" + 10 * 1024 * 1024L)
     private long maxChannelMemorySize = 10 * 1024 * 1024L; 
-    @UriParam(label = "consumer", defaultValue = "" + 200 * 1024 * 1024L)
+    @UriParam(label = "consumer,advanced", defaultValue = "" + 200 * 1024 * 1024L)
     private long maxTotalMemorySize = 200 * 1024 * 1024L;
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/bd022bc5/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapConfiguration.java
----------------------------------------------------------------------
diff --git a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapConfiguration.java b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapConfiguration.java
index 9832192..b33d1d5 100644
--- a/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapConfiguration.java
+++ b/components/camel-netty/src/main/java/org/apache/camel/component/netty/NettyServerBootstrapConfiguration.java
@@ -41,15 +41,15 @@ public class NettyServerBootstrapConfiguration implements Cloneable {
     protected int port;
     @UriParam(label = "consumer")
     protected boolean broadcast;
-    @UriParam(defaultValue = "65536")
+    @UriParam(label = "advanced", defaultValue = "65536")
     protected long sendBufferSize = 65536;
-    @UriParam(defaultValue = "65536")
+    @UriParam(label = "advanced", defaultValue = "65536")
     protected long receiveBufferSize = 65536;
-    @UriParam
+    @UriParam(label = "advanced")
     protected int receiveBufferSizePredictor;
-    @UriParam(label = "consumer", defaultValue = "1")
+    @UriParam(label = "consumer,advanced", defaultValue = "1")
     protected int bossCount = 1;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer,advanced")
     protected int workerCount;
     @UriParam(defaultValue = "true")
     protected boolean keepAlive = true;
@@ -59,43 +59,43 @@ public class NettyServerBootstrapConfiguration implements Cloneable {
     protected boolean reuseAddress = true;
     @UriParam(label = "producer", defaultValue = "10000")
     protected long connectTimeout = 10000;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer,advanced")
     protected int backlog;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer,advanced")
     protected ServerPipelineFactory serverPipelineFactory;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer,advanced")
     protected NettyServerBootstrapFactory nettyServerBootstrapFactory;
     protected Map<String, Object> options;
     // SSL options is also part of the server bootstrap as the server listener on port X is either plain or SSL
-    @UriParam
+    @UriParam(label = "security")
     protected boolean ssl;
-    @UriParam
+    @UriParam(label = "security")
     protected boolean sslClientCertHeaders;
-    @UriParam
+    @UriParam(label = "security")
     protected SslHandler sslHandler;
-    @UriParam
+    @UriParam(label = "security")
     protected SSLContextParameters sslContextParameters;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer,security")
     protected boolean needClientAuth;
-    @UriParam
+    @UriParam(label = "security")
     protected File keyStoreFile;
-    @UriParam
+    @UriParam(label = "security")
     protected File trustStoreFile;
-    @UriParam
+    @UriParam(label = "security")
     protected String keyStoreResource;
-    @UriParam
+    @UriParam(label = "security")
     protected String trustStoreResource;
-    @UriParam(defaultValue = "JKS")
+    @UriParam(defaultValue = "JKS", label = "security")
     protected String keyStoreFormat = "JKS";
-    @UriParam(defaultValue = "SunX509")
+    @UriParam(defaultValue = "SunX509", label = "security")
     protected String securityProvider = "SunX509";
-    @UriParam(defaultValue = DEFAULT_ENABLED_PROTOCOLS)
+    @UriParam(defaultValue = DEFAULT_ENABLED_PROTOCOLS, label = "security")
     protected String enabledProtocols = DEFAULT_ENABLED_PROTOCOLS;
-    @UriParam
+    @UriParam(label = "security")
     protected String passphrase;
     protected BossPool bossPool;
     protected WorkerPool workerPool;
-    @UriParam(label = "consumer")
+    @UriParam(label = "consumer,advanced")
     protected String networkInterface;
     
     public String getAddress() {