summaryrefslogtreecommitdiff
path: root/src/mongo/db/catalog
diff options
context:
space:
mode:
authorMartin Bligh <mbligh@mongodb.com>2015-08-08 12:26:04 -0400
committerMartin Bligh <mbligh@mongodb.com>2015-08-08 12:26:39 -0400
commit68bd6567dbd5079de9a41c93296167ff4923bf9d (patch)
treec057728f2116aee48920320a5a2023d4929c789c /src/mongo/db/catalog
parentefcbdfee6ed54d4f23682340efd4818c3ba78690 (diff)
downloadmongo-68bd6567dbd5079de9a41c93296167ff4923bf9d.tar.gz
SERVER-19564: revert
Diffstat (limited to 'src/mongo/db/catalog')
-rw-r--r--src/mongo/db/catalog/collection.cpp55
-rw-r--r--src/mongo/db/catalog/collection.h24
-rw-r--r--src/mongo/db/catalog/rename_collection.cpp2
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;