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
/* 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
#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;
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},
#include "trace-class.hpp"
#include "ust-registry-session.hpp"
+#include <lttng/trace-format-descriptor-internal.hpp>
+
#include <cstdint>
#include <ctime>
#include <lttng/lttng.h>
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&
*
*/
+#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,
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);
#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>
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&
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,
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) {
#include "ust-registry.hpp"
#include <common/make-unique-wrapper.hpp>
+#include <lttng/trace-format-descriptor-internal.hpp>
#include <cstdint>
#include <ctime>
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();
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)
#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>
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;
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;
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.
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,