X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fmain.c;h=282bb8461b1f97a595958cd75504fdf86fb3b322;hb=639ddf685b134bb075b92819f647f9f3c462df54;hp=e81bdeffc82b97790ddf99bf6bb473636b0f4064;hpb=4c6885d2d540ce66b9050e9f90c49575fb76dde0;p=lttng-tools.git diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index e81bdeffc..282bb8461 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -74,6 +74,7 @@ #include "connection.h" #include "tracefile-array.h" #include "tcp_keep_alive.h" +#include "sessiond-trace-chunks.h" static const char *help_msg = #ifdef LTTNG_EMBED_HELP @@ -167,6 +168,8 @@ struct lttng_ht *sessions_ht; /* Relayd health monitoring */ struct health_app *health_relayd; +struct sessiond_trace_chunk_registry *sessiond_trace_chunk_registry; + static struct option long_options[] = { { "control-port", 1, 0, 'C', }, { "data-port", 1, 0, 'D', }, @@ -858,14 +861,6 @@ restart: revents = LTTNG_POLL_GETEV(&events, i); pollfd = LTTNG_POLL_GETFD(&events, i); - if (!revents) { - /* - * No activity for this FD (poll - * implementation). - */ - continue; - } - /* Thread quit pipe has been closed. Killing thread. */ ret = check_thread_quit_pipe(pollfd, revents); if (ret) { @@ -1105,6 +1100,8 @@ static int relay_create_session(const struct lttcomm_relayd_hdr *recv_hdr, char hostname[LTTNG_HOST_NAME_MAX]; uint32_t live_timer = 0; bool snapshot = false; + /* Left nil for peers < 2.11. */ + lttng_uuid sessiond_uuid = {}; memset(session_name, 0, LTTNG_NAME_MAX); memset(hostname, 0, LTTNG_HOST_NAME_MAX); @@ -1121,7 +1118,14 @@ static int relay_create_session(const struct lttcomm_relayd_hdr *recv_hdr, } else { /* From 2.11 to ... */ ret = cmd_create_session_2_11(payload, session_name, - hostname, &live_timer, &snapshot); + hostname, &live_timer, &snapshot, + sessiond_uuid); + if (lttng_uuid_is_nil(sessiond_uuid)) { + /* The nil UUID is reserved for pre-2.11 clients. */ + ERR("Illegal nil UUID announced by peer in create session command"); + ret = -1; + goto send_reply; + } } if (ret < 0) { @@ -1129,7 +1133,7 @@ static int relay_create_session(const struct lttcomm_relayd_hdr *recv_hdr, } session = session_create(session_name, hostname, live_timer, - snapshot, conn->major, conn->minor); + snapshot, sessiond_uuid, conn->major, conn->minor); if (!session) { ret = -1; goto send_reply; @@ -1140,6 +1144,15 @@ static int relay_create_session(const struct lttcomm_relayd_hdr *recv_hdr, reply.session_id = htobe64(session->id); + session->current_trace_chunk = + sessiond_trace_chunk_registry_get_anonymous_chunk( + sessiond_trace_chunk_registry, sessiond_uuid, + session->id, + opt_output_path); + if (!session->current_trace_chunk) { + ret = -1; + } + send_reply: if (ret < 0) { reply.ret_code = htobe32(LTTNG_ERR_FATAL); @@ -3813,14 +3826,6 @@ restart: health_code_update(); - if (!revents) { - /* - * No activity for this FD (poll - * implementation). - */ - continue; - } - /* Thread quit pipe has been closed. Killing thread. */ ret = check_thread_quit_pipe(pollfd, revents); if (ret) { @@ -4132,6 +4137,13 @@ int main(int argc, char **argv) } } + sessiond_trace_chunk_registry = sessiond_trace_chunk_registry_create(); + if (!sessiond_trace_chunk_registry) { + ERR("Failed to initialize session daemon trace chunk registry"); + retval = -1; + goto exit_sessiond_trace_chunk_registry; + } + /* Initialize thread health monitoring */ health_relayd = health_app_create(NR_HEALTH_RELAYD_TYPES); if (!health_relayd) { @@ -4281,7 +4293,9 @@ exit_health_quit_pipe: exit_init_data: health_app_destroy(health_relayd); + sessiond_trace_chunk_registry_destroy(sessiond_trace_chunk_registry); exit_health_app_create: +exit_sessiond_trace_chunk_registry: exit_options: /* * Wait for all pending call_rcu work to complete before tearing