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/10/21 10:17:37 UTC
[camel] branch master updated: camel-core - Optimize routing engine
for isErrorHandlerHandled to be inlined
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
The following commit(s) were added to refs/heads/master by this push:
new f93f1e8 camel-core - Optimize routing engine for isErrorHandlerHandled to be inlined
f93f1e8 is described below
commit f93f1e8508b251caecec998707285f47b875effe
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Oct 21 12:16:50 2020 +0200
camel-core - Optimize routing engine for isErrorHandlerHandled to be inlined
---
.../src/main/java/org/apache/camel/ExtendedExchange.java | 9 +++++++++
.../org/apache/camel/impl/event/ExchangeFailureHandledEvent.java | 4 ++--
.../src/main/java/org/apache/camel/processor/PipelineHelper.java | 6 ++++--
.../processor/aggregate/ShareUnitOfWorkAggregationStrategy.java | 3 ++-
.../camel/processor/aggregate/UseLatestAggregationStrategy.java | 3 ++-
.../camel/processor/errorhandler/RedeliveryErrorHandler.java | 8 ++++----
.../processor/aggregator/BodyOnlyAggregationStrategyTest.java | 4 ----
.../src/main/java/org/apache/camel/support/DefaultExchange.java | 7 ++++++-
8 files changed, 29 insertions(+), 15 deletions(-)
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
index 714b504..bb0b523 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedExchange.java
@@ -141,10 +141,19 @@ public interface ExtendedExchange extends Exchange {
/**
* Whether the exchange has been handled by the error handler. This is used internally by Camel.
+ *
+ * Important: Call {@link #isErrorHandlerHandledSet()} first before this method.
+ *
+ * @see #isErrorHandlerHandledSet()
*/
boolean isErrorHandlerHandled();
/**
+ * Whether the error handler handled flag has been set.
+ */
+ boolean isErrorHandlerHandledSet();
+
+ /**
* Whether the exchange has been handled by the error handler. This is used internally by Camel.
*/
Boolean getErrorHandlerHandled();
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java b/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
index 4b97ec2..9bd4bb8 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/event/ExchangeFailureHandledEvent.java
@@ -36,8 +36,8 @@ public class ExchangeFailureHandledEvent extends AbstractExchangeEvent implement
this.failureHandler = failureHandler;
this.deadLetterChannel = deadLetterChannel;
this.deadLetterUri = deadLetterUri;
- this.handled = source.adapt(ExtendedExchange.class).getErrorHandlerHandled() != null
- && source.adapt(ExtendedExchange.class).getErrorHandlerHandled();
+ this.handled = source.adapt(ExtendedExchange.class).isErrorHandlerHandledSet()
+ && source.adapt(ExtendedExchange.class).isErrorHandlerHandled();
}
@Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/PipelineHelper.java b/core/camel-base/src/main/java/org/apache/camel/processor/PipelineHelper.java
index 2bf115b..cb37b16 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/PipelineHelper.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/PipelineHelper.java
@@ -40,7 +40,9 @@ public final class PipelineHelper {
*/
public static boolean continueProcessing(Exchange exchange, String message, Logger log) {
ExtendedExchange ee = (ExtendedExchange) exchange;
- if (ee.isFailed() || ee.isRollbackOnly() || ee.isRollbackOnlyLast() || ee.isErrorHandlerHandled()) {
+ boolean stop = ee.isFailed() || ee.isRollbackOnly() || ee.isRollbackOnlyLast()
+ || (ee.isErrorHandlerHandledSet() && ee.isErrorHandlerHandled());
+ if (stop) {
// The errorErrorHandler is only set if satisfactory handling was done
// by the error handler. It's still an exception, the exchange still failed.
if (log.isDebugEnabled()) {
@@ -52,7 +54,7 @@ public final class PipelineHelper {
if (exchange.getException() != null) {
sb.append(" Exception: ").append(exchange.getException());
}
- if (ee.isErrorHandlerHandled()) {
+ if (ee.isErrorHandlerHandledSet() && ee.isErrorHandlerHandled()) {
sb.append(" Handled by the error handler.");
}
log.debug(sb.toString());
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java b/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
index b03293b..0c6dffb 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
@@ -106,7 +106,8 @@ public final class ShareUnitOfWorkAggregationStrategy extends ServiceSupport imp
protected void propagateFailure(Exchange answer, Exchange newExchange) {
ExtendedExchange nee = (ExtendedExchange) newExchange;
// if new exchange failed then propagate all the error related properties to the answer
- if (nee.isFailed() || nee.isRollbackOnly() || nee.isRollbackOnlyLast() || nee.isErrorHandlerHandled()) {
+ if (nee.isFailed() || nee.isRollbackOnly() || nee.isRollbackOnlyLast()
+ || (nee.isErrorHandlerHandledSet() && nee.isErrorHandlerHandled())) {
if (newExchange.getException() != null) {
answer.setException(newExchange.getException());
}
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java b/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
index 8c7d784..c4272c4 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
@@ -71,7 +71,8 @@ public class UseLatestAggregationStrategy implements AggregationStrategy {
// propagate exception from old exchange if there isn't already an exception
ExtendedExchange oee = (ExtendedExchange) oldExchange;
- if (oee.isFailed() || oee.isRollbackOnly() || oee.isRollbackOnlyLast() || oee.isErrorHandlerHandled()) {
+ if (oee.isFailed() || oee.isRollbackOnly() || oee.isRollbackOnlyLast()
+ || (oee.isErrorHandlerHandledSet() && oee.isErrorHandlerHandled())) {
// propagate failure by using old exchange as the answer
return oldExchange;
}
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index f6cea74..1ac482d 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -469,9 +469,9 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
ExchangeHelper.setFailureHandled(exchange);
// honor if already set a handling
- boolean alreadySet = ee.getErrorHandlerHandled() != null;
+ boolean alreadySet = ee.isErrorHandlerHandledSet();
if (alreadySet) {
- boolean handled = ee.getErrorHandlerHandled() != null && ee.getErrorHandlerHandled();
+ boolean handled = ee.isErrorHandlerHandled();
LOG.trace("This exchange has already been marked for handling: {}", handled);
if (!handled) {
// exception not handled, put exception back in the exchange
@@ -1146,9 +1146,9 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport
ExchangeHelper.setFailureHandled(exchange);
// honor if already set a handling
- boolean alreadySet = ee.getErrorHandlerHandled() != null;
+ boolean alreadySet = ee.isErrorHandlerHandledSet();
if (alreadySet) {
- boolean handled = ee.getErrorHandlerHandled() != null && ee.getErrorHandlerHandled();
+ boolean handled = ee.isErrorHandlerHandled();
LOG.trace("This exchange has already been marked for handling: {}", handled);
if (!handled) {
// exception not handled, put exception back in the exchange
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java
index 0784642..ab577c8 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/aggregator/BodyOnlyAggregationStrategyTest.java
@@ -78,10 +78,6 @@ public class BodyOnlyAggregationStrategyTest extends ContextTestSupport {
oldExchange.adapt(ExtendedExchange.class).setErrorHandlerHandled(
newExchange.adapt(ExtendedExchange.class).getErrorHandlerHandled());
- // deprecated usage:
- // if (newExchange.getProperties().get(Exchange.ERRORHANDLER_HANDLED) != null) {
- // oldExchange.getProperties().put(Exchange.ERRORHANDLER_HANDLED, newExchange.getProperties().get(Exchange.ERRORHANDLER_HANDLED));
- //}
return oldExchange;
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java
index ccadefe..eff55ce 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/DefaultExchange.java
@@ -675,8 +675,13 @@ public final class DefaultExchange implements ExtendedExchange {
}
@Override
+ public boolean isErrorHandlerHandledSet() {
+ return errorHandlerHandled != null;
+ }
+
+ @Override
public boolean isErrorHandlerHandled() {
- return errorHandlerHandled != null && errorHandlerHandled;
+ return errorHandlerHandled;
}
@Override