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 2019/08/07 03:32:59 UTC
[camel] 03/03: CAMEL-13561: camel-hystrix -
HystrixBadRequestException is swallowed
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
commit 4a2cfbd8bf8bac6cb42b9f0833b28d51abbcabb4
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Aug 7 05:32:12 2019 +0200
CAMEL-13561: camel-hystrix - HystrixBadRequestException is swallowed
---
.../component/hystrix/processor/HystrixProcessorCommand.java | 8 +++++++-
.../hystrix/processor/HystrixBadRequestExceptionTest.java | 11 +++++++----
2 files changed, 14 insertions(+), 5 deletions(-)
diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorCommand.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorCommand.java
index f9fb8ec..dced5c4 100644
--- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorCommand.java
+++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorCommand.java
@@ -52,6 +52,11 @@ public class HystrixProcessorCommand extends HystrixCommand {
@Override
protected Message getFallback() {
+ // if bad request then break-out
+ if (exchange.getException() instanceof HystrixBadRequestException) {
+ return null;
+ }
+
// guard by lock as the run command can be running concurrently in case hystrix caused a timeout which
// can cause the fallback timer to trigger this fallback at the same time the run command may be running
// after its processor.process method which could cause both threads to mutate the state on the exchange
@@ -154,7 +159,8 @@ public class HystrixProcessorCommand extends HystrixCommand {
// special for HystrixBadRequestException which should not trigger fallback
if (camelExchangeException instanceof HystrixBadRequestException) {
LOG.debug("Running processor: {} with exchange: {} done as bad request", processor, exchange);
- return exchange.getMessage();
+ exchange.setException(camelExchangeException);
+ throw camelExchangeException;
}
// copy the result before its regarded as success
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixBadRequestExceptionTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixBadRequestExceptionTest.java
index df0e13e..786df98 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixBadRequestExceptionTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixBadRequestExceptionTest.java
@@ -17,6 +17,7 @@
package org.apache.camel.component.hystrix.processor;
import com.netflix.hystrix.exception.HystrixBadRequestException;
+import org.apache.camel.Exchange;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
@@ -26,11 +27,13 @@ public class HystrixBadRequestExceptionTest extends CamelTestSupport {
@Test
public void testHystrix() throws Exception {
getMockEndpoint("mock:fallback").expectedMessageCount(0);
- getMockEndpoint("mock:result").expectedBodiesReceived("Hello World");
- getMockEndpoint("mock:result").expectedPropertyReceived(HystrixConstants.HYSTRIX_RESPONSE_SUCCESSFUL_EXECUTION, true);
- getMockEndpoint("mock:result").expectedPropertyReceived(HystrixConstants.HYSTRIX_RESPONSE_FROM_FALLBACK, false);
+ getMockEndpoint("mock:result").expectedMessageCount(0);
- template.sendBody("direct:start", "Hello World");
+ Exchange out = template.send("direct:start", e -> e.getMessage().setBody("Hello World"));
+ assertTrue(out.isFailed());
+ assertFalse(out.getProperty(HystrixConstants.HYSTRIX_RESPONSE_SUCCESSFUL_EXECUTION, boolean.class));
+ assertFalse(out.getProperty(HystrixConstants.HYSTRIX_RESPONSE_FROM_FALLBACK, boolean.class));
+ assertTrue(out.getException() instanceof HystrixBadRequestException);
assertMockEndpointsSatisfied();
}