MCPcopy Create free account
hub / github.com/apple/foundationdb / canKillProcesses

Function canKillProcesses

fdbrpc/sim2.actor.cpp:1372–1587  ·  view source on GitHub ↗

The following function will determine if the specified configuration of available and dead processes can allow the cluster to survive

Source from the content-addressed store, hash-verified

1370 // The following function will determine if the specified configuration of available and dead processes can allow
1371 // the cluster to survive
1372 bool canKillProcesses(std::vector<ProcessInfo*> const& availableProcesses,
1373 std::vector<ProcessInfo*> const& deadProcesses,
1374 KillType kt,
1375 KillType* newKillType) const override {
1376 bool canSurvive = true;
1377 int nQuorum = ((desiredCoordinators + 1) / 2) * 2 - 1;
1378
1379 KillType newKt = kt;
1380 if ((kt == KillInstantly) || (kt == InjectFaults) || (kt == FailDisk) || (kt == RebootAndDelete) ||
1381 (kt == RebootProcessAndDelete)) {
1382 LocalityGroup primaryProcessesLeft, primaryProcessesDead;
1383 LocalityGroup primarySatelliteProcessesLeft, primarySatelliteProcessesDead;
1384 LocalityGroup remoteProcessesLeft, remoteProcessesDead;
1385 LocalityGroup remoteSatelliteProcessesLeft, remoteSatelliteProcessesDead;
1386
1387 std::vector<LocalityData> primaryLocalitiesDead, primaryLocalitiesLeft;
1388 std::vector<LocalityData> primarySatelliteLocalitiesDead, primarySatelliteLocalitiesLeft;
1389 std::vector<LocalityData> remoteLocalitiesDead, remoteLocalitiesLeft;
1390 std::vector<LocalityData> remoteSatelliteLocalitiesDead, remoteSatelliteLocalitiesLeft;
1391
1392 std::vector<LocalityData> badCombo;
1393 std::set<Optional<Standalone<StringRef>>> uniqueMachines;
1394
1395 if (!primaryDcId.present()) {
1396 for (auto processInfo : availableProcesses) {
1397 primaryProcessesLeft.add(processInfo->locality);
1398 primaryLocalitiesLeft.push_back(processInfo->locality);
1399 uniqueMachines.insert(processInfo->locality.zoneId());
1400 }
1401 for (auto processInfo : deadProcesses) {
1402 primaryProcessesDead.add(processInfo->locality);
1403 primaryLocalitiesDead.push_back(processInfo->locality);
1404 }
1405 } else {
1406 for (auto processInfo : availableProcesses) {
1407 uniqueMachines.insert(processInfo->locality.zoneId());
1408 if (processInfo->locality.dcId() == primaryDcId) {
1409 primaryProcessesLeft.add(processInfo->locality);
1410 primaryLocalitiesLeft.push_back(processInfo->locality);
1411 } else if (processInfo->locality.dcId() == remoteDcId) {
1412 remoteProcessesLeft.add(processInfo->locality);
1413 remoteLocalitiesLeft.push_back(processInfo->locality);
1414 } else if (std::find(primarySatelliteDcIds.begin(),
1415 primarySatelliteDcIds.end(),
1416 processInfo->locality.dcId()) != primarySatelliteDcIds.end()) {
1417 primarySatelliteProcessesLeft.add(processInfo->locality);
1418 primarySatelliteLocalitiesLeft.push_back(processInfo->locality);
1419 } else if (std::find(remoteSatelliteDcIds.begin(),
1420 remoteSatelliteDcIds.end(),
1421 processInfo->locality.dcId()) != remoteSatelliteDcIds.end()) {
1422 remoteSatelliteProcessesLeft.add(processInfo->locality);
1423 remoteSatelliteLocalitiesLeft.push_back(processInfo->locality);
1424 }
1425 }
1426 for (auto processInfo : deadProcesses) {
1427 if (processInfo->locality.dcId() == primaryDcId) {
1428 primaryProcessesDead.add(processInfo->locality);
1429 primaryLocalitiesDead.push_back(processInfo->locality);

Callers 3

isAvailableFunction · 0.85
killMachineFunction · 0.85
killDataCenterFunction · 0.85

Calls 15

findFunction · 0.85
validateAllCombinationsFunction · 0.85
TraceEventClass · 0.85
zoneIdMethod · 0.80
dcIdMethod · 0.80
detailMethod · 0.80
presentMethod · 0.45
addMethod · 0.45
push_backMethod · 0.45
insertMethod · 0.45
beginMethod · 0.45
endMethod · 0.45

Tested by

no test coverage detected