diff options
Diffstat (limited to 'src/mongo/db/ftdc')
-rw-r--r-- | src/mongo/db/ftdc/ftdc_mongod.cpp | 20 | ||||
-rw-r--r-- | src/mongo/db/ftdc/ftdc_mongod.h | 5 |
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 |