lib: make can_seek_beginning and can_seek_ns_from_origin methods return a status
[babeltrace.git] / src / plugins / utils / trimmer / trimmer.c
index c1c0f6921458cf963f814e41a80f31c4f9e94284..4d39fba27cdbd662e5d1df2e21c830e6a7fb66e3 100644 (file)
  * 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"
@@ -422,7 +421,8 @@ 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:
@@ -445,7 +445,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
@@ -456,7 +456,8 @@ int set_bound_from_param(struct trimmer_comp *trimmer_comp,
        } 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.",
+               BT_COMP_LOGE_APPEND_CAUSE(trimmer_comp->self_comp,
+                       "`%s` parameter must be an integer or a string value.",
                        param_name);
                ret = -1;
                goto end;
@@ -479,7 +480,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 +491,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 +500,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;
@@ -627,7 +631,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 +647,8 @@ void destroy_trimmer_iterator(struct trimmer_iterator *trimmer_it)
        }
 
        g_free(trimmer_it);
+end:
+       return;
 }
 
 static
@@ -657,14 +666,15 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init(
                bt_self_component_filter *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_component_class_message_iterator_init_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;
+               goto error;
        }
 
        trimmer_it->trimmer_comp = bt_self_component_get_data(
@@ -684,19 +694,20 @@ 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;
+                               self_comp, 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;
+               goto error;
        }
 
        trimmer_it->stream_states = g_hash_table_new_full(g_direct_hash,
@@ -704,17 +715,19 @@ bt_component_class_message_iterator_init_method_status trimmer_msg_iter_init(
                (GDestroyNotify) destroy_trimmer_iterator_stream_state);
        if (!trimmer_it->stream_states) {
                status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_MEMORY_ERROR;
-               goto end;
+               goto error;
        }
 
        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_COMPONENT_CLASS_MESSAGE_ITERATOR_INIT_METHOD_STATUS_OK;
+       goto end;
+
+error:
+       destroy_trimmer_iterator(trimmer_it);
 
+end:
        return status;
 }
 
@@ -866,6 +879,7 @@ int set_trimmer_iterator_bound(struct trimmer_iterator *trimmer_it,
 {
        struct trimmer_comp *trimmer_comp = trimmer_it->trimmer_comp;
        struct tm tm;
+       struct tm *res;
        time_t time_seconds = (time_t) (ns_from_origin / NS_PER_S);
        int ret = 0;
 
@@ -874,14 +888,15 @@ int set_trimmer_iterator_bound(struct trimmer_iterator *trimmer_it,
 
        /* We only need to extract the date from this time */
        if (is_gmt) {
-               bt_gmtime_r(&time_seconds, &tm);
+               res = bt_gmtime_r(&time_seconds, &tm);
        } else {
-               bt_localtime_r(&time_seconds, &tm);
+               res = bt_localtime_r(&time_seconds, &tm);
        }
 
-       if (errno) {
-               BT_COMP_LOGE_ERRNO("Cannot convert timestamp to date and time",
-                       "ts=%" PRId64, (int64_t) time_seconds);
+       if (!res) {
+               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;
        }
@@ -983,15 +998,27 @@ bt_component_class_message_iterator_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_component_class_message_iterator_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.");
+               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_COMPONENT_CLASS_MESSAGE_ITERATOR_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_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR;
                        goto end;
                }
@@ -999,11 +1026,25 @@ bt_component_class_message_iterator_next_method_status state_seek_initially(
                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_COMPONENT_CLASS_MESSAGE_ITERATOR_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;
                        goto end;
@@ -1202,7 +1243,8 @@ 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 ", "
@@ -1222,8 +1264,8 @@ 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\"",
@@ -1235,8 +1277,8 @@ create_stream_state_entry(
 
        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\"",
@@ -1248,8 +1290,8 @@ create_stream_state_entry(
 
        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\"",
@@ -1261,7 +1303,8 @@ create_stream_state_entry(
 
        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 ", "
@@ -1597,7 +1640,7 @@ bt_component_class_message_iterator_next_method_status handle_message(
        bt_component_class_message_iterator_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 */
This page took 0.027425 seconds and 4 git commands to generate.