diff options
author | Cheahuychou Mao <mao.cheahuychou@gmail.com> | 2022-01-14 19:38:07 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-01-14 21:42:58 +0000 |
commit | 29ef581da2924a81963c563c0f96edd5e56ca9c7 (patch) | |
tree | e25723f3eff63fa8b8b6b170ea34e9a810ae10d8 /src/mongo/db/session_catalog.cpp | |
parent | da1a24bd16ce627122def05de91856ea8686b64a (diff) | |
download | mongo-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.cpp | 7 |
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) { |