projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
relayd: create an implicit trace chunk on session creation
[lttng-tools.git]
/
src
/
bin
/
lttng-relayd
/
main.c
diff --git
a/src/bin/lttng-relayd/main.c
b/src/bin/lttng-relayd/main.c
index 1e2e9050fef2d6d77ca78e9767a2fea759ba99be..282bb8461b1f97a595958cd75504fdf86fb3b322 100644
(file)
--- 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 "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
static const char *help_msg =
#ifdef LTTNG_EMBED_HELP
@@
-85,7
+86,7
@@
NULL
enum relay_connection_status {
RELAY_CONNECTION_STATUS_OK,
enum relay_connection_status {
RELAY_CONNECTION_STATUS_OK,
- /* An error occured while processing an event on the connection. */
+ /* An error occur
r
ed while processing an event on the connection. */
RELAY_CONNECTION_STATUS_ERROR,
/* Connection closed/shutdown cleanly. */
RELAY_CONNECTION_STATUS_CLOSED,
RELAY_CONNECTION_STATUS_ERROR,
/* Connection closed/shutdown cleanly. */
RELAY_CONNECTION_STATUS_CLOSED,
@@
-167,6
+168,8
@@
struct lttng_ht *sessions_ht;
/* Relayd health monitoring */
struct health_app *health_relayd;
/* 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', },
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);
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) {
/* Thread quit pipe has been closed. Killing thread. */
ret = check_thread_quit_pipe(pollfd, revents);
if (ret) {
@@
-1099,12
+1094,14
@@
static int relay_create_session(const struct lttcomm_relayd_hdr *recv_hdr,
{
int ret = 0;
ssize_t send_ret;
{
int ret = 0;
ssize_t send_ret;
- struct relay_session *session;
+ struct relay_session *session
= NULL
;
struct lttcomm_relayd_status_session reply;
char session_name[LTTNG_NAME_MAX];
char hostname[LTTNG_HOST_NAME_MAX];
uint32_t live_timer = 0;
bool snapshot = false;
struct lttcomm_relayd_status_session reply;
char session_name[LTTNG_NAME_MAX];
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);
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,
} 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) {
}
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,
}
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;
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);
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);
send_reply:
if (ret < 0) {
reply.ret_code = htobe32(LTTNG_ERR_FATAL);
@@
-1153,7
+1166,9
@@
send_reply:
send_ret);
ret = -1;
}
send_ret);
ret = -1;
}
-
+ if (ret < 0 && session) {
+ session_put(session);
+ }
return ret;
}
return ret;
}
@@
-1640,7
+1655,7
@@
int rotate_truncate_stream(struct relay_stream *stream)
/*
* Rewind the current tracefile to the position at which the rotation
/*
* Rewind the current tracefile to the position at which the rotation
- * should have occured.
+ * should have occur
r
ed.
*/
lseek_ret = lseek(stream->stream_fd->fd,
stream->pos_after_last_complete_data_index, SEEK_SET);
*/
lseek_ret = lseek(stream->stream_fd->fd,
stream->pos_after_last_complete_data_index, SEEK_SET);
@@
-2973,7
+2988,7
@@
int relay_rotate_pending(const struct lttcomm_relayd_hdr *recv_hdr,
rotate_pending = true;
DBG("Stream %" PRIu64 " is still rotating",
stream->stream_handle);
rotate_pending = true;
DBG("Stream %" PRIu64 " is still rotating",
stream->stream_handle);
- } else if (stream->current_chunk_id.value < chunk_id) {
+ } else if (stream->current_chunk_id.value <
=
chunk_id) {
/*
* Stream closed on the consumer but still active on the
* relay.
/*
* Stream closed on the consumer but still active on the
* relay.
@@
-3811,14
+3826,6
@@
restart:
health_code_update();
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) {
/* Thread quit pipe has been closed. Killing thread. */
ret = check_thread_quit_pipe(pollfd, revents);
if (ret) {
@@
-4130,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) {
/* Initialize thread health monitoring */
health_relayd = health_app_create(NR_HEALTH_RELAYD_TYPES);
if (!health_relayd) {
@@
-4279,7
+4293,9
@@
exit_health_quit_pipe:
exit_init_data:
health_app_destroy(health_relayd);
exit_init_data:
health_app_destroy(health_relayd);
+ sessiond_trace_chunk_registry_destroy(sessiond_trace_chunk_registry);
exit_health_app_create:
exit_health_app_create:
+exit_sessiond_trace_chunk_registry:
exit_options:
/*
* Wait for all pending call_rcu work to complete before tearing
exit_options:
/*
* Wait for all pending call_rcu work to complete before tearing
This page took
0.025948 seconds
and
4
git commands to generate.