Rename "default beginning/end CS" -> "beginning/end default CS"
[babeltrace.git] / plugins / ctf / fs-sink / fs-sink.c
index bc8d3fa1338c8a297b46af17c17ebe5e59500345..5f04496f0d523db891c8dacf11931daf7bed91fa 100644 (file)
@@ -288,8 +288,8 @@ bt_self_component_status handle_event_msg(struct fs_sink_comp *fs_sink,
        BT_ASSERT(ec);
 
        if (stream->sc->default_clock_class) {
-               (void) bt_message_event_borrow_default_clock_snapshot_const(
-                       msg, &cs);
+               cs = bt_message_event_borrow_default_clock_snapshot_const(
+                       msg);
        }
 
        ret = fs_sink_stream_write_event(stream, cs, ir_event, ec);
@@ -320,50 +320,62 @@ bt_self_component_status handle_packet_beginning_msg(
                goto end;
        }
 
-       if (stream->sc->default_clock_class) {
-               (void) bt_message_packet_beginning_borrow_default_clock_snapshot_const(
-                       msg, &cs);
+       if (stream->sc->packets_have_ts_begin) {
+               cs = bt_message_packet_beginning_borrow_default_clock_snapshot_const(
+                       msg);
                BT_ASSERT(cs);
        }
 
        if (stream->discarded_events_state.in_range) {
+               uint64_t expected_cs;
+
+               BT_ASSERT(stream->sc->discarded_events_has_ts);
+               BT_ASSERT(stream->sc->packets_have_ts_begin);
+               BT_ASSERT(stream->sc->packets_have_ts_end);
+
                /*
                 * Make sure that the current discarded events range's
                 * beginning time matches what's expected for CTF 1.8.
                 */
-               if (stream->sc->default_clock_class) {
-                       uint64_t expected_cs;
-
-                       if (stream->prev_packet_state.end_cs == UINT64_C(-1)) {
-                               /* We're opening the first packet */
-                               expected_cs = bt_clock_snapshot_get_value(cs);
-                       } else {
-                               expected_cs = stream->prev_packet_state.end_cs;
-                       }
+               if (stream->prev_packet_state.end_cs == UINT64_C(-1)) {
+                       /* We're opening the first packet */
+                       expected_cs = bt_clock_snapshot_get_value(cs);
+               } else {
+                       expected_cs = stream->prev_packet_state.end_cs;
+               }
 
-                       if (stream->discarded_events_state.beginning_cs !=
-                                       expected_cs) {
-                               BT_LOGE("Incompatible discarded events message: "
-                                       "unexpected beginning time: "
-                                       "beginning-cs-val=%" PRIu64 ", "
-                                       "expected-beginning-cs-val=%" PRIu64 ", "
-                                       "stream-id=%" PRIu64 ", stream-name=\"%s\", "
-                                       "trace-name=\"%s\", path=\"%s/%s\"",
-                                       stream->discarded_events_state.beginning_cs,
-                                       expected_cs,
-                                       bt_stream_get_id(ir_stream),
-                                       bt_stream_get_name(ir_stream),
-                                       bt_trace_get_name(
-                                               bt_stream_borrow_trace_const(ir_stream)),
-                                       stream->trace->path->str, stream->file_name->str);
-                               status = BT_SELF_COMPONENT_STATUS_ERROR;
-                               goto end;
-                       }
+               if (stream->discarded_events_state.beginning_cs !=
+                               expected_cs) {
+                       BT_LOGE("Incompatible discarded events message: "
+                               "unexpected beginning time: "
+                               "beginning-cs-val=%" PRIu64 ", "
+                               "expected-beginning-cs-val=%" PRIu64 ", "
+                               "stream-id=%" PRIu64 ", stream-name=\"%s\", "
+                               "trace-name=\"%s\", path=\"%s/%s\"",
+                               stream->discarded_events_state.beginning_cs,
+                               expected_cs,
+                               bt_stream_get_id(ir_stream),
+                               bt_stream_get_name(ir_stream),
+                               bt_trace_get_name(
+                                       bt_stream_borrow_trace_const(ir_stream)),
+                               stream->trace->path->str, stream->file_name->str);
+                       status = BT_SELF_COMPONENT_STATUS_ERROR;
+                       goto end;
                }
        }
 
-
        if (stream->discarded_packets_state.in_range) {
+               uint64_t expected_end_cs;
+
+               BT_ASSERT(stream->sc->discarded_packets_has_ts);
+               BT_ASSERT(stream->sc->packets_have_ts_begin);
+               BT_ASSERT(stream->sc->packets_have_ts_end);
+
+               /*
+                * Make sure that the current discarded packets range's
+                * beginning and end times match what's expected for CTF
+                * 1.8.
+                */
                if (stream->prev_packet_state.end_cs == UINT64_C(-1)) {
                        BT_LOGE("Incompatible discarded packets message "
                                "occuring before the stream's first packet: "
@@ -378,56 +390,51 @@ bt_self_component_status handle_packet_beginning_msg(
                        goto end;
                }
 
-               /*
-                * Make sure that the current discarded packets range's
-                * beginning and end times match what's expected for CTF
-                * 1.8.
-                */
-               if (stream->sc->default_clock_class) {
-                       uint64_t expected_end_cs =
-                               bt_clock_snapshot_get_value(cs);
-
-                       if (stream->discarded_packets_state.beginning_cs !=
-                                       stream->prev_packet_state.end_cs) {
-                               BT_LOGE("Incompatible discarded packets message: "
-                                       "unexpected beginning time: "
-                                       "beginning-cs-val=%" PRIu64 ", "
-                                       "expected-beginning-cs-val=%" PRIu64 ", "
-                                       "stream-id=%" PRIu64 ", stream-name=\"%s\", "
-                                       "trace-name=\"%s\", path=\"%s/%s\"",
-                                       stream->discarded_packets_state.beginning_cs,
-                                       stream->prev_packet_state.end_cs,
-                                       bt_stream_get_id(ir_stream),
-                                       bt_stream_get_name(ir_stream),
-                                       bt_trace_get_name(
-                                               bt_stream_borrow_trace_const(ir_stream)),
-                                       stream->trace->path->str, stream->file_name->str);
-                               status = BT_SELF_COMPONENT_STATUS_ERROR;
-                               goto end;
-                       }
+               if (stream->discarded_packets_state.beginning_cs !=
+                               stream->prev_packet_state.end_cs) {
+                       BT_LOGE("Incompatible discarded packets message: "
+                               "unexpected beginning time: "
+                               "beginning-cs-val=%" PRIu64 ", "
+                               "expected-beginning-cs-val=%" PRIu64 ", "
+                               "stream-id=%" PRIu64 ", stream-name=\"%s\", "
+                               "trace-name=\"%s\", path=\"%s/%s\"",
+                               stream->discarded_packets_state.beginning_cs,
+                               stream->prev_packet_state.end_cs,
+                               bt_stream_get_id(ir_stream),
+                               bt_stream_get_name(ir_stream),
+                               bt_trace_get_name(
+                                       bt_stream_borrow_trace_const(ir_stream)),
+                               stream->trace->path->str, stream->file_name->str);
+                       status = BT_SELF_COMPONENT_STATUS_ERROR;
+                       goto end;
+               }
 
-                       if (stream->discarded_packets_state.end_cs !=
-                                       expected_end_cs) {
-                               BT_LOGE("Incompatible discarded packets message: "
-                                       "unexpected end time: "
-                                       "end-cs-val=%" PRIu64 ", "
-                                       "expected-end-cs-val=%" PRIu64 ", "
-                                       "stream-id=%" PRIu64 ", stream-name=\"%s\", "
-                                       "trace-name=\"%s\", path=\"%s/%s\"",
-                                       stream->discarded_packets_state.beginning_cs,
-                                       expected_end_cs,
-                                       bt_stream_get_id(ir_stream),
-                                       bt_stream_get_name(ir_stream),
-                                       bt_trace_get_name(
-                                               bt_stream_borrow_trace_const(ir_stream)),
-                                       stream->trace->path->str, stream->file_name->str);
-                               status = BT_SELF_COMPONENT_STATUS_ERROR;
-                               goto end;
-                       }
+               expected_end_cs = bt_clock_snapshot_get_value(cs);
+
+               if (stream->discarded_packets_state.end_cs !=
+                               expected_end_cs) {
+                       BT_LOGE("Incompatible discarded packets message: "
+                               "unexpected end time: "
+                               "end-cs-val=%" PRIu64 ", "
+                               "expected-end-cs-val=%" PRIu64 ", "
+                               "stream-id=%" PRIu64 ", stream-name=\"%s\", "
+                               "trace-name=\"%s\", path=\"%s/%s\"",
+                               stream->discarded_packets_state.end_cs,
+                               expected_end_cs,
+                               bt_stream_get_id(ir_stream),
+                               bt_stream_get_name(ir_stream),
+                               bt_trace_get_name(
+                                       bt_stream_borrow_trace_const(ir_stream)),
+                               stream->trace->path->str, stream->file_name->str);
+                       status = BT_SELF_COMPONENT_STATUS_ERROR;
+                       goto end;
                }
        }
 
-       stream->discarded_packets_state.in_range = false;
+       if (stream->sc->discarded_packets_has_ts) {
+               stream->discarded_packets_state.in_range = false;
+       }
+
        ret = fs_sink_stream_open_packet(stream, cs, ir_packet);
        if (ret) {
                status = BT_SELF_COMPONENT_STATUS_ERROR;
@@ -456,44 +463,41 @@ bt_self_component_status handle_packet_end_msg(
                goto end;
        }
 
-       if (stream->sc->default_clock_class) {
-               (void) bt_message_packet_end_borrow_default_clock_snapshot_const(
-                       msg, &cs);
-               BT_ASSERT(cs);
-       }
-
-       if (stream->sc->default_clock_class) {
-               (void) bt_message_packet_end_borrow_default_clock_snapshot_const(
-                       msg, &cs);
+       if (stream->sc->packets_have_ts_end) {
+               cs = bt_message_packet_end_borrow_default_clock_snapshot_const(
+                       msg);
                BT_ASSERT(cs);
        }
 
        if (stream->discarded_events_state.in_range) {
+               uint64_t expected_cs;
+
+               BT_ASSERT(stream->sc->discarded_events_has_ts);
+               BT_ASSERT(stream->sc->packets_have_ts_begin);
+               BT_ASSERT(stream->sc->packets_have_ts_end);
+
                /*
                 * Make sure that the current discarded events range's
                 * end time matches what's expected for CTF 1.8.
                 */
-               if (stream->sc->default_clock_class) {
-                       uint64_t expected_cs = bt_clock_snapshot_get_value(cs);
-
-                       if (stream->discarded_events_state.end_cs !=
-                                       expected_cs) {
-                               BT_LOGE("Incompatible discarded events message: "
-                                       "unexpected end time: "
-                                       "end-cs-val=%" PRIu64 ", "
-                                       "expected-end-cs-val=%" PRIu64 ", "
-                                       "stream-id=%" PRIu64 ", stream-name=\"%s\", "
-                                       "trace-name=\"%s\", path=\"%s/%s\"",
-                                       stream->discarded_events_state.end_cs,
-                                       expected_cs,
-                                       bt_stream_get_id(ir_stream),
-                                       bt_stream_get_name(ir_stream),
-                                       bt_trace_get_name(
-                                               bt_stream_borrow_trace_const(ir_stream)),
-                                       stream->trace->path->str, stream->file_name->str);
-                               status = BT_SELF_COMPONENT_STATUS_ERROR;
-                               goto end;
-                       }
+               expected_cs = bt_clock_snapshot_get_value(cs);
+
+               if (stream->discarded_events_state.end_cs != expected_cs) {
+                       BT_LOGE("Incompatible discarded events message: "
+                               "unexpected end time: "
+                               "end-cs-val=%" PRIu64 ", "
+                               "expected-end-cs-val=%" PRIu64 ", "
+                               "stream-id=%" PRIu64 ", stream-name=\"%s\", "
+                               "trace-name=\"%s\", path=\"%s/%s\"",
+                               stream->discarded_events_state.end_cs,
+                               expected_cs,
+                               bt_stream_get_id(ir_stream),
+                               bt_stream_get_name(ir_stream),
+                               bt_trace_get_name(
+                                       bt_stream_borrow_trace_const(ir_stream)),
+                               stream->trace->path->str, stream->file_name->str);
+                       status = BT_SELF_COMPONENT_STATUS_ERROR;
+                       goto end;
                }
        }
 
@@ -503,7 +507,9 @@ bt_self_component_status handle_packet_end_msg(
                goto end;
        }
 
-       stream->discarded_events_state.in_range = false;
+       if (stream->sc->discarded_events_has_ts) {
+               stream->discarded_events_state.in_range = false;
+       }
 
 end:
        return status;
@@ -516,7 +522,51 @@ bt_self_component_status handle_stream_beginning_msg(
        bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK;
        const bt_stream *ir_stream =
                bt_message_stream_beginning_borrow_stream_const(msg);
+       const bt_stream_class *ir_sc =
+               bt_stream_borrow_class_const(ir_stream);
        struct fs_sink_stream *stream;
+       bool packets_have_beginning_end_cs =
+               bt_stream_class_packets_have_beginning_default_clock_snapshot(ir_sc) &&
+               bt_stream_class_packets_have_end_default_clock_snapshot(ir_sc);
+
+       /*
+        * Not supported: discarded events with default clock snapshots,
+        * but packet beginning/end without default clock snapshot.
+        */
+       if (!fs_sink->ignore_discarded_events &&
+                       bt_stream_class_discarded_events_have_default_clock_snapshots(ir_sc) &&
+                       !packets_have_beginning_end_cs) {
+               BT_LOGE("Unsupported stream: discarded events have "
+                       "default clock snapshots, but packets have no "
+                       "beginning and/or end default clock snapshots: "
+                       "stream-addr=%p, "
+                       "stream-id=%" PRIu64 ", "
+                       "stream-name=\"%s\"",
+                       ir_stream, bt_stream_get_id(ir_stream),
+                       bt_stream_get_name(ir_stream));
+               status = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
+               goto end;
+       }
+
+       /*
+        * Not supported: discarded packets with default clock
+        * snapshots, but packet beginning/end without default clock
+        * snapshot.
+        */
+       if (!fs_sink->ignore_discarded_packets &&
+                       bt_stream_class_discarded_packets_have_default_clock_snapshots(ir_sc) &&
+                       !packets_have_beginning_end_cs) {
+               BT_LOGE("Unsupported stream: discarded packets have "
+                       "default clock snapshots, but packets have no "
+                       "beginning and/or end default clock snapshots: "
+                       "stream-addr=%p, "
+                       "stream-id=%" PRIu64 ", "
+                       "stream-name=\"%s\"",
+                       ir_stream, bt_stream_get_id(ir_stream),
+                       bt_stream_get_name(ir_stream));
+               status = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
+               goto end;
+       }
 
        stream = borrow_stream(fs_sink, ir_stream);
        if (!stream) {
@@ -610,9 +660,10 @@ bt_self_component_status handle_discarded_events_msg(
                goto end;
        }
 
-       if (stream->packet_state.is_open) {
-               BT_LOGE("Unsupported discarded events message occuring "
-                       "within a packet: "
+       if (stream->packet_state.is_open &&
+                       stream->sc->discarded_events_has_ts) {
+               BT_LOGE("Unsupported discarded events message with "
+                       "default clock snapshots occuring within a packet: "
                        "stream-id=%" PRIu64 ", stream-name=\"%s\", "
                        "trace-name=\"%s\", path=\"%s/%s\"",
                        bt_stream_get_id(ir_stream),
@@ -624,27 +675,22 @@ bt_self_component_status handle_discarded_events_msg(
                goto end;
        }
 
-       stream->discarded_events_state.in_range = true;
+       if (stream->sc->discarded_events_has_ts) {
+               stream->discarded_events_state.in_range = true;
 
-       if (stream->sc->default_clock_class) {
                /*
                 * The clock snapshot values will be validated when
                 * handling the next "packet beginning" message.
                 */
-               (void) bt_message_discarded_events_borrow_default_beginning_clock_snapshot_const(
-                       msg, &cs);
+               cs = bt_message_discarded_events_borrow_beginning_default_clock_snapshot_const(
+                       msg);
                BT_ASSERT(cs);
                stream->discarded_events_state.beginning_cs =
                        bt_clock_snapshot_get_value(cs);
-               cs = NULL;
-               (void) bt_message_discarded_events_borrow_default_end_clock_snapshot_const(
-                       msg, &cs);
+               cs = bt_message_discarded_events_borrow_end_default_clock_snapshot_const(
+                       msg);
                BT_ASSERT(cs);
-               stream->discarded_events_state.end_cs =
-                       bt_clock_snapshot_get_value(cs);
-       } else {
-               stream->discarded_events_state.beginning_cs = UINT64_C(-1);
-               stream->discarded_events_state.end_cs = UINT64_C(-1);
+               stream->discarded_events_state.end_cs = bt_clock_snapshot_get_value(cs);
        }
 
        avail = bt_message_discarded_events_get_count(msg, &count);
@@ -701,41 +747,25 @@ bt_self_component_status handle_discarded_packets_msg(
                goto end;
        }
 
-       if (stream->packet_state.is_open) {
-               BT_LOGE("Unsupported discarded packets message occuring "
-                       "within a packet: "
-                       "stream-id=%" PRIu64 ", stream-name=\"%s\", "
-                       "trace-name=\"%s\", path=\"%s/%s\"",
-                       bt_stream_get_id(ir_stream),
-                       bt_stream_get_name(ir_stream),
-                       bt_trace_get_name(
-                               bt_stream_borrow_trace_const(ir_stream)),
-                       stream->trace->path->str, stream->file_name->str);
-               status = BT_SELF_COMPONENT_STATUS_ERROR;
-               goto end;
-       }
+       BT_ASSERT(!stream->packet_state.is_open);
 
-       stream->discarded_packets_state.in_range = true;
+       if (stream->sc->discarded_packets_has_ts) {
+               stream->discarded_packets_state.in_range = true;
 
-       if (stream->sc->default_clock_class) {
                /*
                 * The clock snapshot values will be validated when
                 * handling the next "packet beginning" message.
                 */
-               (void) bt_message_discarded_packets_borrow_default_beginning_clock_snapshot_const(
-                       msg, &cs);
+               cs = bt_message_discarded_packets_borrow_beginning_default_clock_snapshot_const(
+                       msg);
                BT_ASSERT(cs);
                stream->discarded_packets_state.beginning_cs =
                        bt_clock_snapshot_get_value(cs);
-               cs = NULL;
-               (void) bt_message_discarded_packets_borrow_default_end_clock_snapshot_const(
-                       msg, &cs);
+               cs = bt_message_discarded_packets_borrow_end_default_clock_snapshot_const(
+                       msg);
                BT_ASSERT(cs);
                stream->discarded_packets_state.end_cs =
                        bt_clock_snapshot_get_value(cs);
-       } else {
-               stream->discarded_packets_state.beginning_cs = UINT64_C(-1);
-               stream->discarded_packets_state.end_cs = UINT64_C(-1);
        }
 
        avail = bt_message_discarded_packets_get_count(msg, &count);
This page took 0.028486 seconds and 4 git commands to generate.