From 59ea14f97808e343a4a10a1b5352b7096b695e38 Mon Sep 17 00:00:00 2001 From: Max Hirschhorn Date: Thu, 15 Jun 2017 00:17:19 -0400 Subject: Revert "SERVER-29417 Attach logical session ids to cursors" This reverts commit 65828661c6579989fdbb43f2c21de16f2bf72586. --- src/mongo/db/SConscript | 1 - src/mongo/db/clientcursor.cpp | 4 +- src/mongo/db/clientcursor.h | 13 +---- src/mongo/db/cursor_manager.cpp | 69 +---------------------- src/mongo/db/cursor_manager.h | 17 ------ src/mongo/db/db_raii.cpp | 8 --- src/mongo/db/db_raii.h | 43 -------------- src/mongo/db/logical_session_id.h | 1 - src/mongo/db/query/SConscript | 1 - src/mongo/db/query/query_test_service_context.cpp | 9 --- src/mongo/db/query/query_test_service_context.h | 5 -- 11 files changed, 4 insertions(+), 167 deletions(-) (limited to 'src/mongo/db') diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index c7649153f78..5d2149b9e55 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -613,7 +613,6 @@ env.Library( ], LIBDEPS=[ "$BUILD_DIR/mongo/base", - "$BUILD_DIR/mongo/db/logical_session_id", "$BUILD_DIR/mongo/util/background_job", "query/query", "background", diff --git a/src/mongo/db/clientcursor.cpp b/src/mongo/db/clientcursor.cpp index 889d9961607..b6a686ba717 100644 --- a/src/mongo/db/clientcursor.cpp +++ b/src/mongo/db/clientcursor.cpp @@ -77,15 +77,13 @@ long long ClientCursor::totalOpen() { return cursorStatsOpen.get(); } -ClientCursor::ClientCursor(ClientCursorParams params, +ClientCursor::ClientCursor(ClientCursorParams&& params, CursorManager* cursorManager, CursorId cursorId, - boost::optional lsid, Date_t now) : _cursorid(cursorId), _nss(std::move(params.nss)), _authenticatedUsers(std::move(params.authenticatedUsers)), - _lsid(std::move(lsid)), _isReadCommitted(params.isReadCommitted), _cursorManager(cursorManager), _originatingCommand(params.originatingCommandObj), diff --git a/src/mongo/db/clientcursor.h b/src/mongo/db/clientcursor.h index 32fb018a8e1..d2f216b01e1 100644 --- a/src/mongo/db/clientcursor.h +++ b/src/mongo/db/clientcursor.h @@ -28,13 +28,10 @@ #pragma once -#include - #include "mongo/client/dbclientinterface.h" #include "mongo/db/auth/user_name.h" #include "mongo/db/cursor_id.h" #include "mongo/db/jsobj.h" -#include "mongo/db/logical_session_id.h" #include "mongo/db/query/plan_executor.h" #include "mongo/db/record_id.h" #include "mongo/stdx/functional.h" @@ -111,10 +108,6 @@ public: return makeUserNameIterator(_authenticatedUsers.begin(), _authenticatedUsers.end()); } - boost::optional getSessionId() const { - return _lsid; - } - bool isReadCommitted() const { return _isReadCommitted; } @@ -225,10 +218,9 @@ private: * Constructs a ClientCursor. Since cursors must come into being registered and pinned, this is * private. See cursor_manager.h for more details. */ - ClientCursor(ClientCursorParams params, + ClientCursor(ClientCursorParams&& params, CursorManager* cursorManager, CursorId cursorId, - boost::optional lsid, Date_t now); /** @@ -265,9 +257,6 @@ private: // The set of authenticated users when this cursor was created. std::vector _authenticatedUsers; - // A logical session id for this cursor, if it is running inside of a session. - const boost::optional _lsid; - const bool _isReadCommitted = false; CursorManager* _cursorManager; diff --git a/src/mongo/db/cursor_manager.cpp b/src/mongo/db/cursor_manager.cpp index a2e9687f5b1..f1bdd8a9442 100644 --- a/src/mongo/db/cursor_manager.cpp +++ b/src/mongo/db/cursor_manager.cpp @@ -101,8 +101,6 @@ public: std::size_t timeoutCursors(OperationContext* opCtx, Date_t now); - void appendActiveSessions(OperationContext* opCtx, LogicalSessionIdSet* lsids); - int64_t nextSeed(); private: @@ -269,47 +267,12 @@ std::size_t GlobalCursorIdCache::timeoutCursors(OperationContext* opCtx, Date_t } } // namespace -void GlobalCursorIdCache::appendActiveSessions(OperationContext* opCtx, - LogicalSessionIdSet* lsids) { - // Get active session ids from the global cursor manager - globalCursorManager->appendActiveSessions(lsids); - - // Compute the set of collection names that we have to get sessions for - vector namespaces; - { - stdx::lock_guard lk(_mutex); - for (auto&& entry : _idToNss) { - namespaces.push_back(entry.second); - } - } - - // For each collection, get its sessions under the collection lock (to prevent the - // collection from going away during the erase). - for (auto&& ns : namespaces) { - AutoGetCollectionOrView ctx(opCtx, NamespaceString(ns), MODE_IS); - if (!ctx.getDb()) { - continue; - } - - Collection* collection = ctx.getCollection(); - if (!collection) { - continue; - } - - collection->getCursorManager()->appendActiveSessions(lsids); - } -} - // --- CursorManager* CursorManager::getGlobalCursorManager() { return globalCursorManager.get(); } -void CursorManager::appendAllActiveSessions(OperationContext* opCtx, LogicalSessionIdSet* lsids) { - globalCursorIdCache->appendActiveSessions(opCtx, lsids); -} - std::size_t CursorManager::timeoutCursorsGlobal(OperationContext* opCtx, Date_t now) { return globalCursorIdCache->timeoutCursors(opCtx, now); } @@ -519,34 +482,6 @@ void CursorManager::getCursorIds(std::set* openCursors) const { } } -void CursorManager::appendActiveSessions(LogicalSessionIdSet* lsids) const { - auto allPartitions = _cursorMap->lockAllPartitions(); - for (auto&& partition : allPartitions) { - for (auto&& entry : partition) { - auto cursor = entry.second; - if (auto id = cursor->getSessionId()) { - lsids->insert(id.value()); - } - } - } -} - -stdx::unordered_set CursorManager::getCursorsForSession(LogicalSessionId lsid) const { - stdx::unordered_set cursors; - - auto allPartitions = _cursorMap->lockAllPartitions(); - for (auto&& partition : allPartitions) { - for (auto&& entry : partition) { - auto cursor = entry.second; - if (cursor->getSessionId() == lsid) { - cursors.insert(cursor->cursorid()); - } - } - } - - return cursors; -} - size_t CursorManager::numCursors() const { return _cursorMap->size(); } @@ -591,8 +526,8 @@ ClientCursorPin CursorManager::registerCursor(OperationContext* opCtx, // we don't insert two cursors with the same cursor id. stdx::lock_guard lock(_registrationLock); CursorId cursorId = allocateCursorId_inlock(); - std::unique_ptr clientCursor(new ClientCursor( - std::move(cursorParams), this, cursorId, opCtx->getLogicalSessionId(), now)); + std::unique_ptr clientCursor( + new ClientCursor(std::move(cursorParams), this, cursorId, now)); // Transfer ownership of the cursor to '_cursorMap'. auto partition = _cursorMap->lockOnePartition(cursorId); diff --git a/src/mongo/db/cursor_manager.h b/src/mongo/db/cursor_manager.h index 0b243e21996..40408c48830 100644 --- a/src/mongo/db/cursor_manager.h +++ b/src/mongo/db/cursor_manager.h @@ -36,7 +36,6 @@ #include "mongo/db/record_id.h" #include "mongo/platform/unordered_map.h" #include "mongo/platform/unordered_set.h" -#include "mongo/stdx/unordered_set.h" #include "mongo/util/concurrency/mutex.h" #include "mongo/util/duration.h" @@ -79,12 +78,6 @@ public: static constexpr Minutes kDefaultCursorTimeoutMinutes{10}; using RegistrationToken = Partitioned>::PartitionId; - /** - * Appends the sessions that have open cursors on the global cursor manager and across - * all collection-level cursor managers to the given set of lsids. - */ - static void appendAllActiveSessions(OperationContext* opCtx, LogicalSessionIdSet* lsids); - CursorManager(NamespaceString nss); /** @@ -165,16 +158,6 @@ public: void getCursorIds(std::set* openCursors) const; - /** - * Appends sessions that have open cursors in this cursor manager to the given set of lsids. - */ - void appendActiveSessions(LogicalSessionIdSet* lsids) const; - - /* - * Returns a list of all open cursors for the given session. - */ - stdx::unordered_set getCursorsForSession(LogicalSessionId lsid) const; - /** * Returns the number of ClientCursors currently registered. Excludes any registered bare * PlanExecutors. diff --git a/src/mongo/db/db_raii.cpp b/src/mongo/db/db_raii.cpp index bff855fcc5b..478047eb0cc 100644 --- a/src/mongo/db/db_raii.cpp +++ b/src/mongo/db/db_raii.cpp @@ -72,14 +72,6 @@ AutoGetCollection::AutoGetCollection(OperationContext* opCtx, } } -AutoGetCollectionOrView::AutoGetCollectionOrView(OperationContext* opCtx, - const NamespaceString& nss, - LockMode modeAll) - : _autoColl(opCtx, nss, modeAll, modeAll, AutoGetCollection::ViewMode::kViewsPermitted), - _view(_autoColl.getDb() && !_autoColl.getCollection() - ? _autoColl.getDb()->getViewCatalog()->lookup(opCtx, nss.ns()) - : nullptr) {} - AutoGetOrCreateDb::AutoGetOrCreateDb(OperationContext* opCtx, StringData ns, LockMode mode) : _dbLock(opCtx, ns, mode), _db(dbHolder().get(opCtx, ns)) { invariant(mode == MODE_IX || mode == MODE_X); diff --git a/src/mongo/db/db_raii.h b/src/mongo/db/db_raii.h index 641b64e7988..753909e3c6a 100644 --- a/src/mongo/db/db_raii.h +++ b/src/mongo/db/db_raii.h @@ -128,54 +128,11 @@ private: const Lock::CollectionLock _collLock; Collection* const _coll; - friend class AutoGetCollectionOrView; friend class AutoGetCollectionForRead; friend class AutoGetCollectionForReadCommand; friend class AutoGetCollectionOrViewForReadCommand; }; -/** - * RAII-style class which acquires the appropriate hierarchy of locks for a collection or - * view. The pointer to a view definition is nullptr if it does not exist. - * - * Use this when you have not yet determined if the namespace is a view or a collection. - * For example, you can use this to access a namespace's CursorManager. - * - * It is guaranteed that locks will be released when this object goes out of scope, therefore - * the view returned by this class should not be retained. - */ -class AutoGetCollectionOrView { - MONGO_DISALLOW_COPYING(AutoGetCollectionOrView); - -public: - AutoGetCollectionOrView(OperationContext* opCtx, const NamespaceString& nss, LockMode modeAll); - - /** - * Returns nullptr if the database didn't exist. - */ - Database* getDb() const { - return _autoColl.getDb(); - } - - /** - * Returns nullptr if the collection didn't exist. - */ - Collection* getCollection() const { - return _autoColl.getCollection(); - } - - /** - * Returns nullptr if the view didn't exist. - */ - ViewDefinition* getView() const { - return _view.get(); - } - -private: - const AutoGetCollection _autoColl; - std::shared_ptr _view; -}; - /** * RAII-style class, which acquires a lock on the specified database in the requested mode and * obtains a reference to the database, creating it was non-existing. Used as a shortcut for diff --git a/src/mongo/db/logical_session_id.h b/src/mongo/db/logical_session_id.h index f1fb85ce89e..eca1d8a33f5 100644 --- a/src/mongo/db/logical_session_id.h +++ b/src/mongo/db/logical_session_id.h @@ -32,7 +32,6 @@ #include "mongo/base/status_with.h" #include "mongo/db/logical_session_id_gen.h" -#include "mongo/stdx/unordered_set.h" #include "mongo/util/uuid.h" namespace mongo { diff --git a/src/mongo/db/query/SConscript b/src/mongo/db/query/SConscript index 854f3045506..7c42568f7c0 100644 --- a/src/mongo/db/query/SConscript +++ b/src/mongo/db/query/SConscript @@ -255,7 +255,6 @@ env.Library( ], LIBDEPS=[ "collation/collator_factory_mock", - "$BUILD_DIR/mongo/db/logical_session_id", "$BUILD_DIR/mongo/db/service_context", ], ) diff --git a/src/mongo/db/query/query_test_service_context.cpp b/src/mongo/db/query/query_test_service_context.cpp index 4ad6ac8e857..e2682fe44d4 100644 --- a/src/mongo/db/query/query_test_service_context.cpp +++ b/src/mongo/db/query/query_test_service_context.cpp @@ -44,13 +44,4 @@ ServiceContext::UniqueOperationContext QueryTestServiceContext::makeOperationCon return _uniqueClient->makeOperationContext(); } -ServiceContext::UniqueOperationContext QueryTestServiceContext::makeOperationContext( - LogicalSessionId lsid) { - return _uniqueClient->makeOperationContext(std::move(lsid)); -} - -Client* QueryTestServiceContext::getClient() const { - return _uniqueClient.get(); -} - } // namespace mongo diff --git a/src/mongo/db/query/query_test_service_context.h b/src/mongo/db/query/query_test_service_context.h index 658b73ef36a..7466116d354 100644 --- a/src/mongo/db/query/query_test_service_context.h +++ b/src/mongo/db/query/query_test_service_context.h @@ -29,7 +29,6 @@ #pragma once #include "mongo/db/client.h" -#include "mongo/db/logical_session_id.h" #include "mongo/db/service_context_noop.h" namespace mongo { @@ -45,10 +44,6 @@ public: ServiceContext::UniqueOperationContext makeOperationContext(); - ServiceContext::UniqueOperationContext makeOperationContext(LogicalSessionId lsid); - - Client* getClient() const; - private: ServiceContextNoop _serviceContext; ServiceContext::UniqueClient _uniqueClient; -- cgit v1.2.1