diff options
-rw-r--r-- | src/mongo/db/concurrency/lock_manager.cpp | 4 | ||||
-rw-r--r-- | src/mongo/db/concurrency/lock_state.cpp | 36 |
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); } |