summaryrefslogtreecommitdiff
path: root/src/mongo/db/session_catalog.cpp
diff options
context:
space:
mode:
authorCheahuychou Mao <mao.cheahuychou@gmail.com>2022-01-14 19:38:07 +0000
committerEvergreen Agent <no-reply@evergreen.mongodb.com>2022-01-14 21:42:58 +0000
commit29ef581da2924a81963c563c0f96edd5e56ca9c7 (patch)
treee25723f3eff63fa8b8b6b170ea34e9a810ae10d8 /src/mongo/db/session_catalog.cpp
parentda1a24bd16ce627122def05de91856ea8686b64a (diff)
downloadmongo-29ef581da2924a81963c563c0f96edd5e56ca9c7.tar.gz
SERVER-62020 Make retryable write statements executed with or without internal transactions retryable whether or not internal transactions are involved on retries
Diffstat (limited to 'src/mongo/db/session_catalog.cpp')
-rw-r--r--src/mongo/db/session_catalog.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/mongo/db/session_catalog.cpp b/src/mongo/db/session_catalog.cpp
index 6c3e509b9dd..bb2642d7143 100644
--- a/src/mongo/db/session_catalog.cpp
+++ b/src/mongo/db/session_catalog.cpp
@@ -129,6 +129,7 @@ SessionCatalog::ScopedCheckedOutSession SessionCatalog::_checkOutSessionWithPare
childSri->session._checkoutOpCtx = opCtx;
childSri->session._lastCheckout = Date_t::now();
+ childSri->session._parentSession = &parentSri->session;
return ScopedCheckedOutSession(
*this, std::move(childSri), std::move(parentSri), std::move(killToken));
@@ -257,6 +258,11 @@ size_t SessionCatalog::size() const {
return _sessions.size();
}
+void SessionCatalog::createSessionIfDoesNotExist(const LogicalSessionId& lsid) {
+ stdx::lock_guard<Latch> lg(_mutex);
+ _getOrCreateSessionRuntimeInfo(lg, lsid);
+}
+
SessionCatalog::SessionRuntimeInfo* SessionCatalog::_getSessionRuntimeInfo(
WithLock, const LogicalSessionId& lsid) {
auto it = _sessions.find(lsid);
@@ -299,6 +305,7 @@ void SessionCatalog::_releaseSession(SessionRuntimeInfo* sri,
invariant(!parentLsid);
}
sri->session._checkoutOpCtx = nullptr;
+ sri->session._parentSession = nullptr;
sri->availableCondVar.notify_all();
if (killToken) {