use management api to get coordinators instead of simulator

This commit is contained in:
Jon Fu 2019-09-27 12:14:36 -07:00
parent 4a69e43fe1
commit 09c48cf3ab

View File

@ -409,17 +409,13 @@ struct RemoveServersSafelyWorkload : TestWorkload {
state int timeouts = 0;
loop {
state bool safe = false;
auto failSet = random_subset(toKillArray, deterministicRandom()->randomInt(0, toKillArray.size() + 1));
state std::set<AddressExclusion> failSet =
random_subset(toKillArray, deterministicRandom()->randomInt(0, toKillArray.size() + 1));
// Exclude a coordinator under buggify, but only if fault tolerance is > 0
if (BUGGIFY && g_simulator.desiredCoordinators > 1) {
vector<ISimulator::ProcessInfo*> coordinators = getCoordinators();
// why would this be empty?
TraceEvent(SevDebug, "Checkpoint").detail("CoordinatorsSize", coordinators.size());
if (coordinators.size()) {
auto& randomCoordinator = deterministicRandom()->randomChoice(coordinators);
failSet.insert(
AddressExclusion(randomCoordinator->address.ip, randomCoordinator->address.port));
}
std::vector<NetworkAddress> coordinators = wait(getCoordinators(cx));
auto& randomCoordinator = deterministicRandom()->randomChoice(coordinators);
failSet.insert(AddressExclusion(randomCoordinator.ip, randomCoordinator.port));
}
toKillMarkFailedArray.resize(failSet.size());
std::copy(failSet.begin(), failSet.end(), toKillMarkFailedArray.begin());
@ -501,17 +497,6 @@ struct RemoveServersSafelyWorkload : TestWorkload {
return machines;
}
static vector<ISimulator::ProcessInfo*> getCoordinators() {
vector<ISimulator::ProcessInfo*> machines;
vector<ISimulator::ProcessInfo*> all = g_simulator.getAllProcesses();
for (int i = 0; i < all.size(); i++) {
if (all[i]->startingClass._class == ProcessClass::CoordinatorClass) {
machines.push_back( all[i] );
}
}
return machines;
}
template <class T> static std::set<T> random_subset( std::vector<T> v, int n ) {
std::set<T> subset;
// No, this isn't efficient!