diff options
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.cpp | 17 |
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) { |