From: Francis Deslauriers Date: Wed, 26 Jun 2019 22:06:23 +0000 (-0400) Subject: ctf: decoding: accommodate LTTng `event-after-packet` timestamp quirk X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=commitdiff_plain;h=7d1ac606018744f051104fc184e581411c52bd3d ctf: decoding: accommodate LTTng `event-after-packet` timestamp quirk See prior commit titled: src.ctf.fs: index: accommodate bug in LTTng tracers for an explanation of the non-compliance of some LTTng traces. How this commit fixes the decoding for the affected traces ========================================================== When about to emit a packet end message, check if the said packet is affect by LTTng's `event-after-packet` bug. If it's the case, omit to update the default_clock_snapshot to the `timestamp_end` of the packet. This will expand the packet time span to the contain all its events. Signed-off-by: Francis Deslauriers Change-Id: I205caf0243c1d6f270bdb1b6508bb55a0806ba19 Reviewed-on: https://review.lttng.org/c/babeltrace/+/1550 Tested-by: jenkins Reviewed-by: Philippe Proulx --- diff --git a/src/plugins/ctf/common/metadata/ctf-meta.h b/src/plugins/ctf/common/metadata/ctf-meta.h index 884fe69e..798c3b6a 100644 --- a/src/plugins/ctf/common/metadata/ctf-meta.h +++ b/src/plugins/ctf/common/metadata/ctf-meta.h @@ -313,6 +313,7 @@ struct ctf_trace_class { struct { bool lttng_crash; + bool lttng_event_after_packet; } quirks; }; diff --git a/src/plugins/ctf/common/msg-iter/msg-iter.c b/src/plugins/ctf/common/msg-iter/msg-iter.c index 404119fa..537ad136 100644 --- a/src/plugins/ctf/common/msg-iter/msg-iter.c +++ b/src/plugins/ctf/common/msg-iter/msg-iter.c @@ -2550,6 +2550,24 @@ void create_msg_packet_end(struct bt_msg_iter *notit, bt_message **message) } } + /* + * Check if may be affected by lttng event-after-packet `timestamp_end` + * quirk. + */ + if (notit->meta.tc->quirks.lttng_event_after_packet) { + /* + * Check if `timestamp_end` is smaller then the current + * default_clock_snapshot (which is set to the last event + * decoded). It means the trace is affected by the lttng + * `event-after-packet` packet `timestamp_end` quirk and must + * be fixed up by omitting to update the default clock snapshot + * to the `timestamp_end` as is typically done. + */ + if (notit->snapshots.end_clock < notit->default_clock_snapshot) { + update_default_cs = false; + } + } + /* Update default clock from packet's end time. */ if (notit->snapshots.end_clock != UINT64_C(-1) && update_default_cs) { notit->default_clock_snapshot = notit->snapshots.end_clock; diff --git a/src/plugins/ctf/fs-src/fs.c b/src/plugins/ctf/fs-src/fs.c index 8b6b54ea..d6ea57d9 100644 --- a/src/plugins/ctf/fs-src/fs.c +++ b/src/plugins/ctf/fs-src/fs.c @@ -2236,6 +2236,7 @@ int fix_packet_index_tracer_bugs(struct ctf_fs_component *ctf_fs) BT_LOGE_STR("Failed to fix LTTng event-after-packet bug."); goto end; } + trace->metadata->tc->quirks.lttng_event_after_packet = true; } if (is_tracer_affected_by_barectf_event_before_packet_bug(