From: Jonathan Rajotte Date: Tue, 26 Jul 2022 20:36:34 +0000 (-0400) Subject: Use the trace format type for ust metadata generation X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=c4d702e651a4a1c307a28286e38851ba2b886821 Use the trace format type for ust metadata generation Signed-off-by: Jonathan Rajotte Change-Id: I0332f424141ef7c98698c61e6a92d0b8992e4512 --- diff --git a/src/bin/lttng-sessiond/ust-app.cpp b/src/bin/lttng-sessiond/ust-app.cpp index 19884307a..46832819b 100644 --- a/src/bin/lttng-sessiond/ust-app.cpp +++ b/src/bin/lttng-sessiond/ust-app.cpp @@ -2551,7 +2551,7 @@ static int setup_buffer_reg_pid(struct ust_app_session *ua_sess, reg_pid->shm_path, lttng_credentials_get_uid(&ua_sess->effective_credentials), lttng_credentials_get_gid(&ua_sess->effective_credentials), - ua_sess->tracing_id); + ua_sess->tracing_id, *ua_sess->trace_format); if (!reg_pid->registry->reg.ust) { /* * reg_pid->registry->reg.ust is NULL upon error, so we need to @@ -2614,7 +2614,8 @@ static int setup_buffer_reg_uid(struct ltt_ust_session *usess, /* Initialize registry. */ reg_uid->registry->reg.ust = ust_registry_session_per_uid_create(app->abi, app->version.major, app->version.minor, reg_uid->root_shm_path, - reg_uid->shm_path, usess->uid, usess->gid, ua_sess->tracing_id, app->uid); + reg_uid->shm_path, usess->uid, usess->gid, ua_sess->tracing_id, app->uid, + *usess->trace_format); if (!reg_uid->registry->reg.ust) { /* * reg_uid->registry->reg.ust is NULL upon error, so we need to diff --git a/src/bin/lttng-sessiond/ust-registry-session-pid.cpp b/src/bin/lttng-sessiond/ust-registry-session-pid.cpp index db7bf58ce..ff4544bb9 100644 --- a/src/bin/lttng-sessiond/ust-registry-session-pid.cpp +++ b/src/bin/lttng-sessiond/ust-registry-session-pid.cpp @@ -9,6 +9,7 @@ #include "ust-registry-session-pid.hpp" #include +#include namespace lst = lttng::sessiond::trace; namespace lsu = lttng::sessiond::ust; @@ -21,8 +22,10 @@ lsu::registry_session_per_pid::registry_session_per_pid(const struct ust_app& ap const char *shm_path, uid_t euid, gid_t egid, - uint64_t tracing_id) : - registry_session{in_abi, major, minor, root_shm_path, shm_path, euid, egid, tracing_id}, + uint64_t tracing_id, + const lttng::trace_format_descriptor& trace_format) : + registry_session{in_abi, major, minor, root_shm_path, shm_path, euid, egid, tracing_id, + trace_format}, _tracer_patch_level_version{app.version.patchlevel}, _vpid{app.pid}, _procname{app.name}, diff --git a/src/bin/lttng-sessiond/ust-registry-session-pid.hpp b/src/bin/lttng-sessiond/ust-registry-session-pid.hpp index 4fd541d58..b1849cff9 100644 --- a/src/bin/lttng-sessiond/ust-registry-session-pid.hpp +++ b/src/bin/lttng-sessiond/ust-registry-session-pid.hpp @@ -11,6 +11,8 @@ #include "trace-class.hpp" #include "ust-registry-session.hpp" +#include + #include #include #include @@ -31,7 +33,8 @@ public: const char *shm_path, uid_t euid, gid_t egid, - uint64_t tracing_id); + uint64_t tracing_id, + const lttng::trace_format_descriptor& trace_format); virtual lttng_buffer_type get_buffering_scheme() const noexcept override final; virtual void accept(lttng::sessiond::trace::trace_class_environment_visitor& diff --git a/src/bin/lttng-sessiond/ust-registry-session-uid.cpp b/src/bin/lttng-sessiond/ust-registry-session-uid.cpp index 77c46fd7c..f5587fa7f 100644 --- a/src/bin/lttng-sessiond/ust-registry-session-uid.cpp +++ b/src/bin/lttng-sessiond/ust-registry-session-uid.cpp @@ -5,13 +5,14 @@ * */ +#include + #include "ust-registry-session-uid.hpp" namespace lst = lttng::sessiond::trace; namespace lsu = lttng::sessiond::ust; -lsu::registry_session_per_uid::registry_session_per_uid( - const struct lst::abi& in_abi, +lsu::registry_session_per_uid::registry_session_per_uid(const struct lst::abi& in_abi, uint32_t major, uint32_t minor, const char *root_shm_path, @@ -19,8 +20,10 @@ lsu::registry_session_per_uid::registry_session_per_uid( uid_t euid, gid_t egid, uint64_t tracing_id, - uid_t tracing_uid) : - registry_session{in_abi, major, minor, root_shm_path, shm_path, euid, egid, tracing_id}, + uid_t tracing_uid, + const lttng::trace_format_descriptor& trace_format) : + registry_session{in_abi, major, minor, root_shm_path, shm_path, euid, egid, tracing_id, + trace_format}, _tracing_uid{tracing_uid} { lttng::pthread::lock_guard registry_lock(_lock); diff --git a/src/bin/lttng-sessiond/ust-registry-session-uid.hpp b/src/bin/lttng-sessiond/ust-registry-session-uid.hpp index 10da75818..54de5761a 100644 --- a/src/bin/lttng-sessiond/ust-registry-session-uid.hpp +++ b/src/bin/lttng-sessiond/ust-registry-session-uid.hpp @@ -11,6 +11,8 @@ #include "trace-class.hpp" #include "ust-registry-session.hpp" +#include + #include #include #include @@ -29,7 +31,8 @@ public: uid_t euid, gid_t egid, uint64_t tracing_id, - uid_t tracing_uid); + uid_t tracing_uid, + const lttng::trace_format_descriptor& trace_format); virtual lttng_buffer_type get_buffering_scheme() const noexcept override final; virtual void accept(lttng::sessiond::trace::trace_class_environment_visitor& diff --git a/src/bin/lttng-sessiond/ust-registry-session.cpp b/src/bin/lttng-sessiond/ust-registry-session.cpp index 79f77500b..b604c60ee 100644 --- a/src/bin/lttng-sessiond/ust-registry-session.cpp +++ b/src/bin/lttng-sessiond/ust-registry-session.cpp @@ -230,6 +230,27 @@ void lsu::details::locked_registry_session_release(lsu::registry_session *sessio pthread_mutex_unlock(&session->_lock); } +lttng::sessiond::trace::trace_class_visitor::cuptr +lsu::registry_session::trace_class_visitor_factory( + const lst::abi& trace_abi, const lttng::trace_format_descriptor& trace_format) +{ + switch (trace_format.type()) { + case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_1: + return lttng::make_unique( + trace_abi, [this](const std::string& fragment) { + _append_metadata_fragment(fragment); + }); + case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_2: + return lttng::make_unique( + trace_abi, [this](const std::string& fragment) { + _append_metadata_fragment(fragment); + }); + default: + abort(); + break; + } +} + lsu::registry_session::registry_session(const struct lst::abi& in_abi, uint32_t major, uint32_t minor, @@ -237,21 +258,20 @@ lsu::registry_session::registry_session(const struct lst::abi& in_abi, const char *shm_path, uid_t euid, gid_t egid, - uint64_t tracing_id) : + uint64_t tracing_id, + const lttng::trace_format_descriptor& trace_format) : lst::trace_class(in_abi, generate_uuid_or_throw()), _root_shm_path{root_shm_path ? root_shm_path : ""}, _shm_path{shm_path ? shm_path : ""}, _metadata_path{_shm_path.size() > 0 ? fmt::format("{}/metadata", _shm_path) : - std::string("")}, + std::string("")}, _uid{euid}, _gid{egid}, _app_tracer_version{.major = major, .minor = minor}, _tracing_id{tracing_id}, - _metadata_generating_visitor{lttng::make_unique( - abi, [this](const std::string& fragment) { - _append_metadata_fragment(fragment); - })}, + _metadata_generating_visitor{trace_class_visitor_factory(abi, trace_format)}, _packet_header{_create_packet_header()} + { pthread_mutex_init(&_lock, NULL); if (_shm_path.size() > 0) { diff --git a/src/bin/lttng-sessiond/ust-registry-session.hpp b/src/bin/lttng-sessiond/ust-registry-session.hpp index 003d54241..5be7b4c9d 100644 --- a/src/bin/lttng-sessiond/ust-registry-session.hpp +++ b/src/bin/lttng-sessiond/ust-registry-session.hpp @@ -16,6 +16,7 @@ #include "ust-registry.hpp" #include +#include #include #include @@ -103,7 +104,8 @@ protected: const char *shm_path, uid_t euid, gid_t egid, - uint64_t tracing_id); + uint64_t tracing_id, + const lttng::trace_format_descriptor& trace_format); virtual void accept( trace::trace_class_environment_visitor& environment_visitor) const override; void _generate_metadata(); @@ -116,6 +118,9 @@ private: void _destroy_enum(registry_enum *reg_enum) noexcept; registry_enum *_lookup_enum(const registry_enum *target_enum) const; lttng::sessiond::trace::type::cuptr _create_packet_header() const; + lttng::sessiond::trace::trace_class_visitor::cuptr trace_class_visitor_factory( + const struct lttng::sessiond::trace::abi& trace_abi, + const lttng::trace_format_descriptor& trace_format); virtual void _accept_on_clock_classes( lttng::sessiond::trace::trace_class_visitor& trace_class_visitor) diff --git a/src/bin/lttng-sessiond/ust-registry.cpp b/src/bin/lttng-sessiond/ust-registry.cpp index a6ceece98..e2fef3a7f 100644 --- a/src/bin/lttng-sessiond/ust-registry.cpp +++ b/src/bin/lttng-sessiond/ust-registry.cpp @@ -21,6 +21,7 @@ #include #include #include +#include #include @@ -74,11 +75,12 @@ lsu::registry_session *ust_registry_session_per_uid_create(const lttng::sessiond uid_t euid, gid_t egid, uint64_t tracing_id, - uid_t tracing_uid) + uid_t tracing_uid, + const lttng::trace_format_descriptor& trace_format) { try { return new lsu::registry_session_per_uid(abi, major, minor, root_shm_path, shm_path, - euid, egid, tracing_id, tracing_uid); + euid, egid, tracing_id, tracing_uid, trace_format); } catch (const std::exception& ex) { ERR("Failed to create per-uid registry session: %s", ex.what()); return nullptr; @@ -93,11 +95,12 @@ lsu::registry_session *ust_registry_session_per_pid_create(struct ust_app *app, const char *shm_path, uid_t euid, gid_t egid, - uint64_t tracing_id) + uint64_t tracing_id, + const lttng::trace_format_descriptor& trace_format) { try { return new lsu::registry_session_per_pid(*app, abi, major, minor, root_shm_path, - shm_path, euid, egid, tracing_id); + shm_path, euid, egid, tracing_id, trace_format); } catch (const std::exception& ex) { ERR("Failed to create per-pid registry session: %s", ex.what()); return nullptr; diff --git a/src/bin/lttng-sessiond/ust-registry.hpp b/src/bin/lttng-sessiond/ust-registry.hpp index 2095cdda3..e95fefff4 100644 --- a/src/bin/lttng-sessiond/ust-registry.hpp +++ b/src/bin/lttng-sessiond/ust-registry.hpp @@ -153,7 +153,8 @@ lttng::sessiond::ust::registry_session *ust_registry_session_per_uid_create( uid_t euid, gid_t egid, uint64_t tracing_id, - uid_t tracing_uid); + uid_t tracing_uid, + const lttng::trace_format_descriptor& trace_format); /* * Create per-pid registry with default values. @@ -168,7 +169,8 @@ lttng::sessiond::ust::registry_session *ust_registry_session_per_pid_create(stru const char *shm_path, uid_t euid, gid_t egid, - uint64_t tracing_id); + uint64_t tracing_id, + const lttng::trace_format_descriptor& trace_format); void ust_registry_session_destroy(lttng::sessiond::ust::registry_session *session); void ust_registry_channel_destroy_event(lttng::sessiond::ust::registry_channel *chan,