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/wiredtiger_parameters.cpp | |
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/wiredtiger_parameters.cpp')
-rw-r--r-- | src/mongo/db/storage/wiredtiger/wiredtiger_parameters.cpp | 86 |
1 files changed, 86 insertions, 0 deletions
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 |