diff options
Diffstat (limited to 'src/mongo/db/catalog/database_holder_impl.cpp')
-rw-r--r-- | src/mongo/db/catalog/database_holder_impl.cpp | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/mongo/db/catalog/database_holder_impl.cpp b/src/mongo/db/catalog/database_holder_impl.cpp index af081c9d594..62f424e8b2a 100644 --- a/src/mongo/db/catalog/database_holder_impl.cpp +++ b/src/mongo/db/catalog/database_holder_impl.cpp @@ -42,6 +42,7 @@ #include "mongo/db/client.h" #include "mongo/db/clientcursor.h" #include "mongo/db/operation_context.h" +#include "mongo/db/repl/oplog.h" #include "mongo/db/service_context.h" #include "mongo/db/storage/storage_engine.h" #include "mongo/util/log.h" @@ -183,6 +184,15 @@ Database* DatabaseHolderImpl::openDb(OperationContext* opCtx, StringData ns, boo return it->second; } +namespace { +void evictDatabaseFromUUIDCatalog(OperationContext* opCtx, Database* db) { + UUIDCatalog::get(opCtx).onCloseDatabase(db); + for (auto&& coll : *db) { + NamespaceUUIDCache::get(opCtx).evictNamespace(coll->ns()); + } +} +} // namespace + void DatabaseHolderImpl::close(OperationContext* opCtx, StringData ns, const std::string& reason) { invariant(opCtx->lockState()->isW()); @@ -196,10 +206,8 @@ void DatabaseHolderImpl::close(OperationContext* opCtx, StringData ns, const std } auto db = it->second; - UUIDCatalog::get(opCtx).onCloseDatabase(db); - for (auto&& coll : *db) { - NamespaceUUIDCache::get(opCtx).evictNamespace(coll->ns()); - } + repl::oplogCheckCloseDatabase(opCtx, db); + evictDatabaseFromUUIDCatalog(opCtx, db); db->close(opCtx, reason); delete db; @@ -241,6 +249,8 @@ bool DatabaseHolderImpl::closeAll(OperationContext* opCtx, } Database* db = _dbs[name]; + repl::oplogCheckCloseDatabase(opCtx, db); + evictDatabaseFromUUIDCatalog(opCtx, db); db->close(opCtx, reason); delete db; |