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 2020/03/25 10:03:32 UTC

[camel] 02/02: CAMEL-14739: Fix core optimization would lose route detail on UoW when nesting down many routes.

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

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

commit 5776b7992627804b07aa1d50066b861327c1cccd
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Mar 25 10:55:47 2020 +0100

    CAMEL-14739: Fix core optimization would lose route detail on UoW when nesting down many routes.
---
 .../org/apache/camel/impl/engine/DefaultUnitOfWork.java  | 16 ++++++----------
 ...nExceptionErrorHandlerNoRouteOnExchangeIssueTest.java |  2 --
 2 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index 2b5167e..34a40e3 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.impl.engine;
 
+import java.util.ArrayDeque;
 import java.util.ArrayList;
+import java.util.Deque;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -24,7 +26,6 @@ import java.util.Set;
 import java.util.function.Predicate;
 
 import org.apache.camel.AsyncCallback;
-import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ExtendedExchange;
@@ -56,14 +57,13 @@ public class DefaultUnitOfWork implements UnitOfWork, Service {
     //   introduce a simpler UnitOfWork concept. This would also allow us to refactor the
     //   SubUnitOfWork into a general parent/child unit of work concept. However this
     //   requires API changes and thus is best kept for future Camel work
+    private final Deque<RouteContext> routes = new ArrayDeque<>(8);
     final InflightRepository inflightRepository;
     final boolean allowUseOriginalMessage;
     final boolean useBreadcrumb;
     private final Exchange exchange;
     private final ExtendedCamelContext context;
     private Logger log;
-    private RouteContext prevRouteContext;
-    private RouteContext routeContext;
     private List<Synchronization> synchronizations;
     private Message originalInMessage;
     private Set<Object> transactedBy;
@@ -288,21 +288,17 @@ public class DefaultUnitOfWork implements UnitOfWork, Service {
 
     @Override
     public RouteContext getRouteContext() {
-        return routeContext;
+        return routes.peek();
     }
 
     @Override
     public void pushRouteContext(RouteContext routeContext) {
-        this.prevRouteContext = this.routeContext;
-        this.routeContext = routeContext;
+        routes.push(routeContext);
     }
 
     @Override
     public RouteContext popRouteContext() {
-        RouteContext answer = this.routeContext;
-        this.routeContext = this.prevRouteContext;
-        this.prevRouteContext = null;
-        return answer;
+        return routes.poll();
     }
 
     @Override
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionErrorHandlerNoRouteOnExchangeIssueTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionErrorHandlerNoRouteOnExchangeIssueTest.java
index d91492e..108e181 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionErrorHandlerNoRouteOnExchangeIssueTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/OnExceptionErrorHandlerNoRouteOnExchangeIssueTest.java
@@ -20,7 +20,6 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
-import org.junit.Ignore;
 import org.junit.Test;
 
 public class OnExceptionErrorHandlerNoRouteOnExchangeIssueTest  extends ContextTestSupport {
@@ -38,7 +37,6 @@ public class OnExceptionErrorHandlerNoRouteOnExchangeIssueTest  extends ContextT
     }
 
     @Test
-    @Ignore("TODO: Fix me https://issues.apache.org/jira/browse/CAMEL-14739")
     public void testBug() throws Exception {
         String out = template.requestBody("direct:bug", null, String.class);
         assertEquals("general exception was properly handled", out);