This is an automated email from the ASF dual-hosted git repository. orpiske pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push: new 421206d2500 CAMEL-19060: move the isFailureHandled logic to a field in the ExchangeExtension to avoid costly operations 421206d2500 is described below commit 421206d2500c06807b7791ff894827bf1863393c Author: Otavio Rodolfo Piske <angusyo...@gmail.com> AuthorDate: Thu Feb 9 17:55:26 2023 +0100 CAMEL-19060: move the isFailureHandled logic to a field in the ExchangeExtension to avoid costly operations --- core/camel-api/src/main/java/org/apache/camel/Exchange.java | 1 + .../src/main/java/org/apache/camel/ExchangeExtension.java | 4 ++++ .../src/main/java/org/apache/camel/ExchangePropertyKey.java | 2 -- .../java/org/apache/camel/processor/OnCompletionProcessor.java | 6 +++--- .../aggregate/ShareUnitOfWorkAggregationStrategy.java | 5 +---- .../camel/processor/errorhandler/RedeliveryErrorHandler.java | 2 +- .../main/java/org/apache/camel/support/AbstractExchange.java | 1 + .../src/main/java/org/apache/camel/support/ExchangeHelper.java | 5 +++-- .../org/apache/camel/support/ExtendedExchangeExtension.java | 10 ++++++++++ .../modules/ROOT/pages/camel-4-migration-guide.adoc | 2 ++ 10 files changed, 26 insertions(+), 12 deletions(-) diff --git a/core/camel-api/src/main/java/org/apache/camel/Exchange.java b/core/camel-api/src/main/java/org/apache/camel/Exchange.java index 782f50749e8..2f69e1adc25 100644 --- a/core/camel-api/src/main/java/org/apache/camel/Exchange.java +++ b/core/camel-api/src/main/java/org/apache/camel/Exchange.java @@ -123,6 +123,7 @@ public interface Exchange { @Deprecated String EXTERNAL_REDELIVERED = "CamelExternalRedelivered"; + @Deprecated String FAILURE_HANDLED = "CamelFailureHandled"; String FAILURE_ENDPOINT = "CamelFailureEndpoint"; String FAILURE_ROUTE_ID = "CamelFailureRouteId"; diff --git a/core/camel-api/src/main/java/org/apache/camel/ExchangeExtension.java b/core/camel-api/src/main/java/org/apache/camel/ExchangeExtension.java index 9443b435b37..9ce5fa7a014 100644 --- a/core/camel-api/src/main/java/org/apache/camel/ExchangeExtension.java +++ b/core/camel-api/src/main/java/org/apache/camel/ExchangeExtension.java @@ -240,4 +240,8 @@ public interface ExchangeExtension { * This is only used when pooled exchange is enabled for optimization and reducing object allocations. */ void setDefaultConsumerCallback(AsyncCallback callback); + + boolean isFailureHandled(); + + void setFailureHandled(boolean failureHandled); } diff --git a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java index f254840d4f2..58b7ca6c215 100644 --- a/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java +++ b/core/camel-api/src/main/java/org/apache/camel/ExchangePropertyKey.java @@ -137,8 +137,6 @@ public enum ExchangePropertyKey { return EXCEPTION_HANDLED; case Exchange.FAILURE_ENDPOINT: return FAILURE_ENDPOINT; - case Exchange.FAILURE_HANDLED: - return FAILURE_HANDLED; case Exchange.FAILURE_ROUTE_ID: return FAILURE_ROUTE_ID; case Exchange.FATAL_FALLBACK_ERROR_HANDLER: diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java index b4b2cf3265c..fbd69fd9dc5 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java @@ -167,7 +167,7 @@ public class OnCompletionProcessor extends AsyncProcessorSupport implements Trac // but keep the caused exception stored as a property (Exchange.EXCEPTION_CAUGHT) on the exchange boolean stop = exchange.isRouteStop(); exchange.setRouteStop(false); - Object failureHandled = exchange.removeProperty(ExchangePropertyKey.FAILURE_HANDLED); + boolean failureHandled = exchange.getExchangeExtension().isFailureHandled(); Boolean errorhandlerHandled = exchange.getExchangeExtension().getErrorHandlerHandled(); exchange.getExchangeExtension().setErrorHandlerHandled(null); boolean rollbackOnly = exchange.isRollbackOnly(); @@ -190,8 +190,8 @@ public class OnCompletionProcessor extends AsyncProcessorSupport implements Trac } finally { // restore the options exchange.setRouteStop(stop); - if (failureHandled != null) { - exchange.setProperty(ExchangePropertyKey.FAILURE_HANDLED, failureHandled); + if (failureHandled) { + exchange.getExchangeExtension().setFailureHandled(true); } if (errorhandlerHandled != null) { exchange.getExchangeExtension().setErrorHandlerHandled(errorhandlerHandled); diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java index 889184749c7..159276059a0 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java @@ -130,10 +130,7 @@ public final class ShareUnitOfWorkAggregationStrategy extends ServiceSupport imp answer.getExchangeExtension() .setErrorHandlerHandled(newExchange.getExchangeExtension().getErrorHandlerHandled()); } - if (newExchange.getProperty(ExchangePropertyKey.FAILURE_HANDLED) != null) { - answer.setProperty(ExchangePropertyKey.FAILURE_HANDLED, - newExchange.getProperty(ExchangePropertyKey.FAILURE_HANDLED)); - } + answer.getExchangeExtension().setFailureHandled(newExchange.getExchangeExtension().isFailureHandled()); } } diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java index 4ed9a2619d5..fee692a4e49 100644 --- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java +++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java @@ -916,7 +916,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport exchange.getIn().removeHeader(Exchange.REDELIVERED); exchange.getIn().removeHeader(Exchange.REDELIVERY_COUNTER); exchange.getIn().removeHeader(Exchange.REDELIVERY_MAX_COUNTER); - exchange.removeProperty(ExchangePropertyKey.FAILURE_HANDLED); + exchange.getExchangeExtension().setFailureHandled(false); // keep the Exchange.EXCEPTION_CAUGHT as property so end user knows the caused exception // create log message diff --git a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java index bce2e574cf7..d58b059ac36 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/AbstractExchange.java @@ -84,6 +84,7 @@ class AbstractExchange implements Exchange { boolean interruptable = true; boolean redeliveryExhausted; boolean streamCacheDisabled; + boolean failureHandled; Boolean errorHandlerHandled; AsyncCallback defaultConsumerCallback; // optimize (do not reset) Map<String, SafeCopyProperty> safeCopyProperties; diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java index 76d51a01e2c..6c6e28fd084 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java @@ -574,7 +574,8 @@ public final class ExchangeHelper { * @return <tt>true</tt> if failure handled, <tt>false</tt> otherwise */ public static boolean isFailureHandled(Exchange exchange) { - return exchange.getProperty(ExchangePropertyKey.FAILURE_HANDLED, false, Boolean.class); + return exchange.getExchangeExtension().isFailureHandled(); +// return exchange.getProperty(ExchangePropertyKey.FAILURE_HANDLED, false, Boolean.class); } /** @@ -603,9 +604,9 @@ public final class ExchangeHelper { * @param exchange the exchange */ public static void setFailureHandled(Exchange exchange) { - exchange.setProperty(ExchangePropertyKey.FAILURE_HANDLED, Boolean.TRUE); // clear exception since its failure handled exchange.setException(null); + exchange.getExchangeExtension().setFailureHandled(true); } /** diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java b/core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java index 318bac4902e..2b1d8946748 100644 --- a/core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java +++ b/core/camel-support/src/main/java/org/apache/camel/support/ExtendedExchangeExtension.java @@ -213,4 +213,14 @@ public class ExtendedExchangeExtension implements ExchangeExtension { public <T> T getSafeCopyProperty(String key, Class<T> type) { return this.exchange.getSafeCopyProperty(key, type); } + + @Override + public boolean isFailureHandled() { + return this.exchange.failureHandled; + } + + @Override + public void setFailureHandled(boolean failureHandled) { + this.exchange.failureHandled = failureHandled; + } } diff --git a/docs/user-manual/modules/ROOT/pages/camel-4-migration-guide.adoc b/docs/user-manual/modules/ROOT/pages/camel-4-migration-guide.adoc index fef6c0057cd..39af3cb1dde 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4-migration-guide.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4-migration-guide.adoc @@ -76,6 +76,8 @@ We have removed deprecated APIs such as the following: -- Replaced `adapt()` from `org.apache.camel.CamelContext` with `getCamelContextExtension` - Decoupled the `org.apache.camel.ExtendedExchange` from the `org.apache.camel.Exchange`. -- Replaced `adapt()` from `org.apache.camel.ExtendedExchange` with `getExchangeExtension` +- Exchange failure handling status has moved from being a property defined as `ExchangePropertyKey.FAILURE_HANDLED` to a member of the ExtendedExchange, accessible via `isFailureHandled()`method. + == EIP Changes