X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Fctf%2Ffs-src%2Fdata-stream-file.c;h=1fd9e4257f5ca59f94bf7867eb9893c409689f36;hb=4829c3e2f7137d73c75baff615bce560268ebba4;hp=47259f4088cee2333fab93ddeb7c66fd5c0c313d;hpb=2e42d046c850b451970a67056de337168e39270f;p=babeltrace.git diff --git a/src/plugins/ctf/fs-src/data-stream-file.c b/src/plugins/ctf/fs-src/data-stream-file.c index 47259f40..1fd9e425 100644 --- a/src/plugins/ctf/fs-src/data-stream-file.c +++ b/src/plugins/ctf/fs-src/data-stream-file.c @@ -280,6 +280,24 @@ struct ctf_msg_iter_medium_ops ctf_fs_ds_file_medops = { .seek = medop_seek, }; +static +struct ctf_fs_ds_index_entry *ctf_fs_ds_index_entry_create( + bt_self_component *self_comp, bt_logging_level log_level) +{ + struct ctf_fs_ds_index_entry *entry; + + entry = g_new0(struct ctf_fs_ds_index_entry, 1); + if (!entry) { + BT_COMP_LOGE_APPEND_CAUSE(self_comp, "Failed to allocate a ctf_fs_ds_index_entry."); + goto end; + } + + entry->packet_seq_num = UINT64_MAX; + +end: + return entry; +} + static int convert_cycles_to_ns(struct ctf_clock_class *clock_class, uint64_t cycles, int64_t *ns) @@ -292,7 +310,8 @@ int convert_cycles_to_ns(struct ctf_clock_class *clock_class, static struct ctf_fs_ds_index *build_index_from_idx_file( struct ctf_fs_ds_file *ds_file, - struct ctf_fs_ds_file_info *file_info) + struct ctf_fs_ds_file_info *file_info, + struct ctf_msg_iter *msg_iter) { int ret; gchar *directory = NULL; @@ -317,7 +336,7 @@ struct ctf_fs_ds_index *build_index_from_idx_file( BT_COMP_LOGI("Building index from .idx file of stream file %s", ds_file->file->path->str); - ret = ctf_msg_iter_get_packet_properties(ds_file->msg_iter, &props); + ret = ctf_msg_iter_get_packet_properties(msg_iter, &props); if (ret) { BT_COMP_LOGI_STR("Cannot read first packet's header and context fields."); goto error; @@ -419,8 +438,11 @@ struct ctf_fs_ds_index *build_index_from_idx_file( goto error; } - index_entry = g_new0(struct ctf_fs_ds_index_entry, 1); + index_entry = ctf_fs_ds_index_entry_create( + ds_file->self_comp, ds_file->log_level); if (!index_entry) { + BT_COMP_LOGE_APPEND_CAUSE(ds_file->self_comp, + "Failed to create a ctf_fs_ds_index_entry."); goto error; } @@ -465,6 +487,10 @@ struct ctf_fs_ds_index *build_index_from_idx_file( goto error; } + if (version_minor >= 1) { + index_entry->packet_seq_num = be64toh(file_index->packet_seq_num); + } + total_packets_size += packet_size; file_pos += file_index_entry_size; @@ -558,7 +584,8 @@ end: static struct ctf_fs_ds_index *build_index_from_stream_file( struct ctf_fs_ds_file *ds_file, - struct ctf_fs_ds_file_info *file_info) + struct ctf_fs_ds_file_info *file_info, + struct ctf_msg_iter *msg_iter) { int ret; struct ctf_fs_ds_index *index = NULL; @@ -590,14 +617,14 @@ struct ctf_fs_ds_index *build_index_from_stream_file( break; } - iter_status = ctf_msg_iter_seek(ds_file->msg_iter, + iter_status = ctf_msg_iter_seek(msg_iter, current_packet_offset_bytes); if (iter_status != CTF_MSG_ITER_STATUS_OK) { goto error; } iter_status = ctf_msg_iter_get_packet_properties( - ds_file->msg_iter, &props); + msg_iter, &props); if (iter_status != CTF_MSG_ITER_STATUS_OK) { goto error; } @@ -621,9 +648,11 @@ struct ctf_fs_ds_index *build_index_from_stream_file( goto error; } - index_entry = g_new0(struct ctf_fs_ds_index_entry, 1); + index_entry = ctf_fs_ds_index_entry_create( + ds_file->self_comp, ds_file->log_level); if (!index_entry) { - BT_COMP_LOGE_STR("Failed to allocate a new index entry."); + BT_COMP_LOGE_APPEND_CAUSE(ds_file->self_comp, + "Failed to create a ctf_fs_ds_index_entry."); goto error; } @@ -658,8 +687,7 @@ error: BT_HIDDEN struct ctf_fs_ds_file *ctf_fs_ds_file_create( struct ctf_fs_trace *ctf_fs_trace, - bt_self_message_iterator *pc_msg_iter, - struct ctf_msg_iter *msg_iter, + bt_self_message_iterator *self_msg_iter, bt_stream *stream, const char *path, bt_logging_level log_level) { @@ -673,7 +701,7 @@ struct ctf_fs_ds_file *ctf_fs_ds_file_create( ds_file->log_level = log_level; ds_file->self_comp = ctf_fs_trace->self_comp; - ds_file->self_msg_iter = pc_msg_iter; + ds_file->self_msg_iter = self_msg_iter; ds_file->file = ctf_fs_file_create(log_level, ds_file->self_comp); if (!ds_file->file) { goto error; @@ -688,12 +716,6 @@ struct ctf_fs_ds_file *ctf_fs_ds_file_create( goto error; } - ds_file->msg_iter = msg_iter; - ctf_msg_iter_set_medops_data(ds_file->msg_iter, ds_file); - if (!ds_file->msg_iter) { - goto error; - } - ds_file->mmap_max_len = offset_align * 2048; goto end; @@ -710,20 +732,21 @@ end: BT_HIDDEN struct ctf_fs_ds_index *ctf_fs_ds_file_build_index( struct ctf_fs_ds_file *ds_file, - struct ctf_fs_ds_file_info *file_info) + struct ctf_fs_ds_file_info *file_info, + struct ctf_msg_iter *msg_iter) { struct ctf_fs_ds_index *index; bt_self_component *self_comp = ds_file->self_comp; bt_logging_level log_level = ds_file->log_level; - index = build_index_from_idx_file(ds_file, file_info); + index = build_index_from_idx_file(ds_file, file_info, msg_iter); if (index) { goto end; } BT_COMP_LOGI("Failed to build index from .index file; " "falling back to stream indexing."); - index = build_index_from_stream_file(ds_file, file_info); + index = build_index_from_stream_file(ds_file, file_info, msg_iter); end: return index; } @@ -773,40 +796,6 @@ void ctf_fs_ds_file_destroy(struct ctf_fs_ds_file *ds_file) g_free(ds_file); } -BT_HIDDEN -bt_component_class_message_iterator_next_method_status ctf_fs_ds_file_next( - struct ctf_fs_ds_file *ds_file, - bt_message **msg) -{ - enum ctf_msg_iter_status msg_iter_status; - bt_component_class_message_iterator_next_method_status status; - - msg_iter_status = ctf_msg_iter_get_next_message( - ds_file->msg_iter, msg); - - switch (msg_iter_status) { - case CTF_MSG_ITER_STATUS_EOF: - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_END; - break; - case CTF_MSG_ITER_STATUS_OK: - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_OK; - break; - case CTF_MSG_ITER_STATUS_AGAIN: - /* - * Should not make it this far as this is - * medium-specific; there is nothing for the user to do - * and it should have been handled upstream. - */ - bt_common_abort(); - case CTF_MSG_ITER_STATUS_INVAL: - case CTF_MSG_ITER_STATUS_ERROR: - default: - status = BT_COMPONENT_CLASS_MESSAGE_ITERATOR_NEXT_METHOD_STATUS_ERROR; - break; - } - return status; -} - BT_HIDDEN void ctf_fs_ds_index_destroy(struct ctf_fs_ds_index *index) {