mirror of
https://github.com/apple/foundationdb.git
synced 2025-06-02 19:25:52 +08:00
Ported the bug fix https://github.com/apple/foundationdb/pull/1379 to OldTLogServer_6_0
This commit is contained in:
parent
4d6334eb90
commit
31ed73d9f5
@ -1103,7 +1103,7 @@ ACTOR Future<Void> watchDegraded(TLogData* self) {
|
||||
return Void();
|
||||
}
|
||||
|
||||
ACTOR Future<Void> doQueueCommit( TLogData* self, Reference<LogData> logData ) {
|
||||
ACTOR Future<Void> doQueueCommit( TLogData* self, Reference<LogData> logData, std::vector<Reference<LogData>> missingFinalCommit ) {
|
||||
state Version ver = logData->version.get();
|
||||
state Version commitNumber = self->queueCommitBegin+1;
|
||||
state Version knownCommittedVersion = logData->knownCommittedVersion;
|
||||
@ -1144,6 +1144,11 @@ ACTOR Future<Void> doQueueCommit( TLogData* self, Reference<LogData> logData ) {
|
||||
logData->queueCommittedVersion.set(ver);
|
||||
self->queueCommitEnd.set(commitNumber);
|
||||
|
||||
for(auto& it : missingFinalCommit) {
|
||||
TraceEvent("TLogCommitMissingFinalCommit", self->dbgid).detail("LogId", logData->logId).detail("Version", it->version.get()).detail("QueueVer", it->queueCommittedVersion.get());
|
||||
TEST(true); //A TLog was replaced before having a chance to commit its queue
|
||||
it->queueCommittedVersion.set(it->version.get());
|
||||
}
|
||||
return Void();
|
||||
}
|
||||
|
||||
@ -1152,11 +1157,14 @@ ACTOR Future<Void> commitQueue( TLogData* self ) {
|
||||
|
||||
loop {
|
||||
int foundCount = 0;
|
||||
state std::vector<Reference<LogData>> missingFinalCommit;
|
||||
for(auto it : self->id_data) {
|
||||
if(!it.second->stopped) {
|
||||
logData = it.second;
|
||||
foundCount++;
|
||||
}
|
||||
} else if(it.second->version.get() > std::max(it.second->queueCommittingVersion, it.second->queueCommittedVersion.get())) {
|
||||
missingFinalCommit.push_back(it.second);
|
||||
}
|
||||
}
|
||||
|
||||
ASSERT(foundCount < 2);
|
||||
@ -1181,7 +1189,8 @@ ACTOR Future<Void> commitQueue( TLogData* self ) {
|
||||
while( self->queueCommitBegin != self->queueCommitEnd.get() && !self->largeDiskQueueCommitBytes.get() ) {
|
||||
wait( self->queueCommitEnd.whenAtLeast(self->queueCommitBegin) || self->largeDiskQueueCommitBytes.onChange() );
|
||||
}
|
||||
self->sharedActors.send(doQueueCommit(self, logData));
|
||||
self->sharedActors.send(doQueueCommit(self, logData, missingFinalCommit));
|
||||
missingFinalCommit.clear();
|
||||
}
|
||||
when(wait(self->newLogData.onTrigger())) {}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user