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 <[email protected]> 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 {
