diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-01-25 18:26:12 -0500 |
---|---|---|
committer | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-01-25 18:37:28 -0500 |
commit | d76c1d8a1061cb4fe8111ded7db18d1ea9e6275e (patch) | |
tree | 36a06b8998b542f8a0536c99ccbde00740f9cf59 /src/mongo/db/repair_database.cpp | |
parent | fca0ff24600172186132291171bd3324afc2b4dc (diff) | |
download | mongo-d76c1d8a1061cb4fe8111ded7db18d1ea9e6275e.tar.gz |
SERVER-39037 Refactor check whether a replica set node is running in standalone mode
Diffstat (limited to 'src/mongo/db/repair_database.cpp')
-rw-r--r-- | src/mongo/db/repair_database.cpp | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/mongo/db/repair_database.cpp b/src/mongo/db/repair_database.cpp index 2e4007b90e1..20808127c4f 100644 --- a/src/mongo/db/repair_database.cpp +++ b/src/mongo/db/repair_database.cpp @@ -234,7 +234,8 @@ Status rebuildIndexesOnCollection(OperationContext* opCtx, namespace { Status repairCollections(OperationContext* opCtx, StorageEngine* engine, - const std::string& dbName) { + const std::string& dbName, + stdx::function<void(const std::string& dbName)> onRecordStoreRepair) { DatabaseCatalogEntry* dbce = engine->getDatabaseCatalogEntry(opCtx, dbName); @@ -242,8 +243,6 @@ Status repairCollections(OperationContext* opCtx, dbce->getCollectionNamespaces(&colls); for (std::list<std::string>::const_iterator it = colls.begin(); it != colls.end(); ++it) { - // Don't check for interrupt after starting to repair a collection otherwise we can - // leave data in an inconsistent state. Interrupting between collections is ok, however. opCtx->checkForInterrupt(); log() << "Repairing collection " << *it; @@ -251,13 +250,19 @@ Status repairCollections(OperationContext* opCtx, Status status = engine->repairRecordStore(opCtx, *it); if (!status.isOK()) return status; + } + + onRecordStoreRepair(dbName); + + for (std::list<std::string>::const_iterator it = colls.begin(); it != colls.end(); ++it) { + opCtx->checkForInterrupt(); CollectionCatalogEntry* cce = dbce->getCollectionCatalogEntry(*it); auto swIndexNameObjs = getIndexNameObjs(opCtx, dbce, cce); if (!swIndexNameObjs.isOK()) return swIndexNameObjs.getStatus(); - status = rebuildIndexesOnCollection(opCtx, dbce, cce, swIndexNameObjs.getValue()); + Status status = rebuildIndexesOnCollection(opCtx, dbce, cce, swIndexNameObjs.getValue()); if (!status.isOK()) return status; @@ -267,7 +272,10 @@ Status repairCollections(OperationContext* opCtx, } } // namespace -Status repairDatabase(OperationContext* opCtx, StorageEngine* engine, const std::string& dbName) { +Status repairDatabase(OperationContext* opCtx, + StorageEngine* engine, + const std::string& dbName, + stdx::function<void(const std::string& dbName)> onRecordStoreRepair) { DisableDocumentValidation validationDisabler(opCtx); // We must hold some form of lock here @@ -308,7 +316,7 @@ Status repairDatabase(OperationContext* opCtx, StorageEngine* engine, const std: } }); - auto status = repairCollections(opCtx, engine, dbName); + auto status = repairCollections(opCtx, engine, dbName, onRecordStoreRepair); if (!status.isOK()) { severe() << "Failed to repair database " << dbName << ": " << status.reason(); return status; @@ -316,4 +324,5 @@ Status repairDatabase(OperationContext* opCtx, StorageEngine* engine, const std: return Status::OK(); } + } // namespace mongo |