When we send an empty index (beacon), we need to extract the stream_id to avoid stalling the client on inactive streams on startup.
This patch should also be backported to 2.4.x. Signed-off-by: Julien Desfossez <[email protected]> --- src/common/consumer-timer.c | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/src/common/consumer-timer.c b/src/common/consumer-timer.c index c659bf6..d36e2bc 100644 --- a/src/common/consumer-timer.c +++ b/src/common/consumer-timer.c @@ -27,6 +27,7 @@ #include <common/kernel-ctl/kernel-ctl.h> #include <common/kernel-consumer/kernel-consumer.h> #include <common/consumer-stream.h> +#include <lttng/ust-ctl.h> #include "consumer-timer.h" #include "consumer-testpoint.h" @@ -114,12 +115,14 @@ static void metadata_switch_timer(struct lttng_consumer_local_data *ctx, } } -static int send_empty_index(struct lttng_consumer_stream *stream, uint64_t ts) +static int send_empty_index(struct lttng_consumer_stream *stream, uint64_t ts, + uint64_t stream_id) { int ret; struct ctf_packet_index index; memset(&index, 0, sizeof(index)); + index.stream_id = htobe64(stream_id); index.timestamp_end = htobe64(ts); ret = consumer_stream_write_index(stream, &index); if (ret < 0) { @@ -132,7 +135,7 @@ error: static int check_kernel_stream(struct lttng_consumer_stream *stream) { - uint64_t ts; + uint64_t ts, stream_id; int ret; /* @@ -160,8 +163,13 @@ static int check_kernel_stream(struct lttng_consumer_stream *stream) ret = -1; goto error_unlock; } + ret = kernctl_get_stream_id(stream->wait_fd, &stream_id); + if (ret < 0) { + PERROR("kernctl_get_stream_id"); + goto error_unlock; + } DBG("Stream %" PRIu64 " empty, sending beacon", stream->key); - ret = send_empty_index(stream, ts); + ret = send_empty_index(stream, ts, stream_id); if (ret < 0) { goto error_unlock; } @@ -175,7 +183,7 @@ error_unlock: static int check_ust_stream(struct lttng_consumer_stream *stream) { - uint64_t ts; + uint64_t ts, stream_id; int ret; assert(stream); @@ -206,8 +214,13 @@ static int check_ust_stream(struct lttng_consumer_stream *stream) ret = -1; goto error_unlock; } + ret = ustctl_get_stream_id(stream->ustream, &stream_id); + if (ret < 0) { + PERROR("ustctl_get_stream_id"); + goto error_unlock; + } DBG("Stream %" PRIu64 " empty, sending beacon", stream->key); - ret = send_empty_index(stream, ts); + ret = send_empty_index(stream, ts, stream_id); if (ret < 0) { goto error_unlock; } -- 1.9.1 _______________________________________________ lttng-dev mailing list [email protected] http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
