summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.cpp')
-rw-r--r--src/mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.cpp17
1 files changed, 14 insertions, 3 deletions
diff --git a/src/mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.cpp b/src/mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.cpp
index 278474cabb0..a1c6cf5eb4f 100644
--- a/src/mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.cpp
+++ b/src/mongo/db/storage/mmap_v1/catalog/namespace_details_collection_entry.cpp
@@ -360,10 +360,21 @@ void NamespaceDetailsCollectionCatalogEntry::_updateSystemNamespaces(OperationCo
RecordData entry = _namespacesRecordStore->dataFor(txn, _namespacesRecordId);
const BSONObj newEntry = applyUpdateOperators(entry.releaseToBson(), update);
- StatusWith<RecordId> result = _namespacesRecordStore->updateRecord(
+
+ Status result = _namespacesRecordStore->updateRecord(
txn, _namespacesRecordId, newEntry.objdata(), newEntry.objsize(), false, NULL);
- fassert(17486, result.getStatus());
- setNamespacesRecordId(txn, result.getValue());
+
+ if (ErrorCodes::NeedsDocumentMove == result) {
+ StatusWith<RecordId> newLocation = _namespacesRecordStore->insertRecord(
+ txn, newEntry.objdata(), newEntry.objsize(), false);
+ fassert(40074, newLocation.getStatus().isOK());
+
+ _namespacesRecordStore->deleteRecord(txn, _namespacesRecordId);
+
+ setNamespacesRecordId(txn, newLocation.getValue());
+ } else {
+ fassert(17486, result.isOK());
+ }
}
void NamespaceDetailsCollectionCatalogEntry::updateFlags(OperationContext* txn, int newValue) {