diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2021-10-28 12:05:23 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2021-10-28 12:05:23 +0200 |
commit | c89d584fde882f53101dc9fd417a57b44117cfc0 (patch) | |
tree | 1f608a21e4666790767f2b1f24ac8d21aa9d8a3a /documentapi | |
parent | 0b724511faedaeaf583d954499e38652388c7d18 (diff) |
Avoid double completion when transient error on overtime
Diffstat (limited to 'documentapi')
-rwxr-xr-x | documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java | 22 |
1 files changed, 8 insertions, 14 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java index f7242695490..ebfdf14e92e 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java @@ -682,10 +682,8 @@ public class MessageBusVisitorSession implements VisitorSession { } private void continueVisiting() { - if (visitingCompleted()) { + if ( ! scheduleSendCreateVisitorsIfApplicable() && visitingCompleted()) { markSessionCompleted(); - } else { - scheduleSendCreateVisitorsIfApplicable(); } } @@ -996,23 +994,19 @@ public class MessageBusVisitorSession implements VisitorSession { /** * Schedule a new SendCreateVisitors task iff there are still buckets to * visit, the visiting has not failed fatally and we haven't already - * scheduled such a task. + * scheduled such a task. Return whether a visitor was scheduled here. */ - private void scheduleSendCreateVisitorsIfApplicable(long delay, TimeUnit unit) { + private boolean scheduleSendCreateVisitorsIfApplicable(long delay, TimeUnit unit) { final long elapsedMillis = elapsedTimeMillis(); if (!isInfiniteTimeout(sessionTimeoutMillis()) && (elapsedMillis >= sessionTimeoutMillis())) { transitionTo(new StateDescription(State.TIMED_OUT, String.format("Session timeout of %d ms expired", sessionTimeoutMillis()))); - if (visitingCompleted()) { - markSessionCompleted(); - } - return; } - if (!mayScheduleCreateVisitorsTask()) { - return; + if (!mayScheduleCreateVisitorsTask() || visitingCompleted()) { + return false; } final long messageTimeoutMillis = computeBoundedMessageTimeoutMillis(elapsedMillis); taskExecutor.scheduleTask(new SendCreateVisitorsTask(messageTimeoutMillis), delay, unit); - scheduledSendCreateVisitors = true; + return scheduledSendCreateVisitors = true; } private boolean mayScheduleCreateVisitorsTask() { @@ -1022,8 +1016,8 @@ public class MessageBusVisitorSession implements VisitorSession { || enoughHitsReceived()); } - private void scheduleSendCreateVisitorsIfApplicable() { - scheduleSendCreateVisitorsIfApplicable(0, TimeUnit.MILLISECONDS); + private boolean scheduleSendCreateVisitorsIfApplicable() { + return scheduleSendCreateVisitorsIfApplicable(0, TimeUnit.MILLISECONDS); } private void handleCreateVisitorReply(CreateVisitorReply reply) { |