summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLingzhi Deng <lingzhi.deng@mongodb.com>2019-07-16 10:20:40 -0400
committerLingzhi Deng <lingzhi.deng@mongodb.com>2019-07-16 10:20:40 -0400
commit0ca0e5af03ebecefeec44de3ce6870a4f55fa755 (patch)
tree32aa942d8c34ce9c2bb7bee5d6bcc90b5499543d
parent92fc2a914c7938b1135192ed55e984b346db2c3e (diff)
downloadmongo-0ca0e5af03ebecefeec44de3ce6870a4f55fa755.tar.gz
Add clearSignals
-rw-r--r--src/mongo/util/fail_point.cpp10
-rw-r--r--src/mongo/util/fail_point.h2
2 files changed, 11 insertions, 1 deletions
diff --git a/src/mongo/util/fail_point.cpp b/src/mongo/util/fail_point.cpp
index b705e6a01bf..7761f3a697a 100644
--- a/src/mongo/util/fail_point.cpp
+++ b/src/mongo/util/fail_point.cpp
@@ -89,7 +89,7 @@ void FailPoint::shouldFailCloseBlock() {
}
bool FailPoint::isSynced() const {
- if (_syncConfig.waitFor.size() == 0)
+ if (_syncConfig.waitFor.empty())
return true;
for (auto w : _syncConfig.waitFor) {
if (_activeSignals.find(w) == _activeSignals.end()) {
@@ -117,6 +117,11 @@ void FailPoint::sync() const {
while (!isSynced()) {
_condVar.wait_for(lk, timeout.toSystemDuration());
}
+ if (_syncConfig.clearSignals && !_syncConfig.waitFor.empty()) {
+ for (auto& w : _syncConfig.waitFor) {
+ _activeSignals.erase(w);
+ }
+ }
}
void FailPoint::setMode(Mode mode,
@@ -330,6 +335,9 @@ FailPoint::parseBSON(const BSONObj& obj) {
syncConfig.waitFor.insert(e.String());
}
}
+ if (syncObj.hasField("clearSignals")) {
+ syncConfig.clearSignals = syncObj["clearSignals"].Bool();
+ }
syncConfig.enabled = true;
}
diff --git a/src/mongo/util/fail_point.h b/src/mongo/util/fail_point.h
index 832d90349ef..6c8abc05e5d 100644
--- a/src/mongo/util/fail_point.h
+++ b/src/mongo/util/fail_point.h
@@ -85,6 +85,8 @@ public:
std::unordered_set<std::string> signals;
// Signals to wait for when the failpoint is reached.
std::unordered_set<std::string> waitFor;
+ // Clear waitFor signals afterwards.
+ bool clearSignals = false;
};
/**