From: Mathieu Desnoyers Date: Thu, 12 Dec 2019 18:09:18 +0000 (-0500) Subject: Fix: consumer: do not flush on transition from NULL chunk X-Git-Tag: v2.11.1~11 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=1eeffca8b8cb72945809d45e71c1b9af0699a204;p=lttng-tools.git Fix: consumer: do not flush on transition from NULL chunk When transitioning from NULL chunk, do not flush streams, because the consumer has nowhere to store the packets generated by this flush. Signed-off-by: Mathieu Desnoyers Change-Id: Ic92c035f6b1377849825527d0c9cc05a6b92ac38 Signed-off-by: Jérémie Galarneau --- diff --git a/src/common/consumer/consumer.c b/src/common/consumer/consumer.c index e27161e43..89d27a0d9 100644 --- a/src/common/consumer/consumer.c +++ b/src/common/consumer/consumer.c @@ -4029,14 +4029,23 @@ int lttng_consumer_rotate_channel(struct lttng_consumer_channel *channel, } /* - * Active flush; has no effect if the production position - * is at a packet boundary. + * Do not flush an empty packet when rotating from a NULL trace + * chunk. The stream has no means to output data, and the prior + * rotation which rotated to NULL performed that side-effect already. */ - ret = consumer_flush_buffer(stream, 1); - if (ret < 0) { - ERR("Failed to flush stream %" PRIu64 " during channel rotation", - stream->key); - goto end_unlock_stream; + if (stream->trace_chunk) { + /* + * For metadata stream, do an active flush, which does not + * produce empty packets. For data streams, empty-flush; + * ensures we have at least one packet in each stream per trace + * chunk, even if no data was produced. + */ + ret = consumer_flush_buffer(stream, stream->metadata_flag ? 1 : 0); + if (ret < 0) { + ERR("Failed to flush stream %" PRIu64 " during channel rotation", + stream->key); + goto end_unlock_stream; + } } ret = lttng_consumer_take_snapshot(stream);