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
3 files changed
tree: eb98fb001d129f6e03a5aab2aeb5546882c06d54
  1. dump-extensions/
  2. host-transport-extensions/
  3. subprojects/
  4. test/
  5. tools/
  6. xyz/
  7. .clang-format
  8. .gitignore
  9. .shellcheck-ignore
  10. bmc_dump_entry.cpp
  11. bmc_dump_entry.hpp
  12. core_manager.cpp
  13. core_manager.hpp
  14. core_manager_main.cpp
  15. dump-extensions.hpp
  16. dump_entry.cpp
  17. dump_entry.hpp
  18. dump_internal.hpp
  19. dump_manager.cpp
  20. dump_manager.hpp
  21. dump_manager_bmc.cpp
  22. dump_manager_bmc.hpp
  23. dump_manager_faultlog.cpp
  24. dump_manager_faultlog.hpp
  25. dump_manager_main.cpp
  26. dump_offload.cpp
  27. dump_offload.hpp
  28. dump_serialize.cpp
  29. dump_serialize.hpp
  30. dump_types.cpp
  31. dump_types.hpp
  32. dump_utils.cpp
  33. dump_utils.hpp
  34. elog_watch.cpp
  35. elog_watch.hpp
  36. errors_map.hpp
  37. errors_map.mako.cpp
  38. errors_map_gen.py
  39. example_errors_watch.yaml
  40. faultlog_dump_entry.cpp
  41. faultlog_dump_entry.hpp
  42. ffdc
  43. host_transport_exts.hpp
  44. LICENSE
  45. meson.build
  46. meson_options.txt
  47. OWNERS
  48. ramoops_manager.cpp
  49. ramoops_manager.hpp
  50. ramoops_manager_main.cpp
  51. README.md
  52. watch.cpp
  53. watch.hpp
README.md

phosphor-debug-collector

Phosphor Debug Collector provides mechanisms to collect various log files and system parameters. Used to troubleshoot problems in OpenBMC based systems.

One such mechanism is dreport, a script that collects debug data and packages it into an archive file.

To Build

To build this package with meson, do the following steps:

    1. meson builddir
    2. ninja -C builddir

To clean the built files run ninja -C builddir clean.

To run unit tests

Tests can be run in the CI docker container, refer local-ci-build

or with an OpenBMC x86 sdk(see below for x86 steps).

meson -Dtests=enabled build
ninja -C build test