mirror of
https://github.com/apple/foundationdb.git
synced 2025-05-15 02:18:39 +08:00
fix: buffered cursor would start multiple bufferedGetMore actors
advance all of the cursors to the poppedVersion
This commit is contained in:
parent
b5cb7919b6
commit
7ac7eb82f2
@ -581,6 +581,7 @@ struct ILogSystem {
|
|||||||
Version poppedVersion;
|
Version poppedVersion;
|
||||||
Version initialPoppedVersion;
|
Version initialPoppedVersion;
|
||||||
bool canDiscardPopped;
|
bool canDiscardPopped;
|
||||||
|
Future<Void> more;
|
||||||
|
|
||||||
//FIXME: collectTags is needed to support upgrades from 5.X to 6.0. Remove this code when we no longer support that upgrade.
|
//FIXME: collectTags is needed to support upgrades from 5.X to 6.0. Remove this code when we no longer support that upgrade.
|
||||||
bool collectTags;
|
bool collectTags;
|
||||||
|
@ -1038,6 +1038,9 @@ ACTOR Future<Void> bufferedGetMore( ILogSystem::BufferedCursor* self, TaskPriori
|
|||||||
if(self->canDiscardPopped && self->poppedVersion > self->version().version) {
|
if(self->canDiscardPopped && self->poppedVersion > self->version().version) {
|
||||||
TraceEvent(SevWarn, "DiscardingPoppedData").detail("Version", self->version().version).detail("Popped", self->poppedVersion);
|
TraceEvent(SevWarn, "DiscardingPoppedData").detail("Version", self->version().version).detail("Popped", self->poppedVersion);
|
||||||
self->messageVersion = std::max(self->messageVersion, LogMessageVersion(self->poppedVersion));
|
self->messageVersion = std::max(self->messageVersion, LogMessageVersion(self->poppedVersion));
|
||||||
|
for(auto& cursor : self->cursors) {
|
||||||
|
cursor->advanceTo(self->messageVersion);
|
||||||
|
}
|
||||||
self->messageIndex = self->messages.size();
|
self->messageIndex = self->messages.size();
|
||||||
if (self->messages.size() > 0 && self->messages[self->messages.size()-1].version < self->messageVersion) {
|
if (self->messages.size() > 0 && self->messages[self->messages.size()-1].version < self->messageVersion) {
|
||||||
self->hasNextMessage = false;
|
self->hasNextMessage = false;
|
||||||
@ -1057,9 +1060,14 @@ ACTOR Future<Void> bufferedGetMore( ILogSystem::BufferedCursor* self, TaskPriori
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<Void> ILogSystem::BufferedCursor::getMore(TaskPriority taskID) {
|
Future<Void> ILogSystem::BufferedCursor::getMore(TaskPriority taskID) {
|
||||||
if( hasMessage() )
|
if( hasMessage() ) {
|
||||||
return Void();
|
return Void();
|
||||||
return bufferedGetMore(this, taskID);
|
}
|
||||||
|
|
||||||
|
if( !more.isValid() || more.isReady() ) {
|
||||||
|
more = bufferedGetMore(this, taskID);
|
||||||
|
}
|
||||||
|
return more;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<Void> ILogSystem::BufferedCursor::onFailed() {
|
Future<Void> ILogSystem::BufferedCursor::onFailed() {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user