diff options
author | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-01-30 10:32:50 -0500 |
---|---|---|
committer | Gregory Wlodarek <gregory.wlodarek@mongodb.com> | 2019-01-30 19:09:16 -0500 |
commit | ce59b7d82ef02708ff0852789399aa65f4f41e1d (patch) | |
tree | 063953ffffa63eb19504468d872314a7fd2f5986 /src/mongo/db | |
parent | e311d83680e698ac485271968a6d2355a9438e38 (diff) | |
download | mongo-ce59b7d82ef02708ff0852789399aa65f4f41e1d.tar.gz |
SERVER-39290 Remove startup index recovery redundancies
Diffstat (limited to 'src/mongo/db')
-rw-r--r-- | src/mongo/db/SConscript | 1 | ||||
-rw-r--r-- | src/mongo/db/db.cpp | 3 | ||||
-rw-r--r-- | src/mongo/db/index_rebuilder.cpp | 156 | ||||
-rw-r--r-- | src/mongo/db/index_rebuilder.h | 42 |
4 files changed, 0 insertions, 202 deletions
diff --git a/src/mongo/db/SConscript b/src/mongo/db/SConscript index f1afac437ea..4ece86d1ee3 100644 --- a/src/mongo/db/SConscript +++ b/src/mongo/db/SConscript @@ -996,7 +996,6 @@ env.Library( source=[ "index_builder.cpp", "index_legacy.cpp", - "index_rebuilder.cpp", ], LIBDEPS=[ 'db_raii', diff --git a/src/mongo/db/db.cpp b/src/mongo/db/db.cpp index f25199d6523..f678e0b11b6 100644 --- a/src/mongo/db/db.cpp +++ b/src/mongo/db/db.cpp @@ -77,7 +77,6 @@ #include "mongo/db/global_settings.h" #include "mongo/db/index_builds_coordinator_mongod.h" #include "mongo/db/index_names.h" -#include "mongo/db/index_rebuilder.h" #include "mongo/db/initialize_server_global_state.h" #include "mongo/db/initialize_server_security_state.h" #include "mongo/db/initialize_snmp.h" @@ -533,8 +532,6 @@ ExitCode _initAndListen(int listenPort) { startFreeMonitoring(serviceContext); - restartInProgressIndexesFromLastShutdown(startupOpCtx.get()); - if (serverGlobalParams.clusterRole == ClusterRole::ShardServer) { // Note: For replica sets, ShardingStateRecovery happens on transition to primary. if (!repl::ReplicationCoordinator::get(startupOpCtx.get())->isReplEnabled()) { diff --git a/src/mongo/db/index_rebuilder.cpp b/src/mongo/db/index_rebuilder.cpp deleted file mode 100644 index dd615a2900c..00000000000 --- a/src/mongo/db/index_rebuilder.cpp +++ /dev/null @@ -1,156 +0,0 @@ - -/** - * Copyright (C) 2018-present MongoDB, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the Server Side Public License, version 1, - * as published by MongoDB, Inc. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * Server Side Public License for more details. - * - * You should have received a copy of the Server Side Public License - * along with this program. If not, see - * <http://www.mongodb.com/licensing/server-side-public-license>. - * - * As a special exception, the copyright holders give permission to link the - * code of portions of this program with the OpenSSL library under certain - * conditions as described in each individual source file and distribute - * linked combinations including the program with the OpenSSL library. You - * must comply with the Server Side Public License in all respects for - * all of the code used other than as permitted herein. If you modify file(s) - * with this exception, you may extend this exception to your version of the - * file(s), but you are not obligated to do so. If you do not wish to do so, - * delete this exception statement from your version. If you delete this - * exception statement from all source files in the program, then also delete - * it in the license file. - */ - -#define MONGO_LOG_DEFAULT_COMPONENT ::mongo::logger::LogComponent::kIndex - -#include "mongo/platform/basic.h" - -#include "mongo/db/index_rebuilder.h" - -#include <list> -#include <string> - -#include "mongo/db/auth/authorization_session.h" -#include "mongo/db/auth/user_name.h" -#include "mongo/db/catalog/collection.h" -#include "mongo/db/catalog/database.h" -#include "mongo/db/catalog/database_catalog_entry.h" -#include "mongo/db/catalog/multi_index_block.h" -#include "mongo/db/client.h" -#include "mongo/db/db_raii.h" -#include "mongo/db/service_context.h" -#include "mongo/db/storage/storage_engine.h" -#include "mongo/util/log.h" -#include "mongo/util/scopeguard.h" - -namespace mongo { - -using std::endl; -using std::string; -using std::vector; - -namespace { -void checkNS(OperationContext* opCtx, const std::list<std::string>& nsToCheck) { - for (std::list<std::string>::const_iterator it = nsToCheck.begin(); it != nsToCheck.end(); - ++it) { - NamespaceString nss(*it); - - LOG(3) << "IndexRebuilder::checkNS: " << nss.ns(); - - // This write lock is held throughout the index building process for this namespace. - Lock::DBLock lk(opCtx, nss.db(), MODE_X); - OldClientContext ctx(opCtx, nss.ns()); - - Collection* collection = ctx.db()->getCollection(opCtx, nss); - if (collection == NULL) - continue; - - IndexCatalog* indexCatalog = collection->getIndexCatalog(); - - if (collection->ns().isOplog() && indexCatalog->numIndexesTotal(opCtx) > 0) { - warning() << nss.ns() << " had illegal indexes, removing"; - indexCatalog->dropAllIndexes(opCtx, true); - continue; - } - - - MultiIndexBlock indexer(opCtx, collection); - - { - WriteUnitOfWork wunit(opCtx); - vector<BSONObj> indexesToBuild = indexCatalog->getAndClearUnfinishedIndexes(opCtx); - - // The indexes have now been removed from persisted memory, so the only record is - // in-memory. If there is a journal commit between now and when 'indexer.init' rewrites - // the entry and the db crashes before the new persisted index state is journalled, the - // index will be lost forever. Thus, we must stay in the same WriteUnitOfWork to ensure - // that no journaling will happen between now and the entry being re-written in - // MultiIndexBlock::init(). The actual index building is done outside of this WUOW. - - if (indexesToBuild.empty()) { - continue; - } - - log() << "found " << indexesToBuild.size() << " interrupted index build(s) on " - << nss.ns(); - - uassertStatusOK(indexer.init(indexesToBuild)); - - wunit.commit(); - } - - try { - uassertStatusOK(indexer.insertAllDocumentsInCollection()); - - WriteUnitOfWork wunit(opCtx); - uassertStatusOK(indexer.commit()); - wunit.commit(); - } catch (const DBException& e) { - error() << "Index rebuilding did not complete: " << redact(e); - // If anything went wrong, leave the indexes partially built so that we pick them up - // again on restart. - indexer.abortWithoutCleanup(); - fassertFailedNoTrace(26100); - } catch (...) { - // If anything went wrong, leave the indexes partially built so that we pick them up - // again on restart. - indexer.abortWithoutCleanup(); - throw; - } - } -} -} // namespace - -void restartInProgressIndexesFromLastShutdown(OperationContext* opCtx) { - AuthorizationSession::get(opCtx->getClient())->grantInternalAuthorization(); - - std::vector<std::string> dbNames; - - StorageEngine* storageEngine = getGlobalServiceContext()->getStorageEngine(); - storageEngine->listDatabases(&dbNames); - - try { - std::list<std::string> collNames; - for (std::vector<std::string>::const_iterator dbName = dbNames.begin(); - dbName < dbNames.end(); - ++dbName) { - AutoGetDb autoDb(opCtx, *dbName, MODE_S); - - Database* db = autoDb.getDb(); - db->getDatabaseCatalogEntry()->getCollectionNamespaces(&collNames); - } - checkNS(opCtx, collNames); - } catch (const DBException& e) { - error() << "Index verification did not complete: " << redact(e); - fassertFailedNoTrace(18643); - } - LOG(1) << "checking complete"; -} -} diff --git a/src/mongo/db/index_rebuilder.h b/src/mongo/db/index_rebuilder.h deleted file mode 100644 index 2e08a972c66..00000000000 --- a/src/mongo/db/index_rebuilder.h +++ /dev/null @@ -1,42 +0,0 @@ - -/** - * Copyright (C) 2018-present MongoDB, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the Server Side Public License, version 1, - * as published by MongoDB, Inc. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * Server Side Public License for more details. - * - * You should have received a copy of the Server Side Public License - * along with this program. If not, see - * <http://www.mongodb.com/licensing/server-side-public-license>. - * - * As a special exception, the copyright holders give permission to link the - * code of portions of this program with the OpenSSL library under certain - * conditions as described in each individual source file and distribute - * linked combinations including the program with the OpenSSL library. You - * must comply with the Server Side Public License in all respects for - * all of the code used other than as permitted herein. If you modify file(s) - * with this exception, you may extend this exception to your version of the - * file(s), but you are not obligated to do so. If you do not wish to do so, - * delete this exception statement from your version. If you delete this - * exception statement from all source files in the program, then also delete - * it in the license file. - */ - -#pragma once - -namespace mongo { - -class OperationContext; - -/** - * Restarts building indexes that were in progress during shutdown. - * Only call this at startup before taking requests. - */ -void restartInProgressIndexesFromLastShutdown(OperationContext* opCtx); -} |