From 63e5638db6236d902c4ea909fc53e5842e5b71b6 Mon Sep 17 00:00:00 2001 From: Julien Desfossez Date: Thu, 7 Sep 2017 14:13:44 -0400 Subject: [PATCH] working for metadata on the relay Signed-off-by: Julien Desfossez --- src/bin/lttng-relayd/main.c | 75 ++++++++++++++++++++++--------------- src/common/relayd/relayd.c | 6 ++- 2 files changed, 49 insertions(+), 32 deletions(-) diff --git a/src/bin/lttng-relayd/main.c b/src/bin/lttng-relayd/main.c index c6d61a186..348e161b7 100644 --- a/src/bin/lttng-relayd/main.c +++ b/src/bin/lttng-relayd/main.c @@ -1537,6 +1537,37 @@ end: return ret; } +static +int do_rotate_stream(struct relay_stream *stream) +{ + int ret; + + /* Perform the stream rotation. */ + ret = utils_rotate_stream_file(stream->path_name, + stream->channel_name, stream->tracefile_size, + stream->tracefile_count, -1, + -1, stream->stream_fd->fd, + NULL, &stream->stream_fd->fd); + if (ret < 0) { + ERR("Rotating stream output file"); + goto end; + } + stream->tracefile_size_current = 0; + + /* Rotate also the index if the stream is not a metadata stream. */ + if (!stream->is_metadata) { + ret = rotate_index_file(stream); + if (ret < 0) { + ERR("Failed to rotate index file"); + goto end; + } + } + + stream->rotate_at_seq_num = -1ULL; +end: + return ret; +} + /* * Check if a stream should perform a rotation (for session rotation). * Must be called with the stream lock held. @@ -1574,28 +1605,7 @@ int check_rotate_stream(struct relay_stream *stream) fprintf(stderr, "Stream %" PRIu64 " ready for rotation\n", stream->stream_handle); } - /* Perform the stream rotation. */ - ret = utils_rotate_stream_file(stream->path_name, - stream->channel_name, stream->tracefile_size, - stream->tracefile_count, -1, - -1, stream->stream_fd->fd, - NULL, &stream->stream_fd->fd); - if (ret < 0) { - ERR("Rotating stream output file"); - goto end; - } - stream->tracefile_size_current = 0; - - /* Rotate also the index if the stream is not a metadata stream. */ - if (!stream->is_metadata) { - ret = rotate_index_file(stream); - if (ret < 0) { - ERR("Failed to rotate index file"); - goto end; - } - } - - stream->rotate_at_seq_num = -1ULL; + ret = do_rotate_stream(stream); end: return ret; @@ -2278,11 +2288,6 @@ static int relay_rotate_session_stream(struct lttcomm_relayd_hdr *recv_hdr, goto end; } - fprintf(stderr, "Stream %lu needs to rotate to %s (%lu vs %lu)/\n", - be64toh(stream_info.stream_id), stream_info.new_pathname, - stream->prev_seq, be64toh(stream_info.rotate_at_seq_num)); - fprintf(stderr, "metadata: %d\n", stream->is_metadata); - pthread_mutex_lock(&stream->lock); /* Update the trace path (just the folder, the stream name does not change). */ @@ -2298,11 +2303,19 @@ static int relay_rotate_session_stream(struct lttcomm_relayd_hdr *recv_hdr, ERR("relay creating output directory"); goto end; } - stream->rotate_at_seq_num = be64toh(stream_info.rotate_at_seq_num); stream->chunk_id = be64toh(stream_info.new_chunk_id); - /* FIXME: YOU ARE HERE - * metadata stream does not have a valid seq_num, but is sent on the control connection */ - ret = check_rotate_stream(stream); + + if (stream->is_metadata) { + /* + * The metadata stream is sent only over the control connection + * so we know we have all the data to perform the stream + * rotation. + */ + ret = do_rotate_stream(stream); + } else { + stream->rotate_at_seq_num = be64toh(stream_info.rotate_at_seq_num); + ret = check_rotate_stream(stream); + } if (ret < 0) { ERR("Check rotate stream"); goto end_stream_unlock; diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index 6e3e91bfe..ed8136193 100644 --- a/src/common/relayd/relayd.c +++ b/src/common/relayd/relayd.c @@ -993,8 +993,12 @@ int relayd_rotate_stream(struct lttcomm_relayd_sock *rsock, uint64_t stream_id, memset(&msg, 0, sizeof(msg)); msg.stream_id = htobe64(stream_id); - msg.rotate_at_seq_num = htobe64(seq_num); msg.new_chunk_id = htobe64(new_chunk_id); + /* + * the seq_num is invalid for metadata streams, but it is ignored on + * the relay. + */ + msg.rotate_at_seq_num = htobe64(seq_num); if (lttng_strncpy(msg.new_pathname, new_pathname, sizeof(msg.new_pathname))) { ret = -1; -- 2.34.1