Initialize transaction id
Initialize the transaction id in the code generated by the sdbusplus tool.
Generate a unique value if the transaction id has not been
initialized and a caller requests it. This is the scenario for
clients that have not made a dbus call yet and create journal
entries.
Change-Id: Ia7b926fd3f83963fac01fbd1ce4cdd59d2224008
Signed-off-by: Adriana Kobylak <anoo@us.ibm.com>
diff --git a/sdbusplus/server/transaction.hpp b/sdbusplus/server/transaction.hpp
index 0dbab5f..b4443c2 100644
--- a/sdbusplus/server/transaction.hpp
+++ b/sdbusplus/server/transaction.hpp
@@ -88,6 +88,12 @@
*/
inline uint64_t get_id()
{
+ // If the transaction id has not been initialized, generate one.
+ if (!details::id)
+ {
+ details::Transaction t;
+ details::id = std::hash<details::Transaction>{}(t);
+ }
return details::id;
}
diff --git a/tools/sdbusplus/templates/interface.mako.server.cpp b/tools/sdbusplus/templates/interface.mako.server.cpp
index 89fa2a9..aec8cfb 100644
--- a/tools/sdbusplus/templates/interface.mako.server.cpp
+++ b/tools/sdbusplus/templates/interface.mako.server.cpp
@@ -52,6 +52,14 @@
try
{
auto m = message::message(reply);
+#ifndef DISABLE_TRANSACTION
+ {
+ auto tbus = m.get_bus();
+ sdbusplus::server::transaction::Transaction t(tbus, m);
+ sdbusplus::server::transaction::set_id
+ (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+ }
+#endif
auto o = static_cast<${classname}*>(context);
m.append(convertForMessage(o->${p.camelCase}()));
@@ -85,6 +93,14 @@
try
{
auto m = message::message(value);
+#ifndef DISABLE_TRANSACTION
+ {
+ auto tbus = m.get_bus();
+ sdbusplus::server::transaction::Transaction t(tbus, m);
+ sdbusplus::server::transaction::set_id
+ (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+ }
+#endif
auto o = static_cast<${classname}*>(context);
diff --git a/tools/sdbusplus/templates/method.mako.prototype.hpp b/tools/sdbusplus/templates/method.mako.prototype.hpp
index b58a2e3..0c4615e 100644
--- a/tools/sdbusplus/templates/method.mako.prototype.hpp
+++ b/tools/sdbusplus/templates/method.mako.prototype.hpp
@@ -128,6 +128,14 @@
### Need to add a ref to msg since we attached it to an
### sdbusplus::message.
auto m = message::message(msg);
+#ifndef DISABLE_TRANSACTION
+ {
+ auto tbus = m.get_bus();
+ sdbusplus::server::transaction::Transaction t(tbus, m);
+ sdbusplus::server::transaction::set_id
+ (std::hash<sdbusplus::server::transaction::Transaction>{}(t));
+ }
+#endif
% if len(method.parameters) != 0:
${parameters_as_local(as_param=False)}{};