summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClarisse Cheah <clarisse.cheah@mongodb.com>2023-02-15 02:06:49 +0000
committerClarisse Cheah <clarisse.cheah@mongodb.com>2023-02-15 02:06:49 +0000
commitec2e483944eeacaff87149da28ba765c7cabe536 (patch)
tree50012f38744fa1ae05f39a68027c5b0d9eb7de95
parent97ec2c53fe594472ca3ff36f47f00128ec350382 (diff)
downloadmongo-WT-10598-server-param-changes.tar.gz
Add parameter and validatorWT-10598-server-param-changes
-rw-r--r--src/mongo/db/ftdc/ftdc_mongod.cpp20
-rw-r--r--src/mongo/db/ftdc/ftdc_mongod.h5
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp4
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_parameters.idl13
-rw-r--r--src/mongo/db/storage/wiredtiger/wiredtiger_util_test.cpp7
5 files changed, 48 insertions, 1 deletions
diff --git a/src/mongo/db/ftdc/ftdc_mongod.cpp b/src/mongo/db/ftdc/ftdc_mongod.cpp
index 7b4b4468d25..54aff9028bf 100644
--- a/src/mongo/db/ftdc/ftdc_mongod.cpp
+++ b/src/mongo/db/ftdc/ftdc_mongod.cpp
@@ -64,6 +64,26 @@ Status validateCollectionStatsNamespaces(const std::vector<std::string> value,
return Status::OK();
}
+Status validateExtraDiagnostics(const std::vector<std::string> value) {
+ try {
+ std::string flagArr[] = { "all", "concurrent_access", "data_validation", "invalid_op", "out_of_order",
+ "panic", "slow_operation", "visibility" };
+
+ for (const auto& diagFlag : value) {
+ bool exists = std::find(std::begin(flagArr), std::end(flagArr), diagFlag) != std::end(flagArr);
+
+ if (!exists) {
+ return Status(ErrorCodes::BadValue,
+ fmt::format("'{}' is not a valid flag option", diagFlag));
+ }
+ }
+ } catch (...) {
+ return exceptionToStatus();
+ }
+
+ return Status::OK();
+}
+
namespace {
class FTDCCollectionStatsCollector final : public FTDCCollectorInterface {
diff --git a/src/mongo/db/ftdc/ftdc_mongod.h b/src/mongo/db/ftdc/ftdc_mongod.h
index 9108c39ee57..ca064f757be 100644
--- a/src/mongo/db/ftdc/ftdc_mongod.h
+++ b/src/mongo/db/ftdc/ftdc_mongod.h
@@ -55,4 +55,9 @@ void stopMongoDFTDC();
Status validateCollectionStatsNamespaces(std::vector<std::string> value,
const boost::optional<TenantId>& tenantId);
+/**
+ * Validation callback for extra diagnostics setParameter
+ */
+Status validateExtraDiagnostics(std::vector<std::string> value);
+
} // namespace mongo
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
index 257e755c928..ac5f4362967 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_kv_engine.cpp
@@ -47,6 +47,7 @@
#include "mongo/db/storage/wiredtiger/wiredtiger_kv_engine.h"
+#include <boost/algorithm/string/join.hpp>
#include <boost/filesystem.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/filesystem/operations.hpp>
@@ -363,6 +364,9 @@ WiredTigerKVEngine::WiredTigerKVEngine(OperationContext* opCtx,
if (gWiredTigerEvictionDirtyTargetGB)
ss << "eviction_dirty_target="
<< static_cast<size_t>(gWiredTigerEvictionDirtyTargetGB * 1024) << "MB,";
+ if (!gWiredTigerExtraDiagnostics.empty())
+ ss << "extra_diagnostics=["
+ << boost::algorithm::join(gWiredTigerExtraDiagnostics, ",") << "],";
if (gWiredTigerEvictionDirtyMaxGB)
ss << "eviction_dirty_trigger=" << static_cast<size_t>(gWiredTigerEvictionDirtyMaxGB * 1024)
<< "MB,";
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.idl b/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.idl
index 7a26b0190e5..c02771e1b5c 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.idl
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_parameters.idl
@@ -110,7 +110,7 @@ server_parameters:
cpp_vartype: 'double'
cpp_varname: gWiredTigerEvictionDirtyTargetGB
default: 0
- validator:
+ :
gte: 0.01
lte: 10000
@@ -150,6 +150,17 @@ server_parameters:
validator:
gte: 1
+ wiredTigerExtraDiagnostics:
+ description: >-
+ Extra diagnostics that can be enabled in release mode including diagnostic assertions that can cause WiredTiger to abort upon
+ detected invalid state. Valid options include: ["all", "concurrent_access", "data_validation", "invalid_op", "out_of_order",
+ "panic", "slow_operation", "visibility"]
+ set_at: [startup, runtime]
+ cpp_vartype: 'synchronized_value<std::vector<std::string>>'
+ cpp_varname: "gwiredTigerExtraDiagnostics"
+ validator:
+ callback: validateExtraDiagnostics
+
wiredTigerFileHandleCloseMinimum:
description: >-
The number of handles open before the WiredTiger file manager will look for handles to close.
diff --git a/src/mongo/db/storage/wiredtiger/wiredtiger_util_test.cpp b/src/mongo/db/storage/wiredtiger/wiredtiger_util_test.cpp
index 83851b4ba9b..515ca8bfe0e 100644
--- a/src/mongo/db/storage/wiredtiger/wiredtiger_util_test.cpp
+++ b/src/mongo/db/storage/wiredtiger/wiredtiger_util_test.cpp
@@ -146,6 +146,13 @@ private:
std::unique_ptr<OperationContext> _opCtx;
};
+TEST_F(WiredTigerUtilMetadataTest, GetMetadataCreateExtraDiagnostics) {
+ StatusWith<std::string> result =
+ WiredTigerUtil::getMetadataCreate(getOperationContext(), getURI());
+ ASSERT_NOT_OK(result.getStatus());
+ ASSERT_EQUALS(ErrorCodes::NoSuchKey, result.getStatus().code());
+}
+
TEST_F(WiredTigerUtilMetadataTest, GetMetadataCreateInvalid) {
StatusWith<std::string> result =
WiredTigerUtil::getMetadataCreate(getOperationContext(), getURI());