StorageEngineSwitch:Call removeWrongStoreType only when necessary

If a cluster does not change its storeType for a while, we do not need to
call removeWrongStoreType actor periodically.

This solution is the same as how badTeamRemover actor is handled.
This commit is contained in:
Meng Xu 2019-08-16 10:48:50 -07:00
parent 86b51624a4
commit 2a7b208df2
1 changed files with 21 additions and 2 deletions

View File

@ -619,6 +619,8 @@ struct DDTeamCollection : ReferenceCounted<DDTeamCollection> {
Promise<Void> addSubsetComplete;
Future<Void> badTeamRemover;
Future<Void> wrongStoreTypeRemover;
Reference<LocalitySet> storageServerSet;
std::vector<LocalityEntry> forcedEntries, resultEntries;
@ -660,7 +662,7 @@ struct DDTeamCollection : ReferenceCounted<DDTeamCollection> {
Reference<AsyncVar<bool>> processingUnhealthy)
: cx(cx), distributorId(distributorId), lock(lock), output(output),
shardsAffectedByTeamFailure(shardsAffectedByTeamFailure), doBuildTeams(true), lastBuildTeamsFailed(false),
teamBuilder(Void()), badTeamRemover(Void()), configuration(configuration), readyToStart(readyToStart),
teamBuilder(Void()), badTeamRemover(Void()), wrongStoreTypeRemover(Void()), configuration(configuration), readyToStart(readyToStart),
clearHealthyZoneFuture(true),
checkTeamDelay(delay(SERVER_KNOBS->CHECK_TEAM_DELAY, TaskPriority::DataDistribution)),
initialFailureReactionDelay(
@ -2469,6 +2471,10 @@ struct DDTeamCollection : ReferenceCounted<DDTeamCollection> {
if (server_info[removedServer]->wrongStoreTypeToRemove.get()) {
self->doRemoveWrongStoreType.set(true); // DD can remove the next wrong storeType server
if (self->wrongStoreTypeRemover.isReady()) {
self->wrongStoreTypeRemover = removeWrongStoreType(self);
self->addActor.send(self->wrongStoreTypeRemover);
}
}
// Step: Remove removedServer from server's global data
@ -3259,6 +3265,10 @@ ACTOR Future<Void> keyValueStoreTypeTracker(DDTeamCollection* self, TCServerInfo
}
self->doRemoveWrongStoreType.set(true);
if (self->wrongStoreTypeRemover.isReady()) {
self->wrongStoreTypeRemover = removeWrongStoreType(self);
self->addActor.send(self->wrongStoreTypeRemover);
}
return Void();
}
@ -3633,7 +3643,12 @@ ACTOR Future<Void> storageServerTracker(
storeTypeTracker = keyValueStoreTypeTracker(self, server);
hasWrongDC = !inCorrectDC(self, server);
self->restartTeamBuilder.trigger();
// TODO: remove this doRemoveWrongStoreType
self->doRemoveWrongStoreType.set(true);
if (self->wrongStoreTypeRemover.isReady()) {
self->wrongStoreTypeRemover = removeWrongStoreType(self);
self->addActor.send(self->wrongStoreTypeRemover);
}
if(restartRecruiting)
self->restartRecruiting.trigger();
@ -3978,7 +3993,11 @@ ACTOR Future<Void> dataDistributionTeamCollection(
self->addActor.send(machineTeamRemover(self));
self->addActor.send(serverTeamRemover(self));
self->addActor.send(removeWrongStoreType(self));
if (self->wrongStoreTypeRemover.isReady()) {
self->wrongStoreTypeRemover = removeWrongStoreType(self);
self->addActor.send(self->wrongStoreTypeRemover);
}
self->traceTeamCollectionInfo();