diff options
4 files changed, 16 insertions, 2 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java index a12828fb104..65912cdd0bd 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java @@ -477,7 +477,12 @@ public class StoragePolicy extends ExternalSlobrokPolicy { @Override public void merge(RoutingContext context) { RoutingNodeIterator it = context.getChildIterator(); - Reply reply = it.removeReply(); + Reply reply = (it.hasReply()) ? it.removeReply() : context.getReply(); + if (reply == null) { + reply = new EmptyReply(); + reply.addError(new Error(ErrorCode.NO_ADDRESS_FOR_SERVICE, + "No reply in any children, nor in the routing context: " + context)); + } if (reply instanceof WrongDistributionReply) { distributorSelectionLogic.handleWrongDistribution((WrongDistributionReply) reply, context); diff --git a/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingContext.java b/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingContext.java index c6b26ffe3e2..e4efd951366 100755 --- a/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingContext.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingContext.java @@ -34,6 +34,11 @@ public class RoutingContext { this.directive = directive; } + public String toString() { + return "node : " + node + ", directive: " + directive + ", errors: " + consumableErrors + + ", selectOnRetry: " + selectOnRetry + " context: " + context; + } + /** * <p>Returns whether or not this hop has any configured recipients.</p> * diff --git a/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java b/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java index b69e24eb55c..1169973f118 100755 --- a/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java +++ b/messagebus/src/main/java/com/yahoo/messagebus/routing/RoutingNode.java @@ -492,7 +492,7 @@ public class RoutingNode implements ReplyHandler { return false; } - private String exceptionMessageWithTrace(Exception e) { + private static String exceptionMessageWithTrace(Exception e) { StringWriter sw = new StringWriter(); try (PrintWriter pw = new PrintWriter(sw)) { e.printStackTrace(pw); diff --git a/messagebus/src/test/java/com/yahoo/messagebus/routing/RoutingContextTestCase.java b/messagebus/src/test/java/com/yahoo/messagebus/routing/RoutingContextTestCase.java index 4ca97dc80ec..0c738db4242 100755 --- a/messagebus/src/test/java/com/yahoo/messagebus/routing/RoutingContextTestCase.java +++ b/messagebus/src/test/java/com/yahoo/messagebus/routing/RoutingContextTestCase.java @@ -121,6 +121,10 @@ public class RoutingContextTestCase extends junit.framework.TestCase { } } + public void testToString() { + assertEquals("node : null, directive: 1, errors: [], selectOnRetry: true context: null", new RoutingContext(null, 1).toString()); + } + public void testConstRoute() { SimpleProtocol protocol = new SimpleProtocol(); protocol.addPolicyFactory("DocumentRouteSelector", |