diff options
Diffstat (limited to 'src/mongo/db/storage/wiredtiger')
11 files changed, 30 insertions, 55 deletions
diff --git a/src/mongo/db/storage/wiredtiger/SConscript b/src/mongo/db/storage/wiredtiger/SConscript index aee0fb5d8a5..25bd55e1bb1 100644 --- a/src/mongo/db/storage/wiredtiger/SConscript +++ b/src/mongo/db/storage/wiredtiger/SConscript @@ -127,6 +127,7 @@ if wiredtiger: '$BUILD_DIR/mongo/db/serveronly', '$BUILD_DIR/mongo/db/service_context', '$BUILD_DIR/mongo/db/service_context_d', + '$BUILD_DIR/mongo/db/service_context_test_fixture', '$BUILD_DIR/mongo/db/storage/storage_engine_metadata', '$BUILD_DIR/mongo/db/storage/storage_options', '$BUILD_DIR/mongo/db/storage/wiredtiger/storage_wiredtiger_core', diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_customization_hooks.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_customization_hooks.cpp index 3d4d7ccb3cf..edc40080909 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_customization_hooks.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_customization_hooks.cpp @@ -37,17 +37,14 @@ #include "mongo/stdx/memory.h" namespace mongo { +namespace { -/* Make a WiredTigerCustomizationHooks pointer a decoration on the global ServiceContext */ -MONGO_INITIALIZER_WITH_PREREQUISITES(SetWiredTigerCustomizationHooks, ("ServiceContext")) -(InitializerContext* context) { - auto customizationHooks = stdx::make_unique<WiredTigerCustomizationHooks>(); - WiredTigerCustomizationHooks::set(getGlobalServiceContext(), std::move(customizationHooks)); - - return Status::OK(); -} +ServiceContext::ConstructorActionRegisterer setWiredTigerCustomizationHooks{ + "SetWiredTigerCustomizationHooks", [](ServiceContext* service) { + auto customizationHooks = stdx::make_unique<WiredTigerCustomizationHooks>(); + WiredTigerCustomizationHooks::set(service, std::move(customizationHooks)); + }}; -namespace { const auto getCustomizationHooks = ServiceContext::declareDecoration<std::unique_ptr<WiredTigerCustomizationHooks>>(); } // namespace diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.cpp index b2df3f8c99c..c6e04dc0483 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.cpp @@ -31,35 +31,18 @@ #include "mongo/db/storage/wiredtiger/wiredtiger_extensions.h" -#include "mongo/base/init.h" #include "mongo/base/string_data.h" #include "mongo/db/service_context.h" #include "mongo/stdx/memory.h" namespace mongo { -MONGO_INITIALIZER_WITH_PREREQUISITES(SetWiredTigerExtensions, ("ServiceContext")) -(InitializerContext* context) { - auto configHooks = stdx::make_unique<WiredTigerExtensions>(); - WiredTigerExtensions::set(getGlobalServiceContext(), std::move(configHooks)); - - return Status::OK(); -} - namespace { -const auto getConfigHooks = - ServiceContext::declareDecoration<std::unique_ptr<WiredTigerExtensions>>(); +const auto getConfigHooks = ServiceContext::declareDecoration<WiredTigerExtensions>(); } // namespace -void WiredTigerExtensions::set(ServiceContext* service, - std::unique_ptr<WiredTigerExtensions> configHooks) { - auto& hooks = getConfigHooks(service); - invariant(configHooks); - hooks = std::move(configHooks); -} - WiredTigerExtensions* WiredTigerExtensions::get(ServiceContext* service) { - return getConfigHooks(service).get(); + return &getConfigHooks(service); } std::string WiredTigerExtensions::getOpenExtensionsConfig() const { diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.h b/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.h index ba73a7ff060..94767a08c9b 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.h +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_extensions.h @@ -39,8 +39,6 @@ class ServiceContext; class WiredTigerExtensions { public: - static void set(ServiceContext* service, std::unique_ptr<WiredTigerExtensions> custHooks); - static WiredTigerExtensions* get(ServiceContext* service); /** diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp index 9408642b210..9290b113405 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp @@ -39,7 +39,6 @@ #include "mongo/db/catalog/collection_options.h" #include "mongo/db/jsobj.h" #include "mongo/db/service_context.h" -#include "mongo/db/service_context_d.h" #include "mongo/db/storage/kv/kv_storage_engine.h" #include "mongo/db/storage/storage_engine_init.h" #include "mongo/db/storage/storage_engine_lock_file.h" @@ -179,11 +178,10 @@ public: return true; } }; -} // namespace -MONGO_INITIALIZER_WITH_PREREQUISITES(WiredTigerEngineInit, ("ServiceContext")) -(InitializerContext* context) { - registerStorageEngine(getGlobalServiceContext(), std::make_unique<WiredTigerFactory>()); - return Status::OK(); -} -} +ServiceContext::ConstructorActionRegisterer registerWiredTiger( + "WiredTigerEngineInit", [](ServiceContext* service) { + registerStorageEngine(service, std::make_unique<WiredTigerFactory>()); + }); +} // namespace +} // namespace diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp index 164d52013dd..0815bcf0bc8 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_init_test.cpp @@ -31,6 +31,7 @@ #include "mongo/db/json.h" #include "mongo/db/service_context.h" +#include "mongo/db/service_context_test_fixture.h" #include "mongo/db/storage/storage_engine_init.h" #include "mongo/db/storage/storage_engine_metadata.h" #include "mongo/db/storage/storage_options.h" @@ -43,7 +44,7 @@ namespace { using namespace mongo; -class WiredTigerFactoryTest : public mongo::unittest::Test { +class WiredTigerFactoryTest : public ServiceContextTest { private: virtual void setUp() { ServiceContext* globalEnv = getGlobalServiceContext(); diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp index e598b0e926a..1fb14fecf3b 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp @@ -215,6 +215,7 @@ public: virtual void run() { Client::initThread(name().c_str()); + ON_BLOCK_EXIT([] { Client::destroy(); }); LOG(1) << "starting " << name() << " thread"; @@ -262,6 +263,7 @@ public: virtual void run() { Client::initThread(name().c_str()); + ON_BLOCK_EXIT([] { Client::destroy(); }); LOG(1) << "starting " << name() << " thread"; diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine_test.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine_test.cpp index 4b1a9c28e15..074fa37ab55 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine_test.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine_test.cpp @@ -53,6 +53,8 @@ class WiredTigerKVHarnessHelper : public KVHarnessHelper { public: WiredTigerKVHarnessHelper(bool forRepair = false) : _dbpath("wt-kv-harness"), _forRepair(forRepair) { + if (!hasGlobalServiceContext()) + setGlobalServiceContext(ServiceContext::make()); _engine.reset(makeEngine()); repl::ReplicationCoordinator::set( getGlobalServiceContext(), @@ -101,7 +103,7 @@ private: class WiredTigerKVEngineTest : public unittest::Test { public: void setUp() override { - + setGlobalServiceContext(ServiceContext::make()); Client::initThread(getThreadName()); _helper = makeHelper(); @@ -111,6 +113,7 @@ public: void tearDown() override { _helper.reset(nullptr); Client::destroy(); + setGlobalServiceContext({}); } std::unique_ptr<OperationContext> makeOperationContext() { diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mock.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mock.cpp index 118471655ad..2eb689e642d 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mock.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mock.cpp @@ -34,8 +34,6 @@ #include "mongo/base/init.h" #include "mongo/db/namespace_string.h" #include "mongo/db/service_context.h" -#include "mongo/db/service_context_noop.h" -#include "mongo/db/service_context_registrar.h" #include "mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h" #include <memory> @@ -52,8 +50,5 @@ MONGO_INITIALIZER(SetInitRsOplogBackgroundThreadCallback)(InitializerContext* co return Status::OK(); } -ServiceContextRegistrar serviceContextCreator([]() { - return std::make_unique<ServiceContextNoop>(); -}); } // namespace } // namespace mongo diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mongod.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mongod.cpp index ac4ecfce606..c73e6d949b3 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mongod.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_record_store_mongod.cpp @@ -128,6 +128,7 @@ public: virtual void run() { Client::initThread(_name.c_str()); + ON_BLOCK_EXIT([] { Client::destroy(); }); while (!globalInShutdownDeprecated()) { if (!_deleteExcessDocuments()) { diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_standard_record_store_test.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_standard_record_store_test.cpp index 5433a581a02..479bd470bf5 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_standard_record_store_test.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_standard_record_store_test.cpp @@ -69,14 +69,7 @@ using std::stringstream; class WiredTigerHarnessHelper final : public RecordStoreHarnessHelper { public: - WiredTigerHarnessHelper() - : _dbpath("wt_test"), - _engine(kWiredTigerEngineName, _dbpath.path(), &_cs, "", 1, false, false, false, false) { - repl::ReplicationCoordinator::set( - getGlobalServiceContext(), - std::unique_ptr<repl::ReplicationCoordinator>(new repl::ReplicationCoordinatorMock( - getGlobalServiceContext(), repl::ReplSettings()))); - } + WiredTigerHarnessHelper() : WiredTigerHarnessHelper(""_sd) {} WiredTigerHarnessHelper(StringData extraStrings) : _dbpath("wt_test"), @@ -88,8 +81,11 @@ public: false, false, false, - false) {} - + false) { + repl::ReplicationCoordinator::set(serviceContext(), + std::make_unique<repl::ReplicationCoordinatorMock>( + serviceContext(), repl::ReplSettings())); + } ~WiredTigerHarnessHelper() {} |