From 34533ae09c2a60654f12048c21dade33672394b5 Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Mon, 8 Nov 2021 17:25:39 -0500 Subject: [PATCH] src.ctf.lttng-live: Add setter for stream iterator state for uniform logging Debugging LTTng live issues is tricky and having clean and uniform logging statement for each state transition is useful to understand the current state a lttng-live source. Signed-off-by: Francis Deslauriers Change-Id: Ifc334bbb2afe78f9ea57fe24b0ad3860b59b0640 Reviewed-on: https://review.lttng.org/c/babeltrace/+/6676 Tested-by: jenkins Reviewed-by: Philippe Proulx --- src/plugins/ctf/lttng-live/data-stream.c | 3 ++- src/plugins/ctf/lttng-live/lttng-live.c | 19 ++++++++++++++++++- src/plugins/ctf/lttng-live/lttng-live.h | 5 +++++ .../ctf/lttng-live/viewer-connection.c | 12 ++++++------ 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/plugins/ctf/lttng-live/data-stream.c b/src/plugins/ctf/lttng-live/data-stream.c index aba9c807..618af36d 100644 --- a/src/plugins/ctf/lttng-live/data-stream.c +++ b/src/plugins/ctf/lttng-live/data-stream.c @@ -51,7 +51,8 @@ enum ctf_msg_iter_medium_status medop_request_bytes( len_left = stream->base_offset + stream->len - stream->offset; if (!len_left) { - stream->state = LTTNG_LIVE_STREAM_ACTIVE_NO_DATA; + lttng_live_stream_iterator_set_state(stream, + LTTNG_LIVE_STREAM_ACTIVE_NO_DATA); status = CTF_MSG_ITER_MEDIUM_STATUS_AGAIN; goto end; } diff --git a/src/plugins/ctf/lttng-live/lttng-live.c b/src/plugins/ctf/lttng-live/lttng-live.c index 91e312f2..1b4deb94 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.c +++ b/src/plugins/ctf/lttng-live/lttng-live.c @@ -86,6 +86,21 @@ const char *lttng_live_stream_state_string(enum lttng_live_stream_state state) } } +void lttng_live_stream_iterator_set_state(struct lttng_live_stream_iterator *stream_iter, + enum lttng_live_stream_state new_state) +{ + bt_self_component *self_comp = stream_iter->self_comp; + bt_logging_level log_level = stream_iter->log_level; + + BT_COMP_LOGD("Setting live stream iterator state: viewer-stream-id=%" PRIu64 + ", old-state=%s, new-state=%s", + stream_iter->viewer_stream_id, + lttng_live_stream_state_string(stream_iter->state), + lttng_live_stream_state_string(new_state)); + + stream_iter->state = new_state; +} + #define LTTNG_LIVE_LOGD_STREAM_ITER(live_stream_iter) \ do { \ BT_COMP_LOGD("Live stream iterator state=%s, last-inact-ts=%" PRId64 \ @@ -687,7 +702,9 @@ enum lttng_live_iterator_status lttng_live_iterator_next_handle_one_quiescent_st */ if (lttng_live_stream->current_inactivity_ts == lttng_live_stream->last_inactivity_ts) { - lttng_live_stream->state = LTTNG_LIVE_STREAM_QUIESCENT_NO_DATA; + lttng_live_stream_iterator_set_state(lttng_live_stream, + LTTNG_LIVE_STREAM_QUIESCENT_NO_DATA); + ret = LTTNG_LIVE_ITERATOR_STATUS_CONTINUE; goto end; } diff --git a/src/plugins/ctf/lttng-live/lttng-live.h b/src/plugins/ctf/lttng-live/lttng-live.h index 1f0d3f7d..82f39a0f 100644 --- a/src/plugins/ctf/lttng-live/lttng-live.h +++ b/src/plugins/ctf/lttng-live/lttng-live.h @@ -328,4 +328,9 @@ enum ctf_msg_iter_medium_status lttng_live_get_stream_bytes( bool lttng_live_graph_is_canceled(struct lttng_live_msg_iter *msg_iter); +BT_HIDDEN +void lttng_live_stream_iterator_set_state( + struct lttng_live_stream_iterator *stream_iter, + enum lttng_live_stream_state new_state); + #endif /* BABELTRACE_PLUGIN_CTF_LTTNG_LIVE_H */ diff --git a/src/plugins/ctf/lttng-live/viewer-connection.c b/src/plugins/ctf/lttng-live/viewer-connection.c index c3b5ca1b..c4b29ed2 100644 --- a/src/plugins/ctf/lttng-live/viewer-connection.c +++ b/src/plugins/ctf/lttng-live/viewer-connection.c @@ -1545,7 +1545,7 @@ enum lttng_live_iterator_status lttng_live_get_next_index( } else { stream->ctf_stream_class_id = ctf_stream_class_id; } - stream->state = LTTNG_LIVE_STREAM_QUIESCENT; + lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_QUIESCENT); status = LTTNG_LIVE_ITERATOR_STATUS_OK; break; } @@ -1562,7 +1562,7 @@ enum lttng_live_iterator_status lttng_live_get_next_index( stream->ctf_stream_class_id = ctf_stream_class_id; } - stream->state = LTTNG_LIVE_STREAM_ACTIVE_DATA; + lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_ACTIVE_DATA); if (flags & LTTNG_VIEWER_FLAG_NEW_METADATA) { BT_COMP_LOGD("Marking trace as needing new metadata: " @@ -1582,25 +1582,25 @@ enum lttng_live_iterator_status lttng_live_get_next_index( } case LTTNG_VIEWER_INDEX_RETRY: memset(index, 0, sizeof(struct packet_index)); - stream->state = LTTNG_LIVE_STREAM_ACTIVE_NO_DATA; + lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_ACTIVE_NO_DATA); status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN; goto end; case LTTNG_VIEWER_INDEX_HUP: memset(index, 0, sizeof(struct packet_index)); index->offset = EOF; - stream->state = LTTNG_LIVE_STREAM_EOF; + lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_EOF); stream->has_stream_hung_up = true; status = LTTNG_LIVE_ITERATOR_STATUS_END; break; case LTTNG_VIEWER_INDEX_ERR: memset(index, 0, sizeof(struct packet_index)); - stream->state = LTTNG_LIVE_STREAM_ACTIVE_NO_DATA; + lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_ACTIVE_NO_DATA); status = LTTNG_LIVE_ITERATOR_STATUS_ERROR; goto end; default: BT_COMP_LOGD("Received get_next_index response: unknown value"); memset(index, 0, sizeof(struct packet_index)); - stream->state = LTTNG_LIVE_STREAM_ACTIVE_NO_DATA; + lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_ACTIVE_NO_DATA); status = LTTNG_LIVE_ITERATOR_STATUS_ERROR; goto end; } -- 2.34.1