src.ctf.fs: use one CTF notif iter per notification iterator
[babeltrace.git] / plugins / ctf / fs-src / fs.c
index 8738f233bf12c6399088eb3cc65c33840b1ff30b..7d004fe4106620ebaf3a46b310c0e63c05d4ea9b 100644 (file)
 #include "data-stream-file.h"
 #include "file.h"
 #include "../common/metadata/decoder.h"
+#include "../common/notif-iter/notif-iter.h"
 #include "query.h"
 
 #define BT_LOG_TAG "PLUGIN-CTF-FS-SRC"
 #include "logging.h"
 
-BT_HIDDEN
-bool ctf_fs_debug;
-
 static
 int notif_iter_data_set_current_ds_file(struct ctf_fs_notif_iter_data *notif_iter_data)
 {
@@ -70,6 +68,7 @@ int notif_iter_data_set_current_ds_file(struct ctf_fs_notif_iter_data *notif_ite
        ctf_fs_ds_file_destroy(notif_iter_data->ds_file);
        notif_iter_data->ds_file = ctf_fs_ds_file_create(
                notif_iter_data->ds_file_group->ctf_fs_trace,
+               notif_iter_data->notif_iter,
                notif_iter_data->ds_file_group->stream,
                ds_file_info->path->str);
        if (!notif_iter_data->ds_file) {
@@ -88,6 +87,11 @@ void ctf_fs_notif_iter_data_destroy(
        }
 
        ctf_fs_ds_file_destroy(notif_iter_data->ds_file);
+
+       if (notif_iter_data->notif_iter) {
+               bt_ctf_notif_iter_destroy(notif_iter_data->notif_iter);
+       }
+
        g_free(notif_iter_data);
 }
 
@@ -171,6 +175,16 @@ enum bt_notification_iterator_status ctf_fs_iterator_init(
                goto error;
        }
 
+       notif_iter_data->notif_iter = bt_ctf_notif_iter_create(
+               port_data->ds_file_group->ctf_fs_trace->metadata->trace,
+               bt_common_get_page_size() * 8,
+               ctf_fs_ds_file_medops, NULL);
+       if (!notif_iter_data->notif_iter) {
+               BT_LOGE_STR("Cannot create a CTF notification iterator.");
+               ret = BT_NOTIFICATION_ITERATOR_STATUS_NOMEM;
+               goto error;
+       }
+
        notif_iter_data->ds_file_group = port_data->ds_file_group;
        iret = notif_iter_data_set_current_ds_file(notif_iter_data);
        if (iret) {
@@ -393,7 +407,7 @@ struct bt_ctf_stream_class *stream_class_from_packet_header(
        stream_id_field = bt_ctf_field_structure_get_field_by_name(
                packet_header_field, "stream_id");
        if (!stream_id_field) {
-               goto end;
+               goto single_stream_class;
        }
 
        ret = bt_ctf_field_unsigned_integer_get_value(stream_id_field,
@@ -639,10 +653,18 @@ int add_ds_file_to_ds_file_group(struct ctf_fs_trace *ctf_fs_trace,
        bool add_group = false;
        int ret;
        size_t i;
-       struct ctf_fs_ds_file *ds_file;
+       struct ctf_fs_ds_file *ds_file = NULL;
        struct ctf_fs_ds_index *index = NULL;
+       struct bt_ctf_notif_iter *notif_iter = NULL;
 
-       ds_file = ctf_fs_ds_file_create(ctf_fs_trace, NULL, path);
+       notif_iter = bt_ctf_notif_iter_create(ctf_fs_trace->metadata->trace,
+               bt_common_get_page_size() * 8, ctf_fs_ds_file_medops, NULL);
+       if (!notif_iter) {
+               BT_LOGE_STR("Cannot create a CTF notification iterator.");
+               goto error;
+       }
+
+       ds_file = ctf_fs_ds_file_create(ctf_fs_trace, notif_iter, NULL, path);
        if (!ds_file) {
                goto error;
        }
@@ -760,6 +782,11 @@ end:
                g_ptr_array_add(ctf_fs_trace->ds_file_groups, ds_file_group);
        }
        ctf_fs_ds_file_destroy(ds_file);
+
+       if (notif_iter) {
+               bt_ctf_notif_iter_destroy(notif_iter);
+       }
+
        ctf_fs_ds_index_destroy(index);
        bt_put(packet_header_field);
        bt_put(packet_context_field);
@@ -835,7 +862,7 @@ int create_ds_file_groups(struct ctf_fs_trace *ctf_fs_trace)
                ret = add_ds_file_to_ds_file_group(ctf_fs_trace,
                        file->path->str);
                if (ret) {
-                       BT_LOGD("Cannot add stream file `%s` to stream file group",
+                       BT_LOGE("Cannot add stream file `%s` to stream file group",
                                file->path->str);
                        ctf_fs_file_destroy(file);
                        goto error;
@@ -901,7 +928,7 @@ end:
 
 BT_HIDDEN
 struct ctf_fs_trace *ctf_fs_trace_create(const char *path, const char *name,
-               struct metadata_overrides *overrides)
+               struct ctf_fs_metadata_config *metadata_config)
 {
        struct ctf_fs_trace *ctf_fs_trace;
        int ret;
@@ -932,7 +959,7 @@ struct ctf_fs_trace *ctf_fs_trace_create(const char *path, const char *name,
                goto error;
        }
 
-       ret = ctf_fs_metadata_set_trace(ctf_fs_trace, overrides);
+       ret = ctf_fs_metadata_set_trace(ctf_fs_trace, metadata_config);
        if (ret) {
                goto error;
        }
@@ -1152,10 +1179,6 @@ int create_ctf_fs_traces(struct ctf_fs_component *ctf_fs,
        GList *trace_names = NULL;
        GList *tp_node;
        GList *tn_node;
-       struct metadata_overrides metadata_overrides = {
-               .clock_offset_s = ctf_fs->options.clock_offset,
-               .clock_offset_ns = ctf_fs->options.clock_offset_ns,
-       };
 
        norm_path = bt_common_normalize_path(path_param, NULL);
        if (!norm_path) {
@@ -1188,7 +1211,7 @@ int create_ctf_fs_traces(struct ctf_fs_component *ctf_fs,
                GString *trace_name = tn_node->data;
 
                ctf_fs_trace = ctf_fs_trace_create(trace_path->str,
-                               trace_name->str, &metadata_overrides);
+                               trace_name->str, &ctf_fs->metadata_config);
                if (!ctf_fs_trace) {
                        BT_LOGE("Cannot create trace for `%s`.",
                                trace_path->str);
@@ -1269,31 +1292,27 @@ struct ctf_fs_component *ctf_fs_create(struct bt_private_component *priv_comp,
        ret = bt_value_string_get(value, &path_param);
        assert(ret == 0);
        BT_PUT(value);
-       value = bt_value_map_get(params, "offset-s");
+       value = bt_value_map_get(params, "clock-class-offset-s");
        if (value) {
-               int64_t offset;
-
                if (!bt_value_is_integer(value)) {
-                       BT_LOGE("offset-s should be an integer");
+                       BT_LOGE("clock-class-offset-s should be an integer");
                        goto error;
                }
-               ret = bt_value_integer_get(value, &offset);
+               ret = bt_value_integer_get(value,
+                       &ctf_fs->metadata_config.clock_class_offset_s);
                assert(ret == 0);
-               ctf_fs->options.clock_offset = offset;
                BT_PUT(value);
        }
 
-       value = bt_value_map_get(params, "offset-ns");
+       value = bt_value_map_get(params, "clock-class-offset-ns");
        if (value) {
-               int64_t offset;
-
                if (!bt_value_is_integer(value)) {
-                       BT_LOGE("offset-ns should be an integer");
+                       BT_LOGE("clock-class-offset-ns should be an integer");
                        goto error;
                }
-               ret = bt_value_integer_get(value, &offset);
+               ret = bt_value_integer_get(value,
+                       &ctf_fs->metadata_config.clock_class_offset_ns);
                assert(ret == 0);
-               ctf_fs->options.clock_offset_ns = offset;
                BT_PUT(value);
        }
 
@@ -1333,7 +1352,6 @@ enum bt_component_status ctf_fs_init(struct bt_private_component *priv_comp,
        struct ctf_fs_component *ctf_fs;
        enum bt_component_status ret = BT_COMPONENT_STATUS_OK;
 
-       ctf_fs_debug = g_strcmp0(getenv("CTF_FS_DEBUG"), "1") == 0;
        ctf_fs = ctf_fs_create(priv_comp, params);
        if (!ctf_fs) {
                ret = BT_COMPONENT_STATUS_ERROR;
This page took 0.026869 seconds and 4 git commands to generate.