Fix backup worker does NOOP pop before getting backup key
The NOOP pop cuases some mutation ranges being dropped by backup workers. As a result, the backup is incomplete. Specifically, the wait of BACKUP_NOOP_POP_DELAY blocks the monitoring of backup key actor.
This commit is contained in:
parent
05b87cf288
commit
86edc1c9c8
|
@ -591,25 +591,25 @@ ACTOR Future<Void> pullAsyncData(BackupData* self) {
|
|||
|
||||
ACTOR Future<Void> monitorBackupKeyOrPullData(BackupData* self) {
|
||||
state Future<Void> started, pullFinished;
|
||||
state Future<GetReadVersionReply> replyFuture = Never();
|
||||
|
||||
loop {
|
||||
started = monitorBackupStartedKeyChanges(self, true);
|
||||
loop {
|
||||
GetReadVersionRequest request(1, GetReadVersionRequest::PRIORITY_DEFAULT |
|
||||
GetReadVersionRequest::FLAG_USE_MIN_KNOWN_COMMITTED_VERSION);
|
||||
|
||||
choose {
|
||||
when(wait(started)) { break; }
|
||||
when(wait(self->cx->onMasterProxiesChanged())) {}
|
||||
when(GetReadVersionReply reply = wait(loadBalance(self->cx->getMasterProxies(false),
|
||||
&MasterProxyInterface::getConsistentReadVersion,
|
||||
request, self->cx->taskID))) {
|
||||
self->savedVersion = std::max(reply.version, self->savedVersion);
|
||||
self->minKnownCommittedVersion = std::max(reply.version, self->minKnownCommittedVersion);
|
||||
TraceEvent("BackupWorkerNoopPop", self->myId).detail("SavedVersion", self->savedVersion);
|
||||
self->pop(); // Pop while the worker is in this NOOP state.
|
||||
wait(delay(SERVER_KNOBS->BACKUP_NOOP_POP_DELAY, self->cx->taskID));
|
||||
}
|
||||
loop choose {
|
||||
when(wait(started)) { break; }
|
||||
when(wait(self->cx->onMasterProxiesChanged() ||
|
||||
delay(SERVER_KNOBS->BACKUP_NOOP_POP_DELAY, self->cx->taskID))) {
|
||||
GetReadVersionRequest request(1, GetReadVersionRequest::PRIORITY_DEFAULT |
|
||||
GetReadVersionRequest::FLAG_USE_MIN_KNOWN_COMMITTED_VERSION);
|
||||
replyFuture = loadBalance(self->cx->getMasterProxies(false),
|
||||
&MasterProxyInterface::getConsistentReadVersion, request, self->cx->taskID);
|
||||
}
|
||||
when(GetReadVersionReply reply = wait(replyFuture)) {
|
||||
replyFuture = Never();
|
||||
self->savedVersion = std::max(reply.version, self->savedVersion);
|
||||
self->minKnownCommittedVersion = std::max(reply.version, self->minKnownCommittedVersion);
|
||||
TraceEvent("BackupWorkerNoopPop", self->myId).detail("SavedVersion", self->savedVersion);
|
||||
self->pop(); // Pop while the worker is in this NOOP state.
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue