diff --git a/fdbrpc/include/fdbrpc/simulator.h b/fdbrpc/include/fdbrpc/simulator.h index 634a5605545..0e9dfa6c6d7 100644 --- a/fdbrpc/include/fdbrpc/simulator.h +++ b/fdbrpc/include/fdbrpc/simulator.h @@ -477,7 +477,9 @@ FDB_BOOLEAN_PARAM(ForceDisable); // if the disabling time has been extended. The caller should retry after // the specified time has elapsed. If flag is true, don't extend the time // and disable the connection failures immediately. -double disableConnectionFailures(std::string const& context, ForceDisable flag = ForceDisable::True); +double disableConnectionFailures(std::string const& context, + ForceDisable flag = ForceDisable::True, + double duration = DISABLE_CONNECTION_FAILURE_FOREVER); // Extend connection failures in simulation void extendConnectionFailures(std::string const& context, double duration); diff --git a/fdbrpc/sim2.actor.cpp b/fdbrpc/sim2.actor.cpp index 89735ecbddd..85baa06ce3d 100644 --- a/fdbrpc/sim2.actor.cpp +++ b/fdbrpc/sim2.actor.cpp @@ -2996,7 +2996,7 @@ void enableConnectionFailures(std::string const& context, double duration) { } } -double disableConnectionFailures(std::string const& context, ForceDisable flag) { +double disableConnectionFailures(std::string const& context, ForceDisable flag, double duration) { if (g_network->isSimulated()) { if (now() + DISABLE_CONNECTION_FAILURE_MIN_INTERVAL < g_simulator->connectionFailureDisableTime && flag == ForceDisable::False) { @@ -3006,7 +3006,7 @@ double disableConnectionFailures(std::string const& context, ForceDisable flag) return g_simulator->connectionFailureDisableTime - now(); // return remaining time (>0.001s) } else { // if remaining time is less than 0.001s, or forced to disable, disable now - g_simulator->connectionFailuresDisableDuration = DISABLE_CONNECTION_FAILURE_FOREVER; + g_simulator->connectionFailuresDisableDuration = duration; g_simulator->speedUpSimulation = true; TraceEvent(SevWarnAlways, ("DisableConnectionFailures_" + context).c_str()); return 0; diff --git a/fdbserver/tester.actor.cpp b/fdbserver/tester.actor.cpp index 876f7194cbd..b88741da13f 100644 --- a/fdbserver/tester.actor.cpp +++ b/fdbserver/tester.actor.cpp @@ -2882,14 +2882,19 @@ ACTOR Future runTests(ReferenceSIM_SPEEDUP_AFTER_SECONDS; + // Use the first test's connectionFailuresDisableDuration if set + state double connectionFailuresDisableDuration = 0.0; if (!tests.empty() && tests[0].simConnectionFailuresDisableDuration > 0) { connectionFailuresDisableDuration = tests[0].simConnectionFailuresDisableDuration; } - enableConnectionFailures("Tester", connectionFailuresDisableDuration); - state Future disabler = disableConnectionFailuresAfter(connectionFailuresDisableDuration, "Tester"); + if (connectionFailuresDisableDuration > 0) { + // Disable connection failures with specified duration + disableConnectionFailures("Tester", ForceDisable::True, connectionFailuresDisableDuration); + } else { + enableConnectionFailures("Tester", FLOW_KNOBS->SIM_SPEEDUP_AFTER_SECONDS); + state Future disabler = disableConnectionFailuresAfter(FLOW_KNOBS->SIM_SPEEDUP_AFTER_SECONDS, "Tester"); + } state Future repairDataCenter; if (useDB) { // Keep datacenter repair at the default duration regardless of connection failures setting