NVMeMetric: disable HostInit log for OCP boot drives
This is a walk-around solution. It should be resolved by the long term
solution via b/404877612
The OCP boot drive implements a very large data area 1 for 07h log,
which is incompatible to transfer via OOB. We need to disable the Metric
so it won't blocks other NVMe transmission
Tested: b/404902460#comment3
Google-Bug-Id: 404902460
Signed-off-by: Hao Jiang <jianghao@google.com>
Change-Id: Icc0943b732c3a02dc470a7ff92ab039261c52771
diff --git a/src/NVMeController.cpp b/src/NVMeController.cpp
index bae660b..bb544cb 100644
--- a/src/NVMeController.cpp
+++ b/src/NVMeController.cpp
@@ -21,6 +21,23 @@
using sdbusplus::xyz::openbmc_project::NVMe::server::NVMeAdmin;
using SchedulerClockType = std::chrono::steady_clock;
+inline std::optional<std::string> findPluginName(const SensorData& config)
+{
+ // find base configuration
+ auto sensorBase = config.find(configInterfaceName(nvme::sensorType));
+ if (sensorBase == config.end())
+ {
+ return {};
+ }
+ const SensorBaseConfigMap& sensorConfig = sensorBase->second;
+ auto findPlugin = sensorConfig.find("Plugin");
+ if (findPlugin == sensorConfig.end())
+ {
+ return std::nullopt;
+ }
+ return std::get<std::string>(findPlugin->second);
+}
+
std::shared_ptr<NVMeControllerEnabled>
NVMeControllerEnabled::create(NVMeController&& nvmeController)
{
@@ -231,13 +248,15 @@
// TODO: configurable interval
std::chrono::duration_cast<SchedulerClockType::duration>(
std::chrono::seconds(60))));
-
+ auto pluginName = findPluginName(config);
auto hostTelemetry =
- std::shared_ptr<HostTelemetryMetric>(new HostTelemetryMetric(
- this->weak_from_this(), scheduler,
- // TODO: configurable interval
- std::chrono::duration_cast<SchedulerClockType::duration>(
- std::chrono::seconds(900))));
+ (!pluginName || pluginName != "OCP")
+ ? std::shared_ptr<HostTelemetryMetric>(new HostTelemetryMetric(
+ this->weak_from_this(), scheduler,
+ // TODO: configurable interval
+ std::chrono::duration_cast<SchedulerClockType::duration>(
+ std::chrono::seconds(900))))
+ : std::shared_ptr<HostTelemetryMetric>();
// NOLINTEND(modernize-make-shared)
this->metricStore.emplace(