1 #include "resource_dump_entry.hpp"
2 
3 #include "dump_utils.hpp"
4 #include "host_transport_exts.hpp"
5 #include "op_dump_consts.hpp"
6 
7 #include <fmt/core.h>
8 
9 #include <phosphor-logging/elog-errors.hpp>
10 #include <xyz/openbmc_project/Common/error.hpp>
11 
12 namespace openpower
13 {
14 namespace dump
15 {
16 namespace resource
17 {
18 // TODO #ibm-openbmc/issues/2859
19 // Revisit host transport impelementation
20 // This value is used to identify the dump in the transport layer to host,
21 constexpr auto TRANSPORT_DUMP_TYPE_IDENTIFIER = 9;
22 using namespace phosphor::logging;
23 
24 void Entry::initiateOffload(std::string uri)
25 {
26     using NotAllowed =
27         sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed;
28     using Reason = xyz::openbmc_project::Common::NotAllowed::REASON;
29     log<level::INFO>(
30         fmt::format(
31             "Resource dump offload request id({}) uri({}) source dumpid({})",
32             id, uri, sourceDumpId())
33             .c_str());
34 
35     if (!phosphor::dump::isHostRunning())
36     {
37         elog<NotAllowed>(
38             Reason("This dump can be offloaded only when the host is up"));
39         return;
40     }
41     phosphor::dump::Entry::initiateOffload(uri);
42     phosphor::dump::host::requestOffload(sourceDumpId());
43 }
44 
45 void Entry::delete_()
46 {
47     auto srcDumpID = sourceDumpId();
48     auto dumpId = id;
49 
50     if ((!offloadUri().empty()) && (phosphor::dump::isHostRunning()))
51     {
52         log<level::ERR>(
53             fmt::format("Dump offload is in progress, cannot delete "
54                         "dump, id({}) srcdumpid({})",
55                         dumpId, srcDumpID)
56                 .c_str());
57         elog<sdbusplus::xyz::openbmc_project::Common::Error::NotAllowed>(
58             xyz::openbmc_project::Common::NotAllowed::REASON(
59                 "Dump offload is in progress"));
60     }
61 
62     log<level::INFO>(fmt::format("Resource dump delete id({}) srcdumpid({})",
63                                  dumpId, srcDumpID)
64                          .c_str());
65     // Remove Dump entry D-bus object
66     phosphor::dump::Entry::delete_();
67 
68     // Remove resource dump when host is up by using source dump id
69     // which is present in resource dump entry dbus object as a property.
70     if ((phosphor::dump::isHostRunning()) && (srcDumpID != INVALID_SOURCE_ID))
71     {
72         phosphor::dump::host::requestDelete(srcDumpID,
73                                             TRANSPORT_DUMP_TYPE_IDENTIFIER);
74     }
75 }
76 } // namespace resource
77 } // namespace dump
78 } // namespace openpower
79