X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Flttng-live%2Fmetadata.c;h=f77d62f8baf74d1ce049b1e35cb201b10563f03a;hb=98b15851a941e7342b8bb19e265cdc3a40fabfb8;hp=0ea4c77d0db9b0fc0949e291211c99ff166372ab;hpb=0746848ce8b40484254eeace3962a7654d01c7bc;p=babeltrace.git diff --git a/src/plugins/ctf/lttng-live/metadata.c b/src/plugins/ctf/lttng-live/metadata.c index 0ea4c77d..f77d62f8 100644 --- a/src/plugins/ctf/lttng-live/metadata.c +++ b/src/plugins/ctf/lttng-live/metadata.c @@ -24,8 +24,10 @@ * SOFTWARE. */ +#define BT_COMP_LOG_SELF_COMP self_comp +#define BT_LOG_OUTPUT_LEVEL log_level #define BT_LOG_TAG "PLUGIN/SRC.CTF.LTTNG-LIVE/META" -#include "logging.h" +#include "logging/comp-logging.h" #include #include @@ -37,6 +39,7 @@ #include "metadata.h" #include "../common/metadata/decoder.h" +#include "../common/metadata/ctf-meta-configure-ir-trace.h" #define TSDL_MAGIC 0x75d11d57 @@ -55,7 +58,9 @@ struct packet_header { static -bool stream_classes_all_have_default_clock_class(bt_trace_class *tc) +bool stream_classes_all_have_default_clock_class(bt_trace_class *tc, + bt_logging_level log_level, + bt_self_component *self_comp) { uint64_t i, sc_count; const bt_clock_class *cc = NULL; @@ -71,7 +76,7 @@ bool stream_classes_all_have_default_clock_class(bt_trace_class *tc) cc = bt_stream_class_borrow_default_clock_class_const(sc); if (!cc) { ret = false; - BT_LOGE("Stream class doesn't have a default clock class: " + BT_COMP_LOGE("Stream class doesn't have a default clock class: " "sc-id=%" PRIu64 ", sc-name=\"%s\"", bt_stream_class_get_id(sc), bt_stream_class_get_name(sc)); @@ -97,7 +102,7 @@ const bt_clock_class *borrow_any_clock_class(bt_trace_class *tc) sc_count = bt_trace_class_get_stream_class_count(tc); for (i = 0; i < sc_count; i++) { sc = bt_trace_class_borrow_stream_class_by_index_const(tc, i); - BT_ASSERT(sc); + BT_ASSERT_DBG(sc); cc = bt_stream_class_borrow_default_clock_class_const(sc); if (cc) { @@ -105,7 +110,7 @@ const bt_clock_class *borrow_any_clock_class(bt_trace_class *tc) } } end: - BT_ASSERT(cc); + BT_ASSERT_DBG(cc); return cc; } @@ -115,8 +120,6 @@ enum lttng_live_iterator_status lttng_live_metadata_update( { struct lttng_live_session *session = trace->session; struct lttng_live_metadata *metadata = trace->metadata; - struct lttng_live_component *lttng_live = - session->lttng_live_msg_iter->lttng_live_comp; ssize_t ret = 0; size_t size, len_read = 0; char *metadata_buf = NULL; @@ -124,6 +127,8 @@ enum lttng_live_iterator_status lttng_live_metadata_update( enum ctf_metadata_decoder_status decoder_status; enum lttng_live_iterator_status status = LTTNG_LIVE_ITERATOR_STATUS_OK; + bt_logging_level log_level = trace->log_level; + bt_self_component *self_comp = trace->self_comp; /* No metadata stream yet. */ if (!metadata) { @@ -147,7 +152,7 @@ enum lttng_live_iterator_status lttng_live_metadata_update( /* Open for writing */ fp = bt_open_memstream(&metadata_buf, &size); if (!fp) { - BT_LOGE("Metadata open_memstream: %s", strerror(errno)); + BT_COMP_LOGE("Metadata open_memstream: %s", strerror(errno)); goto error; } @@ -181,7 +186,8 @@ enum lttng_live_iterator_status lttng_live_metadata_update( metadata->trace = NULL; } if (errno == EINTR) { - if (lttng_live_graph_is_canceled(lttng_live)) { + if (lttng_live_graph_is_canceled( + session->lttng_live_msg_iter)) { status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN; goto end; } @@ -189,9 +195,9 @@ enum lttng_live_iterator_status lttng_live_metadata_update( } if (bt_close_memstream(&metadata_buf, &size, fp)) { - BT_LOGE("bt_close_memstream: %s", strerror(errno)); + BT_COMP_LOGE("bt_close_memstream: %s", strerror(errno)); } - ret = 0; + fp = NULL; if (len_read == 0) { @@ -205,25 +211,38 @@ enum lttng_live_iterator_status lttng_live_metadata_update( fp = bt_fmemopen(metadata_buf, len_read, "rb"); if (!fp) { - BT_LOGE("Cannot memory-open metadata buffer: %s", + BT_COMP_LOGE("Cannot memory-open metadata buffer: %s", strerror(errno)); goto error; } /* - * The call to ctf_metadata_decoder_decode will append new metadata to - * our current trace class. + * The call to ctf_metadata_decoder_append_content() will append + * new metadata to our current trace class. */ - decoder_status = ctf_metadata_decoder_decode(metadata->decoder, fp); + decoder_status = ctf_metadata_decoder_append_content( + metadata->decoder, fp); switch (decoder_status) { case CTF_METADATA_DECODER_STATUS_OK: if (!trace->trace_class) { + struct ctf_trace_class *tc = + ctf_metadata_decoder_borrow_ctf_trace_class( + metadata->decoder); + trace->trace_class = ctf_metadata_decoder_get_ir_trace_class( metadata->decoder); trace->trace = bt_trace_create(trace->trace_class); + if (!trace->trace) { + goto error; + } + if (ctf_trace_class_configure_ir_trace(tc, + trace->trace)) { + goto error; + } if (!stream_classes_all_have_default_clock_class( - trace->trace_class)) { + trace->trace_class, log_level, + self_comp)) { /* Error logged in function. */ goto error; } @@ -236,9 +255,7 @@ enum lttng_live_iterator_status lttng_live_metadata_update( case CTF_METADATA_DECODER_STATUS_INCOMPLETE: status = LTTNG_LIVE_ITERATOR_STATUS_AGAIN; break; - case CTF_METADATA_DECODER_STATUS_ERROR: - case CTF_METADATA_DECODER_STATUS_INVAL_VERSION: - case CTF_METADATA_DECODER_STATUS_IR_VISITOR_ERROR: + default: goto error; } @@ -251,7 +268,7 @@ end: closeret = fclose(fp); if (closeret) { - BT_LOGE("Error on fclose"); + BT_COMP_LOGE("Error on fclose"); } } free(metadata_buf); @@ -260,34 +277,28 @@ end: BT_HIDDEN int lttng_live_metadata_create_stream(struct lttng_live_session *session, - uint64_t ctf_trace_id, - uint64_t stream_id, + uint64_t ctf_trace_id, uint64_t stream_id, const char *trace_name) { - struct lttng_live_component *lttng_live = - session->lttng_live_msg_iter->lttng_live_comp; struct lttng_live_metadata *metadata = NULL; struct lttng_live_trace *trace; - const char *match; struct ctf_metadata_decoder_config cfg = { - .log_level = BT_LOG_OUTPUT_LEVEL, + .log_level = session->log_level, + .self_comp = session->self_comp, .clock_class_offset_s = 0, .clock_class_offset_ns = 0, + .create_trace_class = true, }; metadata = g_new0(struct lttng_live_metadata, 1); if (!metadata) { return -1; } + metadata->log_level = session->log_level; + metadata->self_comp = session->self_comp; metadata->stream_id = stream_id; - match = strstr(trace_name, session->session_name->str); - if (!match) { - goto error; - } - - metadata->decoder = ctf_metadata_decoder_create( - lttng_live->self_comp, &cfg); + metadata->decoder = ctf_metadata_decoder_create(&cfg); if (!metadata->decoder) { goto error; }