From f0fe62a298a701878ecb225db12fae3fef0f5ef2 Mon Sep 17 00:00:00 2001 From: Alex Miller Date: Tue, 21 Jan 2020 19:09:07 -0800 Subject: [PATCH] TLogs should not respond with data earlier than the begin version Parallel peek more code would prefer the begin version it was sent by the previous parallel peek over the request's begin version. This means that a merge cursor trying to advance past message versions would still get old data that it would have to filter out. A simple application of std::max fixes this. --- fdbserver/OldTLogServer_4_6.actor.cpp | 2 +- fdbserver/OldTLogServer_6_0.actor.cpp | 2 +- fdbserver/OldTLogServer_6_2.actor.cpp | 2 +- fdbserver/TLogServer.actor.cpp | 3 +-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/fdbserver/OldTLogServer_4_6.actor.cpp b/fdbserver/OldTLogServer_4_6.actor.cpp index f463881e01..902292b357 100644 --- a/fdbserver/OldTLogServer_4_6.actor.cpp +++ b/fdbserver/OldTLogServer_4_6.actor.cpp @@ -882,7 +882,7 @@ namespace oldTLog_4_6 { auto& trackerData = self->peekTracker[peekId]; trackerData.lastUpdate = now(); Version ver = wait(trackerData.sequence_version[sequence].getFuture()); - req.begin = ver; + req.begin = std::max(ver, req.begin); wait(yield()); } } catch( Error &e ) { diff --git a/fdbserver/OldTLogServer_6_0.actor.cpp b/fdbserver/OldTLogServer_6_0.actor.cpp index bdbaedb624..996d33c121 100644 --- a/fdbserver/OldTLogServer_6_0.actor.cpp +++ b/fdbserver/OldTLogServer_6_0.actor.cpp @@ -1068,7 +1068,7 @@ ACTOR Future tLogPeekMessages( TLogData* self, TLogPeekRequest req, Refere trackerData.lastUpdate = now(); std::pair prevPeekData = wait(trackerData.sequence_version[sequence].getFuture()); - req.begin = prevPeekData.first; + req.begin = std::max(prevPeekData.first, req.begin); req.onlySpilled = prevPeekData.second; wait(yield()); } catch( Error &e ) { diff --git a/fdbserver/OldTLogServer_6_2.actor.cpp b/fdbserver/OldTLogServer_6_2.actor.cpp index 4f5521bdc7..fec7ecf998 100644 --- a/fdbserver/OldTLogServer_6_2.actor.cpp +++ b/fdbserver/OldTLogServer_6_2.actor.cpp @@ -1374,7 +1374,7 @@ ACTOR Future tLogPeekMessages( TLogData* self, TLogPeekRequest req, Refere trackerData.lastUpdate = now(); std::pair prevPeekData = wait(trackerData.sequence_version[sequence].getFuture()); - req.begin = prevPeekData.first; + req.begin = std::max(prevPeekData.first, req.begin); req.onlySpilled = prevPeekData.second; wait(yield()); } catch( Error &e ) { diff --git a/fdbserver/TLogServer.actor.cpp b/fdbserver/TLogServer.actor.cpp index de04c29798..95b4a35902 100644 --- a/fdbserver/TLogServer.actor.cpp +++ b/fdbserver/TLogServer.actor.cpp @@ -1390,8 +1390,7 @@ ACTOR Future tLogPeekMessages( TLogData* self, TLogPeekRequest req, Refere trackerData.lastUpdate = now(); std::pair prevPeekData = wait(trackerData.sequence_version[sequence].getFuture()); - ASSERT_WE_THINK( prevPeekData.first >= req.begin ); - req.begin = prevPeekData.first; + req.begin = std::max(prevPeekData.first, req.begin); req.onlySpilled = prevPeekData.second; wait(yield()); } catch( Error &e ) {