summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog/database_holder_impl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/catalog/database_holder_impl.cpp')
-rw-r--r--src/mongo/db/catalog/database_holder_impl.cpp18
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;