| 152 | |
| 153 | |
| 154 | void ZooKeeperMasterDetectorProcess::detected( |
| 155 | const Future<Option<Group::Membership>>& _leader) |
| 156 | { |
| 157 | CHECK(!_leader.isDiscarded()); |
| 158 | |
| 159 | if (_leader.isFailed()) { |
| 160 | LOG(ERROR) << "Failed to detect the leader: " << _leader.failure(); |
| 161 | |
| 162 | // Setting this error stops the detection loop and the detector |
| 163 | // transitions to an erroneous state. Further calls to detect() |
| 164 | // will directly fail as a result. |
| 165 | error = Error(_leader.failure()); |
| 166 | leader = None(); |
| 167 | |
| 168 | failPromises(&promises, _leader.failure()); |
| 169 | |
| 170 | return; |
| 171 | } |
| 172 | |
| 173 | if (_leader->isNone()) { |
| 174 | leader = None(); |
| 175 | |
| 176 | setPromises(&promises, leader); |
| 177 | } else { |
| 178 | // Fetch the data associated with the leader. |
| 179 | group->data(_leader->get()) |
| 180 | .onAny(defer(self(), &Self::fetched, _leader->get(), lambda::_1)); |
| 181 | } |
| 182 | |
| 183 | // Keep trying to detect leadership changes. |
| 184 | detector.detect(_leader.get()) |
| 185 | .onAny(defer(self(), &Self::detected, lambda::_1)); |
| 186 | } |
| 187 | |
| 188 | |
| 189 | void ZooKeeperMasterDetectorProcess::fetched( |
nothing calls this directly
no test coverage detected