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/08/04 10:09:49 UTC

[camel] branch main updated (22883ba -> 6d3febd)

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

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


    from 22883ba  Regen
     new cf74942  CAMEL-16757: Polished logging
     new 6d3febd  CAMEL-16757: Route now stores correctly which route configuration it has been applied with.

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../src/main/java/org/apache/camel/Route.java      |  2 +-
 .../org/apache/camel/model/RouteDefinition.java    | 36 ++++++++++++++++++++--
 .../org/apache/camel/model/RoutesDefinition.java   | 27 +++++++++-------
 .../org/apache/camel/reifier/RouteReifier.java     |  5 +--
 .../core/xml/AbstractCamelContextFactoryBean.java  | 26 ++++++++++------
 .../RoutesConfigurationBuilderIdOrPatternTest.java | 21 ++++++++++---
 6 files changed, 86 insertions(+), 31 deletions(-)

[camel] 01/02: CAMEL-16757: Polished logging

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit cf74942da43d008aea33943b1fc7253cc1f4e6ac
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 4 11:20:13 2021 +0200

    CAMEL-16757: Polished logging
---
 .../src/main/java/org/apache/camel/Route.java      |  2 +-
 .../org/apache/camel/model/RouteDefinition.java    | 29 +++++++++++++++++++---
 .../org/apache/camel/model/RoutesDefinition.java   | 12 ++++-----
 .../org/apache/camel/reifier/RouteReifier.java     |  5 ++--
 .../core/xml/AbstractCamelContextFactoryBean.java  | 11 ++++----
 5 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/Route.java b/core/camel-api/src/main/java/org/apache/camel/Route.java
index 27e5e84..5c0dddf 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Route.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Route.java
@@ -117,7 +117,7 @@ public interface Route extends RuntimeConfiguration {
     String getDescription();
 
     /**
-     * Gets the route configuration id(s) (if any has been configured).
+     * Gets the route configuration id(s) the route has been applied with. Multiple ids is separated by comma.
      * <p/>
      * The configuration ids is configured using the {@link #CONFIGURATION_ID_PROPERTY} as key in the
      * {@link #getProperties()}.
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
index 40ef2e1..6373a26 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
@@ -18,8 +18,10 @@ package org.apache.camel.model;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.function.Supplier;
 
@@ -58,6 +60,7 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> implement
     private final AtomicBoolean prepared = new AtomicBoolean();
     private FromDefinition input;
     private String routeConfigurationId;
+    private transient Set<String> appliedRouteConfigurationIds;
     private String group;
     private String streamCache;
     private String trace;
@@ -130,9 +133,6 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> implement
 
     /**
      * Marks the route definition as un-prepared.
-     * <p/>
-     * This is needed if routes have been created by components such as <tt>camel-scala</tt>. To unset the prepare so
-     * the routes can be prepared at a later stage when scala has build the routes completely.
      */
     public void markUnprepared() {
         prepared.set(false);
@@ -748,6 +748,29 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> implement
     }
 
     /**
+     * This is used internally by Camel to keep track which route configurations is applied when creating a route from
+     * this model.
+     *
+     * This method is not intended for Camel end users.
+     */
+    public void addAppliedRouteConfigurationId(String routeConfigurationId) {
+        if (appliedRouteConfigurationIds == null) {
+            appliedRouteConfigurationIds = new LinkedHashSet<>();
+        }
+        appliedRouteConfigurationIds.add(routeConfigurationId);
+    }
+
+    /**
+     * This is used internally by Camel to keep track which route configurations is applied when creating a route from
+     * this model.
+     *
+     * This method is not intended for Camel end users.
+     */
+    public Set<String> getAppliedRouteConfigurationIds() {
+        return appliedRouteConfigurationIds;
+    }
+
+    /**
      * The group that this route belongs to; could be the name of the RouteBuilder class or be explicitly configured in
      * the XML.
      * <p/>
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
index 3a2ff21..f764bc6 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
@@ -17,9 +17,7 @@
 package org.apache.camel.model;
 
 import java.util.ArrayList;
-import java.util.LinkedHashSet;
 import java.util.List;
-import java.util.Set;
 
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -226,7 +224,6 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
         List<InterceptFromDefinition> ifrom = new ArrayList<>(interceptFroms);
         List<InterceptSendToEndpointDefinition> ito = new ArrayList<>(interceptSendTos);
         List<OnCompletionDefinition> oc = new ArrayList<>(onCompletions);
-        Set<String> matchedIds = new LinkedHashSet<>();
         if (getCamelContext() != null) {
             List<RouteConfigurationDefinition> globalConfigurations
                     = getCamelContext().adapt(ModelCamelContext.class).getRouteConfigurationDefinitions();
@@ -238,8 +235,8 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
                                 || (PatternHelper.matchPattern(g.getId(), route.getRouteConfigurationId())))
                         .forEach(g -> {
                             if (g.getId() != null && !g.getId().equals("*")) {
-                                // remember the id that was used
-                                matchedIds.add(g.getId());
+                                // remember the id that was used on the route
+                                route.addAppliedRouteConfigurationId(g.getId());
                             }
                             oe.addAll(g.getOnExceptions());
                             icp.addAll(g.getIntercepts());
@@ -253,8 +250,9 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
         // must prepare the route before we can add it to the routes list
         RouteDefinitionHelper.prepareRoute(getCamelContext(), route, oe, icp, ifrom, ito, oc);
 
-        if (LOG.isDebugEnabled() && route.getRouteConfigurationId() != null) {
-            LOG.debug("Route: {} is using route configurations ids: {}", route.getId(), matchedIds);
+        if (LOG.isDebugEnabled() && route.getAppliedRouteConfigurationIds() != null) {
+            LOG.debug("Route: {} is using route configurations ids: {}", route.getId(),
+                    route.getAppliedRouteConfigurationIds());
         }
 
         // mark this route as prepared
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 f921817..d55b699 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
@@ -373,8 +373,9 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         routeProperties.put(Route.REST_PROPERTY, rest);
         String template = Boolean.toString(definition.isTemplate() != null && definition.isTemplate());
         routeProperties.put(Route.TEMPLATE_PROPERTY, template);
-        if (definition.getRouteConfigurationId() != null) {
-            routeProperties.put(Route.CONFIGURATION_ID_PROPERTY, definition.getRouteConfigurationId());
+        if (definition.getAppliedRouteConfigurationIds() != null) {
+            routeProperties.put(Route.CONFIGURATION_ID_PROPERTY,
+                    String.join(",", definition.getAppliedRouteConfigurationIds()));
         }
 
         List<PropertyDefinition> properties = definition.getRouteProperties();
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 91731bc..7516f2a 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -19,7 +19,6 @@ package org.apache.camel.core.xml;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
-import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -559,7 +558,6 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             List<InterceptFromDefinition> ifrom = new ArrayList<>(getInterceptFroms());
             List<InterceptSendToEndpointDefinition> ito = new ArrayList<>(getInterceptSendToEndpoints());
             List<OnCompletionDefinition> oc = new ArrayList<>(getOnCompletions());
-            Set<String> matchedIds = new LinkedHashSet<>();
             if (getContext() != null) {
                 List<RouteConfigurationDefinition> globalConfigurations
                         = getContext().adapt(ModelCamelContext.class).getRouteConfigurationDefinitions();
@@ -571,8 +569,8 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
                                     || (PatternHelper.matchPattern(g.getId(), route.getRouteConfigurationId())))
                             .forEach(g -> {
                                 if (g.getId() != null && !g.getId().equals("*")) {
-                                    // remember the id that was used
-                                    matchedIds.add(g.getId());
+                                    // remember the id that was used on the route
+                                    route.addAppliedRouteConfigurationId(g.getId());
                                 }
                                 oe.addAll(g.getOnExceptions());
                                 icp.addAll(g.getIntercepts());
@@ -586,8 +584,9 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             // must prepare the route before we can add it to the routes list
             RouteDefinitionHelper.prepareRoute(getContext(), route, oe, icp, ifrom, ito, oc);
 
-            if (LOG.isDebugEnabled() && route.getRouteConfigurationId() != null) {
-                LOG.debug("Route: {} is using route configurations ids: {}", route.getId(), matchedIds);
+            if (LOG.isDebugEnabled() && route.getAppliedRouteConfigurationIds() != null) {
+                LOG.debug("Route: {} is using route configurations ids: {}", route.getId(),
+                        route.getAppliedRouteConfigurationIds());
             }
 
             // mark the route as prepared now

[camel] 02/02: CAMEL-16757: Route now stores correctly which route configuration it has been applied with.

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 6d3febd08495bfe85bf5b550e499f8069d55a66f
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 4 11:46:46 2021 +0200

    CAMEL-16757: Route now stores correctly which route configuration it has been applied with.
---
 .../org/apache/camel/model/RouteDefinition.java     |  7 +++++++
 .../org/apache/camel/model/RoutesDefinition.java    | 19 +++++++++++++------
 .../core/xml/AbstractCamelContextFactoryBean.java   | 19 +++++++++++++------
 .../RoutesConfigurationBuilderIdOrPatternTest.java  | 21 +++++++++++++++++----
 4 files changed, 50 insertions(+), 16 deletions(-)

diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
index 6373a26..d546772 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java
@@ -138,6 +138,13 @@ public class RouteDefinition extends OutputDefinition<RouteDefinition> implement
         prepared.set(false);
     }
 
+    /**
+     * Reset internal state before preparing route
+     */
+    public void resetPrepare() {
+        appliedRouteConfigurationIds = null;
+    }
+
     @Override
     public String toString() {
         if (getId() != null) {
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
index f764bc6..1df5154 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RoutesDefinition.java
@@ -218,6 +218,9 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
             return;
         }
 
+        // reset before preparing route
+        route.resetPrepare();
+
         // merge global and route scoped together
         List<OnExceptionDefinition> oe = new ArrayList<>(onExceptions);
         List<InterceptDefinition> icp = new ArrayList<>(intercepts);
@@ -231,13 +234,17 @@ public class RoutesDefinition extends OptionalIdentifiedDefinition<RoutesDefinit
                 globalConfigurations.stream()
                         // global configurations have no id assigned or is a wildcard
                         // if the route has a route configuration assigned then use pattern matching
-                        .filter(g -> (g.getId() == null || g.getId().equals("*"))
-                                || (PatternHelper.matchPattern(g.getId(), route.getRouteConfigurationId())))
-                        .forEach(g -> {
-                            if (g.getId() != null && !g.getId().equals("*")) {
-                                // remember the id that was used on the route
-                                route.addAppliedRouteConfigurationId(g.getId());
+                        .filter(g -> {
+                            if (route.getRouteConfigurationId() != null) {
+                                return PatternHelper.matchPattern(g.getId(), route.getRouteConfigurationId());
+                            } else {
+                                return g.getId() == null || g.getId().equals("*");
                             }
+                        })
+                        .forEach(g -> {
+                            String id = g.getId() == null ? "<default>" : g.getId();
+                            // remember the id that was used on the route
+                            route.addAppliedRouteConfigurationId(id);
                             oe.addAll(g.getOnExceptions());
                             icp.addAll(g.getIntercepts());
                             ifrom.addAll(g.getInterceptFroms());
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 7516f2a..ab8857b 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -552,6 +552,9 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
             // sanity check first as the route is created using XML
             RouteDefinitionHelper.sanityCheckRoute(route);
 
+            // reset before preparing route
+            route.resetPrepare();
+
             // merge global and route scoped together
             List<OnExceptionDefinition> oe = new ArrayList<>(getOnExceptions());
             List<InterceptDefinition> icp = new ArrayList<>(getIntercepts());
@@ -565,13 +568,17 @@ public abstract class AbstractCamelContextFactoryBean<T extends ModelCamelContex
                     globalConfigurations.stream()
                             // global configurations have no id assigned or is a wildcard
                             // if the route has a route configuration assigned then use pattern matching
-                            .filter(g -> (g.getId() == null || g.getId().equals("*"))
-                                    || (PatternHelper.matchPattern(g.getId(), route.getRouteConfigurationId())))
-                            .forEach(g -> {
-                                if (g.getId() != null && !g.getId().equals("*")) {
-                                    // remember the id that was used on the route
-                                    route.addAppliedRouteConfigurationId(g.getId());
+                            .filter(g -> {
+                                if (route.getRouteConfigurationId() != null) {
+                                    return PatternHelper.matchPattern(g.getId(), route.getRouteConfigurationId());
+                                } else {
+                                    return g.getId() == null || g.getId().equals("*");
                                 }
+                            })
+                            .forEach(g -> {
+                                String id = g.getId() == null ? "<default>" : g.getId();
+                                // remember the id that was used on the route
+                                route.addAppliedRouteConfigurationId(id);
                                 oe.addAll(g.getOnExceptions());
                                 icp.addAll(g.getIntercepts());
                                 ifrom.addAll(g.getInterceptFroms());
diff --git a/core/camel-core/src/test/java/org/apache/camel/model/RoutesConfigurationBuilderIdOrPatternTest.java b/core/camel-core/src/test/java/org/apache/camel/model/RoutesConfigurationBuilderIdOrPatternTest.java
index d79b4d0..809d5cd 100644
--- a/core/camel-core/src/test/java/org/apache/camel/model/RoutesConfigurationBuilderIdOrPatternTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/model/RoutesConfigurationBuilderIdOrPatternTest.java
@@ -30,6 +30,7 @@ import org.apache.camel.support.OrderedComparator;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.fail;
 
 public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSupport {
@@ -46,14 +47,14 @@ public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSuppor
         routes.add(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start")
+                from("direct:start").routeId("foo")
                         .throwException(new IllegalArgumentException("Foo"));
             }
         });
         routes.add(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start2")
+                from("direct:start2").routeId("foo2")
                         .routeConfigurationId("handleError")
                         .throwException(new IllegalArgumentException("Foo2"));
             }
@@ -93,6 +94,9 @@ public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSuppor
         template.sendBody("direct:start2", "Bye World");
 
         assertMockEndpointsSatisfied();
+
+        assertNull(context.getRoute("foo").getConfigurationId());
+        assertEquals("handleError", context.getRoute("foo2").getConfigurationId());
     }
 
     @Test
@@ -102,7 +106,7 @@ public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSuppor
         routes.add(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start")
+                from("direct:start").routeId("foo")
                         .routeConfigurationId("general*")
                         .throwException(new IllegalArgumentException("Foo"));
             }
@@ -110,7 +114,7 @@ public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSuppor
         routes.add(new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                from("direct:start2")
+                from("direct:start2").routeId("foo2")
                         .routeConfigurationId("io*")
                         .throwException(new IOException("Foo2"));
             }
@@ -148,6 +152,9 @@ public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSuppor
         template.sendBody("direct:start2", "Bye World");
 
         assertMockEndpointsSatisfied();
+
+        assertEquals("generalError", context.getRoute("foo").getConfigurationId());
+        assertEquals("ioError", context.getRoute("foo2").getConfigurationId());
     }
 
     @Test
@@ -201,6 +208,9 @@ public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSuppor
         template.sendBody("direct:start2", "Bye World");
         assertMockEndpointsSatisfied();
 
+        assertEquals("<default>", context.getRoute("foo").getConfigurationId());
+        assertEquals("<default>", context.getRoute("foo2").getConfigurationId());
+
         context.removeRoute("foo2");
 
         // now re-configure route2 to use ioError route configuration
@@ -219,6 +229,9 @@ public class RoutesConfigurationBuilderIdOrPatternTest extends ContextTestSuppor
         template.sendBody("direct:start", "Hello World");
         template.sendBody("direct:start2", "Bye World");
         assertMockEndpointsSatisfied();
+
+        assertEquals("<default>", context.getRoute("foo").getConfigurationId());
+        assertEquals("ioError", context.getRoute("foo2").getConfigurationId());
     }
 
     @Test