From a4f118a39fb7e83c0160ad5850d99180d29e95e9 Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Thu, 24 Feb 2022 16:21:20 -0500 Subject: [PATCH] src.ctf.lttng-live: add comments and debug statements MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Francis Deslauriers Signed-off-by: Jérémie Galarneau Change-Id: I7d6425df0912be66421296512b2aca01c985e785 Reviewed-on: https://review.lttng.org/c/babeltrace/+/7080 --- src/plugins/ctf/lttng-live/lttng-live.cpp | 36 +++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/src/plugins/ctf/lttng-live/lttng-live.cpp b/src/plugins/ctf/lttng-live/lttng-live.cpp index 63fc173f..e87de8d4 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.cpp +++ b/src/plugins/ctf/lttng-live/lttng-live.cpp @@ -481,15 +481,42 @@ lttng_live_get_session(struct lttng_live_msg_iter *lttng_live_msg_iter, } } - BT_COMP_LOGD("Updating all streams and metadata for session: " + BT_COMP_LOGD("Updating all data streams: " "session-id=%" PRIu64 ", session-name=\"%s\"", session->id, session->session_name->str); status = lttng_live_session_get_new_streams(session, lttng_live_msg_iter->self_msg_iter); - if (status != LTTNG_LIVE_ITERATOR_STATUS_OK && status != LTTNG_LIVE_ITERATOR_STATUS_END) { + switch (status) { + case LTTNG_LIVE_ITERATOR_STATUS_OK: + break; + case LTTNG_LIVE_ITERATOR_STATUS_END: + /* + * We received a `_END` from the `_get_new_streams()` function, + * which means no more data will ever be received from the data + * streams of this session. But it's possible that the metadata + * is incomplete. + * The live protocol guarantees that we receive all the + * metadata needed before we receive data streams needing it. + * But it's possible to receive metadata NOT needed by + * data streams after the session was closed. For example, this + * could happen if a new event is registered and the session is + * stopped before any tracepoint for that event is actually + * fired. + */ + BT_COMP_LOGD( + "Updating streams returned _END status. Override status to _OK in order fetch any remaining metadata:" + "session-id=%" PRIu64 ", session-name=\"%s\"", + session->id, session->session_name->str); + status = LTTNG_LIVE_ITERATOR_STATUS_OK; + break; + default: goto end; } + BT_COMP_LOGD("Updating metadata stream for session: " + "session-id=%" PRIu64 ", session-name=\"%s\"", + session->id, session->session_name->str); + trace_idx = 0; while (trace_idx < session->traces->len) { struct lttng_live_trace *trace = @@ -608,6 +635,11 @@ lttng_live_iterator_handle_new_streams_and_metadata(struct lttng_live_msg_iter * switch (status) { case LTTNG_LIVE_ITERATOR_STATUS_OK: case LTTNG_LIVE_ITERATOR_STATUS_END: + /* + * A session returned `_END`. Other sessions may still + * be active so we override the status and continue + * looping if needed. + */ break; default: goto end; -- 2.34.1