From c008e7f8b3082cbf9527c308c70da686e53d1ca3 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Mon, 14 Oct 2019 18:03:12 -0700 Subject: [PATCH] When switching parallel->single->parallel, reset sequence and peekId This fixes an issue where one could hang for 10min for the second parallel peek to time out, if one happened to catch the edge of a onlySpilled transition wrong. --- fdbserver/LogSystemPeekCursor.actor.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fdbserver/LogSystemPeekCursor.actor.cpp b/fdbserver/LogSystemPeekCursor.actor.cpp index 99c0c221b7..bac736afec 100644 --- a/fdbserver/LogSystemPeekCursor.actor.cpp +++ b/fdbserver/LogSystemPeekCursor.actor.cpp @@ -152,6 +152,9 @@ ACTOR Future serverPeekParallelGetMore( ILogSystem::ServerPeekCursor* self while(self->futureResults.size() < SERVER_KNOBS->PARALLEL_GET_MORE_REQUESTS && self->interf->get().present()) { self->futureResults.push_back( brokenPromiseToNever( self->interf->get().interf().peekMessages.getReply(TLogPeekRequest(self->messageVersion.version,self->tag,self->returnIfBlocked, self->onlySpilled, std::make_pair(self->randomID, self->sequence++)), taskID) ) ); } + } else if (self->futureResults.size() == 1) { + self->randomID = deterministicRandom()->randomUniqueID(); + self->sequence = 0; } else if (self->futureResults.size() == 0) { return Void(); }