blob: 17125feb4c85942d7c9819be1b60a85666886b9d [file] [log] [blame]
Dhruvaraj Subhashchandran62337a92020-11-22 21:24:30 -06001#include "resource_dump_entry.hpp"
2
3#include "dump_utils.hpp"
4#include "host_transport_exts.hpp"
Dhruvaraj Subhashchandranad50d422022-01-18 05:54:02 -06005#include "op_dump_consts.hpp"
Dhruvaraj Subhashchandran62337a92020-11-22 21:24:30 -06006
7#include <phosphor-logging/elog-errors.hpp>
Dhruvaraj Subhashchandrand1f670f2023-06-05 22:19:25 -05008#include <phosphor-logging/lg2.hpp>
Dhruvaraj Subhashchandran62337a92020-11-22 21:24:30 -06009#include <xyz/openbmc_project/Common/error.hpp>
10
Dhruvaraj Subhashchandran341d6832021-01-15 06:28:04 -060011namespace openpower
Dhruvaraj Subhashchandran62337a92020-11-22 21:24:30 -060012{
13namespace dump
14{
15namespace resource
16{
Dhruvaraj Subhashchandran4c63ce52020-12-18 02:07:22 -060017// TODO #ibm-openbmc/issues/2859
18// Revisit host transport impelementation
19// This value is used to identify the dump in the transport layer to host,
Dhruvaraj Subhashchandran0c782d62021-03-24 13:27:13 -050020constexpr auto TRANSPORT_DUMP_TYPE_IDENTIFIER = 9;
Dhruvaraj Subhashchandran62337a92020-11-22 21:24:30 -060021using namespace phosphor::logging;
22
23void Entry::initiateOffload(std::string uri)
24{
25 using NotAllowed =
26 sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
27 using Reason = xyz::openbmc_project::Common::NotAllowed::REASON;
Dhruvaraj Subhashchandrand1f670f2023-06-05 22:19:25 -050028 lg2::info("Resource dump offload request id: {ID} uri: {URI} "
29 "source dumpid: {SOURCE_DUMP_ID}",
30 "ID", id, "URI", uri, "SOURCE_DUMP_ID", sourceDumpId());
Dhruvaraj Subhashchandran62337a92020-11-22 21:24:30 -060031
32 if (!phosphor::dump::isHostRunning())
33 {
34 elog<NotAllowed>(
35 Reason("This dump can be offloaded only when the host is up"));
36 return;
37 }
38 phosphor::dump::Entry::initiateOffload(uri);
39 phosphor::dump::host::requestOffload(sourceDumpId());
40}
41
Dhruvaraj Subhashchandran4c63ce52020-12-18 02:07:22 -060042void Entry::delete_()
43{
44 auto srcDumpID = sourceDumpId();
Dhruvaraj Subhashchandranb5a75472022-02-03 03:52:01 -060045 auto dumpId = id;
Dhruvaraj Subhashchandran1112bdf2022-03-23 04:38:02 -050046
47 if ((!offloadUri().empty()) && (phosphor::dump::isHostRunning()))
48 {
Dhruvaraj Subhashchandrand1f670f2023-06-05 22:19:25 -050049 lg2::error("Dump offload is in progress, cannot delete dump, "
50 "id: {DUMP_ID} srcdumpid: {SRC_DUMP_ID}",
51 "DUMP_ID", dumpId, "SRC_DUMP_ID", srcDumpID);
Dhruvaraj Subhashchandran1112bdf2022-03-23 04:38:02 -050052 elog<sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed>(
53 xyz::openbmc_project::Common::NotAllowed::REASON(
54 "Dump offload is in progress"));
55 }
56
Dhruvaraj Subhashchandrand1f670f2023-06-05 22:19:25 -050057 lg2::info("Resource dump delete id: {DUMP_ID} srcdumpid: {SRC_DUMP_ID}",
58 "DUMP_ID", dumpId, "SRC_DUMP_ID", srcDumpID);
Dhruvaraj Subhashchandran4c63ce52020-12-18 02:07:22 -060059
60 // Remove resource dump when host is up by using source dump id
Dhruvaraj Subhashchandran345e56b2022-05-17 01:53:19 -050061
Dhruvaraj Subhashchandran4c63ce52020-12-18 02:07:22 -060062 // which is present in resource dump entry dbus object as a property.
Dhruvaraj Subhashchandranad50d422022-01-18 05:54:02 -060063 if ((phosphor::dump::isHostRunning()) && (srcDumpID != INVALID_SOURCE_ID))
Dhruvaraj Subhashchandran4c63ce52020-12-18 02:07:22 -060064 {
Dhruvaraj Subhashchandran345e56b2022-05-17 01:53:19 -050065 try
66 {
67 phosphor::dump::host::requestDelete(srcDumpID,
68 TRANSPORT_DUMP_TYPE_IDENTIFIER);
69 }
70 catch (const std::exception& e)
71 {
Dhruvaraj Subhashchandrand1f670f2023-06-05 22:19:25 -050072 lg2::error("Error deleting dump from host id: {DUMP_ID} "
73 "host id: {SRC_DUMP_ID} error: {ERROR}",
74 "DUMP_ID", dumpId, "SRC_DUMP_ID", srcDumpID, "ERROR", e);
Dhruvaraj Subhashchandran345e56b2022-05-17 01:53:19 -050075 elog<sdbusplus::xyz::openbmc_project::Common::Error::Unavailable>();
76 }
Dhruvaraj Subhashchandran4c63ce52020-12-18 02:07:22 -060077 }
Dhruvaraj Subhashchandran345e56b2022-05-17 01:53:19 -050078
79 // Remove Dump entry D-bus object
80 phosphor::dump::Entry::delete_();
Dhruvaraj Subhashchandran4c63ce52020-12-18 02:07:22 -060081}
Dhruvaraj Subhashchandran62337a92020-11-22 21:24:30 -060082} // namespace resource
83} // namespace dump
Dhruvaraj Subhashchandran341d6832021-01-15 06:28:04 -060084} // namespace openpower