From: Marcel Hamer via lttng-dev <lttng-dev@lists.lttng.org>
To: Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
Cc: lttng-dev <lttng-dev@lists.lttng.org>
Subject: Re: [lttng-dev] [PATCH lttng-tools] Fix: cleanup stream on snapshot failure
Date: Tue, 31 May 2022 13:28:55 +0200 [thread overview]
Message-ID: <20220531112855.GA856582@windriver.com> (raw)
In-Reply-To: <769020238.11656.1653924475516.JavaMail.zimbra@efficios.com>
Hello Jonathan,
On Mon, May 30, 2022 at 11:27:55AM -0400, Jonathan Rajotte-Julien wrote:
> [Please note: This e-mail is from an EXTERNAL e-mail address]
>
> Hi Marcel,
>
> Thanks for sending this patch.
>
> Looks sensible to me, still do you have a reproducer for it? I went back to bug 1352 and even with https://bugs.lttng.org/attachments/546 was unable to force the assert failure.
I can only reproduce it when running lttng-consumerd in a debugger
environment, in my case gdb. My reproduction scenario is:
1. Setting a breakpoint on snapshot_channel() inside
src/common/ust-consumer/ust-consumer.c
2. When the breakpoint hits, remove the the complete lttng directory
containing the session data.
3. Continue the lttng_consumerd process from gdb.
4. In that case you see a negative return value -1 from
consumer_stream_create_output_files() inside snapshot_channel().
5. Take another snapshot and you will see lttng_consumerd crash because
of the assert(!stream->trace_chunk); inside snapshot_channel(). This
last action does not require any breakpoint intervention.
The scenario seems to be very timing sensitive to reproduce. I do not
have a clear command sequence to achieve the same error.
The proposed patch prevents lttng_consumerd from crashing in step 5.
Kind regards,
Marcel
>
> Cheers
>
> ----- Original Message -----
> > From: "Marcel Hamer via lttng-dev" <lttng-dev@lists.lttng.org>
> > To: "lttng-dev" <lttng-dev@lists.lttng.org>
> > Sent: Monday, 30 May, 2022 10:10:21
> > Subject: [lttng-dev] [PATCH lttng-tools] Fix: cleanup stream on snapshot failure
>
> > When a channel snapshot creation fails the stream should be cleaned up
> > properly. If the stream is not closed and cleaned properly on a failure,
> > the next time a snapshot is created an assert is triggered for:
> >
> > assert(!stream->trace_chunk);
> >
> > inside the snapshot_channel function. Since the stream->trace_chunk was
> > not reset to NULL. The reset to NULL happens inside the
> > consumer_stream_close function.
> >
> > Fixes #1352
> >
> > Signed-off-by: Marcel Hamer <marcel.hamer@windriver.com>
> > ---
> > src/common/ust-consumer/ust-consumer.c | 10 +++++-----
> > 1 file changed, 5 insertions(+), 5 deletions(-)
> >
> > diff --git a/src/common/ust-consumer/ust-consumer.c
> > b/src/common/ust-consumer/ust-consumer.c
> > index f176ca40a..f43216829 100644
> > --- a/src/common/ust-consumer/ust-consumer.c
> > +++ b/src/common/ust-consumer/ust-consumer.c
> > @@ -1147,13 +1147,13 @@ static int snapshot_channel(struct
> > lttng_consumer_channel *channel,
> > if (use_relayd) {
> > ret = consumer_send_relayd_stream(stream, path);
> > if (ret < 0) {
> > - goto error_unlock;
> > + goto error_close_stream;
> > }
> > } else {
> > ret = consumer_stream_create_output_files(stream,
> > false);
> > if (ret < 0) {
> > - goto error_unlock;
> > + goto error_close_stream;
> > }
> > DBG("UST consumer snapshot stream (%" PRIu64 ")",
> > stream->key);
> > @@ -1170,19 +1170,19 @@ static int snapshot_channel(struct
> > lttng_consumer_channel *channel,
> > ret = lttng_ustconsumer_take_snapshot(stream);
> > if (ret < 0) {
> > ERR("Taking UST snapshot");
> > - goto error_unlock;
> > + goto error_close_stream;
> > }
> >
> > ret = lttng_ustconsumer_get_produced_snapshot(stream, &produced_pos);
> > if (ret < 0) {
> > ERR("Produced UST snapshot position");
> > - goto error_unlock;
> > + goto error_close_stream;
> > }
> >
> > ret = lttng_ustconsumer_get_consumed_snapshot(stream, &consumed_pos);
> > if (ret < 0) {
> > ERR("Consumerd UST snapshot position");
> > - goto error_unlock;
> > + goto error_close_stream;
> > }
> >
> > /*
> > --
> > 2.25.1
> >
> > _______________________________________________
> > lttng-dev mailing list
> > lttng-dev@lists.lttng.org
> > https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
next prev parent reply other threads:[~2022-05-31 11:51 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-30 14:10 [lttng-dev] [PATCH lttng-tools] Fix: cleanup stream on snapshot failure Marcel Hamer via lttng-dev
2022-05-30 15:27 ` Jonathan Rajotte-Julien via lttng-dev
2022-05-31 11:28 ` Marcel Hamer via lttng-dev [this message]
2022-05-31 13:11 ` Jonathan Rajotte-Julien via lttng-dev
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220531112855.GA856582@windriver.com \
--to=lttng-dev@lists.lttng.org \
--cc=jonathan.rajotte-julien@efficios.com \
--cc=marcel.hamer@windriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.