summaryrefslogtreecommitdiffstats
path: root/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java
diff options
context:
space:
mode:
Diffstat (limited to 'documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java')
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/StoragePolicy.java11
1 files changed, 9 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 adf9d5ee912..46d0cd3fc37 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
@@ -104,7 +104,9 @@ public class StoragePolicy extends SlobrokPolicy {
String getRandomTargetSpec(RoutingContext context) {
Targets targets = validTargets.get();
// Try to use list of random targets, if at least X % of the nodes are up
- while (100 * targets.list.size() / targets.total >= requiredUpPercentageToSendToKnownGoodNodes) {
+ while ((targets.total != 0) &&
+ (100 * targets.list.size() / targets.total >= requiredUpPercentageToSendToKnownGoodNodes))
+ {
int randIndex = randomizer.nextInt(targets.list.size());
String targetSpec = getTargetSpec(targets.list.get(randIndex), context);
if (targetSpec != null) {
@@ -408,9 +410,10 @@ public class StoragePolicy extends SlobrokPolicy {
log.log(LogLevel.DEBUG, "No distributors available; clearing cluster state");
safeCachedClusterState.set(null);
sendRandomReason = "No distributors available. Sending to random distributor.";
+ context.setContext(createRandomDistributorTargetContext());
}
} else {
- context.setContext(new MessageContext(null));
+ context.setContext(createRandomDistributorTargetContext());
sendRandomReason = "No cluster state cached. Sending to random distributor.";
}
if (context.shouldTrace(1)) {
@@ -419,6 +422,10 @@ public class StoragePolicy extends SlobrokPolicy {
return hostFetcher.getRandomTargetSpec(context);
}
+ private static MessageContext createRandomDistributorTargetContext() {
+ return new MessageContext(null);
+ }
+
private static Optional<ClusterState> clusterStateFromReply(final WrongDistributionReply reply) {
try {
return Optional.of(new ClusterState(reply.getSystemState()));