summaryrefslogtreecommitdiff
path: root/src/mongo/db/storage/wiredtiger
diff options
context:
space:
mode:
authorMark Benvenuto <mark.benvenuto@mongodb.com>2014-11-11 16:46:36 -0500
committerMark Benvenuto <mark.benvenuto@mongodb.com>2014-11-18 15:33:10 -0500
commit7ec1120f79778344a57a6c65fa57cdf6480857ef (patch)
tree9614e3db64ba34723aed086a1c73df8577f82bdf /src/mongo/db/storage/wiredtiger
parent20c218d3d3df17c820b9cd3e6399a2dec6755d94 (diff)
downloadmongo-7ec1120f79778344a57a6c65fa57cdf6480857ef.tar.gz
SERVER-16019: Add support to setParameter for WT_CONNECTION::reconfigure
Diffstat (limited to 'src/mongo/db/storage/wiredtiger')
-rw-r--r--src/mongo/db/storage/wiredtiger/SConscript1
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_init.cpp2
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp4
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h3
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_parameters.cpp86
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_parameters.h52
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