[lttng-dev] [PATCH lttng-tools 3/3] Fix: lttng-consumerd: cpu hotplug: send "streams_sent" command

Jérémie Galarneau jeremie.galarneau at efficios.com
Mon May 22 15:30:49 UTC 2017


Merged in master, stable-2.10, stable-2.9, and stable-2.8.

Thanks,
Jérémie

On 11 May 2017 at 16:00, Mathieu Desnoyers
<mathieu.desnoyers at efficios.com> wrote:
> When creating a new channel, the streams being sent to the relayd are
> kept invisible to the live client until the "streams_sent" command is
> received. This ensures the client does not see a partial stream set.
>
> This "streams_sent" command needs to be sent on CPU hotplug too,
> otherwise the live client handling within relayd is not aware of those
> streams (they are never published).
>
> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> ---
>  src/common/consumer/consumer.h               |  2 ++
>  src/common/kernel-consumer/kernel-consumer.c | 15 +++++++++++++++
>  2 files changed, 17 insertions(+)
>
> diff --git a/src/common/consumer/consumer.h b/src/common/consumer/consumer.h
> index 6a38e50..7375373 100644
> --- a/src/common/consumer/consumer.h
> +++ b/src/common/consumer/consumer.h
> @@ -224,6 +224,8 @@ struct lttng_consumer_channel {
>         uint64_t discarded_events;
>         /* Total number of missed packets due to overwriting (overwrite). */
>         uint64_t lost_packets;
> +
> +       bool streams_sent_to_relayd;
>  };
>
>  /*
> diff --git a/src/common/kernel-consumer/kernel-consumer.c b/src/common/kernel-consumer/kernel-consumer.c
> index 3554b8f..16aeae1 100644
> --- a/src/common/kernel-consumer/kernel-consumer.c
> +++ b/src/common/kernel-consumer/kernel-consumer.c
> @@ -196,6 +196,7 @@ int lttng_kconsumer_snapshot_channel(uint64_t key, char *path,
>                                 ERR("sending streams sent to relayd");
>                                 goto end_unlock;
>                         }
> +                       channel->streams_sent_to_relayd = true;
>                 }
>
>                 ret = kernctl_buffer_flush(stream->wait_fd);
> @@ -741,6 +742,19 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
>                                 consumer_stream_free(new_stream);
>                                 goto end_nosignal;
>                         }
> +
> +                       /*
> +                        * If adding an extra stream to an already
> +                        * existing channel (e.g. cpu hotplug), we need
> +                        * to sent the "streams_sent" command to relayd.

Fixed this typo (sent -> send) and merged in master, stable-2.10,
stable-2.9, and stable-2.8.

Thanks!
Jérémie

> +                        */
> +                       if (channel->streams_sent_to_relayd) {
> +                               ret = consumer_send_relayd_streams_sent(
> +                                               new_stream->net_seq_idx);
> +                               if (ret < 0) {
> +                                       goto end_nosignal;
> +                               }
> +                       }
>                 }
>
>                 /* Get the right pipe where the stream will be sent. */
> @@ -834,6 +848,7 @@ int lttng_kconsumer_recv_cmd(struct lttng_consumer_local_data *ctx,
>                         if (ret < 0) {
>                                 goto end_nosignal;
>                         }
> +                       channel->streams_sent_to_relayd = true;
>                 }
>                 break;
>         }
> --
> 2.1.4
>



-- 
Jérémie Galarneau
EfficiOS Inc.
http://www.efficios.com


More information about the lttng-dev mailing list