Change-Id: I9b6d967d54c63d7f7544bb0d1a1eb778a8df64d4
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/12396
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
static enum ctf_msg_iter_medium_status medop_request_bytes(size_t request_sz, uint8_t **buffer_addr,
size_t *buffer_sz, void *data)
{
static enum ctf_msg_iter_medium_status medop_request_bytes(size_t request_sz, uint8_t **buffer_addr,
size_t *buffer_sz, void *data)
{
- enum ctf_msg_iter_medium_status status = CTF_MSG_ITER_MEDIUM_STATUS_OK;
lttng_live_stream_iterator *stream = (lttng_live_stream_iterator *) data;
struct lttng_live_trace *trace = stream->trace;
struct lttng_live_session *session = trace->session;
lttng_live_stream_iterator *stream = (lttng_live_stream_iterator *) data;
struct lttng_live_trace *trace = stream->trace;
struct lttng_live_session *session = trace->session;
BT_ASSERT(request_sz);
if (stream->has_stream_hung_up) {
BT_ASSERT(request_sz);
if (stream->has_stream_hung_up) {
- status = CTF_MSG_ITER_MEDIUM_STATUS_EOF;
- goto end;
+ return CTF_MSG_ITER_MEDIUM_STATUS_EOF;
}
len_left = stream->base_offset + stream->len - stream->offset;
if (!len_left) {
lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_ACTIVE_NO_DATA);
}
len_left = stream->base_offset + stream->len - stream->offset;
if (!len_left) {
lttng_live_stream_iterator_set_state(stream, LTTNG_LIVE_STREAM_ACTIVE_NO_DATA);
- status = CTF_MSG_ITER_MEDIUM_STATUS_AGAIN;
- goto end;
+ return CTF_MSG_ITER_MEDIUM_STATUS_AGAIN;
}
read_len = MIN(request_sz, stream->buf.size());
read_len = MIN(read_len, len_left);
}
read_len = MIN(request_sz, stream->buf.size());
read_len = MIN(read_len, len_left);
- status = lttng_live_get_stream_bytes(live_msg_iter, stream, stream->buf.data(), stream->offset,
- read_len, &recv_len);
+
+ const auto status = lttng_live_get_stream_bytes(live_msg_iter, stream, stream->buf.data(),
+ stream->offset, read_len, &recv_len);
+
+ if (status != CTF_MSG_ITER_MEDIUM_STATUS_OK) {
+ return status;
+ }
+
*buffer_addr = stream->buf.data();
*buffer_sz = recv_len;
stream->offset += recv_len;
*buffer_addr = stream->buf.data();
*buffer_sz = recv_len;
stream->offset += recv_len;
+
+ return CTF_MSG_ITER_MEDIUM_STATUS_OK;
}
static bt_stream *medop_borrow_stream(bt_stream_class *stream_class, int64_t stream_id, void *data)
}
static bt_stream *medop_borrow_stream(bt_stream_class *stream_class, int64_t stream_id, void *data)
if (!stream_iter->msg_iter) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
"Failed to create CTF message iterator");
if (!stream_iter->msg_iter) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(stream_iter->logger,
"Failed to create CTF message iterator");
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
session->lazy_stream_msg_init = false;
return LTTNG_LIVE_ITERATOR_STATUS_OK;
session->lazy_stream_msg_init = false;
return LTTNG_LIVE_ITERATOR_STATUS_OK;
-
-error:
- return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
struct lttng_live_stream_iterator *
}
struct lttng_live_stream_iterator *
bool lttng_live_graph_is_canceled(struct lttng_live_msg_iter *msg_iter)
{
bool lttng_live_graph_is_canceled(struct lttng_live_msg_iter *msg_iter)
{
- ret = false;
- goto end;
- ret = bt_self_message_iterator_is_interrupted(msg_iter->self_msg_iter);
-
-end:
- return ret;
+ return bt_self_message_iterator_is_interrupted(msg_iter->self_msg_iter);
}
static struct lttng_live_trace *
}
static struct lttng_live_trace *
lttng_live_session_borrow_or_create_trace_by_id(struct lttng_live_session *session,
uint64_t trace_id)
{
lttng_live_session_borrow_or_create_trace_by_id(struct lttng_live_session *session,
uint64_t trace_id)
{
- struct lttng_live_trace *trace;
-
- trace = lttng_live_session_borrow_trace_by_id(session, trace_id);
- if (trace) {
- goto end;
+ if (lttng_live_trace *trace = lttng_live_session_borrow_trace_by_id(session, trace_id)) {
+ return trace;
}
/* The session is the owner of the newly created trace. */
}
/* The session is the owner of the newly created trace. */
- trace = lttng_live_create_trace(session, trace_id);
-
-end:
- return trace;
+ return lttng_live_create_trace(session, trace_id);
}
int lttng_live_add_session(struct lttng_live_msg_iter *lttng_live_msg_iter, uint64_t session_id,
}
int lttng_live_add_session(struct lttng_live_msg_iter *lttng_live_msg_iter, uint64_t session_id,
* cancelled.
*/
bt_current_thread_clear_error();
* cancelled.
*/
bt_current_thread_clear_error();
- status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
+ return LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
- status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error attaching to LTTng live session");
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error attaching to LTTng live session");
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
"Updating streams returned _END status. Override status to _OK in order fetch any remaining metadata:"
"session-id={}, session-name=\"{}\"",
session->id, session->session_name);
"Updating streams returned _END status. Override status to _OK in order fetch any remaining metadata:"
"session-id={}, session-name=\"{}\"",
session->id, session->session_name);
- status = LTTNG_LIVE_ITERATOR_STATUS_OK;
- break;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
}
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
}
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
break;
case LTTNG_LIVE_ITERATOR_STATUS_CONTINUE:
case LTTNG_LIVE_ITERATOR_STATUS_AGAIN:
break;
case LTTNG_LIVE_ITERATOR_STATUS_CONTINUE:
case LTTNG_LIVE_ITERATOR_STATUS_AGAIN:
- BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
- "Error updating trace metadata: "
- "stream-iter-status={}, trace-id={}",
- status, trace->id);
- goto end;
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ lttng_live_msg_iter->logger,
+ "Error updating trace metadata: stream-iter-status={}, trace-id={}", status,
+ trace->id);
+ return status;
* Now that we have the metadata we can initialize the downstream
* iterator.
*/
* Now that we have the metadata we can initialize the downstream
* iterator.
*/
- status = lttng_live_lazy_msg_init(session, lttng_live_msg_iter->self_msg_iter);
-
-end:
- return status;
+ return lttng_live_lazy_msg_init(session, lttng_live_msg_iter->self_msg_iter);
static enum lttng_live_iterator_status
lttng_live_iterator_handle_new_streams_and_metadata(struct lttng_live_msg_iter *lttng_live_msg_iter)
{
static enum lttng_live_iterator_status
lttng_live_iterator_handle_new_streams_and_metadata(struct lttng_live_msg_iter *lttng_live_msg_iter)
{
- enum lttng_live_iterator_status status;
enum lttng_live_viewer_status viewer_status;
uint64_t nr_sessions_opened = 0;
enum session_not_found_action sess_not_found_act =
enum lttng_live_viewer_status viewer_status;
uint64_t nr_sessions_opened = 0;
enum session_not_found_action sess_not_found_act =
BT_CPPLOGD_SPEC(
lttng_live_msg_iter->logger,
"No session found. Exiting in accordance with the `session-not-found-action` parameter");
BT_CPPLOGD_SPEC(
lttng_live_msg_iter->logger,
"No session found. Exiting in accordance with the `session-not-found-action` parameter");
- status = LTTNG_LIVE_ITERATOR_STATUS_END;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_END;
} else {
BT_CPPLOGD_SPEC(
lttng_live_msg_iter->logger,
} else {
BT_CPPLOGD_SPEC(
lttng_live_msg_iter->logger,
viewer_status = lttng_live_create_viewer_session(lttng_live_msg_iter);
if (viewer_status != LTTNG_LIVE_VIEWER_STATUS_OK) {
if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
viewer_status = lttng_live_create_viewer_session(lttng_live_msg_iter);
if (viewer_status != LTTNG_LIVE_VIEWER_STATUS_OK) {
if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
- status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error creating LTTng live viewer session");
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error creating LTTng live viewer session");
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
} else if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
} else if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
- status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
+ return LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
} else {
bt_common_abort();
}
} else {
bt_common_abort();
}
}
}
}
for (const auto& session : lttng_live_msg_iter->sessions) {
}
}
}
for (const auto& session : lttng_live_msg_iter->sessions) {
- status = lttng_live_get_session(lttng_live_msg_iter, session.get());
+ const auto status = lttng_live_get_session(lttng_live_msg_iter, session.get());
switch (status) {
case LTTNG_LIVE_ITERATOR_STATUS_OK:
case LTTNG_LIVE_ITERATOR_STATUS_END:
switch (status) {
case LTTNG_LIVE_ITERATOR_STATUS_OK:
case LTTNG_LIVE_ITERATOR_STATUS_END:
}
if (!session->closed) {
nr_sessions_opened++;
}
if (!session->closed) {
nr_sessions_opened++;
}
if (sess_not_found_act != SESSION_NOT_FOUND_ACTION_CONTINUE && nr_sessions_opened == 0) {
}
if (sess_not_found_act != SESSION_NOT_FOUND_ACTION_CONTINUE && nr_sessions_opened == 0) {
- status = LTTNG_LIVE_ITERATOR_STATUS_END;
+ return LTTNG_LIVE_ITERATOR_STATUS_END;
- status = LTTNG_LIVE_ITERATOR_STATUS_OK;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
}
static enum lttng_live_iterator_status
}
static enum lttng_live_iterator_status
struct lttng_live_msg_iter *lttng_live_msg_iter,
struct lttng_live_stream_iterator *lttng_live_stream, bt2::ConstMessage::Shared& message)
{
struct lttng_live_msg_iter *lttng_live_msg_iter,
struct lttng_live_stream_iterator *lttng_live_stream, bt2::ConstMessage::Shared& message)
{
- enum lttng_live_iterator_status ret = LTTNG_LIVE_ITERATOR_STATUS_OK;
-
if (lttng_live_stream->state != LTTNG_LIVE_STREAM_QUIESCENT) {
return LTTNG_LIVE_ITERATOR_STATUS_OK;
}
if (lttng_live_stream->state != LTTNG_LIVE_STREAM_QUIESCENT) {
return LTTNG_LIVE_ITERATOR_STATUS_OK;
}
lttng_live_stream_iterator_set_state(lttng_live_stream,
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;
+ return LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
- ret = emit_inactivity_message(lttng_live_msg_iter, lttng_live_stream, message,
- lttng_live_stream->current_inactivity_ts);
+ const auto status = emit_inactivity_message(lttng_live_msg_iter, lttng_live_stream, message,
+ lttng_live_stream->current_inactivity_ts);
+
+ if (status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
+ return status;
+ }
lttng_live_stream->last_inactivity_ts.value = lttng_live_stream->current_inactivity_ts;
lttng_live_stream->last_inactivity_ts.is_set = true;
lttng_live_stream->last_inactivity_ts.value = lttng_live_stream->current_inactivity_ts;
lttng_live_stream->last_inactivity_ts.is_set = true;
+
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
}
static int live_get_msg_ts_ns(struct lttng_live_msg_iter *lttng_live_msg_iter,
}
static int live_get_msg_ts_ns(struct lttng_live_msg_iter *lttng_live_msg_iter,
break;
default:
/* All the other messages have a higher priority */
break;
default:
/* All the other messages have a higher priority */
- BT_CPPLOGD_STR_SPEC(lttng_live_msg_iter->logger,
- "Message has no timestamp: using the last message timestamp.");
+ BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
+ "Message has no timestamp, using the last message timestamp: "
+ "iter-data-addr={}, msg-addr={}, last-msg-ts={}, ts={}",
+ fmt::ptr(lttng_live_msg_iter), fmt::ptr(msg), last_msg_ts_ns, *ts_ns);
}
ret = bt_clock_snapshot_get_ns_from_origin(clock_snapshot, ts_ns);
}
ret = bt_clock_snapshot_get_ns_from_origin(clock_snapshot, ts_ns);
"Cannot get nanoseconds from Epoch of clock snapshot: "
"clock-snapshot-addr={}",
fmt::ptr(clock_snapshot));
"Cannot get nanoseconds from Epoch of clock snapshot: "
"clock-snapshot-addr={}",
fmt::ptr(clock_snapshot));
- goto end;
-
-error:
- ret = -1;
+ BT_CPPLOGD_SPEC(
+ lttng_live_msg_iter->logger,
+ "Found message's timestamp: iter-data-addr={}, msg-addr={}, last-msg-ts={}, ts={}",
+ fmt::ptr(lttng_live_msg_iter), fmt::ptr(msg), last_msg_ts_ns, *ts_ns);
-end:
- if (ret == 0) {
- BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
- "Found message's timestamp: iter-data-addr={}, msg-addr={}, "
- "last-msg-ts={}, ts={}",
- fmt::ptr(lttng_live_msg_iter), fmt::ptr(msg), last_msg_ts_ns, *ts_ns);
- }
-
- return ret;
}
static enum lttng_live_iterator_status lttng_live_iterator_next_handle_one_active_data_stream(
struct lttng_live_msg_iter *lttng_live_msg_iter,
struct lttng_live_stream_iterator *lttng_live_stream, bt2::ConstMessage::Shared& message)
{
}
static enum lttng_live_iterator_status lttng_live_iterator_next_handle_one_active_data_stream(
struct lttng_live_msg_iter *lttng_live_msg_iter,
struct lttng_live_stream_iterator *lttng_live_stream, bt2::ConstMessage::Shared& message)
{
- enum lttng_live_iterator_status ret = LTTNG_LIVE_ITERATOR_STATUS_OK;
enum ctf_msg_iter_status status;
for (const auto& session : lttng_live_msg_iter->sessions) {
if (session->new_streams_needed) {
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
enum ctf_msg_iter_status status;
for (const auto& session : lttng_live_msg_iter->sessions) {
if (session->new_streams_needed) {
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
- "Need an update for streams: "
- "session-id={}",
- session->id);
- ret = LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
- goto end;
+ "Need an update for streams: session-id={}", session->id);
+ return LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
}
for (lttng_live_trace::UP& trace : session->traces) {
if (trace->metadata_stream_state == LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED) {
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
}
for (lttng_live_trace::UP& trace : session->traces) {
if (trace->metadata_stream_state == LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED) {
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
- "Need an update for metadata stream: "
- "session-id={}, trace-id={}",
+ "Need an update for metadata stream: session-id={}, trace-id={}",
- ret = LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
}
}
}
if (lttng_live_stream->state != LTTNG_LIVE_STREAM_ACTIVE_DATA) {
}
}
}
if (lttng_live_stream->state != LTTNG_LIVE_STREAM_ACTIVE_DATA) {
- ret = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
- "Invalid state of live stream iterator"
- "stream-iter-status={}",
+ "Invalid state of live stream iterator: stream-iter-status={}",
lttng_live_stream->state);
lttng_live_stream->state);
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
const bt_message *msg;
status = ctf_msg_iter_get_next_message(lttng_live_stream->msg_iter.get(), &msg);
switch (status) {
case CTF_MSG_ITER_STATUS_EOF:
}
const bt_message *msg;
status = ctf_msg_iter_get_next_message(lttng_live_stream->msg_iter.get(), &msg);
switch (status) {
case CTF_MSG_ITER_STATUS_EOF:
- ret = LTTNG_LIVE_ITERATOR_STATUS_END;
- break;
+ return LTTNG_LIVE_ITERATOR_STATUS_END;
case CTF_MSG_ITER_STATUS_OK:
message = bt2::ConstMessage::Shared::createWithoutRef(msg);
case CTF_MSG_ITER_STATUS_OK:
message = bt2::ConstMessage::Shared::createWithoutRef(msg);
- ret = LTTNG_LIVE_ITERATOR_STATUS_OK;
- break;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
case CTF_MSG_ITER_STATUS_AGAIN:
/*
* Continue immediately (end of packet). The next
* get_index may return AGAIN to delay the following
* attempt.
*/
case CTF_MSG_ITER_STATUS_AGAIN:
/*
* Continue immediately (end of packet). The next
* get_index may return AGAIN to delay the following
* attempt.
*/
- ret = LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
- break;
+ return LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
case CTF_MSG_ITER_STATUS_ERROR:
default:
case CTF_MSG_ITER_STATUS_ERROR:
default:
- ret = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
- "CTF message iterator failed to get next message: "
- "msg-iter={}, msg-iter-status={}",
- fmt::ptr(lttng_live_stream->msg_iter), status);
- break;
+ BT_CPPLOGE_APPEND_CAUSE_SPEC(
+ lttng_live_msg_iter->logger,
+ "CTF message iterator failed to get next message: msg-iter={}, msg-iter-status={}",
+ fmt::ptr(lttng_live_stream->msg_iter), status);
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
static enum lttng_live_iterator_status
}
static enum lttng_live_iterator_status
struct lttng_live_stream_iterator *stream_iter,
bt2::ConstMessage::Shared& curr_msg)
{
struct lttng_live_stream_iterator *stream_iter,
bt2::ConstMessage::Shared& curr_msg)
{
- enum lttng_live_iterator_status live_status = LTTNG_LIVE_ITERATOR_STATUS_OK;
-
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
"Closing live stream iterator: stream-name=\"{}\", "
"viewer-stream-id={}",
BT_CPPLOGD_SPEC(lttng_live_msg_iter->logger,
"Closing live stream iterator: stream-name=\"{}\", "
"viewer-stream-id={}",
if (status == CTF_MSG_ITER_STATUS_ERROR) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error getting the next message from CTF message iterator");
if (status == CTF_MSG_ITER_STATUS_ERROR) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error getting the next message from CTF message iterator");
- live_status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
} else if (status == CTF_MSG_ITER_STATUS_EOF) {
BT_CPPLOGI_SPEC(lttng_live_msg_iter->logger,
"Reached the end of the live stream iterator.");
} else if (status == CTF_MSG_ITER_STATUS_EOF) {
BT_CPPLOGI_SPEC(lttng_live_msg_iter->logger,
"Reached the end of the live stream iterator.");
- live_status = LTTNG_LIVE_ITERATOR_STATUS_END;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_END;
}
BT_ASSERT(status == CTF_MSG_ITER_STATUS_OK);
curr_msg = bt2::ConstMessage::Shared::createWithoutRef(msg);
}
BT_ASSERT(status == CTF_MSG_ITER_STATUS_OK);
curr_msg = bt2::ConstMessage::Shared::createWithoutRef(msg);
-end:
- return live_status;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
const bt_stream_class *stream_class;
enum bt_clock_class_cycles_to_ns_from_origin_status ts_ns_status;
int64_t last_inactivity_ts_ns;
const bt_stream_class *stream_class;
enum bt_clock_class_cycles_to_ns_from_origin_status ts_ns_status;
int64_t last_inactivity_ts_ns;
- enum lttng_live_iterator_status stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_OK;
enum lttng_live_iterator_status adjust_status;
bt2::ConstMessage::Shared adjusted_message;
enum lttng_live_iterator_status adjust_status;
bt2::ConstMessage::Shared adjusted_message;
"Invalid live stream state: "
"have a late message when no inactivity message "
"was ever sent for that stream.");
"Invalid live stream state: "
"have a late message when no inactivity message "
"was ever sent for that stream.");
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
if (!is_discarded_packet_or_event_message(late_msg)) {
}
if (!is_discarded_packet_or_event_message(late_msg)) {
"have a late message that is not a packet discarded or "
"event discarded message: late-msg-type={}",
late_msg.type());
"have a late message that is not a packet discarded or "
"event discarded message: late-msg-type={}",
late_msg.type());
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
stream_class = bt_stream_borrow_class_const(stream_iter->stream->libObjPtr());
}
stream_class = bt_stream_borrow_class_const(stream_iter->stream->libObjPtr());
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error converting last "
"inactivity message timestamp to nanoseconds");
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error converting last "
"inactivity message timestamp to nanoseconds");
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
if (last_inactivity_ts_ns <= late_msg_ts_ns) {
}
if (last_inactivity_ts_ns <= late_msg_ts_ns) {
"inactivity timespan: last-inactivity-ts-ns={}, "
"late-msg-ts-ns={}",
last_inactivity_ts_ns, late_msg_ts_ns);
"inactivity timespan: last-inactivity-ts-ns={}, "
"late-msg-ts-ns={}",
last_inactivity_ts_ns, late_msg_ts_ns);
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
if (adjust_status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
}
if (adjust_status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
- stream_iter_status = adjust_status;
- goto end;
}
BT_ASSERT_DBG(adjusted_message);
stream_iter->current_msg = adjusted_message;
stream_iter->current_msg_ts_ns = last_inactivity_ts_ns;
}
BT_ASSERT_DBG(adjusted_message);
stream_iter->current_msg = adjusted_message;
stream_iter->current_msg_ts_ns = last_inactivity_ts_ns;
-end:
- return stream_iter_status;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
}
static enum lttng_live_iterator_status
}
static enum lttng_live_iterator_status
struct lttng_live_stream_iterator **youngest_trace_stream_iter)
{
struct lttng_live_stream_iterator *youngest_candidate_stream_iter = NULL;
struct lttng_live_stream_iterator **youngest_trace_stream_iter)
{
struct lttng_live_stream_iterator *youngest_candidate_stream_iter = NULL;
- enum lttng_live_iterator_status stream_iter_status;
int64_t youngest_candidate_msg_ts = INT64_MAX;
uint64_t stream_iter_idx;
int64_t youngest_candidate_msg_ts = INT64_MAX;
uint64_t stream_iter_idx;
bt2::ConstMessage::Shared msg;
int64_t curr_msg_ts_ns = INT64_MAX;
bt2::ConstMessage::Shared msg;
int64_t curr_msg_ts_ns = INT64_MAX;
+ const auto stream_iter_status =
lttng_live_iterator_next_msg_on_stream(lttng_live_msg_iter, stream_iter, msg);
if (stream_iter_status == LTTNG_LIVE_ITERATOR_STATUS_END) {
lttng_live_iterator_next_msg_on_stream(lttng_live_msg_iter, stream_iter, msg);
if (stream_iter_status == LTTNG_LIVE_ITERATOR_STATUS_END) {
}
if (stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
}
if (stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
+ return stream_iter_status;
* We received a message from the past. This
* may be fixable but it can also be an error.
*/
* We received a message from the past. This
* may be fixable but it can also be an error.
*/
- stream_iter_status =
- handle_late_message(lttng_live_msg_iter, stream_iter, curr_msg_ts_ns, *msg);
- if (stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
+ if (handle_late_message(lttng_live_msg_iter, stream_iter, curr_msg_ts_ns, *msg) !=
+ LTTNG_LIVE_ITERATOR_STATUS_OK) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Late message could not be handled correctly: "
"lttng-live-msg-iter-addr={}, "
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Late message could not be handled correctly: "
"lttng-live-msg-iter-addr={}, "
fmt::ptr(lttng_live_msg_iter), stream_iter->name,
curr_msg_ts_ns,
lttng_live_msg_iter->last_msg_ts_ns);
fmt::ptr(lttng_live_msg_iter), stream_iter->name,
curr_msg_ts_ns,
lttng_live_msg_iter->last_msg_ts_ns);
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
if (youngest_candidate_stream_iter) {
*youngest_trace_stream_iter = youngest_candidate_stream_iter;
if (youngest_candidate_stream_iter) {
*youngest_trace_stream_iter = youngest_candidate_stream_iter;
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_OK;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
} else {
/*
* The only case where we don't have a candidate for this trace
* is if we reached the end of all the iterators.
*/
BT_ASSERT(live_trace->stream_iterators.empty());
} else {
/*
* The only case where we don't have a candidate for this trace
* is if we reached the end of all the iterators.
*/
BT_ASSERT(live_trace->stream_iterators.empty());
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_END;
+ return LTTNG_LIVE_ITERATOR_STATUS_END;
-
-end:
- return stream_iter_status;
}
static enum lttng_live_iterator_status
}
static enum lttng_live_iterator_status
if (stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_OK &&
stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_CONTINUE &&
stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_END) {
if (stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_OK &&
stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_CONTINUE &&
stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_END) {
+ return stream_iter_status;
}
while (trace_idx < session->traces.size()) {
}
while (trace_idx < session->traces.size()) {
*/
trace_is_ended = true;
} else if (stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
*/
trace_is_ended = true;
} else if (stream_iter_status != LTTNG_LIVE_ITERATOR_STATUS_OK) {
+ return stream_iter_status;
}
if (youngest_candidate_stream_iter) {
*youngest_session_stream_iter = youngest_candidate_stream_iter;
}
if (youngest_candidate_stream_iter) {
*youngest_session_stream_iter = youngest_candidate_stream_iter;
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_OK;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
} else {
/*
* The only cases where we don't have a candidate for this
} else {
/*
* The only cases where we don't have a candidate for this
* In either cases, we return END.
*/
BT_ASSERT(session->traces.empty());
* In either cases, we return END.
*/
BT_ASSERT(session->traces.empty());
- stream_iter_status = LTTNG_LIVE_ITERATOR_STATUS_END;
+ return LTTNG_LIVE_ITERATOR_STATUS_END;
-end:
- return stream_iter_status;
}
static inline void put_messages(bt_message_array_const msgs, uint64_t count)
}
static inline void put_messages(bt_message_array_const msgs, uint64_t count)
* is to prevent other graph users from using this live
* iterator in an messed up internal state.
*/
* is to prevent other graph users from using this live
* iterator in an messed up internal state.
*/
- status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
BT_CPPLOGE_APPEND_CAUSE_SPEC(
lttng_live_msg_iter->logger,
"Message iterator was interrupted during a previous call to the `next()` and currently does not support continuing after such event.");
BT_CPPLOGE_APPEND_CAUSE_SPEC(
lttng_live_msg_iter->logger,
"Message iterator was interrupted during a previous call to the `next()` and currently does not support continuing after such event.");
+ return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
*/
if (lttng_live_msg_iter->sessions.empty()) {
if (lttng_live->params.sess_not_found_act != SESSION_NOT_FOUND_ACTION_CONTINUE) {
*/
if (lttng_live_msg_iter->sessions.empty()) {
if (lttng_live->params.sess_not_found_act != SESSION_NOT_FOUND_ACTION_CONTINUE) {
- status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END;
- goto end;
+ return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END;
} else {
/*
* The are no more active session for this session
} else {
/*
* The are no more active session for this session
viewer_status = lttng_live_create_viewer_session(lttng_live_msg_iter);
if (viewer_status != LTTNG_LIVE_VIEWER_STATUS_OK) {
if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
viewer_status = lttng_live_create_viewer_session(lttng_live_msg_iter);
if (viewer_status != LTTNG_LIVE_VIEWER_STATUS_OK) {
if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_ERROR) {
- status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error creating LTTng live viewer session");
BT_CPPLOGE_APPEND_CAUSE_SPEC(lttng_live_msg_iter->logger,
"Error creating LTTng live viewer session");
+ return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR;
} else if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
} else if (viewer_status == LTTNG_LIVE_VIEWER_STATUS_INTERRUPTED) {
- status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_AGAIN;
+ return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_AGAIN;
} else {
bt_common_abort();
}
} else {
bt_common_abort();
}
return status;
} catch (const std::bad_alloc&) {
return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR;
return status;
} catch (const std::bad_alloc&) {
return BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR;
uint64_t i, sc_count;
const bt_clock_class *cc = NULL;
const bt_stream_class *sc;
uint64_t i, sc_count;
const bt_clock_class *cc = NULL;
const bt_stream_class *sc;
sc_count = bt_trace_class_get_stream_class_count(tc);
for (i = 0; i < sc_count; i++) {
sc_count = bt_trace_class_get_stream_class_count(tc);
for (i = 0; i < sc_count; i++) {
cc = bt_stream_class_borrow_default_clock_class_const(sc);
if (!cc) {
cc = bt_stream_class_borrow_default_clock_class_const(sc);
if (!cc) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(logger,
"Stream class doesn't have a default clock class: "
"sc-id={}, sc-name=\"{}\"",
bt_stream_class_get_id(sc), bt_stream_class_get_name(sc));
BT_CPPLOGE_APPEND_CAUSE_SPEC(logger,
"Stream class doesn't have a default clock class: "
"sc-id={}, sc-name=\"{}\"",
bt_stream_class_get_id(sc), bt_stream_class_get_name(sc));
}
/*
* Iterate over the stream classes and returns the first clock class
}
/*
* Iterate over the stream classes and returns the first clock class
cc = bt_stream_class_borrow_default_clock_class_const(sc);
if (cc) {
cc = bt_stream_class_borrow_default_clock_class_const(sc);
if (cc) {
-end:
- BT_ASSERT_DBG(cc);
- return cc;
}
enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_trace *trace)
}
enum lttng_live_iterator_status lttng_live_metadata_update(struct lttng_live_trace *trace)
bool keep_receiving;
bt2c::FileUP fp;
enum ctf_metadata_decoder_status decoder_status;
bool keep_receiving;
bt2c::FileUP fp;
enum ctf_metadata_decoder_status decoder_status;
- enum lttng_live_iterator_status status = LTTNG_LIVE_ITERATOR_STATUS_OK;
enum lttng_live_get_one_metadata_status metadata_status;
BT_CPPLOGD_SPEC(metadata->logger, "Updating metadata for trace: session-id={}, trace-id={}",
enum lttng_live_get_one_metadata_status metadata_status;
BT_CPPLOGD_SPEC(metadata->logger, "Updating metadata for trace: session-id={}, trace-id={}",
* metadata this indicates that we will never receive
* any metadata.
*/
* metadata this indicates that we will never receive
* any metadata.
*/
- status = LTTNG_LIVE_ITERATOR_STATUS_END;
+ return LTTNG_LIVE_ITERATOR_STATUS_END;
} else if (session->new_streams_needed) {
} else if (session->new_streams_needed) {
- status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
+ return LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
} else {
session->new_streams_needed = true;
} else {
session->new_streams_needed = true;
- status = LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
+ return LTTNG_LIVE_ITERATOR_STATUS_CONTINUE;
}
if (trace->metadata_stream_state != LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED) {
}
if (trace->metadata_stream_state != LTTNG_LIVE_METADATA_STREAM_STATE_NEEDED) {
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger,
"Error getting one trace metadata packet: trace-id={}",
trace->id);
BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger,
"Error getting one trace metadata packet: trace-id={}",
trace->id);
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
default:
bt_common_abort();
}
default:
bt_common_abort();
}
if (metadataBuf.empty()) {
if (!trace->trace) {
if (metadataBuf.empty()) {
if (!trace->trace) {
- status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
- goto end;
+ return LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
}
/* The relay sent zero bytes of metadata. */
trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED;
}
/* The relay sent zero bytes of metadata. */
trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
if (!fp) {
if (errno == EINTR && lttng_live_graph_is_canceled(session->lttng_live_msg_iter)) {
session->lttng_live_msg_iter->was_interrupted = true;
if (!fp) {
if (errno == EINTR && lttng_live_graph_is_canceled(session->lttng_live_msg_iter)) {
session->lttng_live_msg_iter->was_interrupted = true;
- status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
+ return LTTNG_LIVE_ITERATOR_STATUS_AGAIN;
} else {
BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(metadata->logger,
"Cannot memory-open metadata buffer", ".");
} else {
BT_CPPLOGE_ERRNO_APPEND_CAUSE_SPEC(metadata->logger,
"Cannot memory-open metadata buffer", ".");
- status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
trace->trace = trace->trace_class->instantiate();
if (!trace->trace) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger, "Failed to create bt_trace");
trace->trace = trace->trace_class->instantiate();
if (!trace->trace) {
BT_CPPLOGE_APPEND_CAUSE_SPEC(metadata->logger, "Failed to create bt_trace");
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
ctf_trace_class_configure_ir_trace(tc, *trace->trace);
}
ctf_trace_class_configure_ir_trace(tc, *trace->trace);
if (!stream_classes_all_have_default_clock_class(trace->trace_class->libObjPtr(),
metadata->logger)) {
/* Error logged in function. */
if (!stream_classes_all_have_default_clock_class(trace->trace_class->libObjPtr(),
metadata->logger)) {
/* Error logged in function. */
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
}
trace->clock_class = borrow_any_clock_class(trace->trace_class->libObjPtr());
}
}
trace->clock_class = borrow_any_clock_class(trace->trace_class->libObjPtr());
}
/* The metadata was updated successfully. */
trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED;
/* The metadata was updated successfully. */
trace->metadata_stream_state = LTTNG_LIVE_METADATA_STREAM_STATE_NOT_NEEDED;
+ return LTTNG_LIVE_ITERATOR_STATUS_OK;
+ return LTTNG_LIVE_ITERATOR_STATUS_ERROR;
-
- goto end;
-
-error:
- status = LTTNG_LIVE_ITERATOR_STATUS_ERROR;
-end:
- return status;
}
int lttng_live_metadata_create_stream(struct lttng_live_session *session, uint64_t ctf_trace_id,
}
int lttng_live_metadata_create_stream(struct lttng_live_session *session, uint64_t ctf_trace_id,