[lttng-dev] [LTTNG-TOOLS PATCH] Fix: get the stream_id when generating live beacons
Julien Desfossez
jdesfossez at efficios.com
Tue Jul 1 13:59:14 EDT 2014
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 <jdesfossez at efficios.com>
---
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
More information about the lttng-dev
mailing list