Fix: ctf: wrongfully requiring CTF metadata signature for every section
authorFrancis Deslauriers <francis.deslauriers@efficios.com>
Wed, 22 Jul 2020 16:24:09 +0000 (12:24 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 25 Feb 2022 20:30:38 +0000 (15:30 -0500)
Issue
=====
When testing the special live tracing session case of sending the
metadata in multiple batches, we witnessed the CTF metadata decoder
returning an error if the "/* CTF 1.8" signature is omitted from the
metadata sections following the first one.

Here is the output of Babeltrace when this error occurs:
    07-22 12:18:38.518 539222 539222 W PLUGIN/CTF/META/DECODER ctf_metadata_decoder_append_content@decoder.c:242 [lttng-live] Missing "/* CTF major.minor" signature in plain text metadata file stream: mdec-addr=0x2398ec0
    07-22 12:18:38.518 539222 539222 E PLUGIN/CTF/META/DECODER ctf_metadata_decoder_append_content@decoder.c:251 [lttng-live] Invalid metadata version found in plain text signature: version=571641920.0, mdec-addr=0x2398ec0

We expect the decoder to only require this signature when decoding the
first section of plain-text metadata.

Solution
========
Only check for the signature when processing the first metadata section.

Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I3153abf58ade5f5b02362dbedde382f398f5ee4e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/7391

src/plugins/ctf/common/metadata/decoder.c

index a62beebfcd99cce5dacafe88d96883c8492c14b4..2a8bcf02724bf8497139fd6db6dbd36589952d09 100644 (file)
@@ -46,6 +46,7 @@ struct ctf_metadata_decoder {
        int bo;
        struct ctf_metadata_decoder_config config;
        struct meta_log_config log_cfg;
+       bool has_checked_plaintext_signature;
 };
 
 struct packet_header {
@@ -230,7 +231,7 @@ enum ctf_metadata_decoder_status ctf_metadata_decoder_append_content(
                        status = CTF_METADATA_DECODER_STATUS_ERROR;
                        goto end;
                }
-       } else {
+       } else if (!mdec->has_checked_plaintext_signature) {
                unsigned int major, minor;
                ssize_t nr_items;
                const long init_pos = ftell(fp);
@@ -267,6 +268,8 @@ enum ctf_metadata_decoder_status ctf_metadata_decoder_append_content(
                        status = CTF_METADATA_DECODER_STATUS_ERROR;
                        goto end;
                }
+
+               mdec->has_checked_plaintext_signature = true;
        }
 
 #if YYDEBUG
This page took 0.025304 seconds and 4 git commands to generate.