sink.ctf.fs: support packets, DE, and DP w/o beginning/end clock snapshots
authorPhilippe Proulx <eeppeliteloop@gmail.com>
Mon, 3 Jun 2019 18:25:12 +0000 (14:25 -0400)
committerPhilippe Proulx <eeppeliteloop@gmail.com>
Thu, 6 Jun 2019 21:19:12 +0000 (17:19 -0400)
This patch makes `sink.ctf.fs` support more stream class configurations.
The table below shows the valid configurations, where:

DE:
    Discarded events.

DP:
    Discarded packets.

CS:
    Clock snapshot.

Each table cell indicates whether or not the given message has a default
clock snapshot (or two default clock snapshots for discarded events
packets messages). Each row is a configuration supported by
`sink.ctf.fs`.

    +------------+------------+-------+-------+
    | Pkt beg CS | Pkt end CS | DE CS | DP CS |
    +------------+------------+-------+-------+
    | No         | No         | No    | No    |
    | No         | Yes        | No    | No    |
    | Yes        | No         | No    | No    |
    | Yes        | Yes        | No    | No    |
    | Yes        | Yes        | No    | Yes   |
    | Yes        | Yes        | Yes   | No    |
    | Yes        | Yes        | Yes   | Yes   |
    +------------+------------+-------+-------+

All other configurations are not supported (the component logs an error
and fails).

As shown by the table above, discarded events and packets messages
without default clock snapshots are always supported:

* Any discarded events message occuring between two packet end messages
  increments the discarded event counter for the packet targeted by the
  second packet end message.

* Any discarded packets message occuring between a packet end message
  and a packet beginning message increments the packet sequence number
  for the packet targeted by the packet beginning message.

When discarded events/packets messages have default clock snapshots,
however, packet beginning and end messages must also have default clock
snapshots. This is to ensure that the discarded item time range matches
what is specified by CTF, which relies on the packet time ranges.
`src.ctf.fs` never produces (and will never produce) such a
configuration, so the CTF-to-CTF use case remains completely compatible.

When packet beginning messages have no default clock snapshot, the
generated packet context has no `timestamp_begin` member.

When packet end messages have no default clock snapshot, the generated
packet context has no `timestamp_end` member.

When a stream class does not support discarded event messages, the
generated packet context has no `events_discarded` member.

NOTE: As of this patch, `src.ctf.fs` cannot produce all the
configurations above. This work is reserved for a future patch.

Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I4e4fcb5c6f4e363d5c467427fb151c725d100cfb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1366
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins
plugins/ctf/fs-sink/fs-sink-ctf-meta.h
plugins/ctf/fs-sink/fs-sink-stream.c
plugins/ctf/fs-sink/fs-sink.c
plugins/ctf/fs-sink/translate-ctf-ir-to-tsdl.c

index 657fdd7373d23327a5902f3b810d097719c23631..04ef5afb002343656dbecd18145560eb7fd99f2b 100644 (file)
@@ -133,6 +133,11 @@ struct fs_sink_ctf_stream_class {
        const bt_clock_class *default_clock_class;
 
        GString *default_clock_class_name;
+       bool packets_have_ts_begin;
+       bool packets_have_ts_end;
+       bool has_discarded_events;
+       bool discarded_events_has_ts;
+       bool discarded_packets_has_ts;
 
        /* Owned by this */
        struct fs_sink_ctf_field_class *packet_context_fc;
@@ -731,6 +736,26 @@ struct fs_sink_ctf_stream_class *fs_sink_ctf_stream_class_create(
        sc->event_classes_from_ir = g_hash_table_new(g_direct_hash,
                g_direct_equal);
        BT_ASSERT(sc->event_classes_from_ir);
+       sc->packets_have_ts_begin =
+               bt_stream_class_packets_have_default_beginning_clock_snapshot(
+                       ir_sc);
+       sc->packets_have_ts_end =
+               bt_stream_class_packets_have_default_end_clock_snapshot(ir_sc);
+       sc->has_discarded_events =
+               bt_stream_class_supports_discarded_events(ir_sc);
+
+       if (sc->has_discarded_events) {
+               sc->discarded_events_has_ts =
+                       bt_stream_class_discarded_events_have_default_clock_snapshots(
+                               ir_sc);
+       }
+
+       if (bt_stream_class_supports_discarded_packets(ir_sc)) {
+               sc->discarded_packets_has_ts =
+                       bt_stream_class_discarded_packets_have_default_clock_snapshots(
+                               ir_sc);
+       }
+
        g_ptr_array_add(tc->stream_classes, sc);
        return sc;
 }
index c11305b722a7029d6c9cfb3b1cd9bc941655aad9..26977c2f36cda1e5470eb6d5d0953d9bfa0adbc1 100644 (file)
@@ -474,14 +474,16 @@ int write_packet_context(struct fs_sink_stream *stream)
                goto end;
        }
 
-       if (stream->sc->default_clock_class) {
+       if (stream->sc->packets_have_ts_begin) {
                /* Beginning time */
                ret = bt_ctfser_write_byte_aligned_unsigned_int(&stream->ctfser,
                        stream->packet_state.beginning_cs, 8, 64, BYTE_ORDER);
                if (ret) {
                        goto end;
                }
+       }
 
+       if (stream->sc->packets_have_ts_end) {
                /* End time */
                ret = bt_ctfser_write_byte_aligned_unsigned_int(&stream->ctfser,
                        stream->packet_state.end_cs, 8, 64, BYTE_ORDER);
@@ -490,12 +492,14 @@ int write_packet_context(struct fs_sink_stream *stream)
                }
        }
 
-       /* Discarded event counter */
-       ret = bt_ctfser_write_byte_aligned_unsigned_int(&stream->ctfser,
-               stream->packet_state.discarded_events_counter, 8, 64,
-               BYTE_ORDER);
-       if (ret) {
-               goto end;
+       if (stream->sc->has_discarded_events) {
+               /* Discarded event counter */
+               ret = bt_ctfser_write_byte_aligned_unsigned_int(&stream->ctfser,
+                       stream->packet_state.discarded_events_counter, 8, 64,
+                       BYTE_ORDER);
+               if (ret) {
+                       goto end;
+               }
        }
 
        /* Sequence number */
index 5316d30cb0cb1b30540175489ac2e077dd69e35a..0d79c992fc3642610811446a955fc6a5caace9e4 100644 (file)
@@ -320,50 +320,62 @@ bt_self_component_status handle_packet_beginning_msg(
                goto end;
        }
 
-       if (stream->sc->default_clock_class) {
+       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) {
-               cs = bt_message_packet_end_borrow_default_clock_snapshot_const(
-                       msg);
-               BT_ASSERT(cs);
-       }
-
-       if (stream->sc->default_clock_class) {
+       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;
@@ -519,67 +525,47 @@ bt_self_component_status handle_stream_beginning_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_default_beginning_clock_snapshot(ir_sc) &&
+               bt_stream_class_packets_have_default_end_clock_snapshot(ir_sc);
 
        /*
-        * Temporary: if the stream's class has a default clock class,
-        * make sure packet beginning and end messages have default
-        * clock snapshots until the support for not having them is
-        * implemented.
+        * Not supported: discarded events with default clock snapshots,
+        * but packet beginning/end without default clock snapshot.
         */
-       if (bt_stream_class_borrow_default_clock_class_const(ir_sc)) {
-               if (!bt_stream_class_packets_have_default_beginning_clock_snapshot(
-                               ir_sc)) {
-                       BT_LOGE("Unsupported stream: packets have "
-                               "no beginning clock snapshot: "
-                               "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;
-               }
-
-               if (!bt_stream_class_packets_have_default_end_clock_snapshot(
-                               ir_sc)) {
-                       BT_LOGE("Unsupported stream: packets have "
-                               "no end clock snapshot: "
-                               "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;
-               }
-
-               if (!fs_sink->ignore_discarded_events &&
-                               bt_stream_class_supports_discarded_events(ir_sc) &&
-                               !bt_stream_class_discarded_events_have_default_clock_snapshots(ir_sc)) {
-                       BT_LOGE("Unsupported stream: discarded events "
-                               "have no 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;
-               }
+       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;
+       }
 
-               if (!fs_sink->ignore_discarded_packets &&
-                               bt_stream_class_supports_discarded_packets(ir_sc) &&
-                               !bt_stream_class_discarded_packets_have_default_clock_snapshots(ir_sc)) {
-                       BT_LOGE("Unsupported stream: discarded packets "
-                               "have no 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);
@@ -674,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),
@@ -688,9 +675,9 @@ 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.
@@ -703,11 +690,7 @@ bt_self_component_status handle_discarded_events_msg(
                cs = bt_message_discarded_events_borrow_default_end_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);
@@ -764,23 +747,11 @@ 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.
@@ -795,9 +766,6 @@ bt_self_component_status handle_discarded_packets_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);
index c148caea410f11972f1969d693df68015bdbf692..e85221389e35fa53953ca1d2f220f990b82bad1d 100644 (file)
@@ -710,12 +710,15 @@ void append_stream_class(struct ctx *ctx,
                BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL,
                NULL, "content_size", true);
 
-       if (sc->default_clock_class) {
+       if (sc->packets_have_ts_begin) {
                append_indent(ctx);
                append_integer_field_class_from_props(ctx, 64, 8, false,
                        BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL,
                        sc->default_clock_class_name->str,
                        "timestamp_begin", true);
+       }
+
+       if (sc->packets_have_ts_end) {
                append_indent(ctx);
                append_integer_field_class_from_props(ctx, 64, 8, false,
                        BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL,
@@ -723,10 +726,18 @@ void append_stream_class(struct ctx *ctx,
                        "timestamp_end", true);
        }
 
-       append_indent(ctx);
-       append_integer_field_class_from_props(ctx, 64, 8, false,
-               BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL,
-               NULL, "events_discarded", true);
+       if (sc->has_discarded_events) {
+               append_indent(ctx);
+               append_integer_field_class_from_props(ctx, 64, 8, false,
+                       BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL,
+                       NULL, "events_discarded", true);
+       }
+
+       /*
+        * Unconditionnally write the packet sequence number as, even if
+        * there's no possible discarded packets message, it's still
+        * useful information to have.
+        */
        append_indent(ctx);
        append_integer_field_class_from_props(ctx, 64, 8, false,
                BT_FIELD_CLASS_INTEGER_PREFERRED_DISPLAY_BASE_DECIMAL,
This page took 0.033665 seconds and 4 git commands to generate.