xref: /openbmc/phosphor-debug-collector/dump-extensions/openpower-dumps/system_dump_entry.cpp (revision 7e4edab998103573416eebda2cd2e9909d8316aa)
18b9b4690SDhruvaraj Subhashchandran #include "system_dump_entry.hpp"
28b9b4690SDhruvaraj Subhashchandran 
32279386bSRamesh Iyyar #include "dump_utils.hpp"
4131994beSRamesh Iyyar #include "host_transport_exts.hpp"
5ad50d422SDhruvaraj Subhashchandran #include "op_dump_consts.hpp"
68b9b4690SDhruvaraj Subhashchandran 
76a54d9afSDhruvaraj Subhashchandran #include <phosphor-logging/elog-errors.hpp>
8d1f670feSDhruvaraj Subhashchandran #include <phosphor-logging/lg2.hpp>
96a54d9afSDhruvaraj Subhashchandran #include <xyz/openbmc_project/Common/error.hpp>
106a54d9afSDhruvaraj Subhashchandran 
11341d683dSDhruvaraj Subhashchandran namespace openpower
128b9b4690SDhruvaraj Subhashchandran {
138b9b4690SDhruvaraj Subhashchandran namespace dump
148b9b4690SDhruvaraj Subhashchandran {
158b9b4690SDhruvaraj Subhashchandran namespace system
168b9b4690SDhruvaraj Subhashchandran {
174c63ce5eSDhruvaraj Subhashchandran // TODO #ibm-openbmc/issues/2859
184c63ce5eSDhruvaraj Subhashchandran // Revisit host transport impelementation
194c63ce5eSDhruvaraj Subhashchandran // This value is used to identify the dump in the transport layer to host,
204c63ce5eSDhruvaraj Subhashchandran constexpr auto TRANSPORT_DUMP_TYPE_IDENTIFIER = 3;
216a54d9afSDhruvaraj Subhashchandran using namespace phosphor::logging;
228b9b4690SDhruvaraj Subhashchandran 
initiateOffload(std::string uri)238b9b4690SDhruvaraj Subhashchandran void Entry::initiateOffload(std::string uri)
248b9b4690SDhruvaraj Subhashchandran {
25d1f670feSDhruvaraj Subhashchandran     lg2::info("System dump offload request id: {ID} uri: {URI} "
26d1f670feSDhruvaraj Subhashchandran               "source dumpid: {SOURCE_DUMP_ID}",
27d1f670feSDhruvaraj Subhashchandran               "ID", id, "URI", uri, "SOURCE_DUMP_ID", sourceDumpId());
288b9b4690SDhruvaraj Subhashchandran     phosphor::dump::Entry::initiateOffload(uri);
298b9b4690SDhruvaraj Subhashchandran     phosphor::dump::host::requestOffload(sourceDumpId());
308b9b4690SDhruvaraj Subhashchandran }
318b9b4690SDhruvaraj Subhashchandran 
delete_()322279386bSRamesh Iyyar void Entry::delete_()
332279386bSRamesh Iyyar {
342279386bSRamesh Iyyar     auto srcDumpID = sourceDumpId();
35c1778dacSDhruvaraj Subhashchandran     auto dumpId = id;
361112bdfcSDhruvaraj Subhashchandran 
37*7e4edab9SDhruvaraj Subhashchandran     // Offload URI will be set during dump offload
38*7e4edab9SDhruvaraj Subhashchandran     // Prevent delete when offload is in progress
391112bdfcSDhruvaraj Subhashchandran     if ((!offloadUri().empty()) && (phosphor::dump::isHostRunning()))
401112bdfcSDhruvaraj Subhashchandran     {
41d1f670feSDhruvaraj Subhashchandran         lg2::error("Dump offload is in progress id: {DUMP_ID} "
42d1f670feSDhruvaraj Subhashchandran                    "srcdumpid: {SRC_DUMP_ID}",
43d1f670feSDhruvaraj Subhashchandran                    "DUMP_ID", dumpId, "SRC_DUMP_ID", srcDumpID);
44*7e4edab9SDhruvaraj Subhashchandran         elog<sdbusplus::xyz::openbmc_project::Common::Error::Unavailable>();
451112bdfcSDhruvaraj Subhashchandran     }
461112bdfcSDhruvaraj Subhashchandran 
47d1f670feSDhruvaraj Subhashchandran     lg2::info("System dump delete id: {DUMP_ID} srcdumpid: {SRC_DUMP_ID}",
48d1f670feSDhruvaraj Subhashchandran               "DUMP_ID", dumpId, "SRC_DUMP_ID", srcDumpID);
492279386bSRamesh Iyyar 
502279386bSRamesh Iyyar     // Remove host system dump when host is up by using source dump id
512279386bSRamesh Iyyar     // which is present in system dump entry dbus object as a property.
52ad50d422SDhruvaraj Subhashchandran     if ((phosphor::dump::isHostRunning()) && (srcDumpID != INVALID_SOURCE_ID))
532279386bSRamesh Iyyar     {
54345e56b0SDhruvaraj Subhashchandran         try
55345e56b0SDhruvaraj Subhashchandran         {
564c63ce5eSDhruvaraj Subhashchandran             phosphor::dump::host::requestDelete(srcDumpID,
574c63ce5eSDhruvaraj Subhashchandran                                                 TRANSPORT_DUMP_TYPE_IDENTIFIER);
582279386bSRamesh Iyyar         }
59345e56b0SDhruvaraj Subhashchandran         catch (const std::exception& e)
60345e56b0SDhruvaraj Subhashchandran         {
61d1f670feSDhruvaraj Subhashchandran             lg2::error("Error deleting dump from host id: {DUMP_ID} "
62d1f670feSDhruvaraj Subhashchandran                        "host id: {SRC_DUMP_ID} error: {ERROR}",
63d1f670feSDhruvaraj Subhashchandran                        "DUMP_ID", dumpId, "SRC_DUMP_ID", srcDumpID, "ERROR", e);
64345e56b0SDhruvaraj Subhashchandran             elog<sdbusplus::xyz::openbmc_project::Common::Error::Unavailable>();
65345e56b0SDhruvaraj Subhashchandran         }
66345e56b0SDhruvaraj Subhashchandran     }
67345e56b0SDhruvaraj Subhashchandran 
68345e56b0SDhruvaraj Subhashchandran     // Remove Dump entry D-bus object
69345e56b0SDhruvaraj Subhashchandran     phosphor::dump::Entry::delete_();
702279386bSRamesh Iyyar }
718b9b4690SDhruvaraj Subhashchandran } // namespace system
728b9b4690SDhruvaraj Subhashchandran } // namespace dump
73341d683dSDhruvaraj Subhashchandran } // namespace openpower
74