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);