aboutsummaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorJon Marius Venstad <venstad@gmail.com>2021-10-28 12:05:23 +0200
committerJon Marius Venstad <venstad@gmail.com>2021-10-28 12:05:23 +0200
commitc89d584fde882f53101dc9fd417a57b44117cfc0 (patch)
tree1f608a21e4666790767f2b1f24ac8d21aa9d8a3a /documentapi
parent0b724511faedaeaf583d954499e38652388c7d18 (diff)
Avoid double completion when transient error on overtime
Diffstat (limited to 'documentapi')
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusVisitorSession.java22
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) {