diff --git a/fdbserver/DataDistribution.actor.cpp b/fdbserver/DataDistribution.actor.cpp index a84f6e918a..e3cb354a06 100644 --- a/fdbserver/DataDistribution.actor.cpp +++ b/fdbserver/DataDistribution.actor.cpp @@ -619,6 +619,8 @@ struct DDTeamCollection : ReferenceCounted { Promise addSubsetComplete; Future badTeamRemover; + Future wrongStoreTypeRemover; + Reference storageServerSet; std::vector forcedEntries, resultEntries; @@ -660,7 +662,7 @@ struct DDTeamCollection : ReferenceCounted { Reference> 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 { 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 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 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 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();