summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-01-30 10:32:50 -0500
committerGregory Wlodarek <gregory.wlodarek@mongodb.com>2019-01-30 19:09:16 -0500
commitce59b7d82ef02708ff0852789399aa65f4f41e1d (patch)
tree063953ffffa63eb19504468d872314a7fd2f5986
parente311d83680e698ac485271968a6d2355a9438e38 (diff)
downloadmongo-ce59b7d82ef02708ff0852789399aa65f4f41e1d.tar.gz
SERVER-39290 Remove startup index recovery redundancies
-rw-r--r--src/mongo/db/SConscript1
-rw-r--r--src/mongo/db/db.cpp3
-rw-r--r--src/mongo/db/index_rebuilder.cpp156
-rw-r--r--src/mongo/db/index_rebuilder.h42
-rw-r--r--src/mongo/embedded/embedded.cpp5
5 files changed, 0 insertions, 207 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);
-}
diff --git a/src/mongo/embedded/embedded.cpp b/src/mongo/embedded/embedded.cpp
index 712dac1b8de..2104d93dcf7 100644
--- a/src/mongo/embedded/embedded.cpp
+++ b/src/mongo/embedded/embedded.cpp
@@ -46,7 +46,6 @@
#include "mongo/db/concurrency/lock_state.h"
#include "mongo/db/dbdirectclient.h"
#include "mongo/db/global_settings.h"
-#include "mongo/db/index_rebuilder.h"
#include "mongo/db/kill_sessions_local.h"
#include "mongo/db/logical_clock.h"
#include "mongo/db/op_observer_impl.h"
@@ -316,10 +315,6 @@ ServiceContext* initialize(const char* yaml_config) {
// This is for security on certain platforms (nonce generation)
srand((unsigned)(curTimeMicros64()) ^ (unsigned(uintptr_t(&startupOpCtx))));
- if (!storageGlobalParams.readOnly) {
- restartInProgressIndexesFromLastShutdown(startupOpCtx.get());
- }
-
// Set up the logical session cache
auto sessionCache = makeLogicalSessionCacheEmbedded();
LogicalSessionCache::set(serviceContext, std::move(sessionCache));