Correct the timing of emit_object_added
The deletion of the dump objects emits InterfacesRemoved signal, but the
interfaces removed in the signal does not contain the interfaces defined
in the base class phosphor::dump::Entry:
```
xyz.openbmc_project.Common.OriginatedBy
xyz.openbmc_project.Common.Progress
xyz.openbmc_project.Dump.Entry
xyz.openbmc_project.Object.Delete
xyz.openbmc_project.Time.EpochTime
```
This results in the mapper still keeping the objects even if the object
is removed from DBus, and it becomes inconsistent between the DBus
objects and mapper.
Adjust the inheritance sequence, so that in destruction,
emit_object_removed() is called when all the interfaces are there, so
that all the interfaces could be included in the signal.
Without this change, the destructor sequence is (Taking BMCEntry as
example):
1. phosphor::dump::Entry is destructed, no signal is emitted;
2. phosphor::dump::bmc::EntryIfaces is destructed, signal is emitted,
but at this time, only the interfaces implemented by
phosphor::dump::bmc::EntryIfaces is included, which is the root cause of
the problem.
With the change, the destructor sequence is:
1. phosphor::dump::bmc::EntryIfaces is destructed, signal is emitted,
and all the interfaces are included in the signal;
2. phosphor::dump::Entry is destructed, no signal is emitted.
So all the interfaces implemented by BMCEntry is included in the
InterfacesRemoved signal, and thus the issue is fixed.
Tested: Before this change:
1. Create a dump, say /xyz/openbmc_project/dump/bmc/entry/2
2. Delete it
3. Mapper still list the above object although it does not
really exist.
With this fix, verify the above issue is fixed.
Signed-off-by: Lei YU <yulei.sh@bytedance.com>
Change-Id: I76710fa9b8d23344cf979bd8f3bdcc331e663264
diff --git a/dump-extensions/openpower-dumps/resource_dump_entry.hpp b/dump-extensions/openpower-dumps/resource_dump_entry.hpp
index 517f6ca..8c26bf1 100644
--- a/dump-extensions/openpower-dumps/resource_dump_entry.hpp
+++ b/dump-extensions/openpower-dumps/resource_dump_entry.hpp
@@ -31,7 +31,7 @@
* A concrete implementation for the
* com::ibm::Dump::Entry::Resource DBus API
*/
-class Entry : virtual public EntryIfaces, virtual public phosphor::dump::Entry
+class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
{
public:
Entry() = delete;
@@ -61,10 +61,10 @@
std::string vspStr, std::string pwd,
phosphor::dump::OperationStatus status, std::string originatorId,
originatorTypes originatorType, phosphor::dump::Manager& parent) :
- EntryIfaces(bus, objPath.c_str(), EntryIfaces::action::defer_emit),
phosphor::dump::Entry(bus, objPath.c_str(), dumpId, timeStamp, dumpSize,
std::string(), status, originatorId,
- originatorType, parent)
+ originatorType, parent),
+ EntryIfaces(bus, objPath.c_str(), EntryIfaces::action::defer_emit)
{
sourceDumpId(sourceId);
vspString(vspStr);
diff --git a/dump-extensions/openpower-dumps/system_dump_entry.hpp b/dump-extensions/openpower-dumps/system_dump_entry.hpp
index 36855c4..6e26e17 100644
--- a/dump-extensions/openpower-dumps/system_dump_entry.hpp
+++ b/dump-extensions/openpower-dumps/system_dump_entry.hpp
@@ -28,7 +28,7 @@
* @details A concrete implementation for the
* xyz.openbmc_project.Dump.Entry DBus API
*/
-class Entry : virtual public EntryIfaces, virtual public phosphor::dump::Entry
+class Entry : virtual public phosphor::dump::Entry, virtual public EntryIfaces
{
public:
Entry() = delete;
@@ -55,10 +55,10 @@
uint64_t timeStamp, uint64_t dumpSize, const uint32_t sourceId,
phosphor::dump::OperationStatus status, std::string originatorId,
originatorTypes originatorType, phosphor::dump::Manager& parent) :
- EntryIfaces(bus, objPath.c_str(), EntryIfaces::action::defer_emit),
phosphor::dump::Entry(bus, objPath.c_str(), dumpId, timeStamp, dumpSize,
std::string(), status, originatorId,
- originatorType, parent)
+ originatorType, parent),
+ EntryIfaces(bus, objPath.c_str(), EntryIfaces::action::defer_emit)
{
sourceDumpId(sourceId);
// Emit deferred signal.