Merge pull request #7491 from sfc-gh-xwang/bug/remotekv

Make g_simulator.datacenterDead() don't take spawn KV process into account
This commit is contained in:
Xiaoxi Wang 2022-06-29 11:43:27 -07:00 committed by GitHub
commit c9366f8b01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 11 additions and 10 deletions

View File

@ -107,6 +107,10 @@ public:
Future<KillType> onShutdown() { return shutdownSignal.getFuture(); } Future<KillType> onShutdown() { return shutdownSignal.getFuture(); }
bool isSpawnedKVProcess() const {
// SOMEDAY: use a separate bool may be better?
return name == "remote flow process";
}
bool isReliable() const { bool isReliable() const {
return !failed && fault_injection_p1 == 0 && fault_injection_p2 == 0 && !failedDisk && return !failed && fault_injection_p1 == 0 && fault_injection_p2 == 0 && !failedDisk &&
(!machine || (machine->machineProcess->fault_injection_p1 == 0 && (!machine || (machine->machineProcess->fault_injection_p1 == 0 &&

View File

@ -1328,7 +1328,8 @@ public:
std::vector<LocalityData> primaryLocalitiesDead, primaryLocalitiesLeft; std::vector<LocalityData> primaryLocalitiesDead, primaryLocalitiesLeft;
for (auto processInfo : getAllProcesses()) { for (auto processInfo : getAllProcesses()) {
if (processInfo->isAvailableClass() && processInfo->locality.dcId() == dcId) { if (!processInfo->isSpawnedKVProcess() && processInfo->isAvailableClass() &&
processInfo->locality.dcId() == dcId) {
if (processInfo->isExcluded() || processInfo->isCleared() || !processInfo->isAvailable()) { if (processInfo->isExcluded() || processInfo->isCleared() || !processInfo->isAvailable()) {
primaryProcessesDead.add(processInfo->locality); primaryProcessesDead.add(processInfo->locality);
primaryLocalitiesDead.push_back(processInfo->locality); primaryLocalitiesDead.push_back(processInfo->locality);
@ -1348,7 +1349,6 @@ public:
if (usableRegions > 1 && remoteTLogPolicy && !primaryTLogsDead) { if (usableRegions > 1 && remoteTLogPolicy && !primaryTLogsDead) {
primaryTLogsDead = primaryProcessesDead.validate(remoteTLogPolicy); primaryTLogsDead = primaryProcessesDead.validate(remoteTLogPolicy);
} }
return primaryTLogsDead || primaryProcessesDead.validate(storagePolicy); return primaryTLogsDead || primaryProcessesDead.validate(storagePolicy);
} }
@ -1602,7 +1602,7 @@ public:
.detail("Protected", protectedAddresses.count(machine->address)) .detail("Protected", protectedAddresses.count(machine->address))
.backtrace(); .backtrace();
// This will remove all the "tracked" messages that came from the machine being killed // This will remove all the "tracked" messages that came from the machine being killed
if (machine->name != "remote flow process") if (!machine->isSpawnedKVProcess())
latestEventCache.clear(); latestEventCache.clear();
machine->failed = true; machine->failed = true;
} else if (kt == InjectFaults) { } else if (kt == InjectFaults) {
@ -1631,8 +1631,7 @@ public:
} else { } else {
ASSERT(false); ASSERT(false);
} }
ASSERT(!protectedAddresses.count(machine->address) || machine->rebooting || ASSERT(!protectedAddresses.count(machine->address) || machine->rebooting || machine->isSpawnedKVProcess());
machine->name == "remote flow process");
} }
void rebootProcess(ProcessInfo* process, KillType kt) override { void rebootProcess(ProcessInfo* process, KillType kt) override {
if (kt == RebootProcessAndDelete && protectedAddresses.count(process->address)) { if (kt == RebootProcessAndDelete && protectedAddresses.count(process->address)) {
@ -2498,7 +2497,7 @@ ACTOR void doReboot(ISimulator::ProcessInfo* p, ISimulator::KillType kt) {
.detail("Rebooting", p->rebooting) .detail("Rebooting", p->rebooting)
.detail("Reliable", p->isReliable()); .detail("Reliable", p->isReliable());
return; return;
} else if (p->name == "remote flow process") { } else if (p->isSpawnedKVProcess()) {
TraceEvent(SevDebug, "DoRebootFailed").detail("Name", p->name).detail("Address", p->address); TraceEvent(SevDebug, "DoRebootFailed").detail("Name", p->name).detail("Address", p->address);
return; return;
} else if (p->getChilds().size()) { } else if (p->getChilds().size()) {

View File

@ -71,14 +71,12 @@ struct SaveAndKillWorkload : TestWorkload {
std::map<NetworkAddress, ISimulator::ProcessInfo*> rebootingProcesses = g_simulator.currentlyRebootingProcesses; std::map<NetworkAddress, ISimulator::ProcessInfo*> rebootingProcesses = g_simulator.currentlyRebootingProcesses;
std::map<std::string, ISimulator::ProcessInfo*> allProcessesMap; std::map<std::string, ISimulator::ProcessInfo*> allProcessesMap;
for (const auto& [_, process] : rebootingProcesses) { for (const auto& [_, process] : rebootingProcesses) {
if (allProcessesMap.find(process->dataFolder) == allProcessesMap.end() && if (allProcessesMap.find(process->dataFolder) == allProcessesMap.end() && !process->isSpawnedKVProcess()) {
process->name != "remote flow process") {
allProcessesMap[process->dataFolder] = process; allProcessesMap[process->dataFolder] = process;
} }
} }
for (const auto& process : processes) { for (const auto& process : processes) {
if (allProcessesMap.find(process->dataFolder) == allProcessesMap.end() && if (allProcessesMap.find(process->dataFolder) == allProcessesMap.end() && !process->isSpawnedKVProcess()) {
process->name != "remote flow process") {
allProcessesMap[process->dataFolder] = process; allProcessesMap[process->dataFolder] = process;
} }
} }