summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp')
-rw-r--r--src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp b/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
index 60c3055f3cc..f6e0e6c185c 100644
--- a/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
+++ b/src/mongo/db/storage/mmap_v1/mmap_v1_database_catalog_entry.cpp
@@ -383,6 +383,15 @@ Status MMAPV1DatabaseCatalogEntry::_renameSingleNamespace(OperationContext* txn,
RecordId rid = _addNamespaceToNamespaceCollection(txn, toNS, newSpec.isEmpty() ? 0 : &newSpec);
+ // Invalidate old namespace record
+ const NamespaceString nsn(name(), "system.namespaces");
+ StringData dbName(name());
+ invariant(txn->lockState()->isDbLockedForMode(dbName, MODE_X));
+ Database* db = dbHolder().get(txn, dbName);
+ Collection* systemNamespaces = db->getCollection(nsn);
+ systemNamespaces->getCursorManager()->invalidateDocument(
+ txn, oldSpecLocation, INVALIDATION_DELETION);
+
_getNamespaceRecordStore()->deleteRecord(txn, oldSpecLocation);
Entry*& entry = _collections[toNS.toString()];
@@ -811,7 +820,17 @@ void MMAPV1DatabaseCatalogEntry::_removeNamespaceFromNamespaceCollection(Operati
RecordStoreV1Base* rs = _getNamespaceRecordStore();
invariant(rs);
- rs->deleteRecord(txn, entry->second->catalogEntry->getNamespacesRecordId());
+ // Invalidate old namespace record
+ RecordId oldSpecLocation = entry->second->catalogEntry->getNamespacesRecordId();
+ const NamespaceString nsn(name(), "system.namespaces");
+ StringData dbName(name());
+ invariant(txn->lockState()->isDbLockedForMode(dbName, MODE_X));
+ Database* db = dbHolder().get(txn, dbName);
+ Collection* systemNamespaces = db->getCollection(nsn);
+ systemNamespaces->getCursorManager()->invalidateDocument(
+ txn, oldSpecLocation, INVALIDATION_DELETION);
+
+ rs->deleteRecord(txn, oldSpecLocation);
}
CollectionOptions MMAPV1DatabaseCatalogEntry::getCollectionOptions(OperationContext* txn,