ratekeeper needs to be recruited for proxies to make progress, so if one has not registered with the cluster controller by the time we are accepting commits, recruit a new one

This commit is contained in:
Evan Tschannen 2019-03-24 16:48:24 -07:00
parent f426d732ea
commit d6ad027d37
1 changed files with 4 additions and 24 deletions

View File

@ -2510,18 +2510,8 @@ ACTOR Future<DataDistributorInterface> startDataDistributor( ClusterControllerDa
} }
ACTOR Future<Void> monitorDataDistributor(ClusterControllerData *self) { ACTOR Future<Void> monitorDataDistributor(ClusterControllerData *self) {
state Future<Void> initialDelay = delay(SERVER_KNOBS->WAIT_FOR_DISTRIBUTOR_JOIN_DELAY); while(self->db.serverInfo->get().recoveryState < RecoveryState::ACCEPTING_COMMITS) {
wait(self->db.serverInfo->onChange());
// wait for a while to see if existing data distributor will join.
loop choose {
when ( wait(initialDelay) ) { break; }
when ( wait(self->db.serverInfo->onChange()) ) { // Rejoins via worker registration
if ( self->db.serverInfo->get().distributor.present() ) {
TraceEvent("CC_InfoChange", self->id)
.detail("DDID", self->db.serverInfo->get().distributor.get().id());
break;
}
}
} }
loop { loop {
@ -2595,18 +2585,8 @@ ACTOR Future<Void> startRatekeeper(ClusterControllerData *self) {
} }
ACTOR Future<Void> monitorRatekeeper(ClusterControllerData *self) { ACTOR Future<Void> monitorRatekeeper(ClusterControllerData *self) {
state Future<Void> initialDelay = delay(SERVER_KNOBS->WAIT_FOR_RATEKEEPER_JOIN_DELAY); while(self->db.serverInfo->get().recoveryState < RecoveryState::ACCEPTING_COMMITS) {
wait(self->db.serverInfo->onChange());
// wait for a while to see if an existing ratekeeper will join.
loop choose {
when ( wait(initialDelay) ) { break; }
when ( wait(self->db.serverInfo->onChange()) ) { // Rejoins via worker registration
if ( self->db.serverInfo->get().ratekeeper.present() ) {
TraceEvent("ClusterController_GotRateKeeper", self->id)
.detail("RKID", self->db.serverInfo->get().ratekeeper.get().id());
break;
}
}
} }
loop { loop {