summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRandolph Tan <randolph@10gen.com>2018-10-22 15:21:18 -0400
committerRandolph Tan <randolph@10gen.com>2018-10-23 15:17:11 -0400
commitd2d29bc986a46943f34ea89455b19af433447428 (patch)
tree7ee0c6ae644d5e3b7f20a7f8a0f853318abdfdf4
parent42f0b7702c6c792afde739d6c5bbebec1ecbcc5d (diff)
downloadmongo-d2d29bc986a46943f34ea89455b19af433447428.tar.gz
SERVER-37701 Make SessionUpdateTracker include the uid portion of LogicalSessionId when tracking
(cherry picked from commit df048e23d9149a3607205ae0e69ef11e881c037c)
-rw-r--r--src/mongo/db/repl/session_update_tracker.cpp6
-rw-r--r--src/mongo/db/repl/session_update_tracker.h3
-rw-r--r--src/mongo/db/session_catalog.cpp2
-rw-r--r--src/mongo/db/session_catalog.h6
4 files changed, 7 insertions, 10 deletions
diff --git a/src/mongo/db/repl/session_update_tracker.cpp b/src/mongo/db/repl/session_update_tracker.cpp
index 9988a3832b9..1c1da543d52 100644
--- a/src/mongo/db/repl/session_update_tracker.cpp
+++ b/src/mongo/db/repl/session_update_tracker.cpp
@@ -65,9 +65,9 @@ void SessionUpdateTracker::_updateSessionInfo(const OplogEntry& entry) {
const auto& lsid = sessionInfo.getSessionId();
invariant(lsid);
- auto iter = _sessionsToUpdate.find(lsid->getId());
+ auto iter = _sessionsToUpdate.find(*lsid);
if (iter == _sessionsToUpdate.end()) {
- _sessionsToUpdate.emplace(lsid->getId(), entry);
+ _sessionsToUpdate.emplace(*lsid, entry);
return;
}
@@ -125,7 +125,7 @@ std::vector<OplogEntry> SessionUpdateTracker::_flushForQueryPredicate(
const BSONObj& queryPredicate) {
auto idField = queryPredicate["_id"].Obj();
auto lsid = LogicalSessionId::parse(IDLParserErrorContext("lsidInOplogQuery"), idField);
- auto iter = _sessionsToUpdate.find(lsid.getId());
+ auto iter = _sessionsToUpdate.find(lsid);
if (iter == _sessionsToUpdate.end()) {
return {};
diff --git a/src/mongo/db/repl/session_update_tracker.h b/src/mongo/db/repl/session_update_tracker.h
index e4288324337..959ab190801 100644
--- a/src/mongo/db/repl/session_update_tracker.h
+++ b/src/mongo/db/repl/session_update_tracker.h
@@ -35,6 +35,7 @@
#include <vector>
#include "mongo/bson/bsonobj.h"
+#include "mongo/db/logical_session_id.h"
#include "mongo/db/repl/oplog_entry.h"
#include "mongo/util/uuid.h"
@@ -82,7 +83,7 @@ private:
*/
void _updateSessionInfo(const OplogEntry& entry);
- std::map<UUID, OplogEntry> _sessionsToUpdate;
+ LogicalSessionIdMap<OplogEntry> _sessionsToUpdate;
};
} // namespace repl
diff --git a/src/mongo/db/session_catalog.cpp b/src/mongo/db/session_catalog.cpp
index 0f0880a5ef2..b657c9ec5e4 100644
--- a/src/mongo/db/session_catalog.cpp
+++ b/src/mongo/db/session_catalog.cpp
@@ -170,7 +170,7 @@ void SessionCatalog::invalidateSessions(OperationContext* opCtx,
!opCtx->getLogicalSessionId());
}
- const auto invalidateSessionFn = [&](WithLock, SessionRuntimeInfoMap::iterator it) {
+ const auto invalidateSessionFn = [&](WithLock, decltype(_txnTable)::iterator it) {
auto& sri = it->second;
sri->txnState.invalidate();
diff --git a/src/mongo/db/session_catalog.h b/src/mongo/db/session_catalog.h
index 3256dd95434..50f5a16e24c 100644
--- a/src/mongo/db/session_catalog.h
+++ b/src/mongo/db/session_catalog.h
@@ -146,10 +146,6 @@ private:
Session txnState;
};
- using SessionRuntimeInfoMap = stdx::unordered_map<LogicalSessionId,
- std::shared_ptr<SessionRuntimeInfo>,
- LogicalSessionIdHash>;
-
/**
* May release and re-acquire it zero or more times before returning. The returned
* 'SessionRuntimeInfo' is guaranteed to be linked on the catalog's _txnTable as long as the
@@ -164,7 +160,7 @@ private:
void _releaseSession(const LogicalSessionId& lsid);
stdx::mutex _mutex;
- SessionRuntimeInfoMap _txnTable;
+ LogicalSessionIdMap<std::shared_ptr<SessionRuntimeInfo>> _txnTable;
};
/**