X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Futils%2Ftrimmer%2Ftrimmer.c;h=d7f5576bdd6bb7719f2255d749095f881e49d338;hb=a3f0c7db90f4cfc81090a83a7442b7bc624d5789;hp=720b4f812b4a2c20c0ddd1000f36284031760316;hpb=53a42a43d3478a8459dfffaca45d5cf9c9dbbc31;p=babeltrace.git diff --git a/src/plugins/utils/trimmer/trimmer.c b/src/plugins/utils/trimmer/trimmer.c index 720b4f81..d7f5576b 100644 --- a/src/plugins/utils/trimmer/trimmer.c +++ b/src/plugins/utils/trimmer/trimmer.c @@ -21,20 +21,21 @@ * SOFTWARE. */ -#define BT_COMP_LOG_SELF_COMP (trimmer_comp->self_comp) #define BT_LOG_OUTPUT_LEVEL (trimmer_comp->log_level) #define BT_LOG_TAG "PLUGIN/FLT.UTILS.TRIMMER" -#include "plugins/comp-logging.h" +#include "logging/comp-logging.h" #include "compat/utc.h" #include "compat/time.h" #include #include "common/common.h" #include "common/assert.h" +#include #include #include #include #include "compat/glib.h" +#include "plugins/common/param-validation/param-validation.h" #include "trimmer.h" @@ -75,6 +76,7 @@ struct trimmer_comp { bool is_gmt; bt_logging_level log_level; bt_self_component *self_comp; + bt_self_component_filter *self_comp_filter; }; enum trimmer_iterator_state { @@ -422,10 +424,13 @@ int set_bound_from_str(struct trimmer_comp *trimmer_comp, goto end; } - BT_COMP_LOGE("Invalid date/time format: param=\"%s\"", str); + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Invalid date/time format: param=\"%s\"", str); ret = -1; end: + g_match_info_free(match_info); + return ret; } @@ -445,7 +450,7 @@ int set_bound_from_param(struct trimmer_comp *trimmer_comp, char tmp_arg[64]; if (bt_value_is_signed_integer(param)) { - int64_t value = bt_value_signed_integer_get(param); + int64_t value = bt_value_integer_signed_get(param); /* * Just convert it to a temporary string to handle @@ -453,18 +458,13 @@ int set_bound_from_param(struct trimmer_comp *trimmer_comp, */ sprintf(tmp_arg, "%" PRId64, value); arg = tmp_arg; - } else if (bt_value_is_string(param)) { - arg = bt_value_string_get(param); } else { - BT_COMP_LOGE("`%s` parameter must be an integer or a string value.", - param_name); - ret = -1; - goto end; + BT_ASSERT(bt_value_is_string(param)); + arg = bt_value_string_get(param); } ret = set_bound_from_str(trimmer_comp, arg, bound, is_gmt); -end: return ret; } @@ -479,7 +479,8 @@ int validate_trimmer_bounds(struct trimmer_comp *trimmer_comp, if (!begin->is_infinite && !end->is_infinite && begin->ns_from_origin > end->ns_from_origin) { - BT_COMP_LOGE("Trimming time range's beginning time is greater than end time: " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Trimming time range's beginning time is greater than end time: " "begin-ns-from-origin=%" PRId64 ", " "end-ns-from-origin=%" PRId64, begin->ns_from_origin, @@ -489,7 +490,8 @@ int validate_trimmer_bounds(struct trimmer_comp *trimmer_comp, } if (!begin->is_infinite && begin->ns_from_origin == INT64_MIN) { - BT_COMP_LOGE("Invalid trimming time range's beginning time: " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Invalid trimming time range's beginning time: " "ns-from-origin=%" PRId64, begin->ns_from_origin); ret = -1; @@ -497,7 +499,8 @@ int validate_trimmer_bounds(struct trimmer_comp *trimmer_comp, } if (!end->is_infinite && end->ns_from_origin == INT64_MIN) { - BT_COMP_LOGE("Invalid trimming time range's end time: " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Invalid trimming time range's end time: " "ns-from-origin=%" PRId64, end->ns_from_origin); ret = -1; @@ -509,11 +512,53 @@ end: } static -int init_trimmer_comp_from_params(struct trimmer_comp *trimmer_comp, +enum bt_param_validation_status validate_bound_type( + const bt_value *value, + struct bt_param_validation_context *context) +{ + enum bt_param_validation_status status = BT_PARAM_VALIDATION_STATUS_OK; + + if (!bt_value_is_signed_integer(value) && + !bt_value_is_string(value)) { + status = bt_param_validation_error(context, + "unexpected type: expected-types=[%s, %s], actual-type=%s", + bt_common_value_type_string(BT_VALUE_TYPE_SIGNED_INTEGER), + bt_common_value_type_string(BT_VALUE_TYPE_STRING), + bt_common_value_type_string(bt_value_get_type(value))); + } + + return status; +} + +static +struct bt_param_validation_map_value_entry_descr trimmer_params[] = { + { "gmt", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, + { "begin", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .validation_func = validate_bound_type } }, + { "end", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .validation_func = validate_bound_type } }, + BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_END +}; + +static +bt_component_class_initialize_method_status init_trimmer_comp_from_params( + struct trimmer_comp *trimmer_comp, const bt_value *params) { const bt_value *value; - int ret = 0; + bt_component_class_initialize_method_status status; + enum bt_param_validation_status validation_status; + gchar *validate_error = NULL; + + validation_status = bt_param_validation_validate(params, + trimmer_params, &validate_error); + if (validation_status == BT_PARAM_VALIDATION_STATUS_MEMORY_ERROR) { + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; + goto end; + } else if (validation_status == BT_PARAM_VALIDATION_STATUS_VALIDATION_ERROR) { + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, "%s", + validate_error); + goto end; + } BT_ASSERT(params); value = bt_value_map_borrow_entry_value_const(params, "gmt"); @@ -526,7 +571,7 @@ int init_trimmer_comp_from_params(struct trimmer_comp *trimmer_comp, if (set_bound_from_param(trimmer_comp, "begin", value, &trimmer_comp->begin, trimmer_comp->is_gmt)) { /* set_bound_from_param() logs errors */ - ret = -1; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto end; } } else { @@ -539,7 +584,7 @@ int init_trimmer_comp_from_params(struct trimmer_comp *trimmer_comp, if (set_bound_from_param(trimmer_comp, "end", value, &trimmer_comp->end, trimmer_comp->is_gmt)) { /* set_bound_from_param() logs errors */ - ret = -1; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto end; } } else { @@ -547,75 +592,69 @@ int init_trimmer_comp_from_params(struct trimmer_comp *trimmer_comp, trimmer_comp->end.is_set = true; } -end: if (trimmer_comp->begin.is_set && trimmer_comp->end.is_set) { /* validate_trimmer_bounds() logs errors */ - ret = validate_trimmer_bounds(trimmer_comp, - &trimmer_comp->begin, &trimmer_comp->end); + if (validate_trimmer_bounds(trimmer_comp, + &trimmer_comp->begin, &trimmer_comp->end)) { + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; + goto end; + } } - return ret; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; + +end: + g_free(validate_error); + + return status; } -bt_component_class_init_method_status trimmer_init( +bt_component_class_initialize_method_status trimmer_init( bt_self_component_filter *self_comp_flt, + bt_self_component_filter_configuration *config, const bt_value *params, void *init_data) { - int ret; - bt_component_class_init_method_status status = - BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK; + bt_component_class_initialize_method_status status; bt_self_component_add_port_status add_port_status; struct trimmer_comp *trimmer_comp = create_trimmer_comp(); bt_self_component *self_comp = bt_self_component_filter_as_self_component(self_comp_flt); + if (!trimmer_comp) { - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto error; } trimmer_comp->log_level = bt_component_get_logging_level( bt_self_component_as_component(self_comp)); trimmer_comp->self_comp = self_comp; + trimmer_comp->self_comp_filter = self_comp_flt; + add_port_status = bt_self_component_filter_add_input_port( self_comp_flt, in_port_name, NULL, NULL); - switch (add_port_status) { - case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) { + status = (int) add_port_status; goto error; - case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; - goto error; - default: - break; } add_port_status = bt_self_component_filter_add_output_port( self_comp_flt, "out", NULL, NULL); - switch (add_port_status) { - case BT_SELF_COMPONENT_ADD_PORT_STATUS_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + if (add_port_status != BT_SELF_COMPONENT_ADD_PORT_STATUS_OK) { + status = (int) add_port_status; goto error; - case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; - goto error; - default: - break; } - ret = init_trimmer_comp_from_params(trimmer_comp, params); - if (ret) { - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + status = init_trimmer_comp_from_params(trimmer_comp, params); + if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) { goto error; } bt_self_component_set_data(self_comp, trimmer_comp); + + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; goto end; error: - if (status == BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) { - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; - } - if (trimmer_comp) { destroy_trimmer_comp(trimmer_comp); } @@ -627,7 +666,10 @@ end: static void destroy_trimmer_iterator(struct trimmer_iterator *trimmer_it) { - BT_ASSERT(trimmer_it); + if (!trimmer_it) { + goto end; + } + bt_self_component_port_input_message_iterator_put_ref( trimmer_it->upstream_iter); @@ -640,6 +682,8 @@ void destroy_trimmer_iterator(struct trimmer_iterator *trimmer_it) } g_free(trimmer_it); +end: + return; } static @@ -652,23 +696,24 @@ void destroy_trimmer_iterator_stream_state( } BT_HIDDEN -bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init( +bt_message_iterator_class_initialize_method_status trimmer_msg_iter_init( bt_self_message_iterator *self_msg_iter, - bt_self_component_filter *self_comp, + bt_self_message_iterator_configuration *config, + bt_self_component *self_comp, bt_self_component_port_output *port) { - bt_component_class_message_iterator_init_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK; + bt_message_iterator_class_initialize_method_status status; + bt_self_component_port_input_message_iterator_create_from_message_iterator_status + msg_iter_status; struct trimmer_iterator *trimmer_it; trimmer_it = g_new0(struct trimmer_iterator, 1); if (!trimmer_it) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR; - goto end; + status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; + goto error; } - trimmer_it->trimmer_comp = bt_self_component_get_data( - bt_self_component_filter_as_self_component(self_comp)); + trimmer_it->trimmer_comp = bt_self_component_get_data(self_comp); BT_ASSERT(trimmer_it->trimmer_comp); if (trimmer_it->trimmer_comp->begin.is_set && @@ -684,37 +729,48 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init( trimmer_it->begin = trimmer_it->trimmer_comp->begin; trimmer_it->end = trimmer_it->trimmer_comp->end; - trimmer_it->upstream_iter = - bt_self_component_port_input_message_iterator_create( + msg_iter_status = + bt_self_component_port_input_message_iterator_create_from_message_iterator( + self_msg_iter, bt_self_component_filter_borrow_input_port_by_name( - self_comp, in_port_name)); - if (!trimmer_it->upstream_iter) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_ERROR; - goto end; + trimmer_it->trimmer_comp->self_comp_filter, in_port_name), + &trimmer_it->upstream_iter); + if (msg_iter_status != BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_CREATE_FROM_MESSAGE_ITERATOR_STATUS_OK) { + status = (int) msg_iter_status; + goto error; } trimmer_it->output_messages = g_queue_new(); if (!trimmer_it->output_messages) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR; - goto end; + status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; + goto error; } trimmer_it->stream_states = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) destroy_trimmer_iterator_stream_state); if (!trimmer_it->stream_states) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR; - goto end; + status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; + goto error; } + /* + * The trimmer requires upstream messages to have times, so it can + * always seek forward. + */ + bt_self_message_iterator_configuration_set_can_seek_forward( + config, BT_TRUE); + trimmer_it->self_msg_iter = self_msg_iter; bt_self_message_iterator_set_data(self_msg_iter, trimmer_it); -end: - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK && trimmer_it) { - destroy_trimmer_iterator(trimmer_it); - } + status = BT_MESSAGE_ITERATOR_CLASS_INITIALIZE_METHOD_STATUS_OK; + goto end; +error: + destroy_trimmer_iterator(trimmer_it); + +end: return status; } @@ -726,9 +782,9 @@ int get_msg_ns_from_origin(const bt_message *msg, int64_t *ns_from_origin, const bt_clock_snapshot *clock_snapshot = NULL; int ret = 0; - BT_ASSERT(msg); - BT_ASSERT(ns_from_origin); - BT_ASSERT(has_clock_snapshot); + BT_ASSERT_DBG(msg); + BT_ASSERT_DBG(ns_from_origin); + BT_ASSERT_DBG(has_clock_snapshot); switch (bt_message_get_type(msg)) { case BT_MESSAGE_TYPE_EVENT: @@ -881,8 +937,9 @@ int set_trimmer_iterator_bound(struct trimmer_iterator *trimmer_it, } if (!res) { - BT_COMP_LOGE_ERRNO("Cannot convert timestamp to date and time", - "ts=%" PRId64, (int64_t) time_seconds); + BT_COMP_LOGE_APPEND_CAUSE_ERRNO(trimmer_comp->self_comp, + "Cannot convert timestamp to date and time", + ": ts=%" PRId64, (int64_t) time_seconds); ret = -1; goto end; } @@ -896,7 +953,7 @@ end: } static -bt_component_class_message_iterator_next_method_status +bt_message_iterator_class_next_method_status state_set_trimmer_iterator_bounds( struct trimmer_iterator *trimmer_it) { @@ -923,8 +980,6 @@ state_set_trimmer_iterator_bounds( for (i = 0; i < count; i++) { const bt_message *msg = msgs[i]; bool has_ns_from_origin; - int ret; - ret = get_msg_ns_from_origin(msg, &ns_from_origin, &has_ns_from_origin); if (ret) { @@ -935,7 +990,7 @@ state_set_trimmer_iterator_bounds( continue; } - BT_ASSERT(ns_from_origin != INT64_MIN && + BT_ASSERT_DBG(ns_from_origin != INT64_MIN && ns_from_origin != INT64_MAX); put_messages(msgs, count); goto found; @@ -980,33 +1035,59 @@ end: } static -bt_component_class_message_iterator_next_method_status state_seek_initially( +bt_message_iterator_class_next_method_status state_seek_initially( struct trimmer_iterator *trimmer_it) { struct trimmer_comp *trimmer_comp = trimmer_it->trimmer_comp; - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_message_iterator_class_next_method_status status; BT_ASSERT(trimmer_it->begin.is_set); if (trimmer_it->begin.is_infinite) { - if (!bt_self_component_port_input_message_iterator_can_seek_beginning( - trimmer_it->upstream_iter)) { - BT_COMP_LOGE_STR("Cannot make upstream message iterator initially seek its beginning."); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + bt_bool can_seek; + + status = (int) bt_self_component_port_input_message_iterator_can_seek_beginning( + trimmer_it->upstream_iter, &can_seek); + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { + if (status < 0) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Cannot make upstream message iterator initially seek its beginning."); + } + + goto end; + } + + if (!can_seek) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Cannot make upstream message iterator initially seek its beginning."); + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } status = (int) bt_self_component_port_input_message_iterator_seek_beginning( trimmer_it->upstream_iter); } else { - if (!bt_self_component_port_input_message_iterator_can_seek_ns_from_origin( - trimmer_it->upstream_iter, - trimmer_it->begin.ns_from_origin)) { - BT_COMP_LOGE("Cannot make upstream message iterator initially seek: " - "seek-ns-from-origin=%" PRId64, + bt_bool can_seek; + + status = (int) bt_self_component_port_input_message_iterator_can_seek_ns_from_origin( + trimmer_it->upstream_iter, trimmer_it->begin.ns_from_origin, + &can_seek); + + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { + if (status < 0) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64, + trimmer_it->begin.ns_from_origin); + } + + goto end; + } + + if (!can_seek) { + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Cannot make upstream message iterator initially seek: seek-ns-from-origin=%" PRId64, trimmer_it->begin.ns_from_origin); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } @@ -1014,7 +1095,7 @@ bt_component_class_message_iterator_next_method_status state_seek_initially( trimmer_it->upstream_iter, trimmer_it->begin.ns_from_origin); } - if (status == BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status == BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { trimmer_it->state = TRIMMER_ITERATOR_STATE_TRIM; } @@ -1050,12 +1131,12 @@ int clock_raw_value_from_ns_from_origin(const bt_clock_class *clock_class, } static inline -bt_component_class_message_iterator_next_method_status +bt_message_iterator_class_next_method_status end_stream(struct trimmer_iterator *trimmer_it, struct trimmer_iterator_stream_state *sstate) { - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_message_iterator_class_next_method_status status = + BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; /* Initialize to silence maybe-uninitialized warning. */ uint64_t raw_value = 0; bt_message *msg = NULL; @@ -1083,7 +1164,7 @@ end_stream(struct trimmer_iterator *trimmer_it, ret = clock_raw_value_from_ns_from_origin(clock_class, trimmer_it->end.ns_from_origin, &raw_value); if (ret) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } } @@ -1104,7 +1185,7 @@ end_stream(struct trimmer_iterator *trimmer_it, trimmer_it->self_msg_iter, sstate->cur_packet, raw_value); if (!msg) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR; goto end; } @@ -1117,7 +1198,7 @@ end_stream(struct trimmer_iterator *trimmer_it, msg = bt_message_stream_end_create(trimmer_it->self_msg_iter, sstate->stream); if (!msg) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR; goto end; } @@ -1140,11 +1221,11 @@ end: } static inline -bt_component_class_message_iterator_next_method_status end_iterator_streams( +bt_message_iterator_class_next_method_status end_iterator_streams( struct trimmer_iterator *trimmer_it) { - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_message_iterator_class_next_method_status status = + BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; GHashTableIter iter; gpointer key, sstate; @@ -1178,14 +1259,14 @@ end: } static -bt_component_class_message_iterator_next_method_status +bt_message_iterator_class_next_method_status create_stream_state_entry( struct trimmer_iterator *trimmer_it, const struct bt_stream *stream, struct trimmer_iterator_stream_state **stream_state) { struct trimmer_comp *trimmer_comp = trimmer_it->trimmer_comp; - bt_component_class_message_iterator_next_method_status status; + bt_message_iterator_class_next_method_status status; struct trimmer_iterator_stream_state *sstate; const bt_stream_class *sc; @@ -1203,14 +1284,15 @@ create_stream_state_entry( */ sc = bt_stream_borrow_class_const(stream); if (!bt_stream_class_borrow_default_clock_class_const(sc)) { - BT_COMP_LOGE("Unsupported stream: stream class does " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: stream class does " "not have a default clock class: " "stream-addr=%p, " "stream-id=%" PRIu64 ", " "stream-name=\"%s\"", stream, bt_stream_get_id(stream), bt_stream_get_name(stream)); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } @@ -1223,59 +1305,60 @@ create_stream_state_entry( */ if (!bt_stream_class_packets_have_beginning_default_clock_snapshot( sc)) { - BT_COMP_LOGE("Unsupported stream: packets have " - "no beginning clock snapshot: " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: packets have no beginning clock snapshot: " "stream-addr=%p, " "stream-id=%" PRIu64 ", " "stream-name=\"%s\"", stream, bt_stream_get_id(stream), bt_stream_get_name(stream)); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } if (!bt_stream_class_packets_have_end_default_clock_snapshot( sc)) { - BT_COMP_LOGE("Unsupported stream: packets have " - "no end clock snapshot: " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: packets have no end clock snapshot: " "stream-addr=%p, " "stream-id=%" PRIu64 ", " "stream-name=\"%s\"", stream, bt_stream_get_id(stream), bt_stream_get_name(stream)); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } if (bt_stream_class_supports_discarded_events(sc) && !bt_stream_class_discarded_events_have_default_clock_snapshots(sc)) { - BT_COMP_LOGE("Unsupported stream: discarded events " - "have no clock snapshots: " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: discarded events have no clock snapshots: " "stream-addr=%p, " "stream-id=%" PRIu64 ", " "stream-name=\"%s\"", stream, bt_stream_get_id(stream), bt_stream_get_name(stream)); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } if (bt_stream_class_supports_discarded_packets(sc) && !bt_stream_class_discarded_packets_have_default_clock_snapshots(sc)) { - BT_COMP_LOGE("Unsupported stream: discarded packets " + BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp, + "Unsupported stream: discarded packets " "have no clock snapshots: " "stream-addr=%p, " "stream-id=%" PRIu64 ", " "stream-name=\"%s\"", stream, bt_stream_get_id(stream), bt_stream_get_name(stream)); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } sstate = g_new0(struct trimmer_iterator_stream_state, 1); if (!sstate) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR; goto end; } @@ -1285,7 +1368,7 @@ create_stream_state_entry( *stream_state = sstate; - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; end: return status; @@ -1298,9 +1381,9 @@ struct trimmer_iterator_stream_state *get_stream_state_entry( { struct trimmer_iterator_stream_state *sstate; - BT_ASSERT(stream); + BT_ASSERT_DBG(stream); sstate = g_hash_table_lookup(trimmer_it->stream_states, stream); - BT_ASSERT(sstate); + BT_ASSERT_DBG(sstate); return sstate; } @@ -1322,14 +1405,14 @@ struct trimmer_iterator_stream_state *get_stream_state_entry( * `reached_end`. */ static -bt_component_class_message_iterator_next_method_status +bt_message_iterator_class_next_method_status handle_message_with_stream( struct trimmer_iterator *trimmer_it, const bt_message *msg, const struct bt_stream *stream, const int64_t *ns_from_origin, bool *reached_end) { - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_message_iterator_class_next_method_status status = + BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; bt_message_type msg_type = bt_message_get_type(msg); int ret; struct trimmer_iterator_stream_state *sstate = NULL; @@ -1349,7 +1432,7 @@ handle_message_with_stream( * class has a clock class. And we know it has, otherwise we * couldn't be using the trimmer component. */ - BT_ASSERT(ns_from_origin); + BT_ASSERT_DBG(ns_from_origin); if (G_UNLIKELY(!trimmer_it->end.is_infinite && *ns_from_origin > trimmer_it->end.ns_from_origin)) { @@ -1449,7 +1532,7 @@ handle_message_with_stream( if (bt_clock_snapshot_get_ns_from_origin(end_cs, &end_ns_from_origin)) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } @@ -1479,7 +1562,7 @@ handle_message_with_stream( ret = clock_raw_value_from_ns_from_origin(clock_class, trimmer_it->end.ns_from_origin, &end_raw_value); if (ret) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } @@ -1502,7 +1585,7 @@ handle_message_with_stream( } if (!new_msg) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_MEMORY_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_MEMORY_ERROR; goto end; } @@ -1529,7 +1612,7 @@ handle_message_with_stream( /* Learn about this stream. */ status = create_stream_state_entry(trimmer_it, stream, &sstate); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } @@ -1591,14 +1674,14 @@ end: * `reached_end`. */ static inline -bt_component_class_message_iterator_next_method_status handle_message( +bt_message_iterator_class_next_method_status handle_message( struct trimmer_iterator *trimmer_it, const bt_message *msg, bool *reached_end) { - bt_component_class_message_iterator_next_method_status status; + bt_message_iterator_class_next_method_status status; const bt_stream *stream = NULL; int64_t ns_from_origin = INT64_MIN; - bool has_ns_from_origin; + bool has_ns_from_origin = false; int ret; /* Find message's associated stream */ @@ -1634,7 +1717,7 @@ bt_component_class_message_iterator_next_method_status handle_message( /* Retrieve the message's time */ ret = get_msg_ns_from_origin(msg, &ns_from_origin, &has_ns_from_origin); if (G_UNLIKELY(ret)) { - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_ERROR; goto end; } @@ -1659,7 +1742,7 @@ bt_component_class_message_iterator_next_method_status handle_message( *reached_end = true; } else { push_message(trimmer_it, msg); - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; msg = NULL; } } @@ -1687,21 +1770,21 @@ void fill_message_array_from_output_messages( (*count)++; } - BT_ASSERT(*count > 0); + BT_ASSERT_DBG(*count > 0); } static inline -bt_component_class_message_iterator_next_method_status state_ending( +bt_message_iterator_class_next_method_status state_ending( struct trimmer_iterator *trimmer_it, bt_message_array_const msgs, uint64_t capacity, uint64_t *count) { - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_message_iterator_class_next_method_status status = + BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; if (g_queue_is_empty(trimmer_it->output_messages)) { trimmer_it->state = TRIMMER_ITERATOR_STATE_ENDED; - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END; goto end; } @@ -1713,13 +1796,13 @@ end: } static inline -bt_component_class_message_iterator_next_method_status +bt_message_iterator_class_next_method_status state_trim(struct trimmer_iterator *trimmer_it, bt_message_array_const msgs, uint64_t capacity, uint64_t *count) { - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_message_iterator_class_next_method_status status = + BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; bt_message_array_const my_msgs; uint64_t my_count; uint64_t i; @@ -1728,10 +1811,10 @@ state_trim(struct trimmer_iterator *trimmer_it, while (g_queue_is_empty(trimmer_it->output_messages)) { status = (int) bt_self_component_port_input_message_iterator_next( trimmer_it->upstream_iter, &my_msgs, &my_count); - if (G_UNLIKELY(status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK)) { - if (status == BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END) { + if (G_UNLIKELY(status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK)) { + if (status == BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END) { status = end_iterator_streams(trimmer_it); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } @@ -1744,7 +1827,7 @@ state_trim(struct trimmer_iterator *trimmer_it, goto end; } - BT_ASSERT(my_count > 0); + BT_ASSERT_DBG(my_count > 0); for (i = 0; i < my_count; i++) { status = handle_message(trimmer_it, my_msgs[i], @@ -1757,7 +1840,7 @@ state_trim(struct trimmer_iterator *trimmer_it, my_msgs[i] = NULL; if (G_UNLIKELY(status != - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK)) { + BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK)) { put_messages(my_msgs, my_count); goto end; } @@ -1787,7 +1870,7 @@ state_trim(struct trimmer_iterator *trimmer_it, * There's at least one message in the output message queue: * move the messages to the output message array. */ - BT_ASSERT(!g_queue_is_empty(trimmer_it->output_messages)); + BT_ASSERT_DBG(!g_queue_is_empty(trimmer_it->output_messages)); fill_message_array_from_output_messages(trimmer_it, msgs, capacity, count); @@ -1796,50 +1879,50 @@ end: } BT_HIDDEN -bt_component_class_message_iterator_next_method_status trimmer_msg_iter_next( +bt_message_iterator_class_next_method_status trimmer_msg_iter_next( bt_self_message_iterator *self_msg_iter, bt_message_array_const msgs, uint64_t capacity, uint64_t *count) { struct trimmer_iterator *trimmer_it = bt_self_message_iterator_get_data(self_msg_iter); - bt_component_class_message_iterator_next_method_status status = - BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; + bt_message_iterator_class_next_method_status status = + BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK; - BT_ASSERT(trimmer_it); + BT_ASSERT_DBG(trimmer_it); if (G_LIKELY(trimmer_it->state == TRIMMER_ITERATOR_STATE_TRIM)) { status = state_trim(trimmer_it, msgs, capacity, count); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } } else { switch (trimmer_it->state) { case TRIMMER_ITERATOR_STATE_SET_BOUNDS_NS_FROM_ORIGIN: status = state_set_trimmer_iterator_bounds(trimmer_it); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } status = state_seek_initially(trimmer_it); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } status = state_trim(trimmer_it, msgs, capacity, count); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } break; case TRIMMER_ITERATOR_STATE_SEEK_INITIALLY: status = state_seek_initially(trimmer_it); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } status = state_trim(trimmer_it, msgs, capacity, count); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } @@ -1847,16 +1930,16 @@ bt_component_class_message_iterator_next_method_status trimmer_msg_iter_next( case TRIMMER_ITERATOR_STATE_ENDING: status = state_ending(trimmer_it, msgs, capacity, count); - if (status != BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK) { + if (status != BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_OK) { goto end; } break; case TRIMMER_ITERATOR_STATE_ENDED: - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END; + status = BT_MESSAGE_ITERATOR_CLASS_NEXT_METHOD_STATUS_END; break; default: - abort(); + bt_common_abort(); } }