Use the trace format type for ust metadata generation
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Tue, 26 Jul 2022 20:36:34 +0000 (16:36 -0400)
committerJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Fri, 19 Aug 2022 15:55:32 +0000 (11:55 -0400)
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Change-Id: I0332f424141ef7c98698c61e6a92d0b8992e4512

src/bin/lttng-sessiond/ust-app.cpp
src/bin/lttng-sessiond/ust-registry-session-pid.cpp
src/bin/lttng-sessiond/ust-registry-session-pid.hpp
src/bin/lttng-sessiond/ust-registry-session-uid.cpp
src/bin/lttng-sessiond/ust-registry-session-uid.hpp
src/bin/lttng-sessiond/ust-registry-session.cpp
src/bin/lttng-sessiond/ust-registry-session.hpp
src/bin/lttng-sessiond/ust-registry.cpp
src/bin/lttng-sessiond/ust-registry.hpp

index 19884307a89141315f691c7130ad995b56cacca4..46832819b7603cb44ec9c20150bae054a5e2ad1f 100644 (file)
@@ -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
index db7bf58ce4e8d07676e3371fcca9b53d7fac10a2..ff4544bb991ba86b5488d2a14f91ccedf2e6f012 100644 (file)
@@ -9,6 +9,7 @@
 #include "ust-registry-session-pid.hpp"
 
 #include <common/exception.hpp>
+#include <lttng/trace-format-descriptor-internal.hpp>
 
 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},
index 4fd541d584848dd02992f2d7a87884f4dd7a1009..b1849cff97d7494b9e57b73799718988f5ac9625 100644 (file)
@@ -11,6 +11,8 @@
 #include "trace-class.hpp"
 #include "ust-registry-session.hpp"
 
+#include <lttng/trace-format-descriptor-internal.hpp>
+
 #include <cstdint>
 #include <ctime>
 #include <lttng/lttng.h>
@@ -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&
index 77c46fd7c45dab499722a3044c4cc5fe51275692..f5587fa7fb9766300fb0941cc0b5e851bd5a877a 100644 (file)
@@ -5,13 +5,14 @@
  *
  */
 
+#include <lttng/trace-format-descriptor-internal.hpp>
+
 #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);
index 10da75818fd718e750d86e9dfdfb1e308b1c46b1..54de5761a4715ef30ec541fe609443d5f34f8cd7 100644 (file)
@@ -11,6 +11,8 @@
 #include "trace-class.hpp"
 #include "ust-registry-session.hpp"
 
+#include <lttng/trace-format-descriptor-internal.hpp>
+
 #include <cstdint>
 #include <lttng/lttng.h>
 #include <unistd.h>
@@ -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&
index 79f77500bdb8e0307eed834332faa1bd93bf35cb..b604c60ee07f0fb99d42f55d48caac7f59f748a7 100644 (file)
@@ -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<ls::tsdl::trace_class_visitor>(
+                               trace_abi, [this](const std::string& fragment) {
+                                       _append_metadata_fragment(fragment);
+                               });
+       case LTTNG_TRACE_FORMAT_DESCRIPTOR_TYPE_CTF_2:
+               return lttng::make_unique<ls::ctf2::trace_class_visitor>(
+                               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<ls::tsdl::trace_class_visitor>(
-                       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) {
index 003d54241ff363735dfd73fa0cb4949455edae1b..5be7b4c9d71ec2c587729fd74ebf9b37a14aedf7 100644 (file)
@@ -16,6 +16,7 @@
 #include "ust-registry.hpp"
 
 #include <common/make-unique-wrapper.hpp>
+#include <lttng/trace-format-descriptor-internal.hpp>
 
 #include <cstdint>
 #include <ctime>
@@ -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)
index a6ceece9882dad64dfd20606eb2148446bad05e4..e2fef3a7fc5cd7d69d29be19ced228143a39f5a5 100644 (file)
@@ -21,6 +21,7 @@
 #include <common/hashtable/utils.hpp>
 #include <common/make-unique-wrapper.hpp>
 #include <lttng/lttng.h>
+#include <lttng/trace-format-descriptor-internal.hpp>
 
 #include <inttypes.h>
 
@@ -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;
index 2095cdda3ab3f15c8b04f7794971b784d241b0f7..e95fefff492d587a5a015a0001599e4f59ee3b11 100644 (file)
@@ -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,
This page took 0.035836 seconds and 5 git commands to generate.