summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/db/concurrency/lock_manager.cpp4
-rw-r--r--src/mongo/db/concurrency/lock_state.cpp36
2 files changed, 26 insertions, 14 deletions
diff --git a/src/mongo/db/concurrency/lock_manager.cpp b/src/mongo/db/concurrency/lock_manager.cpp
index fb93ab93d29..aec02b73959 100644
--- a/src/mongo/db/concurrency/lock_manager.cpp
+++ b/src/mongo/db/concurrency/lock_manager.cpp
@@ -827,8 +827,8 @@ LockManager::Partition* LockManager::_getPartition(LockRequest* request) const {
void LockManager::dump() const {
LOGV2(20521,
- "Dumping LockManager @ {reinterpret_cast_uint64_t_this}",
- "reinterpret_cast_uint64_t_this"_attr = reinterpret_cast<uint64_t>(this));
+ "Dumping LockManager @ {lock_manager}",
+ "lock_manager"_attr = reinterpret_cast<uint64_t>(this));
auto lockToClientMap = getLockToClientMap(getGlobalServiceContext());
for (unsigned i = 0; i < _numLockBuckets; i++) {
diff --git a/src/mongo/db/concurrency/lock_state.cpp b/src/mongo/db/concurrency/lock_state.cpp
index 4559b1ae465..72232be04e4 100644
--- a/src/mongo/db/concurrency/lock_state.cpp
+++ b/src/mongo/db/concurrency/lock_state.cpp
@@ -35,6 +35,8 @@
#include <vector>
+#include "mongo/bson/bsonobjbuilder.h"
+#include "mongo/bson/json.h"
#include "mongo/db/concurrency/flow_control_ticketholder.h"
#include "mongo/db/namespace_string.h"
#include "mongo/db/service_context.h"
@@ -191,19 +193,29 @@ bool LockerImpl::isRSTLLocked() const {
}
void LockerImpl::dump() const {
- StringBuilder ss;
- ss << "Locker id " << _id << " status: ";
-
- _lock.lock();
- LockRequestsMap::ConstIterator it = _requests.begin();
- while (!it.finished()) {
- ss << it.key().toString() << " " << lockRequestStatusName(it->status) << " in "
- << modeName(it->mode) << "; ";
- it.next();
+ struct Entry {
+ ResourceId key;
+ LockRequest::Status status;
+ LockMode mode;
+
+ BSONObj toBSON() const {
+ BSONObjBuilder b;
+ b.append("key", key.toString());
+ b.append("status", lockRequestStatusName(status));
+ b.append("mode", modeName(mode));
+ return b.obj();
+ }
+ std::string toString() const {
+ return tojson(toBSON());
+ }
+ };
+ std::vector<Entry> entries;
+ {
+ auto lg = stdx::lock_guard(_lock);
+ for (auto it = _requests.begin(); !it.finished(); it.next())
+ entries.push_back({it.key(), it->status, it->mode});
}
- _lock.unlock();
-
- LOGV2(20523, "{ss_str}", "ss_str"_attr = ss.str());
+ LOGV2(20523, "Locker id {id} status: {requests}", "id"_attr = _id, "requests"_attr = entries);
}