OpenPOWER: Do not allow system dump when already in progress
if a system dump is in progress or already available in host
memory reject any further dump requests.
Test:
Initiate system dump when another dump in progress
Signed-off-by: Dhruvaraj Subhashchandran <dhruvaraj@in.ibm.com>
Change-Id: I4598912b0761669859f84a43ab4c60f47664b1e6
diff --git a/dump_utils.hpp b/dump_utils.hpp
index 82fff10..93e8878 100644
--- a/dump_utils.hpp
+++ b/dump_utils.hpp
@@ -3,11 +3,13 @@
#include "dump_manager.hpp"
#include <fmt/core.h>
+#include <fmt/format.h>
#include <systemd/sd-event.h>
#include <unistd.h>
#include <phosphor-logging/elog-errors.hpp>
#include <phosphor-logging/elog.hpp>
+#include <phosphor-logging/log.hpp>
#include <sdbusplus/bus.hpp>
#include <xyz/openbmc_project/Common/error.hpp>
#include <xyz/openbmc_project/Dump/Create/server.hpp>
@@ -202,5 +204,44 @@
*/
bool isHostQuiesced();
+/**
+ * @brief Read property value from the specified object and interface
+ * @param[in] bus D-Bus handle
+ * @param[in] service service which has implemented the interface
+ * @param[in] object object having has implemented the interface
+ * @param[in] intf interface having the property
+ * @param[in] prop name of the property to read
+ * @return property value
+ */
+template <typename T>
+T readDBusProperty(sdbusplus::bus::bus& bus, const std::string& service,
+ const std::string& object, const std::string& intf,
+ const std::string& prop)
+{
+ using ::phosphor::logging::level;
+ using ::phosphor::logging::log;
+ T retVal{};
+ try
+ {
+ auto properties =
+ bus.new_method_call(service.c_str(), object.c_str(),
+ "org.freedesktop.DBus.Properties", "Get");
+ properties.append(intf);
+ properties.append(prop);
+ auto result = bus.call(properties);
+ result.read(retVal);
+ }
+ catch (const std::exception& ex)
+ {
+ log<level::ERR>(
+ fmt::format("Failed to get the property ({}) interface ({}) "
+ "object path ({}) error ({}) ",
+ prop.c_str(), intf.c_str(), object.c_str(), ex.what())
+ .c_str());
+ throw;
+ }
+ return retVal;
+}
+
} // namespace dump
} // namespace phosphor