diff options
Diffstat (limited to 'src/mongo/tools')
-rw-r--r-- | src/mongo/tools/SConscript | 29 | ||||
-rw-r--r-- | src/mongo/tools/mongoebench_main.cpp | 172 | ||||
-rw-r--r-- | src/mongo/tools/mongoebench_options.cpp | 134 | ||||
-rw-r--r-- | src/mongo/tools/mongoebench_options.h | 76 | ||||
-rw-r--r-- | src/mongo/tools/mongoebench_options.idl | 66 | ||||
-rw-r--r-- | src/mongo/tools/mongoebench_options_init.cpp | 56 |
6 files changed, 0 insertions, 533 deletions
diff --git a/src/mongo/tools/SConscript b/src/mongo/tools/SConscript index 10acd257809..6e3e8719c85 100644 --- a/src/mongo/tools/SConscript +++ b/src/mongo/tools/SConscript @@ -32,34 +32,5 @@ mongobridge = env.Program( AIB_COMPONENT='tools', ) -mongoebench = yamlEnv.Program( - target='mongoebench', - source=[ - 'mongoebench_main.cpp', - 'mongoebench_options.cpp', - 'mongoebench_options_init.cpp', - env.Idlc('mongoebench_options.idl')[0], - ], - LIBDEPS=[ - '$BUILD_DIR/mongo/db/dbdirectclient', - '$BUILD_DIR/mongo/db/storage/storage_options', - '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger' if get_option('wiredtiger') == 'on' else [], - '$BUILD_DIR/mongo/embedded/embedded', - '$BUILD_DIR/mongo/embedded/embedded_integration_helpers', - '$BUILD_DIR/mongo/shell/benchrun', - '$BUILD_DIR/mongo/util/signal_handlers', - ], - AIB_COMPONENT="embedded-test", - AIB_COMPONENTS_EXTRA=[ - "tests", - "benchmarks", - ], -) - -# TODO: remove this when hygienic is driving all tarball creation -install_mongoebench = env.Install("#/", mongoebench) -env.Alias("install-embedded-test", [install_mongoebench[0]]) install_mongobridge = env.Install("#/", mongobridge) env.Alias("install-tools", [install_mongobridge[0]]) - -env.Alias('all', mongoebench) # This ensures it compiles and links, but doesn't copy it anywhere. diff --git a/src/mongo/tools/mongoebench_main.cpp b/src/mongo/tools/mongoebench_main.cpp deleted file mode 100644 index 74f81264289..00000000000 --- a/src/mongo/tools/mongoebench_main.cpp +++ /dev/null @@ -1,172 +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::kDefault - -#include "mongo/platform/basic.h" - -#include <boost/filesystem.hpp> - -#include "mongo/base/init.h" -#include "mongo/base/shim.h" -#include "mongo/db/dbdirectclient.h" -#include "mongo/db/service_context.h" -#include "mongo/embedded/embedded.h" -#include "mongo/embedded/embedded_options.h" -#include "mongo/embedded/embedded_options_helpers.h" -#include "mongo/scripting/bson_template_evaluator.h" -#include "mongo/shell/bench.h" -#include "mongo/tools/mongoebench_options.h" -#include "mongo/tools/mongoebench_options_gen.h" -#include "mongo/util/exit.h" -#include "mongo/util/log.h" -#include "mongo/util/options_parser/option_section.h" -#include "mongo/util/signal_handlers.h" -#include "mongo/util/text.h" - -namespace mongo { -namespace { - -/** - * DBDirectClientWithOwnOpCtx is a version of DBDirectClient that owns its own OperationContext. - * - * Since benchRun originally existed only in the mongo shell and was used with only - * DBClientConnections, there isn't a part of the BenchRunConfig or BenchRunWorker interfaces that - * is aware of having an OperationContext. In particular, the mongo shell lacks a ServiceContext and - * therefore also lacks the rest of the Client and OperationContext hierarchy. We shove an - * OperationContext onto the DBDirectClient to work around this limitation for mongoebench to work. - */ -class DBDirectClientWithOwnOpCtx : public DBDirectClient { -public: - DBDirectClientWithOwnOpCtx() - : DBDirectClient(nullptr), _threadClient(getGlobalServiceContext()) { - _opCtx = cc().makeOperationContext(); - setOpCtx(_opCtx.get()); - } - -private: - ThreadClient _threadClient; - ServiceContext::UniqueOperationContext _opCtx; -}; - -MONGO_INITIALIZER_WITH_PREREQUISITES(SignalProcessingStartup, ("ThreadNameInitializer")) -(InitializerContext*) { - // Make sure we call this as soon as possible but before any other threads are started. Before - // embedded::initialize is too early and after is too late. So instead we hook in during the - // global initialization at the right place. - startSignalProcessingThread(); - return Status::OK(); -} - -int mongoeBenchMain(int argc, char* argv[], char** envp) { - ServiceContext* serviceContext = nullptr; - - registerShutdownTask([&]() { - if (serviceContext) { - embedded::shutdown(serviceContext); - } - }); - - setupSignalHandlers(); - - log() << "MongoDB embedded benchRun application, for testing purposes only"; - - try { - optionenvironment::OptionSection startupOptions("Options"); - uassertStatusOK(embedded::addOptions(&startupOptions)); - uassertStatusOK(addMongoeBenchOptions(&startupOptions)); - uassertStatusOK( - embedded_integration_helpers::parseCommandLineOptions(argc, argv, startupOptions)); - serviceContext = embedded::initialize(nullptr); - } catch (const std::exception& ex) { - error() << ex.what(); - return EXIT_BADOPTIONS; - } - - // If a "pre" section was present in the benchRun config file, then we run its operations once - // before running the operations from the "ops" section. - if (mongoeBenchGlobalParams.preConfig) { - auto conn = mongoeBenchGlobalParams.preConfig->createConnection(); - boost::optional<LogicalSessionIdToClient> lsid; - - PseudoRandom rng(mongoeBenchGlobalParams.preConfig->randomSeed); - BsonTemplateEvaluator bsonTemplateEvaluator(mongoeBenchGlobalParams.preConfig->randomSeed); - BenchRunStats stats; - BenchRunOp::State state(&rng, &bsonTemplateEvaluator, &stats); - - for (auto&& op : mongoeBenchGlobalParams.preConfig->ops) { - op.executeOnce(conn.get(), lsid, *mongoeBenchGlobalParams.preConfig, &state); - } - } - - // If an "ops" section was present in the benchRun config file, then we repeatedly run its - // operations across the configured number of threads for the configured number of seconds. - if (mongoeBenchGlobalParams.opsConfig) { - const double seconds = mongoeBenchGlobalParams.opsConfig->seconds; - auto runner = std::make_unique<BenchRunner>(mongoeBenchGlobalParams.opsConfig.release()); - runner->start(); - - sleepmillis(static_cast<long long>(seconds * 1000)); - - BSONObj stats = BenchRunner::finish(runner.release()); - log() << "writing stats to " << mongoeBenchGlobalParams.outputFile.string() << ": " - << stats; - - boost::filesystem::ofstream outfile(mongoeBenchGlobalParams.outputFile); - outfile << stats.jsonString() << '\n'; - } - - shutdown(EXIT_CLEAN); -} - -std::unique_ptr<DBClientBase> benchRunConfigCreateConnectionImplProvider(const BenchRunConfig&) { - return std::unique_ptr<DBClientBase>(new DBDirectClientWithOwnOpCtx()); -} - -auto benchRunConfigCreateConnectionImplRegistration = MONGO_WEAK_FUNCTION_REGISTRATION( - BenchRunConfig::createConnectionImpl, benchRunConfigCreateConnectionImplProvider); -} // namespace - -} // namespace mongo - -#if defined(_WIN32) -// In Windows, wmain() is an alternate entry point for main(), and receives the same parameters as -// main() but encoded in Windows Unicode (UTF-16); "wide" 16-bit wchar_t characters. The -// WindowsCommandLine object converts these wide character strings to a UTF-8 coded equivalent and -// makes them available through the argv() and envp() members. This enables mongoeBenchMain() to -// process UTF-8 encoded arguments and environment variables without regard to platform. -int wmain(int argc, wchar_t* argvW[], wchar_t* envpW[]) { - mongo::WindowsCommandLine wcl(argc, argvW, envpW); - return mongo::mongoeBenchMain(argc, wcl.argv(), wcl.envp()); -} -#else -int main(int argc, char* argv[], char** envp) { - return mongo::mongoeBenchMain(argc, argv, envp); -} -#endif diff --git a/src/mongo/tools/mongoebench_options.cpp b/src/mongo/tools/mongoebench_options.cpp deleted file mode 100644 index f2982ee028a..00000000000 --- a/src/mongo/tools/mongoebench_options.cpp +++ /dev/null @@ -1,134 +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. - */ - -#include "mongo/platform/basic.h" - -#include "mongo/tools/mongoebench_options.h" - -#include <algorithm> -#include <fstream> -#include <iostream> -#include <iterator> - -#include "mongo/base/status.h" -#include "mongo/db/storage/storage_options.h" -#include "mongo/platform/random.h" -#include "mongo/shell/bench.h" -#include "mongo/util/options_parser/startup_options.h" -#include "mongo/util/str.h" - -namespace mongo { - -MongoeBenchGlobalParams mongoeBenchGlobalParams; - -void printMongoeBenchHelp(std::ostream* out) { - *out << "Usage: mongoebench <config file> [options]" << std::endl; - *out << moe::startupOptions.helpString(); - *out << std::flush; -} - -bool handlePreValidationMongoeBenchOptions(const moe::Environment& params) { - if (params.count("help")) { - printMongoeBenchHelp(&std::cout); - return false; - } - return true; -} - -namespace { - -BSONObj getBsonFromJsonFile(const std::string& filename) { - std::ifstream infile(filename.c_str()); - std::string data((std::istreambuf_iterator<char>(infile)), std::istreambuf_iterator<char>()); - return fromjson(data); -} - -boost::filesystem::path kDefaultOutputFile("perf.json"); - -} // namespace - -Status storeMongoeBenchOptions(const moe::Environment& params, - const std::vector<std::string>& args) { - if (!params.count("benchRunConfigFile")) { - return {ErrorCodes::BadValue, "No benchRun config file was specified"}; - } - - BSONObj config = getBsonFromJsonFile(params["benchRunConfigFile"].as<std::string>()); - for (auto&& elem : config) { - const auto fieldName = elem.fieldNameStringData(); - if (fieldName == "pre") { - mongoeBenchGlobalParams.preConfig.reset( - BenchRunConfig::createFromBson(elem.wrap("ops"))); - } else if (fieldName == "ops") { - mongoeBenchGlobalParams.opsConfig.reset(BenchRunConfig::createFromBson(elem.wrap())); - } else { - return {ErrorCodes::BadValue, - str::stream() << "Unrecognized key in benchRun config file: " << fieldName}; - } - } - - int64_t seed = params.count("seed") ? static_cast<int64_t>(params["seed"].as<long>()) - : SecureRandom().nextInt64(); - - if (mongoeBenchGlobalParams.preConfig) { - mongoeBenchGlobalParams.preConfig->randomSeed = seed; - } - - if (mongoeBenchGlobalParams.opsConfig) { - mongoeBenchGlobalParams.opsConfig->randomSeed = seed; - - if (params.count("threads")) { - mongoeBenchGlobalParams.opsConfig->parallel = params["threads"].as<unsigned>(); - } - - if (params.count("time")) { - mongoeBenchGlobalParams.opsConfig->seconds = params["time"].as<double>(); - } - } - - if (params.count("output")) { - mongoeBenchGlobalParams.outputFile = - boost::filesystem::path(params["output"].as<std::string>()); - } else { - boost::filesystem::path dbpath(storageGlobalParams.dbpath); - mongoeBenchGlobalParams.outputFile = dbpath / kDefaultOutputFile; - } - - mongoeBenchGlobalParams.outputFile = mongoeBenchGlobalParams.outputFile.lexically_normal(); - auto parentPath = mongoeBenchGlobalParams.outputFile.parent_path(); - if (!parentPath.empty() && !boost::filesystem::exists(parentPath)) { - return {ErrorCodes::NonExistentPath, - str::stream() << "Directory containing output file must already exist, but " - << parentPath.string() << " wasn't found"}; - } - - return Status::OK(); -} - -} // namespace mongo diff --git a/src/mongo/tools/mongoebench_options.h b/src/mongo/tools/mongoebench_options.h deleted file mode 100644 index fabd676d8b2..00000000000 --- a/src/mongo/tools/mongoebench_options.h +++ /dev/null @@ -1,76 +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 - -#include <boost/filesystem.hpp> -#include <cstdint> -#include <iosfwd> -#include <memory> -#include <string> -#include <vector> - -#include "mongo/base/status.h" - -namespace mongo { - -class BenchRunConfig; - -namespace optionenvironment { - -class OptionSection; -class Environment; - -} // namespace optionenvironment - -namespace moe = mongo::optionenvironment; - -struct MongoeBenchGlobalParams { - std::unique_ptr<BenchRunConfig> preConfig; - std::unique_ptr<BenchRunConfig> opsConfig; - boost::filesystem::path outputFile; -}; - -extern MongoeBenchGlobalParams mongoeBenchGlobalParams; - -Status addMongoeBenchOptions(moe::OptionSection* options); - -void printMongoeBenchHelp(std::ostream* out); - -/** - * Handle options that should come before validation, such as "help". - * - * Returns false if an option was found that implies we should prematurely exit with success. - */ -bool handlePreValidationMongoeBenchOptions(const moe::Environment& params); - -Status storeMongoeBenchOptions(const moe::Environment& params, - const std::vector<std::string>& args); - -} // namespace mongo diff --git a/src/mongo/tools/mongoebench_options.idl b/src/mongo/tools/mongoebench_options.idl deleted file mode 100644 index b86795f8790..00000000000 --- a/src/mongo/tools/mongoebench_options.idl +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (C) 2019-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. -# - -global: - cpp_namespace: "mongo" - configs: - source: [ cli, ini ] - initializer: - register: addMongoeBenchOptions - -configs: - help: - description: 'Show this usage information' - arg_vartype: Switch - - benchRunConfigFile: - description: 'Config file for benchRun' - arg_vartype: String - hidden: true - positional: 1 - - seed: - description: 'Random seed to use' - arg_vartype: Long - - threads: - description: 'Number of benchRun worker threads' - single_name: t - arg_vartype: Unsigned - default: { expr: '1U' } - - time: - description: 'Seconds to run benchRun for' - single_name: s - arg_vartype: Double - default: 1.0 - - output: - description: 'Output file for benchRun stats (defaults to <dbPath>/perf.json)' - single_name: o - arg_vartype: String diff --git a/src/mongo/tools/mongoebench_options_init.cpp b/src/mongo/tools/mongoebench_options_init.cpp deleted file mode 100644 index 4ed8f4d75c5..00000000000 --- a/src/mongo/tools/mongoebench_options_init.cpp +++ /dev/null @@ -1,56 +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. - */ - -#include "mongo/tools/mongoebench_options.h" - -#include "mongo/util/options_parser/startup_option_init.h" -#include "mongo/util/options_parser/startup_options.h" -#include "mongo/util/quick_exit.h" - -namespace mongo { -namespace { - -MONGO_GENERAL_STARTUP_OPTIONS_REGISTER(MongoeBenchOptions)(InitializerContext* context) { - return addMongoeBenchOptions(&moe::startupOptions); -} - -GlobalInitializerRegisterer mongoeBenchOptionsStore( - "MongoeBenchOptions_Store", - [](InitializerContext* context) { - if (!handlePreValidationMongoeBenchOptions(moe::startupOptionsParsed)) { - quickExit(EXIT_SUCCESS); - } - return storeMongoeBenchOptions(moe::startupOptionsParsed, context->args()); - }, - DeinitializerFunction(nullptr), - {"BeginStartupOptionStorage", "EmbeddedOptions_Store"}, - {"EndStartupOptionStorage"}); - -} // namespace -} // namespace mongo |