diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-11-11 16:46:36 -0500 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2014-11-18 15:33:10 -0500 |
commit | 7ec1120f79778344a57a6c65fa57cdf6480857ef (patch) | |
tree | 9614e3db64ba34723aed086a1c73df8577f82bdf /src/mongo/db/storage/wiredtiger | |
parent | 20c218d3d3df17c820b9cd3e6399a2dec6755d94 (diff) | |
download | mongo-7ec1120f79778344a57a6c65fa57cdf6480857ef.tar.gz |
SERVER-16019: Add support to setParameter for WT_CONNECTION::reconfigure
Diffstat (limited to 'src/mongo/db/storage/wiredtiger')
6 files changed, 148 insertions, 0 deletions
diff --git a/src/mongo/db/storage/wiredtiger/SConscript b/src/mongo/db/storage/wiredtiger/SConscript index 9904dacee54..0e96594a067 100644 --- a/src/mongo/db/storage/wiredtiger/SConscript +++ b/src/mongo/db/storage/wiredtiger/SConscript @@ -39,6 +39,7 @@ if wiredtiger: 'wiredtiger_global_options.cpp', 'wiredtiger_init.cpp', 'wiredtiger_options_init.cpp', + 'wiredtiger_parameters.cpp', 'wiredtiger_server_status.cpp', ], LIBDEPS=['storage_wiredtiger_core', diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp index 8bf013cbf28..26d3eec46b0 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp @@ -35,6 +35,7 @@ #include "mongo/db/storage/kv/kv_storage_engine.h" #include "mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h" #include "mongo/db/storage/wiredtiger/wiredtiger_global_options.h" +#include "mongo/db/storage/wiredtiger/wiredtiger_parameters.h" #include "mongo/db/storage/wiredtiger/wiredtiger_server_status.h" #include "mongo/db/storage_options.h" @@ -52,6 +53,7 @@ namespace mongo { kv->setSortedDataInterfaceExtraOptions( wiredTigerGlobalOptions.indexConfig ); // Intentionally leaked. new WiredTigerServerStatusSection(kv); + new WiredTigerEngineRuntimeConfigSetting(kv); return new KVStorageEngine( kv ); } }; diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp index 6265914fb26..24b820a76b7 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp @@ -417,4 +417,8 @@ namespace mongo { return all; } + + int WiredTigerKVEngine::reconfigure(const char* str) { + return _conn->reconfigure(_conn, str); + } } diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h index b409fabff41..0d2efc4cd44 100644 --- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h @@ -104,6 +104,9 @@ namespace mongo { virtual void cleanShutdown(OperationContext* txn); // wiredtiger specific + // Calls WT_CONNECTION::reconfigure on the underlying WT_CONNECTION + // held by this class + int reconfigure(const char* str); WT_CONNECTION* getConnection() { return _conn; } void dropAllQueued(); diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.cpp new file mode 100644 index 00000000000..b98f2a6bcf7 --- /dev/null +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.cpp @@ -0,0 +1,86 @@ +/** +* Copyright (C) 2014 MongoDB Inc. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License, version 3, +* as published by the Free Software Foundation. +* +* 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 +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* 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 GNU Affero General 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::kStorage + +#include "mongo/platform/basic.h" + +#include "mongo/db/storage/wiredtiger/wiredtiger_parameters.h" + +#include "mongo/logger/parse_log_component_settings.h" +#include "mongo/util/log.h" +#include "mongo/util/mongoutils/str.h" + +namespace mongo { + +WiredTigerEngineRuntimeConfigSetting::WiredTigerEngineRuntimeConfigSetting( + WiredTigerKVEngine* engine) + : ServerParameter(ServerParameterSet::getGlobal(), + "wiredtigerEngineRuntimeConfigSetting", false, true), + _engine(engine) {} + + +void WiredTigerEngineRuntimeConfigSetting::append(OperationContext* txn, BSONObjBuilder& b, + const std::string& name) { + b << name << ""; +} + +Status WiredTigerEngineRuntimeConfigSetting::set(const BSONElement& newValueElement) { + try { + return setFromString(newValueElement.String()); + } + catch (MsgAssertionException msg) { + return Status(ErrorCodes::BadValue, mongoutils::str::stream() << + "Invalid value for wiredtigerEngineRuntimeConfigSetting via setParameter command: " + << newValueElement); + } +} + +Status WiredTigerEngineRuntimeConfigSetting::setFromString(const std::string& str) { + size_t pos = str.find('\0'); + if (pos != std::string::npos) { + return Status(ErrorCodes::BadValue, (str::stream() << + "WiredTiger configuration strings cannot have embedded null characters. " + "Embedded null found at position " << pos)); + } + + log() << "Reconfiguring WiredTiger storage engine with config string: \"" << str << "\""; + + int ret = _engine->reconfigure(str.c_str()); + if (ret != 0) { + string result = (mongoutils::str::stream() << + "WiredTiger reconfiguration failed with error code (" << ret << "): " + << wiredtiger_strerror(ret)); + error() << result; + + return Status(ErrorCodes::BadValue, result); + } + + return Status::OK(); +} + +}
\ No newline at end of file diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.h b/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.h new file mode 100644 index 00000000000..f6060b17d3f --- /dev/null +++ b/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.h @@ -0,0 +1,52 @@ +/** +* Copyright (C) 2014 MongoDB Inc. +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero General Public License, version 3, +* as published by the Free Software Foundation. +* +* 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 +* GNU Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +* +* 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 GNU Affero General 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/base/disallow_copying.h" +#include "mongo/db/server_parameters.h" +#include "mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h" + +namespace mongo { + + /** + * WT_CONNECTION::reconfigure get/setParameter support + */ + class WiredTigerEngineRuntimeConfigSetting : public ServerParameter { + MONGO_DISALLOW_COPYING(WiredTigerEngineRuntimeConfigSetting); + public: + explicit WiredTigerEngineRuntimeConfigSetting(WiredTigerKVEngine* engine); + + virtual void append(OperationContext* txn, BSONObjBuilder& b, + const std::string& name); + virtual Status set(const BSONElement& newValueElement); + + virtual Status setFromString(const std::string& str); + + private: + WiredTigerKVEngine* _engine; + }; +}
\ No newline at end of file |