diff options
author | Martin Bligh <mbligh@mongodb.com> | 2015-08-08 12:26:04 -0400 |
---|---|---|
committer | Martin Bligh <mbligh@mongodb.com> | 2015-08-08 12:26:39 -0400 |
commit | 68bd6567dbd5079de9a41c93296167ff4923bf9d (patch) | |
tree | c057728f2116aee48920320a5a2023d4929c789c /src/mongo/db/catalog | |
parent | efcbdfee6ed54d4f23682340efd4818c3ba78690 (diff) | |
download | mongo-68bd6567dbd5079de9a41c93296167ff4923bf9d.tar.gz |
SERVER-19564: revert
Diffstat (limited to 'src/mongo/db/catalog')
-rw-r--r-- | src/mongo/db/catalog/collection.cpp | 55 | ||||
-rw-r--r-- | src/mongo/db/catalog/collection.h | 24 | ||||
-rw-r--r-- | src/mongo/db/catalog/rename_collection.cpp | 2 |
3 files changed, 44 insertions, 37 deletions
diff --git a/src/mongo/db/catalog/collection.cpp b/src/mongo/db/catalog/collection.cpp index 49c8e0dda84..3b399b89bbb 100644 --- a/src/mongo/db/catalog/collection.cpp +++ b/src/mongo/db/catalog/collection.cpp @@ -278,7 +278,9 @@ StatusWithMatchExpression Collection::parseValidator(const BSONObj& validator) c return statusWithMatcher; } -Status Collection::insertDocument(OperationContext* txn, const DocWriter* doc, bool enforceQuota) { +StatusWith<RecordId> Collection::insertDocument(OperationContext* txn, + const DocWriter* doc, + bool enforceQuota) { invariant(!_validator || documentValidationDisabled(txn)); dassert(txn->lockState()->isCollectionLockedForMode(ns().toString(), MODE_IX)); invariant(!_indexCatalog.haveAnyIndexes()); // eventually can implement, just not done @@ -288,7 +290,7 @@ Status Collection::insertDocument(OperationContext* txn, const DocWriter* doc, b StatusWith<RecordId> loc = _recordStore->insertRecord(txn, doc, _enforceQuota(enforceQuota)); if (!loc.isOK()) - return loc.getStatus(); + return loc; // we cannot call into the OpObserver here because the document being written is not present // fortunately, this is currently only used for adding entries to the oplog. @@ -300,13 +302,13 @@ Status Collection::insertDocument(OperationContext* txn, const DocWriter* doc, b _cappedNotifier->notifyOfInsert(); } - return loc.getStatus(); + return StatusWith<RecordId>(loc); } -Status Collection::insertDocument(OperationContext* txn, - const BSONObj& docToInsert, - bool enforceQuota, - bool fromMigrate) { +StatusWith<RecordId> Collection::insertDocument(OperationContext* txn, + const BSONObj& docToInsert, + bool enforceQuota, + bool fromMigrate) { { auto status = checkValidation(txn, docToInsert); if (!status.isOK()) @@ -317,18 +319,19 @@ Status Collection::insertDocument(OperationContext* txn, if (_indexCatalog.findIdIndex(txn)) { if (docToInsert["_id"].eoo()) { - return Status(ErrorCodes::InternalError, - str::stream() << "Collection::insertDocument got " - "document without _id for ns:" << _ns.ns()); + return StatusWith<RecordId>(ErrorCodes::InternalError, + str::stream() + << "Collection::insertDocument got " + "document without _id for ns:" << _ns.ns()); } } if (_mustTakeCappedLockOnInsert) synchronizeOnCappedInFlightResource(txn->lockState()); - Status status = _insertDocument(txn, docToInsert, enforceQuota); + StatusWith<RecordId> res = _insertDocument(txn, docToInsert, enforceQuota); invariant(sid == txn->recoveryUnit()->getSnapshotId()); - if (status.isOK()) { + if (res.isOK()) { getGlobalServiceContext()->getOpObserver()->onInsert(txn, ns(), docToInsert, fromMigrate); // If there is a notifier object and another thread is waiting on it, then we notify @@ -339,13 +342,13 @@ Status Collection::insertDocument(OperationContext* txn, } } - return status; + return res; } -Status Collection::insertDocument(OperationContext* txn, - const BSONObj& doc, - MultiIndexBlock* indexBlock, - bool enforceQuota) { +StatusWith<RecordId> Collection::insertDocument(OperationContext* txn, + const BSONObj& doc, + MultiIndexBlock* indexBlock, + bool enforceQuota) { { auto status = checkValidation(txn, doc); if (!status.isOK()) @@ -361,11 +364,11 @@ Status Collection::insertDocument(OperationContext* txn, _recordStore->insertRecord(txn, doc.objdata(), doc.objsize(), _enforceQuota(enforceQuota)); if (!loc.isOK()) - return loc.getStatus(); + return loc; Status status = indexBlock->insert(doc, loc.getValue()); if (!status.isOK()) - return status; + return StatusWith<RecordId>(status); getGlobalServiceContext()->getOpObserver()->onInsert(txn, ns(), doc); @@ -376,12 +379,12 @@ Status Collection::insertDocument(OperationContext* txn, _cappedNotifier->notifyOfInsert(); } - return loc.getStatus(); + return loc; } -Status Collection::_insertDocument(OperationContext* txn, - const BSONObj& docToInsert, - bool enforceQuota) { +StatusWith<RecordId> Collection::_insertDocument(OperationContext* txn, + const BSONObj& docToInsert, + bool enforceQuota) { dassert(txn->lockState()->isCollectionLockedForMode(ns().toString(), MODE_IX)); // TODO: for now, capped logic lives inside NamespaceDetails, which is hidden @@ -391,16 +394,16 @@ Status Collection::_insertDocument(OperationContext* txn, StatusWith<RecordId> loc = _recordStore->insertRecord( txn, docToInsert.objdata(), docToInsert.objsize(), _enforceQuota(enforceQuota)); if (!loc.isOK()) - return loc.getStatus(); + return loc; invariant(RecordId::min() < loc.getValue()); invariant(loc.getValue() < RecordId::max()); Status s = _indexCatalog.indexRecord(txn, docToInsert, loc.getValue()); if (!s.isOK()) - return s; + return StatusWith<RecordId>(s); - return Status::OK(); + return loc; } Status Collection::aboutToDeleteCapped(OperationContext* txn, diff --git a/src/mongo/db/catalog/collection.h b/src/mongo/db/catalog/collection.h index 68eefb7a92f..226378f8e5c 100644 --- a/src/mongo/db/catalog/collection.h +++ b/src/mongo/db/catalog/collection.h @@ -223,21 +223,23 @@ public: * * If enforceQuota is false, quotas will be ignored. */ - Status insertDocument(OperationContext* txn, - const BSONObj& doc, - bool enforceQuota, - bool fromMigrate = false); + StatusWith<RecordId> insertDocument(OperationContext* txn, + const BSONObj& doc, + bool enforceQuota, + bool fromMigrate = false); /** * Callers must ensure no document validation is performed for this collection when calling * this method. */ - Status insertDocument(OperationContext* txn, const DocWriter* doc, bool enforceQuota); + StatusWith<RecordId> insertDocument(OperationContext* txn, + const DocWriter* doc, + bool enforceQuota); - Status insertDocument(OperationContext* txn, - const BSONObj& doc, - MultiIndexBlock* indexBlock, - bool enforceQuota); + StatusWith<RecordId> insertDocument(OperationContext* txn, + const BSONObj& doc, + MultiIndexBlock* indexBlock, + bool enforceQuota); /** * updates the document @ oldLocation with newDoc @@ -378,7 +380,9 @@ private: * - some user error checks * - adjust padding */ - Status _insertDocument(OperationContext* txn, const BSONObj& doc, bool enforceQuota); + StatusWith<RecordId> _insertDocument(OperationContext* txn, + const BSONObj& doc, + bool enforceQuota); bool _enforceQuota(bool userEnforeQuota) const; diff --git a/src/mongo/db/catalog/rename_collection.cpp b/src/mongo/db/catalog/rename_collection.cpp index 6607f49e98f..f618b5e915a 100644 --- a/src/mongo/db/catalog/rename_collection.cpp +++ b/src/mongo/db/catalog/rename_collection.cpp @@ -211,7 +211,7 @@ Status renameCollection(OperationContext* txn, // No logOp necessary because the entire renameCollection command is one logOp. bool shouldReplicateWrites = txn->writesAreReplicated(); txn->setReplicatedWrites(false); - Status status = targetColl->insertDocument(txn, obj, &indexer, true); + Status status = targetColl->insertDocument(txn, obj, &indexer, true).getStatus(); txn->setReplicatedWrites(shouldReplicateWrites); if (!status.isOK()) return status; |