From 702105030744472f62528caac413aa76d68eca6e Mon Sep 17 00:00:00 2001 From: dominictootell Date: Mon, 19 May 2014 22:40:59 +0100 Subject: [PATCH] + create the exception once --- .../CollapsedRequestObservableFunction.java | 14 +++++++++----- .../netflix/hystrix/collapser/RequestBatch.java | 3 ++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/hystrix-core/src/main/java/com/netflix/hystrix/collapser/CollapsedRequestObservableFunction.java b/hystrix-core/src/main/java/com/netflix/hystrix/collapser/CollapsedRequestObservableFunction.java index 3fd5658f5..487262e1b 100644 --- a/hystrix-core/src/main/java/com/netflix/hystrix/collapser/CollapsedRequestObservableFunction.java +++ b/hystrix-core/src/main/java/com/netflix/hystrix/collapser/CollapsedRequestObservableFunction.java @@ -102,17 +102,21 @@ public void setExceptionIfResponseNotReceived(Exception e) { /** * Set an ISE if a response is not yet received otherwise skip it * + * @param e A pre-generated exception. If this is null an ISE will be created and returned * @param exceptionMessage The message for the ISE */ - public void setIllegalStateExceptionIfResponseNotReceived(String exceptionMessage) { + public Exception setExceptionIfResponseNotReceived(Exception e, String exceptionMessage) { + Exception exception = e; CollapsedRequestObservableFunction.ResponseHolder r = rh.get(); // only proceed if neither response is set if (!r.isResponseSet() && r.getException() == null) { - setExceptionIfResponseNotReceived(new IllegalStateException(exceptionMessage)); - } else { - // return quietly instead of throwing an exception - return; + if(e==null) { + exception = new IllegalStateException(exceptionMessage); + } + setExceptionIfResponseNotReceived(exception); } + // return any exception that was generated + return exception; } /** diff --git a/hystrix-core/src/main/java/com/netflix/hystrix/collapser/RequestBatch.java b/hystrix-core/src/main/java/com/netflix/hystrix/collapser/RequestBatch.java index d72bd50cf..306d2df0c 100644 --- a/hystrix-core/src/main/java/com/netflix/hystrix/collapser/RequestBatch.java +++ b/hystrix-core/src/main/java/com/netflix/hystrix/collapser/RequestBatch.java @@ -143,9 +143,10 @@ public void call(Throwable e) { @Override public void call() { // check that all requests had setResponse or setException invoked in case 'mapResponseToRequests' was implemented poorly + Exception e = null; for (CollapsedRequest request : shardRequests) { try { - ((CollapsedRequestObservableFunction) request).setIllegalStateExceptionIfResponseNotReceived("No response set by " + commandCollapser.getCollapserKey().name() + " 'mapResponseToRequests' implementation."); + e = ((CollapsedRequestObservableFunction) request).setExceptionIfResponseNotReceived(e,"No response set by " + commandCollapser.getCollapserKey().name() + " 'mapResponseToRequests' implementation."); } catch (IllegalStateException e2) { logger.debug("Partial success of 'mapResponseToRequests' resulted in IllegalStateException while setting 'No response set' Exception. Continuing ... ", e2); }