X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-sink%2Ffs-sink.c;h=532e542c13c12e9327d3810f09277f51f17f0ffc;hb=98b15851a941e7342b8bb19e265cdc3a40fabfb8;hp=077a08b29522bd866d8d085e49c3b658cea0fee5;hpb=d9c39b0a4ad9517178899334c0ca89fd20901609;p=babeltrace.git diff --git a/src/plugins/ctf/fs-sink/fs-sink.c b/src/plugins/ctf/fs-sink/fs-sink.c index 077a08b2..532e542c 100644 --- a/src/plugins/ctf/fs-sink/fs-sink.c +++ b/src/plugins/ctf/fs-sink/fs-sink.c @@ -31,6 +31,7 @@ #include #include "common/assert.h" #include "ctfser/ctfser.h" +#include "plugins/common/param-validation/param-validation.h" #include "fs-sink.h" #include "fs-sink-trace.h" @@ -43,11 +44,11 @@ static const char * const in_port_name = "in"; static -bt_component_class_init_method_status ensure_output_dir_exists( +bt_component_class_initialize_method_status ensure_output_dir_exists( struct fs_sink_comp *fs_sink) { - bt_component_class_init_method_status status = - BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK; + bt_component_class_initialize_method_status status = + BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; int ret; ret = g_mkdir_with_parents(fs_sink->output_dir_path->str, 0755); @@ -56,7 +57,7 @@ bt_component_class_init_method_status ensure_output_dir_exists( "Cannot create directories for output directory", ": output-dir-path=\"%s\"", fs_sink->output_dir_path->str); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto end; } @@ -64,51 +65,47 @@ end: return status; } +static struct bt_param_validation_map_value_entry_descr fs_sink_params_descr[] = { + { "path", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_MANDATORY, { .type = BT_VALUE_TYPE_STRING } }, + { "assume-single-trace", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, + { "ignore-discarded-events", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, + { "ignore-discarded-packets", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, + { "quiet", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } }, + BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_END +}; + static -bt_component_class_init_method_status -configure_component(struct fs_sink_comp *fs_sink, - const bt_value *params) +bt_component_class_initialize_method_status +configure_component(struct fs_sink_comp *fs_sink, const bt_value *params) { - bt_component_class_init_method_status status = - BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK; + bt_component_class_initialize_method_status status; const bt_value *value; + enum bt_param_validation_status validation_status; + gchar *validation_error; - value = bt_value_map_borrow_entry_value_const(params, "path"); - if (!value) { - BT_COMP_LOGE_STR("Missing mandatory `path` parameter."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + validation_status = bt_param_validation_validate(params, + fs_sink_params_descr, &validation_error); + if (validation_status == BT_PARAM_VALIDATION_STATUS_VALIDATION_ERROR) { + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto end; - } - - if (!bt_value_is_string(value)) { - BT_COMP_LOGE_STR("`path` parameter: expecting a string."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + } else if (validation_status == BT_PARAM_VALIDATION_STATUS_MEMORY_ERROR) { + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto end; } + value = bt_value_map_borrow_entry_value_const(params, "path"); g_string_assign(fs_sink->output_dir_path, bt_value_string_get(value)); + value = bt_value_map_borrow_entry_value_const(params, "assume-single-trace"); if (value) { - if (!bt_value_is_bool(value)) { - BT_COMP_LOGE_STR("`assume-single-trace` parameter: expecting a boolean."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; - goto end; - } - fs_sink->assume_single_trace = (bool) bt_value_bool_get(value); } value = bt_value_map_borrow_entry_value_const(params, "ignore-discarded-events"); if (value) { - if (!bt_value_is_bool(value)) { - BT_COMP_LOGE_STR("`ignore-discarded-events` parameter: expecting a boolean."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; - goto end; - } - fs_sink->ignore_discarded_events = (bool) bt_value_bool_get(value); } @@ -116,12 +113,6 @@ configure_component(struct fs_sink_comp *fs_sink, value = bt_value_map_borrow_entry_value_const(params, "ignore-discarded-packets"); if (value) { - if (!bt_value_is_bool(value)) { - BT_COMP_LOGE_STR("`ignore-discarded-packets` parameter: expecting a boolean."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; - goto end; - } - fs_sink->ignore_discarded_packets = (bool) bt_value_bool_get(value); } @@ -129,16 +120,13 @@ configure_component(struct fs_sink_comp *fs_sink, value = bt_value_map_borrow_entry_value_const(params, "quiet"); if (value) { - if (!bt_value_is_bool(value)) { - BT_COMP_LOGE_STR("`quiet` parameter: expecting a boolean."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; - goto end; - } - fs_sink->quiet = (bool) bt_value_bool_get(value); } + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; + end: + g_free(validation_error); return status; } @@ -168,12 +156,14 @@ end: } BT_HIDDEN -bt_component_class_init_method_status ctf_fs_sink_init( - bt_self_component_sink *self_comp_sink, const bt_value *params, +bt_component_class_initialize_method_status ctf_fs_sink_init( + bt_self_component_sink *self_comp_sink, + bt_self_component_sink_configuration *config, + const bt_value *params, void *init_method_data) { - bt_component_class_init_method_status status = - BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK; + bt_component_class_initialize_method_status status = + BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK; bt_self_component_add_port_status add_port_status; struct fs_sink_comp *fs_sink = NULL; bt_self_component *self_comp = @@ -185,7 +175,7 @@ bt_component_class_init_method_status ctf_fs_sink_init( if (!fs_sink) { BT_COMP_LOG_CUR_LVL(BT_LOG_ERROR, log_level, self_comp, "Failed to allocate one CTF FS sink structure."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto end; } @@ -193,7 +183,7 @@ bt_component_class_init_method_status ctf_fs_sink_init( fs_sink->self_comp = self_comp; fs_sink->output_dir_path = g_string_new(NULL); status = configure_component(fs_sink, params); - if (status != BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) { + if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) { /* configure_component() logs errors */ goto end; } @@ -203,12 +193,12 @@ bt_component_class_init_method_status ctf_fs_sink_init( G_FILE_TEST_EXISTS)) { BT_COMP_LOGE("Single trace mode, but output path exists: " "output-path=\"%s\"", fs_sink->output_dir_path->str); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto end; } status = ensure_output_dir_exists(fs_sink); - if (status != BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) { + if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) { /* ensure_output_dir_exists() logs errors */ goto end; } @@ -217,7 +207,7 @@ bt_component_class_init_method_status ctf_fs_sink_init( NULL, (GDestroyNotify) fs_sink_trace_destroy); if (!fs_sink->traces) { BT_COMP_LOGE_STR("Failed to allocate one GHashTable."); - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto end; } @@ -225,10 +215,10 @@ bt_component_class_init_method_status ctf_fs_sink_init( self_comp_sink, 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; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR; goto end; case BT_SELF_COMPONENT_ADD_PORT_STATUS_MEMORY_ERROR: - status = BT_COMPONENT_CLASS_INIT_METHOD_STATUS_MEMORY_ERROR; + status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR; goto end; default: break; @@ -237,7 +227,7 @@ bt_component_class_init_method_status ctf_fs_sink_init( bt_self_component_set_data(self_comp, fs_sink); end: - if (status != BT_COMPONENT_CLASS_INIT_METHOD_STATUS_OK) { + if (status != BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK) { destroy_fs_sink_comp(fs_sink); } @@ -306,7 +296,7 @@ bt_component_class_sink_consume_method_status handle_event_msg( goto end; } - BT_ASSERT(ec); + BT_ASSERT_DBG(ec); if (stream->sc->default_clock_class) { cs = bt_message_event_borrow_default_clock_snapshot_const( @@ -348,7 +338,7 @@ bt_component_class_sink_consume_method_status handle_event_msg( } } - BT_ASSERT(stream->packet_state.is_open); + BT_ASSERT_DBG(stream->packet_state.is_open); ret = fs_sink_stream_write_event(stream, cs, ir_event, ec); if (G_UNLIKELY(ret)) { status = BT_COMPONENT_CLASS_SINK_CONSUME_METHOD_STATUS_ERROR; @@ -997,8 +987,8 @@ bt_component_class_sink_consume_method_status ctf_fs_sink_consume( fs_sink = bt_self_component_get_data( bt_self_component_sink_as_self_component(self_comp)); - BT_ASSERT(fs_sink); - BT_ASSERT(fs_sink->upstream_iter); + BT_ASSERT_DBG(fs_sink); + BT_ASSERT_DBG(fs_sink->upstream_iter); /* Consume messages */ next_status = bt_self_component_port_input_message_iterator_next( @@ -1016,7 +1006,7 @@ bt_component_class_sink_consume_method_status ctf_fs_sink_consume( for (i = 0; i < msg_count; i++) { const bt_message *msg = msgs[i]; - BT_ASSERT(msg); + BT_ASSERT_DBG(msg); switch (bt_message_get_type(msg)) { case BT_MESSAGE_TYPE_EVENT: @@ -1095,24 +1085,27 @@ end: } BT_HIDDEN -bt_component_class_sink_graph_is_configured_method_status ctf_fs_sink_graph_is_configured( +bt_component_class_sink_graph_is_configured_method_status +ctf_fs_sink_graph_is_configured( bt_self_component_sink *self_comp) { - bt_component_class_sink_graph_is_configured_method_status status = - BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_OK; + bt_component_class_sink_graph_is_configured_method_status status; + bt_self_component_port_input_message_iterator_create_from_sink_component_status + msg_iter_status; struct fs_sink_comp *fs_sink = bt_self_component_get_data( bt_self_component_sink_as_self_component(self_comp)); - fs_sink->upstream_iter = + msg_iter_status = bt_self_component_port_input_message_iterator_create_from_sink_component( self_comp, bt_self_component_sink_borrow_input_port_by_name( - self_comp, in_port_name)); - if (!fs_sink->upstream_iter) { - status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_ERROR; + self_comp, in_port_name), &fs_sink->upstream_iter); + if (msg_iter_status != BT_SELF_COMPONENT_PORT_INPUT_MESSAGE_ITERATOR_CREATE_FROM_SINK_COMPONENT_STATUS_OK) { + status = (int) msg_iter_status; goto end; } + status = BT_COMPONENT_CLASS_SINK_GRAPH_IS_CONFIGURED_METHOD_STATUS_OK; end: return status; }