diff options
author | Randolph Tan <randolph@10gen.com> | 2015-12-03 16:15:36 -0500 |
---|---|---|
committer | Ramon Fernandez <ramon@mongodb.com> | 2015-12-10 16:14:34 -0500 |
commit | 205797cbd42ec4ec29954ee4442f86f7def58107 (patch) | |
tree | 2b7ca4b0e174444b9253fcdb32c9ceb52840dc12 | |
parent | e25bc60bbf7b7373f66be03d5c82c6197d66e83e (diff) | |
download | mongo-205797cbd42ec4ec29954ee4442f86f7def58107.tar.gz |
SERVER-21644 Invariant failure iter != _lockMap.end() in legacy_dist_lock_manager.cpp
(cherry picked from commit 4fd3712ce592f895cea5aff2209e4d26f5cf3a93)
-rw-r--r-- | src/mongo/s/catalog/legacy/distlock.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mongo/s/catalog/legacy/distlock.cpp b/src/mongo/s/catalog/legacy/distlock.cpp index 39b4768961b..7c6278304eb 100644 --- a/src/mongo/s/catalog/legacy/distlock.cpp +++ b/src/mongo/s/catalog/legacy/distlock.cpp @@ -723,7 +723,8 @@ bool DistributedLock::lock_try(const OID& lockID, } conn->update(LocksType::ConfigNS, - BSON(LocksType::name(_name)), + BSON(LocksType::name(_name) << LocksType::state() + << BSON("$eq" << LocksType::LOCK_PREP)), BSON("$set" << finalLockDetails.obj())); BSONObj err = conn->getLastErrorDetailed(); @@ -731,10 +732,11 @@ bool DistributedLock::lock_try(const OID& lockID, currLock = conn->findOne(LocksType::ConfigNS, BSON(LocksType::name(_name))); - if (!errMsg.empty() || !err["n"].type() || err["n"].numberInt() < 1) { + if (!errMsg.empty() || !err["n"].type() || err["n"].numberInt() < 1 || + currLock[LocksType::lockID()].OID() != lockID) { warning() << "could not finalize winning lock " << lockName << (!errMsg.empty() ? causedBy(errMsg) : " (did not update lock) ") - << endl; + << ", winning lock: " << currLock; gotLock = false; } else { // SUCCESS! |