Avoid passing processes from multiple clusters to canKillProcesses

Previously, `canKillProcesses` was being called with processes from both
the main and DR clusters. This would cause it to incorrectly allow
permanent killing of machines, as it was acting on bad data.
This commit is contained in:
Lukas Joswiak 2022-10-19 16:50:50 -07:00
parent c1e5dd662c
commit 165f4266b8

View File

@ -1337,7 +1337,8 @@ public:
bool isAvailable() const override {
std::vector<ProcessInfo*> processesLeft, processesDead;
for (auto processInfo : getAllProcesses()) {
if (processInfo->isAvailableClass()) {
if (processInfo->isAvailableClass() &&
!processInfo->drProcess) { // Only checks availability of main cluster
if (processInfo->isExcluded() || processInfo->isCleared() || !processInfo->isAvailable()) {
processesDead.push_back(processInfo);
} else {
@ -1853,7 +1854,7 @@ public:
int protectedWorker = 0, unavailable = 0, excluded = 0, cleared = 0;
for (auto processInfo : getAllProcesses()) {
if (processInfo->isAvailableClass()) {
if (processInfo->isAvailableClass() && processInfo->drProcess != isMainCluster) {
if (processInfo->isExcluded()) {
processesDead.push_back(processInfo);
excluded++;
@ -2070,7 +2071,7 @@ public:
(kt == RebootAndDelete) || (kt == RebootProcessAndDelete))) {
std::vector<ProcessInfo*> processesLeft, processesDead;
for (auto processInfo : getAllProcesses()) {
if (processInfo->isAvailableClass()) {
if (processInfo->isAvailableClass() && !processInfo->drProcess) { // TODO: Reboot DR processes as well
if (processInfo->isExcluded() || processInfo->isCleared() || !processInfo->isAvailable()) {
processesDead.push_back(processInfo);
} else if (protectedAddresses.count(processInfo->address) ||