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
 

Reply via email to