Skip to content

Commit 5402fa6

Browse files
entry: use AdditionalData2 for serialization
Prefer the `map<std::string, std::string>` for serialization of metadata over the `vector<std::string>` format. Add backwards compatible parsing of the `vector<std::string>` format. Tested: Loaded a "version 5" entry. Created a new entry and verified it was "version 6" in the binary dump. Reloading the daemon restores both version 5 and 6 objects. Signed-off-by: Patrick Williams <[email protected]> Change-Id: I39b8a4099ad61161d52c3784d6325df7da031011
1 parent e7e741e commit 5402fa6

File tree

3 files changed

+28
-10
lines changed

3 files changed

+28
-10
lines changed

config/config.h.meson

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,8 @@ static constexpr auto FIRST_CEREAL_CLASS_VERSION_WITH_FWLEVEL = "2";
3434
static constexpr auto FIRST_CEREAL_CLASS_VERSION_WITH_UPDATE_TS = "3";
3535
static constexpr auto FIRST_CEREAL_CLASS_VERSION_WITH_EVENTID = "4";
3636
static constexpr auto FIRST_CEREAL_CLASS_VERSION_WITH_RESOLUTION = "5";
37-
static constexpr size_t CLASS_VERSION = 5;
37+
static constexpr auto FIRST_CEREAL_CLASS_VERSION_WITH_METADATA_DICT = "6";
38+
static constexpr size_t CLASS_VERSION = 6;
3839

3940
static constexpr bool LG2_COMMIT_DBUS = @lg2_commit_dbus@;
4041
static constexpr bool LG2_COMMIT_JOURNAL = @lg2_commit_journal@;

elog_serialize.cpp

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include "elog_serialize.hpp"
44

55
#include <cereal/archives/binary.hpp>
6+
#include <cereal/types/map.hpp>
67
#include <cereal/types/string.hpp>
78
#include <cereal/types/tuple.hpp>
89
#include <cereal/types/vector.hpp>
@@ -30,7 +31,7 @@ namespace logging
3031
template <class Archive>
3132
void save(Archive& a, const Entry& e, const std::uint32_t /*version*/)
3233
{
33-
a(e.id(), e.severity(), e.timestamp(), e.message(), e.additionalData(),
34+
a(e.id(), e.severity(), e.timestamp(), e.message(), e.additionalData2(),
3435
e.associations(), e.resolved(), e.version(), e.updateTimestamp(),
3536
e.eventId(), e.resolution());
3637
}
@@ -51,7 +52,7 @@ void load(Archive& a, Entry& e, const std::uint32_t version)
5152
Entry::Level severity{};
5253
uint64_t timestamp{};
5354
std::string message{};
54-
std::vector<std::string> additionalData{};
55+
std::map<std::string, std::string> additionalData{};
5556
bool resolved{};
5657
AssociationList associations{};
5758
std::string fwVersion{};
@@ -61,25 +62,41 @@ void load(Archive& a, Entry& e, const std::uint32_t version)
6162

6263
if (version < std::stoul(FIRST_CEREAL_CLASS_VERSION_WITH_FWLEVEL))
6364
{
64-
a(id, severity, timestamp, message, additionalData, associations,
65+
std::vector<std::string> additionalData_old{};
66+
a(id, severity, timestamp, message, additionalData_old, associations,
6567
resolved);
6668
updateTimestamp = timestamp;
69+
additionalData = util::additional_data::parse(additionalData_old);
6770
}
6871
else if (version < std::stoul(FIRST_CEREAL_CLASS_VERSION_WITH_UPDATE_TS))
6972
{
70-
a(id, severity, timestamp, message, additionalData, associations,
73+
std::vector<std::string> additionalData_old{};
74+
a(id, severity, timestamp, message, additionalData_old, associations,
7175
resolved, fwVersion);
7276
updateTimestamp = timestamp;
77+
additionalData = util::additional_data::parse(additionalData_old);
7378
}
7479
else if (version < std::stoul(FIRST_CEREAL_CLASS_VERSION_WITH_EVENTID))
7580
{
76-
a(id, severity, timestamp, message, additionalData, associations,
81+
std::vector<std::string> additionalData_old{};
82+
a(id, severity, timestamp, message, additionalData_old, associations,
7783
resolved, fwVersion, updateTimestamp);
84+
additionalData = util::additional_data::parse(additionalData_old);
7885
}
7986
else if (version < std::stoul(FIRST_CEREAL_CLASS_VERSION_WITH_RESOLUTION))
8087
{
81-
a(id, severity, timestamp, message, additionalData, associations,
88+
std::vector<std::string> additionalData_old{};
89+
a(id, severity, timestamp, message, additionalData_old, associations,
8290
resolved, fwVersion, updateTimestamp, eventId);
91+
additionalData = util::additional_data::parse(additionalData_old);
92+
}
93+
else if (version <
94+
std::stoul(FIRST_CEREAL_CLASS_VERSION_WITH_METADATA_DICT))
95+
{
96+
std::vector<std::string> additionalData_old{};
97+
a(id, severity, timestamp, message, additionalData_old, associations,
98+
resolved, fwVersion, updateTimestamp, eventId, resolution);
99+
additionalData = util::additional_data::parse(additionalData_old);
83100
}
84101
else
85102
{
@@ -91,8 +108,8 @@ void load(Archive& a, Entry& e, const std::uint32_t version)
91108
e.severity(severity, true);
92109
e.timestamp(timestamp, true);
93110
e.message(message, true);
94-
e.additionalData(additionalData, true);
95-
e.additionalData2(util::additional_data::parse(additionalData), true);
111+
e.additionalData(util::additional_data::combine(additionalData), true);
112+
e.additionalData2(additionalData, true);
96113
e.sdbusplus::server::xyz::openbmc_project::logging::Entry::resolved(
97114
resolved, true);
98115
e.associations(associations, true);

test/serialization_test_properties.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ TEST_F(TestSerialization, testProperties)
1313
{
1414
auto id = 99;
1515
phosphor::logging::AssociationList assocations{};
16-
std::vector<std::string> testData{"additional", "data"};
16+
std::vector<std::string> testData{"additional=1", "data=yes"};
1717
uint64_t timestamp{100};
1818
std::string message{"test error"};
1919
std::string fwLevel{"level42"};

0 commit comments

Comments
 (0)