diff options
author | Dianna Hohensee <dianna.hohensee@10gen.com> | 2019-08-22 15:08:27 -0400 |
---|---|---|
committer | Dianna Hohensee <dianna.hohensee@10gen.com> | 2019-08-23 14:46:04 -0400 |
commit | b7d99467558793103243258c393043877afed8d9 (patch) | |
tree | 0d701ebd78e5a6269d96eb0ce9930dc331894622 /src/mongo/db/commands/validate.cpp | |
parent | 6e21bce696347a89a0a74e5f25948a18f1be71a0 (diff) | |
download | mongo-b7d99467558793103243258c393043877afed8d9.tar.gz |
SERVER-42978 Move validate lock acquisition from the cmd body into the helper function and fix all the unit tests
Diffstat (limited to 'src/mongo/db/commands/validate.cpp')
-rw-r--r-- | src/mongo/db/commands/validate.cpp | 52 |
1 files changed, 11 insertions, 41 deletions
diff --git a/src/mongo/db/commands/validate.cpp b/src/mongo/db/commands/validate.cpp index 8a06f7a3df0..8fd9e900e74 100644 --- a/src/mongo/db/commands/validate.cpp +++ b/src/mongo/db/commands/validate.cpp @@ -35,21 +35,15 @@ #include "mongo/db/catalog/collection_validation.h" #include "mongo/db/client.h" #include "mongo/db/commands.h" -#include "mongo/db/db_raii.h" #include "mongo/db/query/internal_plans.h" #include "mongo/db/storage/durable_catalog.h" #include "mongo/db/storage/record_store.h" -#include "mongo/db/views/view_catalog.h" #include "mongo/util/fail_point_service.h" #include "mongo/util/log.h" #include "mongo/util/scopeguard.h" namespace mongo { -using std::endl; -using std::string; -using std::stringstream; - // Sets the 'valid' result field to false and returns immediately. MONGO_FAIL_POINT_DEFINE(validateCmdCollectionNotValid); @@ -112,7 +106,7 @@ public: } bool run(OperationContext* opCtx, - const string& dbname, + const std::string& dbname, const BSONObj& cmdObj, BSONObjBuilder& result) { if (MONGO_FAIL_POINT(validateCmdCollectionNotValid)) { @@ -145,21 +139,6 @@ public: LOG(0) << "CMD: validate " << nss.ns(); } - AutoGetDb autoDB(opCtx, nss.db(), MODE_IX); - Lock::CollectionLock collLock(opCtx, nss, MODE_X); - - Collection* collection = - autoDB.getDb() ? autoDB.getDb()->getCollection(opCtx, nss) : nullptr; - if (!collection) { - if (autoDB.getDb() && ViewCatalog::get(autoDB.getDb())->lookup(opCtx, nss.ns())) { - uasserted(ErrorCodes::CommandNotSupportedOnView, "Cannot validate a view"); - } - - uasserted(ErrorCodes::NamespaceNotFound, "ns not found"); - } - - result.append("ns", nss.ns()); - // Only one validation per collection can be in progress, the rest wait. { stdx::unique_lock<stdx::mutex> lock(_validationMutex); @@ -184,34 +163,25 @@ public: _validationNotifier.notify_all(); }); - ValidateResults results; - Status status = - CollectionValidation::validate(opCtx, collection, level, background, &results, &result); + ValidateResults validateResults; + Status status = CollectionValidation::validate( + opCtx, nss, level, background, &validateResults, &result); if (!status.isOK()) { return CommandHelpers::appendCommandStatusNoThrow(result, status); } - CollectionOptions opts = - DurableCatalog::get(opCtx)->getCollectionOptions(opCtx, collection->ns()); - - // All collections must have a UUID. - if (!opts.uuid) { - results.errors.push_back(str::stream() << "UUID missing on collection " << nss.ns()); - results.valid = false; - } - if (!full) { - results.warnings.push_back( + validateResults.warnings.push_back( "Some checks omitted for speed. use {full:true} option to do more thorough scan."); } - result.appendBool("valid", results.valid); - result.append("warnings", results.warnings); - result.append("errors", results.errors); - result.append("extraIndexEntries", results.extraIndexEntries); - result.append("missingIndexEntries", results.missingIndexEntries); + result.appendBool("valid", validateResults.valid); + result.append("warnings", validateResults.warnings); + result.append("errors", validateResults.errors); + result.append("extraIndexEntries", validateResults.extraIndexEntries); + result.append("missingIndexEntries", validateResults.missingIndexEntries); - if (!results.valid) { + if (!validateResults.valid) { result.append("advice", "A corrupt namespace has been detected. See " "http://dochub.mongodb.org/core/data-recovery for recovery steps."); |