Merge pull request #6113 from sfc-gh-etschannen/blob_integration
Fixed how better master exists interacts with singleton recruitment
This commit is contained in:
commit
d77b499282
|
@ -509,6 +509,7 @@ void ServerKnobs::initialize(Randomize randomize, ClientKnobs* clientKnobs, IsSi
|
|||
init( POLICY_GENERATIONS, 100 ); if( randomize && BUGGIFY ) POLICY_GENERATIONS = 10;
|
||||
init( DBINFO_SEND_AMOUNT, 5 );
|
||||
init( DBINFO_BATCH_DELAY, 0.1 );
|
||||
init( SINGLETON_RECRUIT_BME_DELAY, 10.0 );
|
||||
|
||||
//Move Keys
|
||||
init( SHARD_READY_DELAY, 0.25 );
|
||||
|
|
|
@ -446,6 +446,7 @@ public:
|
|||
double RECRUITMENT_TIMEOUT;
|
||||
int DBINFO_SEND_AMOUNT;
|
||||
double DBINFO_BATCH_DELAY;
|
||||
double SINGLETON_RECRUIT_BME_DELAY;
|
||||
|
||||
// Move Keys
|
||||
double SHARD_READY_DELAY;
|
||||
|
|
|
@ -3195,6 +3195,7 @@ public:
|
|||
// recruitX is used to signal when role X needs to be (re)recruited.
|
||||
// recruitingXID is used to track the ID of X's interface which is being recruited.
|
||||
// We use AsyncVars to kill (i.e. halt) singletons that have been replaced.
|
||||
double lastRecruitTime = 0;
|
||||
AsyncVar<bool> recruitDistributor;
|
||||
Optional<UID> recruitingDistributorID;
|
||||
AsyncVar<bool> recruitRatekeeper;
|
||||
|
@ -3299,7 +3300,10 @@ struct RatekeeperSingleton : Singleton<RatekeeperInterface> {
|
|||
brokenPromiseToNever(interface.get().haltRatekeeper.getReply(HaltRatekeeperRequest(cc->id)));
|
||||
}
|
||||
}
|
||||
void recruit(ClusterControllerData* cc) const { cc->recruitRatekeeper.set(true); }
|
||||
void recruit(ClusterControllerData* cc) const {
|
||||
cc->lastRecruitTime = now();
|
||||
cc->recruitRatekeeper.set(true);
|
||||
}
|
||||
};
|
||||
|
||||
struct DataDistributorSingleton : Singleton<DataDistributorInterface> {
|
||||
|
@ -3320,7 +3324,10 @@ struct DataDistributorSingleton : Singleton<DataDistributorInterface> {
|
|||
brokenPromiseToNever(interface.get().haltDataDistributor.getReply(HaltDataDistributorRequest(cc->id)));
|
||||
}
|
||||
}
|
||||
void recruit(ClusterControllerData* cc) const { cc->recruitDistributor.set(true); }
|
||||
void recruit(ClusterControllerData* cc) const {
|
||||
cc->lastRecruitTime = now();
|
||||
cc->recruitDistributor.set(true);
|
||||
}
|
||||
};
|
||||
|
||||
struct BlobManagerSingleton : Singleton<BlobManagerInterface> {
|
||||
|
@ -3341,7 +3348,10 @@ struct BlobManagerSingleton : Singleton<BlobManagerInterface> {
|
|||
brokenPromiseToNever(interface.get().haltBlobManager.getReply(HaltBlobManagerRequest(cc->id)));
|
||||
}
|
||||
}
|
||||
void recruit(ClusterControllerData* cc) const { cc->recruitBlobManager.set(true); }
|
||||
void recruit(ClusterControllerData* cc) const {
|
||||
cc->lastRecruitTime = now();
|
||||
cc->recruitBlobManager.set(true);
|
||||
}
|
||||
};
|
||||
|
||||
ACTOR Future<Void> clusterWatchDatabase(ClusterControllerData* cluster, ClusterControllerData::DBInfo* db) {
|
||||
|
@ -3795,8 +3805,14 @@ void checkBetterSingletons(ClusterControllerData* self) {
|
|||
ACTOR Future<Void> doCheckOutstandingRequests(ClusterControllerData* self) {
|
||||
try {
|
||||
wait(delay(SERVER_KNOBS->CHECK_OUTSTANDING_INTERVAL));
|
||||
while (!self->goodRecruitmentTime.isReady()) {
|
||||
wait(self->goodRecruitmentTime);
|
||||
while (now() - self->lastRecruitTime < SERVER_KNOBS->SINGLETON_RECRUIT_BME_DELAY ||
|
||||
!self->goodRecruitmentTime.isReady()) {
|
||||
if (now() - self->lastRecruitTime < SERVER_KNOBS->SINGLETON_RECRUIT_BME_DELAY) {
|
||||
wait(delay(SERVER_KNOBS->SINGLETON_RECRUIT_BME_DELAY + 0.001 - (now() - self->lastRecruitTime)));
|
||||
}
|
||||
if (!self->goodRecruitmentTime.isReady()) {
|
||||
wait(self->goodRecruitmentTime);
|
||||
}
|
||||
}
|
||||
|
||||
checkOutstandingRecruitmentRequests(self);
|
||||
|
|
Loading…
Reference in New Issue