summaryrefslogtreecommitdiff
path: root/src/mongo/db/ftdc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/ftdc')
-rw-r--r--src/mongo/db/ftdc/ftdc_mongod.cpp20
-rw-r--r--src/mongo/db/ftdc/ftdc_mongod.h5
2 files changed, 25 insertions, 0 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