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 2021/01/20 11:20:29 UTC

[camel] 04/06: CAMEL-16056: Added StartupStep to diagnose startup exeuction times for various steps.

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 4f8a08b7dfa28d1338f63426dba21b89edfc1781
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jan 20 07:15:20 2021 +0100

    CAMEL-16056: Added StartupStep to diagnose startup exeuction times for various steps.
---
 .../main/java/org/apache/camel/reifier/ChoiceReifier.java   |  1 -
 .../java/org/apache/camel/reifier/ProcessorReifier.java     | 10 ++++++++--
 .../main/java/org/apache/camel/reifier/RouteReifier.java    | 13 ++++++++++++-
 .../java/org/apache/camel/impl/CustomIdFactoryTest.java     | 10 ++--------
 4 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ChoiceReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
index 54e5780..dc99340 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
@@ -63,7 +63,6 @@ public class ChoiceReifier extends ProcessorReifier<ChoiceDefinition> {
                         whenClause.setExpression((ExpressionDefinition) model);
                     }
                 }
-                exp = whenClause.getExpression();
             }
 
             FilterProcessor filter = (FilterProcessor) createProcessor(whenClause);
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 202fc8a..5805116 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -31,6 +31,7 @@ import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.StartupStep;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.BeanDefinition;
 import org.apache.camel.model.CatchDefinition;
@@ -797,16 +798,21 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
     }
 
     protected Processor createProcessor(ProcessorDefinition<?> output) throws Exception {
+        // ensure node has id assigned
+        String outputId = output.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
+        StartupStep step = camelContext.adapt(ExtendedCamelContext.class).getStartupStepRecorder().beginStep(ProcessorReifier.class, outputId, "Create processor");
+
         Processor processor = null;
         // at first use custom factory
         if (camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
             processor = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(route, output);
         }
-        // fallback to default implementation if factory did not create the
-        // processor
+        // fallback to default implementation if factory did not create the processor
         if (processor == null) {
             processor = reifier(route, output).createProcessor();
         }
+
+        camelContext.adapt(ExtendedCamelContext.class).getStartupStepRecorder().endStep(step);
         return processor;
     }
 
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
index 7d5e068..deb98a2 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -33,6 +33,7 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.ShutdownRoute;
 import org.apache.camel.ShutdownRunningTask;
+import org.apache.camel.StartupStep;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.PropertyDefinition;
@@ -224,7 +225,17 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         List<ProcessorDefinition<?>> list = new ArrayList<>(definition.getOutputs());
         for (ProcessorDefinition<?> output : list) {
             try {
-                ProcessorReifier.reifier(route, output).addRoutes();
+                ProcessorReifier reifier = ProcessorReifier.reifier(route, output);
+
+                // ensure node has id assigned
+                String outputId = output.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
+                String eip = reifier.getClass().getSimpleName().replace("Reifier", "");
+                StartupStep step = camelContext.adapt(ExtendedCamelContext.class).getStartupStepRecorder()
+                        .beginStep(Processor.class, outputId, "Creating " + eip + " processor");
+
+                reifier.addRoutes();
+
+                camelContext.adapt(ExtendedCamelContext.class).getStartupStepRecorder().endStep(step);
             } catch (Exception e) {
                 throw new FailedToCreateRouteException(definition.getId(), definition.toString(), output.toString(), e);
             }
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
index d60a4b3..6fbb55a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/CustomIdFactoryTest.java
@@ -23,7 +23,6 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.model.OptionalIdentifiedDefinition;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.NodeIdFactory;
 import org.apache.camel.support.processor.DelegateProcessor;
@@ -90,7 +89,7 @@ public class CustomIdFactoryTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
 
         // this should take the when path (first to)
-        assertEquals("#choice7##to2#", ids);
+        assertEquals("#choice2##to4#", ids);
     }
 
     /**
@@ -105,7 +104,7 @@ public class CustomIdFactoryTest extends ContextTestSupport {
         assertMockEndpointsSatisfied();
 
         // this should take the otherwise path
-        assertEquals("#choice7##log4##to6#", ids);
+        assertEquals("#choice2##log6##to7#", ids);
     }
 
     private static class MyDebuggerCheckingId implements InterceptStrategy {
@@ -115,11 +114,6 @@ public class CustomIdFactoryTest extends ContextTestSupport {
                 final CamelContext context, final NamedNode definition, Processor target, Processor nextTarget)
                 throws Exception {
 
-            // MUST DO THIS
-            // force id creation as sub nodes have lazy assigned ids
-            ((OptionalIdentifiedDefinition<?>) definition)
-                    .idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory());
-
             return new DelegateProcessor(target) {
                 @Override
                 protected void processNext(Exchange exchange) throws Exception {