Simon Marchi [Wed, 2 Dec 2020 21:04:19 +0000 (16:04 -0500)]
Fix: sink.ctf.fs: remove spurious directory level when using assume-single-trace
The behavior of `sink.ctf.fs` with the `assume-single-trace=true`
parameter does not match the documentation nor the comments in the code.
The man page says:
If the assume-single-trace parameter is true, then the output trace
path to use for the single input trace is the directory specified by
the path parameter.
What I understand from this is that if you pass `path=/tmp/yo`, that
should produce the `/tmp/yo/metadata` file and the data files alongside
it.
The documentation on the `fs_sink_comp::assume_single_trace` says:
/*
* True if the component assumes that it will only write a
* single CTF trace (which can contain one or more data
* streams). This makes the component write the stream files
* directly in the output directory (`output_dir_path` above).
*/
bool assume_single_trace;
The `output_dir_path` would contain `/tmp/yo`, in the previous example,
so that confirms the previous assumption.
The actual behavior is that the sink puts the trace in an extra `trace`
directory, in `/tmp/yo/trace`.
We end up with the `trace` relative trace path (relative to the base
output directory) because `make_trace_path_rel` returns an empty string
when `assume_single_trace` is true and `sanitize_trace_path` replaces it
with `trace`.
When using `assume-single-trace=true`, we should not deal with a
relative trace path, as the trace is output directly in the base output
directory. We also don't want to run the path in
`make_unique_trace_path`, as the trace should be output in the base
directory specified by the user, not another directory. Anyway, if the
user specifies an existing directory, `sink.ctf.fs` will initially
error out with:
Single trace mode, but output path exists: output-path="/tmp/yo"
Although that's a TOCTOU bug, two babeltrace instances could both check
at the same time that the same output directory does not exist, and both
write in the same directory. That would not be good.
Change-Id: Ib2415420eabbc096a920d113863993161105e90a
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/4480
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Michael Jeanson [Wed, 18 Nov 2020 16:22:56 +0000 (11:22 -0500)]
Add C++11 support to the build system
Add C++11 support in preparation to the addition of C++ sources in the
plugins.
Automake uses the following variables for C++ files:
* AM_CPPFLAGS / CPPFLAGS: Preprocessor flags
* AM_CXXFLAGS / CXXFLAGS: C++ compiler flags
* AM_LDFLAGS / LDFLAGS: Linker flags
Change-Id: Ib9d1ce4b7853981c441e1c31460fd24579fa97ea
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/4413
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Thu, 29 Oct 2020 14:29:55 +0000 (10:29 -0400)]
fix: merge of AE_FEATURE and FreeBSD disable debug-info
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: Ieda416eedaf449d4a3d4a1cb1c5f63450c16611b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/4287
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Wed, 16 Sep 2020 18:46:55 +0000 (14:46 -0400)]
Fix: elfutils detection fallback for sles12
Turns out SLES12 doesn't bother shipping .pc files for elfutils, add a
fallback compile test that will work even in cross-compilation.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ia31b9add4831a9c4a67a440e7b1777d5f12d94d9
Michael Jeanson [Thu, 10 Sep 2020 19:20:03 +0000 (15:20 -0400)]
Rename AM_CHECK_PYTHON_SPHINX to AE_CHECK_PYTHON_SPHINX
The AM prefix is reserved for upstream automake macros, use our own AE
prefix which stands for "Autotools EfficiOS".
This is part of an effort to standardize our custom macros across all
our autotools based projects.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I5e03597945c38710ccad84fa1959834dabeab60d
Michael Jeanson [Thu, 10 Sep 2020 19:04:43 +0000 (15:04 -0400)]
Rename AM_PATH_PYTHON_MODULES to AE_PATH_PYTHON_MODULES
The AM prefix is reserved for upstream automake macros, use our own AE
prefix which stands for "Autotools EfficiOS".
This is part of an effort to standardize our custom macros across all
our autotools based projects.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If5e94c7fa6df2d368c3cb9ae14c080caf2c27837
Michael Jeanson [Thu, 10 Sep 2020 15:06:28 +0000 (11:06 -0400)]
Introduce AE_FEATURE to manage configure features
The new AE_FEATURE set of macros are wrappers over autoconf's
AC_ARG_ENABLE. The main objective is to make the m4sh code more readable
to the less seasoned autotools enthusiast among us and reduce the
duplication of code with it's associated bugs.
The AE prefix was chosen to mean "Autotools EfficiOS" and is part of an
effort to standardize our custom macros across all our autotools based
projects.
Change-Id: I7f802cb026ab4a386e05b27aaed56a5f189d0391
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Michael Jeanson [Mon, 19 Oct 2020 22:13:35 +0000 (18:13 -0400)]
port: 'ls --ignore=' is a GNU extension
Use grep -v instead to filter README.adoc.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I9b58120ee94dc4caa7b1e69bb4a4807f2af6f98c
Michael Jeanson [Mon, 19 Oct 2020 16:26:36 +0000 (12:26 -0400)]
port: add 'notext' keyword linker support
Check if the linker support the 'notext' keyword to allow relocations
against read-only segments. GNU ld defaults to notext but LLVM's ld does
not, both linkers support the keyword.
This is required for the plugins section symbols.
Change-Id: I2b5f5c77865267e35c529dd17a0298cd4405303d
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Michael Jeanson [Mon, 19 Oct 2020 17:04:17 +0000 (13:04 -0400)]
port: fix compat/endian.h on FreeBSD
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Iad3591f6f2172d8640abc13c9608aa393db5f199
Michael Jeanson [Mon, 19 Oct 2020 17:03:50 +0000 (13:03 -0400)]
Fix: tests: use the test suite configured python binary
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I4cd7e1389503fe0914abf965f56e9d2143cbe9fa
Michael Jeanson [Mon, 19 Oct 2020 16:44:32 +0000 (12:44 -0400)]
port: tests: Add sys/wait.h include for FreeBSD
Required for WIFEXITED and WEXITSTATUS.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Iaf3b95bfe048eab43b8ecb6c8837bc5a5242828d
Michael Jeanson [Mon, 19 Oct 2020 16:37:53 +0000 (12:37 -0400)]
port: namespace align.h with BT_ prefix
ALIGN is defined in FreeBSD system includes with an incompatible
signature, namespace our internal version.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ib5b24a7194a0ddbe6eab9aa4f789c612886594f5
Michael Jeanson [Mon, 19 Oct 2020 16:29:53 +0000 (12:29 -0400)]
port: Add sys/param.h include to compat/limits.h for FreeBSD
Required for MAXHOSTNAMELEN.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Iea97849212c736dc93e4b2ce07b23107764e367b
Michael Jeanson [Mon, 19 Oct 2020 16:18:07 +0000 (12:18 -0400)]
port: disable debug-info by default on FreeBSD
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I25909ef56f33a0832c7aa5b4eece4e04c4b2e75a
Michael Jeanson [Wed, 9 Sep 2020 18:50:04 +0000 (14:50 -0400)]
Update minimum autotools versions in README.adoc
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: Ife8e4be34eca414fac7e818f1d58179f258cd418
Reviewed-on: https://review.lttng.org/c/babeltrace/+/4058
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Philippe Proulx [Thu, 10 Sep 2020 15:35:58 +0000 (11:35 -0400)]
Reformat Python files with Black v20.8b1
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I50a663f02800456ce2370383bbdaefa8e0ebabc1
Reviewed-on: https://review.lttng.org/c/babeltrace/+/4062
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Thu, 10 Sep 2020 20:47:52 +0000 (16:47 -0400)]
Fix: bt2: _trim_docstring(): docstring can have 0 or 1 line
It is possible that a user component class's docstring has no lines or a
single one, for example:
# no line
class MySink(bt2._UserSinkComponent):
""""""
def _user_consume(self):
pass
# single line
class MySink(bt2._UserSinkComponent):
"""The single line"""
def _user_consume(self):
pass
The previous version of _trim_docstring() expects this format:
class MySink(bt2._UserSinkComponent):
"""
My sink's description
Dolore officia ex et aliquip eiusmod enim pariatur reprehenderit
ad adipisicing non occaecat ullamco aliquip laborum duis
proident ex duis.
Irure commodo proident esse non pariatur in aute cillum id aute.
"""
def _user_consume(self):
pass
In _trim_docstring(), accept no lines or a single one.
Adding new tests to `test_component_class.py` to validate this
behaviour. The
# fmt: off
"""
"""
# fmt: on
docstring has off/on formatting markers as Black 20.8b1 transforms this
into the non-equivalent
""""""
(which is another test now).
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia12b0e9bfd4d1e1aaa86f0c8c207c3c1535f5c3e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/4072
Philippe Proulx [Tue, 21 Jul 2020 17:57:10 +0000 (13:57 -0400)]
Fix: `ctf` plugin: use element FC's alignment as array/seq. FC alignment
Observed issue
==============
When reading some CTF trace with an empty array/sequence field,
Babeltrace 2 can fail.
More specifically, for the trace `tests/data/ctf-traces/succeed/array-align-elem`
(added by this patch):
The CLI's output is:
07-21 14:00:24.636 73959 73959 E PLUGIN/CTF/MSG-ITER request_medium_bytes@msg-iter.c:535 [auto-disc-source-ctf-fs] User function returned EOF, but message iterator is in an unexpected state: state=DSCOPE_EVENT_PAYLOAD_CONTINUE, cur-packet-size=-1, cur=24, packet-cur=24, last-eh-at=16
07-21 14:00:24.636 73959 73959 E PLUGIN/CTF/MSG-ITER read_dscope_continue_state@msg-iter.c:632 [auto-disc-source-ctf-fs] Cannot ensure that buffer has at least one byte: msg-addr=0x55d3b4e051f0, status=ERROR
07-21 14:00:24.636 73959 73959 E PLUGIN/CTF/MSG-ITER ctf_msg_iter_get_next_message@msg-iter.c:2881 [auto-disc-source-ctf-fs] Cannot handle state: msg-it-addr=0x55d3b4e051f0, state=DSCOPE_EVENT_PAYLOAD_CONTINUE
07-21 14:00:24.636 73959 73959 E PLUGIN/SRC.CTF.FS ctf_fs_iterator_next_one@fs.c:90 [auto-disc-source-ctf-fs] Failed to get next message from CTF message iterator.
07-21 14:00:24.636 73959 73959 W LIB/MSG-ITER bt_message_iterator_next@iterator.c:865 Component input port message iterator's "next" method failed: iter-addr=0x55d3b4e05000, iter-upstream-comp-name="auto-disc-source-ctf-fs", iter-upstream-comp-log-level=WARNING, iter-upstream-comp-class-type=SOURCE, iter-upstream-comp-class-name="fs", iter-upstream-comp-class-partial-descr="Read CTF traces from the file sy", iter-upstream-port-type=OUTPUT, iter-upstream-port-name="array-align-elem | 0 | array-align-elem/stream", status=ERROR
07-21 14:00:24.636 73959 73959 E PLUGIN/FLT.UTILS.MUXER muxer_upstream_msg_iter_next@muxer.c:446 [muxer] Upstream iterator's next method returned an error: status=ERROR
07-21 14:00:24.636 73959 73959 E PLUGIN/FLT.UTILS.MUXER validate_muxer_upstream_msg_iters@muxer.c:989 [muxer] Cannot validate muxer's upstream message iterator wrapper: muxer-msg-iter-addr=0x55d3b4dcb830, muxer-upstream-msg-iter-wrap-addr=0x55d3b4e055c0
ev: { a = 1, b = [ ], c = 2 }
07-21 14:00:24.636 73959 73959 E PLUGIN/FLT.UTILS.MUXER muxer_msg_iter_next@muxer.c:1417 [muxer] Cannot get next message: comp-addr=0x55d3b4dcae70, muxer-comp-addr=0x55d3b4dcaef0, muxer-msg-iter-addr=0x55d3b4dcb830, msg-iter-addr=0x55d3b4dcb750, status=ERROR
07-21 14:00:24.636 73959 73959 W LIB/MSG-ITER bt_message_iterator_next@iterator.c:865 Component input port message iterator's "next" method failed: iter-addr=0x55d3b4dcb750, iter-upstream-comp-name="muxer", iter-upstream-comp-log-level=WARNING, iter-upstream-comp-class-type=FILTER, iter-upstream-comp-class-name="muxer", iter-upstream-comp-class-partial-descr="Sort messages from multiple inpu", iter-upstream-port-type=OUTPUT, iter-upstream-port-name="out", status=ERROR
07-21 14:00:24.636 73959 73959 W LIB/GRAPH consume_graph_sink@graph.c:462 Component's "consume" method failed: status=ERROR, comp-addr=0x55d3b4dcb070, comp-name="pretty", comp-log-level=WARNING, comp-class-type=SINK, comp-class-name="pretty", comp-class-partial-descr="Pretty-print messages (`text` fo", comp-class-is-frozen=1, comp-class-so-handle-addr=0x55d3b4dc7c50, comp-class-so-handle-path="/home/eepp/dev/babeltrace/install/lib/babeltrace2/plugins/babeltrace-plugin-text.la", comp-input-port-count=1, comp-output-port-count=0
07-21 14:00:24.636 73959 73959 E CLI cmd_run@babeltrace2.c:2529 Graph failed to complete successfully
ERROR: [Babeltrace CLI] (babeltrace2.c:2529)
Graph failed to complete successfully
CAUSED BY [libbabeltrace2] (graph.c:462)
Component's "consume" method failed: status=ERROR, comp-addr=0x55d3b4dcb070, comp-name="pretty", comp-log-level=WARNING, comp-class-type=SINK,
comp-class-name="pretty", comp-class-partial-descr="Pretty-print messages (`text` fo", comp-class-is-frozen=1, comp-class-so-handle-addr=0x55d3b4dc7c50,
comp-class-so-handle-path="/home/eepp/dev/babeltrace/install/lib/babeltrace2/plugins/babeltrace-plugin-text.la", comp-input-port-count=1,
comp-output-port-count=0
CAUSED BY [libbabeltrace2] (iterator.c:865)
Component input port message iterator's "next" method failed: iter-addr=0x55d3b4dcb750, iter-upstream-comp-name="muxer",
iter-upstream-comp-log-level=WARNING, iter-upstream-comp-class-type=FILTER, iter-upstream-comp-class-name="muxer",
iter-upstream-comp-class-partial-descr="Sort messages from multiple inpu", iter-upstream-port-type=OUTPUT, iter-upstream-port-name="out", status=ERROR
CAUSED BY [muxer: 'filter.utils.muxer'] (muxer.c:1417)
Cannot get next message: comp-addr=0x55d3b4dcae70, muxer-comp-addr=0x55d3b4dcaef0, muxer-msg-iter-addr=0x55d3b4dcb830, msg-iter-addr=0x55d3b4dcb750,
status=ERROR
CAUSED BY [muxer: 'filter.utils.muxer'] (muxer.c:989)
Cannot validate muxer's upstream message iterator wrapper: muxer-msg-iter-addr=0x55d3b4dcb830, muxer-upstream-msg-iter-wrap-addr=0x55d3b4e055c0
CAUSED BY [muxer: 'filter.utils.muxer'] (muxer.c:446)
Upstream iterator's next method returned an error: status=ERROR
CAUSED BY [libbabeltrace2] (iterator.c:865)
Component input port message iterator's "next" method failed: iter-addr=0x55d3b4e05000, iter-upstream-c
Cause
=====
The internal CTF IR array and sequence field classes do not have an
alignment which is equal to their element FC's alignment, although
CTF 1.8.3 requires it [1]:
> Arrays are always aligned on their element alignment requirement.
Solution
========
In `bfcr.c`, align_class_state() is already called for array/sequence
fields.
Add a CTF IR trace class visitor to set any array/sequence FC's
alignment to its element FC's alignment, recursively (postorder).
Also update, postorder, structure FC alignments since some of the
alignments of the field types of their members can change.
Note
====
This patch adds two minimalist CTF traces to test the fix as well as two
new corresponding tests in
`tests/plugins/src.ctf.fs/succeed/test_succeed`:
`array-align-elem`:
Metadata:
struct {
integer { size = 8; } a;
integer { size = 8; align = 16; } b[0];
integer { size = 8; } c;
};
Taking the aligment of `b` into account, there's one byte of padding
between `a` and `c`:
a # c
^---- alignment of `b`
`struct-array-align-elem`:
Metadata:
struct {
integer { size = 8; } x;
struct {
integer { size = 8; } a;
integer { size = 8; align = 32; } b[0];
} y;
integer { size = 8; } z;
};
Taking the alignment of `y.b` into account, the `y` structure itself
is 32-bit-aligned, making the outer structure also 32-bit-aligned.
Therefore, there are three bytes of padding between `x` and `a`, and
three other bytes of padding between `a` and `z`:
x # # # a # # # z
^ ^-------- alignment of `b`
'---------------- alignment of `y`
References
==========
[1]: https://diamon.org/ctf/v1.8.3/#spec4.2.3
Fixes: https://bugs.lttng.org/issues/1276
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If1ccfe374976e9faef590f2fe7ff6bac2f335df8
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3805
Michael Jeanson [Thu, 23 Jul 2020 20:51:59 +0000 (16:51 -0400)]
Enable autotools warnings as errors
Enable all autotools warnings and error out to help catch all the
wonderful, shall we say, pecularities of M4sh.
* Bump the minimum autoconf version to 2.69, we already require
automake 1.12 released in 2012, use an autoconf of the same vintage.
* Minor syntax tweaks by running 'autoupdate'.
* Use AS_ESCAPE to escape bt_version_description C string
* Rename obsolete AC_HELP_STRING to AS_HELP_STRING.
* Use pkg-config to detect elfutils instead of our custom macro using
AC_RUN_IFELSE which won't work when cross-compiling.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: Ic4de35dc6a51db3fd82b145e8a4ce4bb80e6b27b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3812
CI-Build: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Simon Marchi [Mon, 10 Aug 2020 14:55:37 +0000 (10:55 -0400)]
sink.ctf.fs: append error causes where relevant
The `sink.ctf.fs` component class doesn't append error causes when it
encounters errors. This makes the error reporting very vague. For
example, both when the user fails to pass the required `path` parameter
and when they pass a path to a directory they don't have write
permissions on, they get:
ERROR: [Babeltrace CLI] (/home/simark/src/babeltrace/src/cli/babeltrace2.c:2462)
Cannot create components.
CAUSED BY [Babeltrace CLI] (/home/simark/src/babeltrace/src/cli/babeltrace2.c:2277)
Cannot create component: plugin-name="ctf", comp-cls-name="fs", comp-cls-type=4, comp-name="sink.ctf.fs"
CAUSED BY [libbabeltrace2] (/home/simark/src/babeltrace/src/lib/graph/graph.c:1055)
Component initialization method failed: status=ERROR, comp-addr=0x60c000011d40, comp-name="sink.ctf.fs", comp-log-level=WARNING, comp-class-type=SINK, comp-class-name="fs",
comp-class-partial-descr="Write CTF traces to the file sys", comp-class-is-frozen=1, comp-class-so-handle-addr=0x607000000100,
comp-class-so-handle-path="/home/simark/build/babeltrace/src/plugins/ctf/babeltrace-plugin-ctf.la", comp-input-port-count=0, comp-output-port-count=0
Add calls to append error causes where relevant. It becomes much easier
to distinguish the errors:
ERROR: [Babeltrace CLI] (/home/simark/src/babeltrace/src/cli/babeltrace2.c:2462)
Cannot create components.
CAUSED BY [Babeltrace CLI] (/home/simark/src/babeltrace/src/cli/babeltrace2.c:2277)
Cannot create component: plugin-name="ctf", comp-cls-name="fs", comp-cls-type=4, comp-name="sink.ctf.fs"
CAUSED BY [libbabeltrace2] (/home/simark/src/babeltrace/src/lib/graph/graph.c:1055)
Component initialization method failed: status=ERROR, comp-addr=0x60c000011d40, comp-name="sink.ctf.fs", comp-log-level=WARNING, comp-class-type=SINK, comp-class-name="fs",
comp-class-partial-descr="Write CTF traces to the file sys", comp-class-is-frozen=1, comp-class-so-handle-addr=0x607000000100,
comp-class-so-handle-path="/home/simark/build/babeltrace/src/plugins/ctf/babeltrace-plugin-ctf.la", comp-input-port-count=0, comp-output-port-count=0
CAUSED BY [sink.ctf.fs: 'sink.ctf.fs'] (/home/simark/src/babeltrace/src/plugins/ctf/fs-sink/fs-sink.c:74)
Error validating parameters: missing mandatory entry `path`
and
ERROR: [Babeltrace CLI] (/home/simark/src/babeltrace/src/cli/babeltrace2.c:2462)
Cannot create components.
CAUSED BY [Babeltrace CLI] (/home/simark/src/babeltrace/src/cli/babeltrace2.c:2277)
Cannot create component: plugin-name="ctf", comp-cls-name="fs", comp-cls-type=4, comp-name="sink.ctf.fs"
CAUSED BY [libbabeltrace2] (/home/simark/src/babeltrace/src/lib/graph/graph.c:1055)
Component initialization method failed: status=ERROR, comp-addr=0x60c000011e00, comp-name="sink.ctf.fs", comp-log-level=WARNING, comp-class-type=SINK, comp-class-name="fs",
comp-class-partial-descr="Write CTF traces to the file sys", comp-class-is-frozen=1, comp-class-so-handle-addr=0x607000000100,
comp-class-so-handle-path="/home/simark/build/babeltrace/src/plugins/ctf/babeltrace-plugin-ctf.la", comp-input-port-count=0, comp-output-port-count=0
CAUSED BY [sink.ctf.fs: 'sink.ctf.fs'] (/home/simark/src/babeltrace/src/plugins/ctf/fs-sink/fs-sink.c:40)
Cannot create directories for output directory: Permission denied: output-dir-path="/tmp/pouet/yo"
Change-Id: I384e88a1d2629ac75495518c8bce2a2cba2f9741
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3907
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 10 Aug 2020 15:02:18 +0000 (11:02 -0400)]
sink.ctf.fs: remove unreachable error cases
Just before this switch, we already check if `next_status` is negative
and bail out. It's therefore not possible for the `ERROR` and
`MEMORY_ERROR` cases to be reached.
Change-Id: I6afa4d2f57e0b3574bbbef0e60c6dc5ebb746fb3
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3906
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Geneviève Bastien [Tue, 25 Feb 2020 20:33:49 +0000 (15:33 -0500)]
sink.text.pretty: add optional `print-enum-flags` parameter
`print-enum-flags` parameter
============================
This new parameter tells the component to try to print enum values as
ORed bit flags if it applies.
When printing the value of an enum field that has no corresponding mapping,
the value is divided into its bit values and if each bit has a corresponding
mapping, consider that those mappings are ORed bit flags.
If any of the bits has no mapping, then the value is printed as <unknown>.
Example Babeltrace output of such a field (block_rq* kernel events):
[13:15:49.
024354958] (+0.
000003868) wilbrod block_rq_complete: { cpu_id = 4 },
{ dev =
8388624, sector =
375490176, nr_sector = 360, error = 0,
rwbs = ( "RWBS_FLAG_READ" | "RWBS_FLAG_RAHEAD" : container = 12 ) }
This parameter defaults to `false` as it may trigger unexpected behavior
if a trace contains a bit flag that is not described in the metadata as
is, but can be expressed as a binary OR of two existing values.
This can happen if an application changes the possible values of an
enumeration but forgets to update the metadata associated with
that recorded field. Such value must be printed as <unknown>.
Print all labels matching value
===============================
With this commit, a `sink.text.pretty` component will print all matching
labels inside curly brackets separated by commas. See
`print_enum_value_label_array()`.
So if an enum value matches two labels it will be printed as:
enum_field = ( { "bit0", "range1to3" } : container = 1 )
Change-Id: I26a17307243d5612c70c0e5b04e6b9567b0720d3
Signed-off-by: Geneviève Bastien <gbastien@versatic.net>
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3045
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Geneviève Bastien [Wed, 26 Feb 2020 20:49:57 +0000 (15:49 -0500)]
Tests: sink.text.pretty: Add unit tests for enum fields printing
Adds a Python component class who creates an event class with an enum
field that contains the enumeration described by the test caller. The
script iterator has a single event with a value also sent in parameter.
The tests themselves are run from a bash script, for signed/unsigned
values.
This commit also renames the existing `test_pretty` test file to
`test_pretty_python` to control all future Python tests for the
`sink.text.pretty` component class.
Change-Id: I3f631224dd3bdf21dbb2ef2d233c9f2dc8da43fa
Signed-off-by: Geneviève Bastien <gbastien@versatic.net>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3149
CI-Build: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Wed, 5 Aug 2020 19:54:20 +0000 (15:54 -0400)]
bt2: update comment about bt2._UserMessageIterator
The comment modified by this patch contains a few stale informations.
Update it to reflect the current reality.
Change-Id: I565eed51728c74ed5d8ba1e07d32b5b538a0c554
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3882
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Wed, 5 Aug 2020 18:48:34 +0000 (14:48 -0400)]
bt2: remove comment reference to "output port message iterator"
Output port message iterators is a concept that existed in preliminary
versions of Babeltrace 2, but did not exist in the final release. This
comment is stale.
Change-Id: I012e640eb33fe1dbf84b3863ae21a313f6de57f3
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3881
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Thu, 23 Jul 2020 18:16:29 +0000 (14:16 -0400)]
babeltrace2-source.ctf.fs(7): add a "CTF compliance" description section
This new section states that `src.ctf.fs` complies with CTF 1.8.3. It
also lists a few exceptions/limitations.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I45dc9d6c63fc17f1660ddf9359e83da9e1967df3
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3809
Reviewed-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Francis Deslauriers [Mon, 13 Jul 2020 17:43:59 +0000 (13:43 -0400)]
Fix: src.ctf.lttng-live: overwrite of error status trips `BT_ASSERT()`
Issue
=====
While tracking a bug in the LTTng Consumer daemon we witness an
assertion failure of Babeltrace:
# Test ust streaming live clear with viewer
# Parameters: tracing_active=1, clear_twice=1, buffer_type=uid
ok 253 - Create session Yi7ksFEZ76dwwd4m with uri:net://localhost and opts: --live
ok 254 - Enable channel chan for session Yi7ksFEZ76dwwd4m
ok 255 - Enable ust event tp:tptest for session Yi7ksFEZ76dwwd4m
ok 256 - Start tracing for session Yi7ksFEZ76dwwd4m
# Waiting for live trace at url: net://localhost
ok 257 - Waiting for live trace at url: net://localhost
# Waiting for live viewers on url: net://localhost
ok 258 - Waiting for live viewers on url: net://localhost
07-10 15:14:20.932 13745 13745 E PLUGIN/SRC.CTF.LTTNG-LIVE/VIEWER lttng_live_get_stream_bytes@viewer-connection.c:1601 [lttng-live] Received get_data_packet response: unknown
(╯°□°)╯︵ ┻━┻ msg-iter.c:491: request_medium_bytes(): Assertion `buffer_sz != 0` failed
The issue is that even when the `lttng_live_get_stream_bytes()`
function fails miserably because of an unknown status code, it could
return a `CTF_MSG_ITER_MEDIUM_STATUS_OK`. This happens because we are
calling the `viewer_status_to_ctf_msg_iter_medium_status()` function in
the `error:` label even when the `status` variable was already set.
Solution
========
Add another label to specifically convert status from `enum lttng_live_viewer_status` to
`enum ctf_msg_iter_medium_status`.
Notes
=====
- This commit adds the printing of the value of the unknown status
received by the Relay
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I6c740dd28ee0b336cf06dbdbf60d6333cf79d168
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3758
Reviewed-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Jérémie Galarneau [Thu, 16 Jul 2020 20:09:53 +0000 (16:09 -0400)]
Fix: source.ctf.lttng-live: muxing failure on clear (unit conversion)
This commit is a follow-up fix for
8ec4d5ff (see original message).
The original fix included a bogus comparison of:
`stream_iter->last_inactivity_ts > curr_msg_ts_ns`
While the idea behind the fix is valid, this statement compares
nanoseconds since Unix Epoch (former) to clock cycles (latter).
A conversion of the `last_inactivity_ts` to nanoseconds since Unix epoch
is performed using the stream's default clock class allowing a
comparison in a common time base to take place.
The diff looks more intimidating than it really is as it shifts the
indentation of a lot of code at once. This is because we only want to
perform the timestamp conversion when necessary (very rarely) on this
fairly hot path.
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ibdc365fec4685da88ae141383d5e5ef0af169a87
Simon Marchi [Wed, 15 Jul 2020 16:17:24 +0000 (12:17 -0400)]
configure: enable -Wstrict-prototypes unconditionally
I noticed that -Wstrict-prototypes would not get enabled, because the
autoconf test program generates a warning of this type. Enable it
unconditionally, like we already do for -Wold-style-definition.
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I145ceedb977d1d60a094f598ecae56930c742c4c
Francis Deslauriers [Mon, 13 Jul 2020 20:20:14 +0000 (16:20 -0400)]
Cleanup: flt.lttng-utils.debug-info: indentation fixes
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If177e044acc85672b18fb88d06af3296516057e4
Francis Deslauriers [Mon, 13 Jul 2020 17:41:38 +0000 (13:41 -0400)]
Cleanup: src.ctf.lttng-live: missing space in debug statement
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I2bb8477aaad8ce6ee8d17b9c315fc34bc05ce577
Francis Deslauriers [Mon, 29 Jun 2020 20:27:46 +0000 (16:27 -0400)]
Cleanup: flt.lttng-utils.debug-info: remove usage of `bt_bool` inside the component class
Also, cleanup an extra whitespace.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I7916ededcde363e6d3c7ae2eec417eedb7c1851a
Michael Jeanson [Mon, 13 Jul 2020 18:56:57 +0000 (14:56 -0400)]
tests: return the proper TAP exit code
The C TAP library provides the 'exit_status()' function that will return
the proper exit code according to the number of tests that succeeded or
failed.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ia76ed7d1510bb23bf3848f85ac9022c66e752311
Michael Jeanson [Thu, 25 Jun 2020 16:28:08 +0000 (12:28 -0400)]
Port: No syslimits.h on GNU Hurd
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I72c7d35ee121abd0dd95ceb11127c6de90a20187
Michael Jeanson [Thu, 25 Jun 2020 16:30:27 +0000 (12:30 -0400)]
Port: Add logging thread id support on GNU Hurd
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I8db78267136ba172964f3c8c1f40115e28ac6446
Michael Jeanson [Thu, 25 Jun 2020 16:19:45 +0000 (12:19 -0400)]
Port: Set PATH_MAX on GNU Hurd
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I1490391b47ad9fe905482a362f589d26f5a13a3c
Simon Marchi [Mon, 8 Jun 2020 16:48:29 +0000 (12:48 -0400)]
configure: remove unused configuration macros
The `PYTHON_PLUGINS` and `ENABLE_DEBUG_INFO` configuration macros aren't
effectively used, remove them.
Change-Id: If965795f24f20aa1e275c829d44c5f9587a8e5fb
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3622
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Jérémie Galarneau [Wed, 27 May 2020 16:15:54 +0000 (12:15 -0400)]
Fix: src.ctf.lttng-live: incomplete metadata packet is an error
Observed issue
==============
While investigating the issue described in [1], I noticed that
babeltrace2 falls into a retry loop when the src.ctf.lttng-live
component encounters unparseable metadata.
The src.ctf.lttng-live reports parsing errors on every subsequent
reception of a metadata packet. The relay daemon eventually sends
binary data which fails to be decoded, ending the graph's execution
with a binary decoding error, which is not the "real" issue.
Cause
=====
Due to a (now fixed) bug in LTTng [1], unparseable (incomplete)
metadata can be made visible to live clients. This bug fix doesn't
involve the clients; it resulted in an illegal state in the lttng-live
protocol.
When the relay daemon notifies the live client that new metadata is
available, lttng_live_metadata_update() receives all the metadata made
available by the relay daemon in a memory stream and then uses the
ctf_metadata_decoder to append the new content to the existing trace
class.
However, if the decoder returns
`CTF_METADATA_DECODER_STATUS_INCOMPLETE`,
`LTTNG_LIVE_ITERATOR_STATUS_AGAIN` is returned to the caller,
resulting in the graph retrying to invoke the live iterator's `next`
method until another error eventually prevents the successful
completion of the graph.
I am assuming that the use of the `AGAIN` status code may have been a
failed attempt at fixing [1] in the live component rather than
adressing the underlying problem.
Solution
========
To my knowledge there are no provisions made for incomplete metadata
in the lttng-live protocol as of the current version. This may have
been done in anticipation of a future change (?), but it currently
obscures the error reported when a corrupted/incomplete/unparseable
metadata packet is received by the src.ctf.lttng-live component.
The current approach doesn't work anyhow as
lttng_live_metadata_update() creates a "fresh" memory stream on each
invocation. If the intention was to accumulate partial metadata until
it can be successfully parsed, the accumulated metadata would have to
be preserved from one invocation to the next.
The conversion of the status code from `INCOMPLETE` to `AGAIN` is
removed to fail immediately during the current invocation of the
iterator's `next` method.
Drawbacks
=========
None.
References
==========
[1] https://github.com/lttng/lttng-tools/commit/
f5ba75b4f0c0b44092c76bc931b25b24a2e62718
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I8a379ea5d838786a6731199dd5f03bbf70ec13f5
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3586
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Francis Deslauriers [Thu, 4 Jun 2020 19:13:34 +0000 (15:13 -0400)]
Cleanup: debug-info: move all `_FIELD_NAME` defines to the same file
The `VPID_FIELD_NAME` and `IP_FIELD_NAME` are currently defined in both
`debug_info.c` and `debug-info.h`.
This commit regroups all `_FIELD_NAME` defines to the same file for
consistency.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I5afd805506beb91512cb855566c475d03ed333f6
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3615
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Francis Deslauriers [Thu, 4 Jun 2020 18:58:55 +0000 (14:58 -0400)]
Cleanup: debug-info: remove include indirection
- Include `babeltrace.h` to use the `bt_field_class` definition directly
instead of relying on `trace-ir-mapping.h`'s inclusion.
- Include `debug-info.h` to use `IP_FIELD_NAME` and `VPID_FIELD_NAME`
defines.
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I16d9614f6bdb405e02c2d9f4ee18e02013d1c919
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3614
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Jérémie Galarneau [Tue, 2 Jun 2020 15:11:14 +0000 (11:11 -0400)]
Tests: src.ctf.lttng-live: add discarded packets inactivity test
Add a test to ensure that inactivity beacon sent during the
period of a `Discarded packets` message does not violate the
monotonicity guarantees of the graph.
A new indexed trace is added to the test traces. It was generated
by the following source:
import bt2
bt2.register_plugin(__name__, "builder")
class SourceIter(bt2._UserMessageIterator):
def __init__(self, config, output_port):
ec = output_port.user_data
sc = ec.stream_class
tc = sc.trace_class
trace = tc()
stream = trace.create_stream(sc)
pkt1 = stream.create_packet()
pkt8 = stream.create_packet()
self._msgs = [
self._create_stream_beginning_message(stream),
self._create_packet_beginning_message(pkt1, default_clock_snapshot=0),
self._create_event_message(ec, pkt1, default_clock_snapshot=10),
self._create_packet_end_message(pkt1, default_clock_snapshot=20),
self._create_discarded_packets_message(stream, 7, 20, 121),
self._create_packet_beginning_message(pkt8, default_clock_snapshot=121),
self._create_event_message(ec, pkt8, default_clock_snapshot=133),
self._create_packet_end_message(pkt8, default_clock_snapshot=140),
self._create_stream_end_message(stream),
]
def __next__(self):
if len(self._msgs) > 0:
return self._msgs.pop(0)
else:
raise StopIteration
@bt2.plugin_component_class
class Source(bt2._UserSourceComponent, message_iterator_class=SourceIter):
def __init__(self, config, params, obj):
tc = self._create_trace_class()
cc = self._create_clock_class()
sc = tc.create_stream_class(
default_clock_class=cc,
supports_packets=True,
packets_have_beginning_default_clock_snapshot=True,
packets_have_end_default_clock_snapshot=True,
supports_discarded_packets=True,
discarded_packets_have_default_clock_snapshots=True,
)
ec = sc.create_event_class(name="my-event")
self._add_output_port("some-name", ec)
The index was generated manually.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Iebb34b9cf003d94e4c0a4ee4a530f7d7957d8b0d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3613
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Jérémie Galarneau [Fri, 5 Jun 2020 19:55:54 +0000 (15:55 -0400)]
Tests: src.ctf.lttng-live: add support for beacon injections
Add a 'beacons' field to the sessions configuration accepted
by lttng_live_server.py. 'beacons' is expected to be a list
of clock snapshots (in cycles) at which live inactivity beacons
should be sent to a live client.
From a protocol standpoint, an inactivity beacon is a "special" type
of index entry. They are inserted in the index list (_entries)
so that they can simply be sent in response to a
LttngLiveViewerGetNextDataStreamIndexEntryCommand in the same
way typical index entries are processed.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I1f86cf369a5115af6787e9a9d52469d16f1ab3aa
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3618
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Jérémie Galarneau [Thu, 4 Jun 2020 22:32:32 +0000 (18:32 -0400)]
Fix: source.ctf.lttng-live: muxing failure on clear
Observed issue
==============
The lttng-tools port builds regularly fail on the CI with the following
error:
```
05-28 16:13:52.864 11219 11219 E PLUGIN/SRC.CTF.LTTNG-LIVE next_stream_iterator_for_trace@lttng-live.c:1067 [lttng-live] Message's timestamp is less than lttng-live's message iterator's last returned timestamp: lttng-live-msg-iter-addr=0xd810220dd30, ts=
1590696831733594090, last-msg-ts=
1590696832514058899
05-28 16:13:52.864 11219 11219 E PLUGIN/SRC.CTF.LTTNG-LIVE lttng_live_msg_iter_next@lttng-live.c:1502 [lttng-live] Error preparing the next batch of messages: live-iter-status=LTTNG_LIVE_ITERATOR_STATUS_ERROR
05-28 16:13:52.864 11219 11219 W LIB/MSG-ITER bt_message_iterator_next@iterator.c:868 Component input port message iterator's "next" method failed: iter-addr=0xd810221c7c0, iter-upstream-comp-name="lttng-live", iter-upstream-comp-log-level=WARNING, iter-upstream-comp-class-type=SOURCE, iter-upstream-comp-class-name="lttng-live", iter-upstream-comp-class-partial-descr="Connect to an LTTng relay daemon", iter-upstream-port-type=OUTPUT, iter-upstream-port-name="out", status=ERROR
05-28 16:13:52.864 11219 11219 W LIB/GRAPH consume_graph_sink@graph.c:466 Component's "consume" method failed: status=ERROR, comp-addr=0xd81022373a0, comp-name="sink.text.details", comp-log-level=WARNING, comp-class-type=SINK, comp-class-name="details", comp-class-partial-descr="Print messages with details.", comp-class-is-frozen=0, comp-class-so-handle-addr=0xd8102233ca0, comp-class-so-handle-path="/tmp/debug_jgalar/build/usr/lib/babeltrace2/plugins/babeltrace-plugin-text.so", comp-input-port-count=1, comp-output-port-count=0
05-28 16:13:52.865 11219 11219 E CLI cmd_run@babeltrace2.c:2530 Graph failed to complete successfully
ERROR: [Babeltrace CLI] (babeltrace2.c:2530)
Graph failed to complete successfully
CAUSED BY [libbabeltrace2] (graph.c:466)
Component's "consume" method failed: status=ERROR, comp-addr=0xd81022373a0,
comp-name="sink.text.details", comp-log-level=WARNING, comp-class-type=SINK,
comp-class-name="details", comp-class-partial-descr="Print messages with
details.", comp-class-is-frozen=0, comp-class-so-handle-addr=0xd8102233ca0,
comp-class-so-handle-path="/tmp/debug_jgalar/build/usr/lib/babeltrace2/plugins/babeltrace-plugin-text.so",
comp-input-port-count=1, comp-output-port-count=0
CAUSED BY [libbabeltrace2] (iterator.c:868)
Component input port message iterator's "next" method failed:
iter-addr=0xd810221c7c0, iter-upstream-comp-name="lttng-live",
iter-upstream-comp-log-level=WARNING, iter-upstream-comp-class-type=SOURCE,
iter-upstream-comp-class-name="lttng-live",
iter-upstream-comp-class-partial-descr="Connect to an LTTng relay daemon",
iter-upstream-port-type=OUTPUT, iter-upstream-port-name="out", status=ERROR
CAUSED BY [lttng-live: 'source.ctf.lttng-live'] (lttng-live.c:1502)
Error preparing the next batch of messages:
live-iter-status=LTTNG_LIVE_ITERATOR_STATUS_ERROR
CAUSED BY [lttng-live: 'source.ctf.lttng-live'] (lttng-live.c:1067)
Message's timestamp is less than lttng-live's message iterator's last returned
timestamp: lttng-live-msg-iter-addr=0xd810220dd30, ts=
1590696831733594090,
last-msg-ts=
1590696832514058899
```
The test that ends up with this error performs a session `clear`
while tracing an application as part of a "live" session.
Cause
=====
Given the following trace,
| pkt seq:0 |<-------discarded packets------>| pkt seq:8 |
0 20 121 140
a CTF source is expected to introduce a "Discarded Packets" message
between packets 0 and 8. The begin and end timestamps of such a message
are synthesized from the timestamps of the last known packet (seq:0)
and the newly decoded packet (seq:8).
For instance, here the Discarded Packets message would have the bounds
[pkt0.end_ts, pkt8.begin_ts].
In the context of a live source, the tracer could report an inactivity
period during the interval of the "Discarded packets" message.
Those live protocol messages eventually translate into an "Iterator
Inactivity" message with a timestamp set at the end of the inactivity
period.
If the tracer reports an inactivity period that ends at a point
between pkt0 and pkt8 (resulting in an "Iterator Inactivity" message),
the live source will send a "Discarded Packets" message that starts
before the preceding "Iterator Inactivity" message, breaking the
monotonicity constraint of the graph.
This happens regularly when `clear` is used on an LTTng live session as
it effectively discards packets, something that would otherwise not
happen (before LTTng 2.12) as most users set their tracing channels in
"discard" mode (the default for that session type).
However, the same problem as described above applies to "Discarded
Events" messages and could occur with older LTTng versions.
Solution
========
"Discarded Events" and Discarded Packets" messages are intercepted
in the lttng-live source's "muxer" and are _adjusted_ so that
they honor the monotonicity guarantee of the graph.
In effect, whenever such a message is seen to have a begin timestamp
that is _before_ the last inactivity timestamp, its begin timestamp
is adjusted to the last inactivity timestamp's value.
From a correctness standpoint, this is okay. If the tracer notified the
relay daemon of an inactivity period on a stream, we can rely on the
fact that no data was produced during that time to affirm that no
packets where lost during that time either.
A test reproducing the "Discarded Packets" scenatio described in
this message is added in a follow-up patch.
Known drawbacks
===============
None.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ia8f32ba6717b33203637bf8d5aa34ff2a78c3e7f
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3616
Tested-by: jenkins <jenkins@lttng.org>
Jérémie Galarneau [Mon, 1 Jun 2020 22:53:45 +0000 (18:53 -0400)]
Fix: source.ctf.fs: 0-length packet index length causes SIGFPE
A corrupted index can present a 0-length packet index length
which will result in a division by 0 when computing the index
entry count.
Program terminated with signal SIGFPE, Arithmetic exception.
#0 0x00007f6ecbd44978 in build_index_from_idx_file (ds_file=0x561ade51ca00, file_info=0x561ade51d000,
msg_iter=0x561ade51cd00) at data-stream-file.c:640
640 file_entry_count = (filesize - sizeof(*header)) / file_index_entry_size;
The index packet length is checked against the smallest valid size:
the size of an index entry as of the 1.0 CTF index version.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I83c705575d55f3b56ae413d1ce5ae0fc60121f2c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3606
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Jérémie Galarneau [Tue, 2 Jun 2020 19:35:55 +0000 (15:35 -0400)]
Tests: src.ctf.lttng-live: use JSON description for sessions
In preparation for a follow-up commit introducing live beacons
to insert within a stream's indexes, transition from the current session
description string format to a JSON-based description.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I08642f95888550de94bd7bddcf4b1e2e875b1a25
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3605
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Jérémie Galarneau [Tue, 2 Jun 2020 16:23:41 +0000 (12:23 -0400)]
Tests: whitespace fix in src.ctf.lttng-live/test_live
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I6ca6c61013421b4c8456413db14bbd7971a0edb1
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3604
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Simon Marchi [Wed, 22 Apr 2020 21:13:08 +0000 (17:13 -0400)]
Fix: lib: use appropriate format specifier to print message iterator class
Running
babeltrace2 --debug /some/trace
... results in the following crash:
==31705==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f5b9c25ae22 bp 0x7ffc64114490 sp 0x7ffc64113ba8 T0)
==31705==The signal is caused by a READ memory access.
==31705==Hint: address points to the zero page.
#0 0x7f5b9c25ae21 (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xfce21)
#1 0x7f5b9c1d231f (/usr/lib/x86_64-linux-gnu/libasan.so.4+0x7431f)
#2 0x7f5b9c1fef4d in __interceptor_vsnprintf (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xa0f4d)
#3 0x7f5b9c1ff286 in snprintf (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xa1286)
#4 0x7f5b9bdf61c3 in format_component_class /home/smarchi/src/babeltrace/src/lib/lib-logging.c:1061
#5 0x7f5b9bdfad46 in handle_conversion_specifier_bt /home/smarchi/src/babeltrace/src/lib/lib-logging.c:1451
#6 0x7f5b9bead260 in bt_common_custom_vsnprintf /home/smarchi/src/babeltrace/src/common/common.c:1727
#7 0x7f5b9bdfb10b in bt_lib_log /home/smarchi/src/babeltrace/src/lib/lib-logging.c:1496
#8 0x7f5b9be32965 in bt_message_iterator_class_set_seek_beginning_methods /home/smarchi/src/babeltrace/src/lib/graph/message-iterator-class.c:138
...
This is due to an object being printed with the wrong format specifier.
`C` is for component class objects, use `I` instead, since we are
printing a message iterator object.
Change-Id: Ie3985d8b7c4e02ac7d09aee84bfe46ea4bab87e9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3450
Reviewed-by: Geneviève Bastien <gbastien@versatic.net>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Wed, 22 Apr 2020 21:18:38 +0000 (17:18 -0400)]
Fix: lib: BT_ASSERT_PRE_NON_NULL_FROM_FUNC(): change `: ` -> `.` in msg.
This changes, for example,
...
Error is:
Value object is NULL:
Aborting...
to
...
Error is:
Value object is NULL.
Aborting...
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ic122d50f5cb88dd72978d5dd8e2e4b22ee965a3e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3451
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Tue, 14 Apr 2020 01:38:22 +0000 (21:38 -0400)]
tests: add libbabeltrace2 pre/postcondition testing infrastructure
This patch adds a basic libbabeltrace2 pre/postcondition testing
infrastructure to the project.
When a libbabeltrace2 public function precondition or postcondition is
not satisfied, the function logs a FATAL-level message which indicates
what's wrong and then aborts. Slow path functions check such conditions
unconditionally, while fast path functions check them only in developer
mode.
Testing that a libbabeltrace2 function catches an unsatisfied
pre/postcondition and reports it is not straightforward: the library
aborts the program, so we can't use the usual approach because the test
program itself would abort.
The solution brought by this patch is the following process in
`tests/lib/conds`:
1. The `conds-triggers.c` program contains all the pre/postcondition
failure triggering instructions to test, one condition per function.
Each triggering function triggers a single pre/postcondition check.
It is expected that the function actually aborts.
main() calls ppc_main(), an internal utility, with its command-line
arguments and an array of condition trigger descriptors.
Each condition trigger descriptor has:
* A condition type: precondition or postcondition.
* The ID of the condition to trigger.
* A name suffix.
* A condition triggering function.
Each condition trigger descriptor has a unique name: its condition ID
and an optional name suffix.
As of this patch, the PPC_TRIGGER_*_RUN_IN_COMP_CLS_INIT() macros
create condition trigger descriptors of which the function runs
within a component class initialization function (accepts a
`bt_self_component *` parameter). This is often needed as many
libbabeltrace2 functions are only accessible through a self component
(all the trace IR API, for example).
ppc_main() handles two command-line subcommands:
`list`:
Prints a JSON array of objects which represent the triggering
descriptors, for example (output for this patch):
[
{
"cond-id": "pre:field-class-integer-set-field-value-range:valid-n",
"name": "pre:field-class-integer-set-field-value-range:valid-n-0"
},
{
"cond-id": "pre:field-class-integer-set-field-value-range:valid-n",
"name": "pre:field-class-integer-set-field-value-range:valid-n-gt-64"
},
{
"cond-id": "pre:field-class-integer-set-field-value-range:not-null:field-class",
"name": "pre:field-class-integer-set-field-value-range:not-null:field-class"
}
]
`run INDEX`:
Runs the condition triggering function for the descriptor at
index `INDEX` in the `list` array.
It is expected that this command aborts.
2. `test_conds` is a Bash script which only does this:
reldir=lib/conds
export BT_TESTS_LIB_CONDS_TRIGGER_BIN="$BT_TESTS_BUILDDIR/$reldir/conds-triggers"
if [ "$BT_OS_TYPE" = "mingw" ]; then
BT_TESTS_LIB_CONDS_TRIGGER_BIN="$BT_TESTS_LIB_CONDS_TRIGGER_BIN.exe"
fi
run_python_bt2_test "$BT_TESTS_SRCDIR/$reldir" test.py
In other words, it runs the Python TAP test runner to discover and
run tests in `test.py`.
This script is part of the `make check` test set.
3. In `test.py`, a function:
a) Runs `conds-triggers list` and decodes the output to get the list
of available condition trigger descriptors.
This step also validates the regular expressions and checks that
there are no duplicate descriptor names.
b) For each condition trigger descriptor, creates and adds a test to
its single test case class which:
I. Executes `conds-triggers run INDEX` as a subprocess,
where `INDEX` is the descriptor's index.
II. Reads the complete process's standard error.
III. Asserts that the process aborts (`SIGABRT` signal).
This seems to be only possible on a POSIX system with the
`subprocess.Popen` API.
IV. Asserts that the standard error (II) contains the
descriptor's condition ID.
All this is only enabled if, at configuration time:
* Python 3 is available.
* The Babeltrace 2 developer mode is enabled (`BABELTRACE_DEV_MODE=1`).
This patch's `conds-triggers.c` includes two precondition triggering
functions to confirm that everything works as expected:
trigger_fc_int_set_field_value_range_n_0():
When calling bt_field_class_integer_set_field_value_range(), the
parameter `N` cannot be greater than 64.
trigger_fc_int_set_field_value_range_n_gt_64():
When calling bt_field_class_integer_set_field_value_range(), the
parameter `N` cannot be 0.
trigger_fc_int_set_field_value_range_null():
When calling bt_field_class_integer_set_field_value_range(), the
field class cannot be `NULL`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I70713d690f7dbfeac5804e6cfcec989242823611
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3401
Philippe Proulx [Tue, 21 Apr 2020 15:15:42 +0000 (11:15 -0400)]
lib: assign a unique ID to each pre/postcond. and report it on failure
This patch changes the libbabeltrace2 pre/postcondition assertion macros
so that each precondition and postcondion has a unique ID within the
library.
The macros report (log with a FATAL level) the condition ID on assertion
failure as such (logging prefixes removed):
Babeltrace 2 library precondition not satisfied.
------------------------------------------------------------------------
Condition ID: `pre:field-class-integer-set-field-value-range:valid-n`.
Function: bt_field_class_integer_set_field_value_range().
------------------------------------------------------------------------
Error is:
Unsupported size for integer field class's field value range
(minimum is 1, maximum is 64): size=65
Aborting...
The main goal of this change is to make it easier to test library
precondition and postcondition assertions: now you only need to confirm
that the log indicates the expected condition ID, making the details
("Unsupported size for [...]" in the example above) unimportant.
The condition IDs could also exist in the documentation so as to make it
easier to search for libbabeltrace2 pre/postcondition documentation when
failing to satisfy one.
The general condition ID format is:
TYPE:FUNC:SUFFIX
with
`TYPE`:
`pre` or `post`.
`FUNC`:
Name of the API function (precondition) or user function type
(postcondition) without the `bt_` prefix and with `_` replaced with
`-`.
`SUFFIX`:
With the scope of the function: unique, specific precondition or
postcondition ID.
The BT_ASSERT_PRE_FROM_FUNC() macro (and its developer mode counterpart)
accepts a function name and an ID suffix.
The BT_ASSERT_PRE() macro (and its developer mode counterpart) only
accepts an ID suffix: it uses BT_ASSERT_PRE_FROM_FUNC() with `__func__`
as the function name.
All the other precondition assertion macros follow the same scheme:
`_FROM_FUNC` suffix for a specific function, no suffix for the current
function.
Many precondition assertion macros in `assert-cond.h` build a complete
ID suffix based on a part of it. For example, BT_ASSERT_PRE_NON_NULL()
accepts an object ID, so that
BT_ASSERT_PRE_NON_NULL("description", descr, "Description");
has the condition ID, when used from the hypothetical public function
bt_do_xyz(), `pre:do-xyz:not-null:description`.
It is imperative that the used API function name is always the one the
user called. Knowing this, internal, static functions _cannot_ use
BT_ASSERT_PRE() because the reported function name would be the internal
one. Not only is this confusing for the library user, it could also
change in the future.
This patch uses two strategies to deal with this constraint depending
on the intended execution path of the public function:
Slow path:
The common (internal) function accepts an `api_func` parameter which
is the ultimate public API function name.
The common function only uses precondition assertion macros which
end with `_FROM_FUNC`.
A public function which calls this common function passes `__func__`
as its `api_func` parameter.
Fast path:
We define (locally) a new macro which uses the required precondition
assertion macros (the variants without `_FROM_FUNC`).
A public function which calls the common function uses the custom
macro.
Postconditions are checked when a user function returns. Therefore, the
function name in that case is the user function type name.
BT_ASSERT_POST() accepts a function name and an ID suffix.
_BT_ASSERT_COND() calls the internal bt_lib_assert_cond_failed() which
formats the condition ID, prints it and the function name, prints the
details, and aborts.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8bfab8c90cd1c18215fc0738f0b9504130f48b45
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3435
Philippe Proulx [Tue, 21 Apr 2020 14:56:20 +0000 (10:56 -0400)]
lib: add bt_lib_log_v()
This is a `va_list` (vprintf() style) version of bt_lib_log().
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I41dc0e247c79e8f22cc930b27ec4f13a2dd6d573
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3441
Philippe Proulx [Tue, 21 Apr 2020 14:42:13 +0000 (10:42 -0400)]
lib: rename BT_ASSERT_PRE_BEGIN_LE_END() -> BT_..._MSG_CS_BEGIN_LE_END()
This adds a namespace as BT_ASSERT_PRE_MSG_CS_BEGIN_LE_END() is now part
of the common `assert-cond.h` header.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5f3197a41b240f58fb7da5518053c792aab5da9d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3440
Philippe Proulx [Thu, 16 Apr 2020 17:13:11 +0000 (13:13 -0400)]
lib: use common precond. assert. macros from `assert-cond.h` thru lib
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Iad421161d61079f8777c4d75232e523a59f9120c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3434
Philippe Proulx [Tue, 21 Apr 2020 14:27:48 +0000 (10:27 -0400)]
lib: rename *_IS_TYPE() and *_HAS_ID() macros -> *_HAS_TYPE()
This is to normalize this type of macro.
Since those macros check that a given object _has_ a given type, I
believe "has" makes more sense than "is" (you pass the instance, not the
type).
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8b77443c3675d94ffc796b97eca2f773b71832db
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3439
Philippe Proulx [Thu, 16 Apr 2020 17:12:55 +0000 (13:12 -0400)]
lib: commonize some precondition assertion macros
1. Rename `assert-cond.h` to `assert-cond-base.h`.
2. Move common specialized pre/postcondition macros from
`assert-cond-base.h` to `assert-cond.h`.
Now `assert-cond-base.h` only contains the very basic
pre/postcondition assertion macros.
3. Move common specialized macros from various internal header files to
`assert-cond.h`.
4. Add new common specialized macros to `assert-cond.h`, mostly "non
null" precondition assertion macros.
The goal of this patch is to make it easy to change code for many sites
at the same time when those sites use the same macro.
This patch introduces the common precondition assertion macros, but
does not use them in source files (future patch).
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I2456e459bab9d942e4e11953b4afc5a6f4d30620
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3433
Philippe Proulx [Thu, 16 Apr 2020 14:00:55 +0000 (10:00 -0400)]
lib: move bt_graph_configure() to `graph.c` (only used there)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I097f61f1e64d9e83d929980f5224b429e6202eb5
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3432
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Philippe Proulx [Thu, 16 Apr 2020 13:58:08 +0000 (09:58 -0400)]
Fix: lib: bt_component_class_sink_simple_borrow() is internal
My guess is that at some point the intention was to have the user borrow
the simple sink component class and call bt_graph_add_sink_component()
herself but that's not how it works now:
bt_graph_add_simple_sink_component() calls
bt_component_class_sink_simple_borrow() internally.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I77e10d43a2d90ea4b99c7c7fc09606cbf2ffbe41
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3431
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Philippe Proulx [Thu, 16 Apr 2020 13:53:01 +0000 (09:53 -0400)]
lib: object.h: convert precondition assertions to internal assertions
The `object.h` API is completely internal.
We used to have only two public reference counting modification
functions (to get and put references), but since
c5b9b4417 ("lib: make
public reference count functions have strict types"), each shared object
type has its own reference counting modification functions. Therefore
it's impossible that bt_object_get_ref() or bt_object_put_ref() be
called with a unique object without at least getting a compiler warning.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I80286144f3f29af933694d5e824473abd7ec9103
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3430
Philippe Proulx [Thu, 16 Apr 2020 12:55:56 +0000 (08:55 -0400)]
lib: move code only used by create_event() to `message/event.c`
Those functions, bt_event_set_packet() and bt_event_set_stream(), used
to exist in the Babeltrace 1 to 2 transition. But now it seems like
they're internal and only used by the also internal create_event().
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Id9087e802af3aca76de6dd89abf73b3d75c848ea
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3429
Philippe Proulx [Wed, 15 Apr 2020 20:47:18 +0000 (16:47 -0400)]
lib: merge `assert-pre.h` and `assert-post.h` into `assert-cond.h`
Merge both files into a single one to make it possible to reuse code.
Specific `BT_ASSERT_PRE*` and `BT_ASSERT_POST*` macros which were
identical are merged into a single one with the `BT_ASSERT_COND*` prefix
now.
No functional changes intended.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I019bcc73d5c644012238775c16b6498d07931a9a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3428
Simon Marchi [Wed, 15 Apr 2020 01:23:52 +0000 (21:23 -0400)]
Fix: sink.text.pretty: assign status at the end of pretty_consume
The compiler on SLES 12 reports:
pretty.c:200:2: warning: 'status' may be used uninitialized in this function [-Wmaybe-uninitialized]
return status;
^
We are indeed missing an assignment of status at the end, if everything
went well. In practice, status has the right value (_OK) from the last
call of handle_message. But if, for some reason,
bt_message_iterator_next returns OK with 0 messages, then it would stay
unset. So assigning it explicitly at the end doesn't hurt.
Change-Id: Ic3bf018388f006c919173f9e8942a8ab2384c0f1
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3427
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 14 Apr 2020 18:28:23 +0000 (14:28 -0400)]
sink.text.pretty: append error causes where applicable
Change-Id: I34a01f4647538ec09b26588335a708ff0e739fa8
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3407
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 14 Apr 2020 18:33:24 +0000 (14:33 -0400)]
sink.text.pretty: simplify error handling in pretty_consume
Replace the switch with a simple condition. On _END, it is not
necessary to put the message iterator, that will be done in
pretty_finalize.
Change-Id: Ia0bd20e0d119cae155c03cc5d7656a5c4619ebb8
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3406
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 14 Apr 2020 17:02:00 +0000 (13:02 -0400)]
sink.text.pretty: update logging macros
Change the logging macros to be more in sync with how it's done in other
component classes of the project
Add the `self_comp` and `log_level` fields to the pretty_component
structure, and change the BT_COMP_LOG_SELF_COMP and BT_LOG_OUTPUT_LEVEL
to assume there's always a pointer to such a structure named `pretty`.
Change-Id: I6292f3c9b6b7f238e335cfcc90259a1f0047313d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3405
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 14 Apr 2020 15:22:17 +0000 (11:22 -0400)]
Fix: sink.text.pretty: check that port is connected before creating message iterator
sink.text.pretty does not check if its input port is connected before
trying to create a message iterator on it. This can lead to a
precondition assertion failure. It can be reproduced with this Python
snippet.
import bt2
g = bt2.Graph()
g.add_component(bt2.find_plugin('text').sink_component_classes['pretty'], 'snk')
g.run()
The assertion failure we get is:
04-14 11:35:27.339
1231815 1231815 F LIB/MSG-ITER create_self_component_input_port_message_iterator@iterator.c:295 Babeltrace 2 library precondition not satisfied; error is:
04-14 11:35:27.339
1231815 1231815 F LIB/MSG-ITER create_self_component_input_port_message_iterator@iterator.c:295 Input port is not connected: port-addr=0x607000001d70, port-type=INPUT, port-name="in"
04-14 11:35:27.339
1231815 1231815 F LIB/MSG-ITER create_self_component_input_port_message_iterator@iterator.c:295 Aborting...
./tests/utils/../utils/utils.sh: line 283:
1231815 Aborted (core dumped) env "${env_args[@]}" "$@"
Add a check and return an error if that happens instead. A
corresponding test is also added.
Change-Id: Ibeed94cd6ece543817fe8a765a69cb52bbaaba76
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3403
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Jonathan Rajotte [Tue, 14 Apr 2020 20:28:59 +0000 (16:28 -0400)]
doc: bindings: python: lttng version referenced is out of date
Use the "latest" link instead.
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Change-Id: I229ebb3e2e4e9711f6022370d83194d110c937e5
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3409
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Francis Deslauriers [Mon, 17 Feb 2020 20:00:07 +0000 (15:00 -0500)]
Cleanup: src.ctf.lttng-live: clarify comment
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: If6841b7e1c06dacbb46f7b6419291d2057fc6c2c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3090
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 9 Apr 2020 20:44:07 +0000 (16:44 -0400)]
lib: add precondition checks that count of discarded events/packets is greater than 0
It does not make sense to send a discarded packet or discarded event
message with the count 0. That would mean that there is no discarded
event or packet, so the message must simply not be sent. If the number
of packets or events that were discarded is unknown, the count must not
be set, in which case it will stay "unavailable".
A precondition failure looks like:
04-12 00:17:25.171 680020 680020 F LIB/MSG-DISCARDED-ITEMS bt_message_discarded_packets_set_count@discarded-items.c:317 Babeltrace 2 library precondition not satisfied; error is:
04-12 00:17:25.171 680020 680020 F LIB/MSG-DISCARDED-ITEMS bt_message_discarded_packets_set_count@discarded-items.c:317 Discarded packet count is 0.
04-12 00:17:25.171 680020 680020 F LIB/MSG-DISCARDED-ITEMS bt_message_discarded_packets_set_count@discarded-items.c:317 Aborting...
The equivalent checks are added to the Python bindings, as well as
tests.
Change-Id: I3b56f2635df5d918ec35e9756b0a9658e1a1668d
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3388
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Sun, 12 Apr 2020 18:52:20 +0000 (14:52 -0400)]
bt2: check that port is connected when creating message iterator
Creating a message iterator for a non-connected input port hits a
precondition assertion. Add some checks in the Python bindings to raise
a more friendly ValueError in that case.
Change-Id: I323e49c7408f5df8e1702eb993933ffc251b6c63
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3396
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 9 Apr 2020 20:23:47 +0000 (16:23 -0400)]
lib, bt2: add precondition check for port name unicity
The documentation for the _add_input_port API functions state that there
must be no other input port with the same name. Ditto for output ports.
This patch adds some precondition checks for that. A failed assertion looks
like this:
04-09 16:29:23.968
2961462 2961462 F LIB/COMPONENT-SINK bt_self_component_sink_add_input_port@component-sink.c:132 Babeltrace 2 library precondition not satisfied; error is:
04-09 16:29:23.968
2961462 2961462 F LIB/COMPONENT-SINK bt_self_component_sink_add_input_port@component-sink.c:132 Input port name is not unique: name="bob", comp-addr=0x60c000001e40, comp-name="mon sink", comp-log-level=NONE, comp-class-type=SINK, comp-class-name="MySink", comp-class-partial-descr=""
04-09 16:29:23.968
2961462 2961462 F LIB/COMPONENT-SINK bt_self_component_sink_add_input_port@component-sink.c:132 Aborting...
Equivalent checks are added to the Python bindings, as well as tests.
Change-Id: I12f5a16b6b5efc46f2b50f27e338cc57b8487ff6
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3387
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 9 Apr 2020 21:33:55 +0000 (17:33 -0400)]
lib: add precond. check for begin <= end on pkt./ev. disc. msg. creation
Add a precondition check in:
- bt_message_discarded_events_create_with_default_clock_snapshots
- bt_message_discarded_packets_create_with_default_clock_snapshots
Verify that the beginning clock snapshot value is less-than or equal-to
the end clock snapshot.
A failure looks like this:
04-12 00:01:37.519 653088 653088 F LIB/MSG-DISCARDED-ITEMS bt_message_discarded_events_create_with_default_clock_snapshots@discarded-items.c:221 Babeltrace 2 library precondition not satisfied; error is:
04-12 00:01:37.519 653088 653088 F LIB/MSG-DISCARDED-ITEMS bt_message_discarded_events_create_with_default_clock_snapshots@discarded-items.c:221 Beginning default clock snapshot value is greater than end default clock snapshot value: cs-begin-val=20, cs-end-val=10, msg-iter-addr=0x611000001bc0, msg-iter-upstream-comp-name="ze source", msg-iter-upstream-comp-log-level=NONE, msg-iter-upstream-comp-class-type=SOURCE, msg-iter-upstream-comp-class-name="MySrc", msg-iter-upstream-comp-class-partial-descr=""
04-12 00:01:37.519 653088 653088 F LIB/MSG-DISCARDED-ITEMS bt_message_discarded_events_create_with_default_clock_snapshots@discarded-items.c:221 Aborting...
Change-Id: I1d4cc820d9daeff0fd3a80262c36609fe10a1958
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3389
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Sat, 11 Apr 2020 16:17:36 +0000 (12:17 -0400)]
Fix: bt2: read properties on _DiscardedEventsMessage
Reading the count and clock snapshot properties on a _DiscardedEventsMessage
does not work. For example, this:
msg = self._create_discarded_events_message(stream, count=10)
print(msg.count)
Results in:
File "test.py", line 10, in __init__
print(msg.count)
File "/home/simark/build/babeltrace/src/bindings/python/bt2/build/build_lib/bt2/message.py", line 208, in count
avail, count = self._get_count(self._ptr)
AttributeError: '_DiscardedEventsMessage' object has no attribute '_get_count'
The problem is simply that _DiscardedEventsMessage is missing inheriting
from _DiscardedEventsMessageConst.
Change-Id: Id40ea54bb26b4e4aec264d84bda52ed815090341
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3392
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Fri, 10 Apr 2020 20:05:25 +0000 (16:05 -0400)]
tests: add tests for discarded events/packets creation
Creation of these messages is a bit tested in AllMessagesTestCase, but
not everything, especially not the error cases.
To avoid code duplication as much as possible, I've added a
`run_in_message_iterator_next` helper, similar to the existing
`run_in_component_init`. This helper takes a callback to run in the
context of a source component's message iterator's __next__method.
Individual tests also need to customize the stream class creation, to
decide if the stream class supports discarded event/packet messages,
clock snapshots on those messages, etc. So it also receives a callback
executed in the source component's __init__ method, which must return a
stream class. This callback takes a trace class as a parameter, which
it will need to create the stream class, and a clock class. It is free
to use the clock class as the stream class' default_clock_class or not.
Doing this, I noticed that reading the count and clock snapshot
properties on a _DiscardedEventsMessage didn't work. This will be fixed
in a subsequent patch, in the mean time the corresponding assertions are
commented out.
Change-Id: I5025d06e6cb5b9d1bbd4372818b391cbc7b5bfa2
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3391
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 26 Mar 2020 20:33:13 +0000 (16:33 -0400)]
Add initial Python bindings documentation
This initial documentation contains a home page, an installation page,
and a few examples to understand how the `bt2` package works.
Still missing: how exactly the bindings wrap libbabeltrace2 (wraping
rules, exceptions, etc.).
Changes:
`README.adoc`:
Specify that you need Sphinx to build the Python bindings
documentation.
`configure.ac` and `m4/check_sphinx.m4`:
Add `--enable-python-bindings-doc` which requires
`--enable-python-bindings`.
This is because the Sphinx configuration file actually imports the
`bt2` package to get the version (and, eventually, for Sphinx's
autodoc to find docstrings within the `bt2` modules).
`doc/bindings/python/source`:
The actual documentation's contents and configuration.
`doc/bindings/python/ext/bt2sphinxurl.py`:
A Sphinx extension to add Babeltrace 2 manual page and other links
of which the URL includes the project's version.
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I4811336d567ff379cbe9e789099af8d6c7661a62
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3278
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Fri, 10 Apr 2020 20:31:32 +0000 (16:31 -0400)]
Fix: bt2: add precond. check, for stream class supporting discarded msgs with clock snapshot without clock class
We hit the following precondition failure from the Python bindings when
creating a stream class that supports discarded event messages with
clock snapshots, but does not have a default clock class. Same with
discarded packet messages.
04-10 16:40:32.280 59345 59345 F LIB/STREAM-CLASS bt_stream_class_set_supports_discarded_events@stream-class.c:480 Babeltrace 2 library precondition not satisfied; error is:
04-10 16:40:32.280 59345 59345 F LIB/STREAM-CLASS bt_stream_class_set_supports_discarded_events@stream-class.c:480 Stream class has no default clock class: addr=0x60f0000023e0, id=0, is-frozen=0, event-class-count=0, packet-context-fc-addr=(nil), event-common-context-fc-addr=(nil), assigns-auto-ec-id=1, assigns-auto-stream-id=1, supports-packets=0, packets-have-begin-default-cs=0, packets-have-end-default-cs=0, supports-discarded-events=0, discarded-events-have-default-cs=0, supports-discarded-packets=0, discarded-packets-have-default-cs=0, trace-class-addr=0x608000002b20, pcf-pool-size=0, pcf-pool-cap=0
04-10 16:40:32.280 59345 59345 F LIB/STREAM-CLASS bt_stream_class_set_supports_discarded_events@stream-class.c:480 Aborting...
Add some checks for that in _StreamClass._validate_create_params, and
some corresponding tests.
Change-Id: I5d79b8ecfc05acbb79b7b15d28ba2c5c34f00729
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3390
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 17 Mar 2020 17:19:37 +0000 (13:19 -0400)]
source.text.dmesg: use BT_COMP_LOGE_APPEND_CAUSE
Use BT_COMP_LOGE_APPEND_CAUSE where possible, when returning error
statuses. Some errors paths due to allocation failure now return MEMORY_ERROR,
rather than ERROR.
Change-Id: I32a15d64538a23406114ef661990928f6f9ed296
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3243
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Sat, 11 Apr 2020 17:16:54 +0000 (13:16 -0400)]
source.text.dmesg: replace switch to convert status with cast
Replace the switch currently used in create_port, to convert the status of
bt_self_component_source_add_output_port, with a simple cast, as per standard
procedure. Since create_port becomes trivial, remove it and inline the code in dmesg_init.
Change-Id: Iccdf0ba298c73616b7c86b14e5208de4519b77d8
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3395
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Sun, 15 Mar 2020 20:12:52 +0000 (16:12 -0400)]
configure: remove -Wno-format-nonliteral
This patch removes all the offending instances of -Wformat-nonliteral
and removes -Wno-format-nonliteral from the warning flags we enable.
In cases where we re-use the same format string multiple times, like:
const char *const msg = "Hello %d\n";
if (something) {
pass(msg, value);
} else {
fail(msg, value);
}
... my compiler (gcc (Arch Linux 9.2.1+
20200130-2) 9.2.1
20200130)
complains that the format string is not a literal, even though the `msg`
variable is const and assigned a literal. I've replaced these with a
macro.
In other places, we manually manipulate and craft format strings, to
I've just disabled the warning there.
The generated SWIG wrapper for the error appending functions cause some
warnings like this:
bt2/native_bt.c: In function ‘_wrap_current_thread_error_append_cause_from_component__varargs__’:
bt2/native_bt.c:7839:3: error: format not a string literal, argument types not checked [-Werror=format-nonliteral]
7839 | result = (bt_current_thread_error_append_cause_status)bt_current_thread_error_append_cause_from_component(arg1,(char const *)arg2,arg3,(char const *)arg4,ar
g5);
| ^~~~~~
Since we don't actually need these functions from the Python bindings,
I've made SWIG not generate a wrapper for them.
Change-Id: Ic6834dc44abce7be8e113e9cbf3f33a3f09809e2
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3233
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 12 Mar 2020 15:10:40 +0000 (11:10 -0400)]
sink.text.details: sprinkle BT_COMP_LOGE_APPEND_CAUSE liberally
Add some BT_COMP_LOGE_APPEND_CAUSE where we would return an error
without logging, or replace existing BT_COMP_LOGE with
BT_COMP_LOGE_APPEND_CAUSE.
Change-Id: I6eeaaa713fe9b4112df82b3c0fccb16a4f54f6c4
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3222
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Sat, 11 Apr 2020 17:08:54 +0000 (13:08 -0400)]
sink.text.details: replace switch to convert status with cast
Replace the switch currently used in details_consume, to convert the
status of bt_message_iterator_next, with a simple cast, as per standard
procedure.
Change-Id: Iea35bd26f4af983d7cca37fc01b2b2f903cc73da
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3394
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 24 Mar 2020 19:16:04 +0000 (15:16 -0400)]
flt-utils.muxer: use BT_COMP_LOGE_APPEND_CAUSE
Replace all BT_COMP_LOGE with BT_COMP_LOGE_APPEND_CAUSE.
Change-Id: I7436a0d37f3d3c193c400ed55ef41310ab2ec1f0
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3260
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Sat, 11 Apr 2020 16:52:45 +0000 (12:52 -0400)]
Fix: flt-utils.muxer: reference leak in muxer_msg_iter_add_upstream_msg_iter error path
Let's say we fail to allocate `muxer_upstream_msg_iter->msgs`, we will have
already gotten a reference on `self_msg_iter`, which we need to put. Calling
destroy_muxer_upstream_msg_iter ensures we do that.
Change-Id: I9b113d2e335d529599cb9197c39c8675915508e5
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3393
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 9 Apr 2020 19:32:13 +0000 (15:32 -0400)]
lib: add `size >= 1` pre-condition to bt_field_class_integer_set_field_value_range
An integer of 0 bits is not very useful.
Change-Id: I00a4114dc4a949a4876f810f603226a1c5936751
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3385
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 9 Apr 2020 18:27:39 +0000 (14:27 -0400)]
Fix: src.text.dmesg: add missing assignment of `status` on error path
The error path under `if (!*msg)`, originally at line 789, is missing
assigning an error status to the `status` variable, fix it.
Change-Id: I2b47c6ce7c6099a6db68c4da108d7c0886c7177e
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3384
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 9 Apr 2020 17:55:05 +0000 (13:55 -0400)]
Fix: sink.text.details: goto error when failing to add input port
If bt_self_component_sink_add_input_port fails, the current code does
not goto error. This patch fixes it. It also changes the switch, used
to convert from `add_port_status` to `status`, to a cast, as is the
practice throughout the project.
Change-Id: I82b2719316ad00ffd9d9c14b86b8890b98130669
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3383
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Tue, 10 Mar 2020 16:25:12 +0000 (12:25 -0400)]
Move to kernel style SPDX license identifiers
The SPDX identifier is a legally binding shorthand, which can be used
instead of the full boiler plate text.
See https://spdx.org/ids-how for details.
Change-Id: I7c25a3bc48ee328500a604cb276877d4cadfa997
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3227
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Mingli Yu [Thu, 12 Mar 2020 03:42:07 +0000 (11:42 +0800)]
Fix: src.ctf.fs: initialize the other_entry variable
Initialize the pointer other_entry to silence this warning:
| ../../../../../git/src/plugins/ctf/fs-src/fs.c: In function 'ds_index_insert_ds_index_entry_sorted':
| ../../../../../git/src/plugins/ctf/fs-src/fs.c:702:5: error: 'other_entry' may be used uninitialized in this function [-Werror=maybe-uninitialized]
| 702 | !ds_index_entries_equal(entry, other_entry)) {
This was encountered with gcc 9.2.0 at the -Og optimization level.
After inspection, it appears that this is a false positive, the
`other_entry` pointer can only be used after being initialized first.
Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
Change-Id: Icf63e605cf543c3eb29e5aadec18b22b137ee9da
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3353
CI-Build: Simon Marchi <simon.marchi@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Tue, 7 Apr 2020 00:22:16 +0000 (20:22 -0400)]
bt2: make `_EventConst` a mapping
The `_EventConst` class already implemented the __getitem__() method
to make it easy to access a payload, specific context, common context,
or packet context field (in this order) by name, for example:
print(event['next_prio'])
If two root fields contain fields which share the same name, one of them
has the priority and the other one is not accessible through this
interface.
This patch makes the `_EventConst` class a full mapping protocol,
inheriting `collections.abc.Mapping`. This patch implements the
__iter__() and __len__() methods so as to let `collections.abc.Mapping`
implement __contains__(), keys(), items(), values(), get(), __eq__(),
and __ne__(). Now you can do, for example:
if 'next_prio' in event:
print(event['next_prio'])
__iter__() keeps a set of yielded field names so as to avoid repeating
field names.
__len__() simply reuses __iter__().
`test_event.py` is updated to test the new features.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I2485e0df2373005fada0d0732c6269acbce5457c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3343
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Philippe Proulx [Tue, 7 Apr 2020 13:41:55 +0000 (09:41 -0400)]
Fix: bt2: _EventConst.__getitem__(): check if event has a packet
I'm also adding a test to check this. Without this patch and an invalid
key, __getitem__() throws `AttributeError` instead of the expected
`KeyError`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ie6258a2354ece8aee6c8530587c900ea08e45fe8
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3349
Tested-by: jenkins <jenkins@lttng.org>
Jérémie Galarneau [Wed, 1 Apr 2020 14:55:04 +0000 (10:55 -0400)]
bt2: honor build system compiler/linker preferences
This is an attempt to fix the dreaded "compiling the Python native
module with a custom compiler or compiler-specific flag" problem.
The problem may arise when building with a CC different than what the
Python interpreter was compiled with. It can manifests itself in two
different ways, as far as I know. But in both cases, it's due to us
overriding the compiler and compiler flags when invoking setup.py to
build the native modules, and how distutils invokes the compiler and
linker to build the native modules.
Scenario 1
----------
Things fail when trying to compile with a compiler other than what
Python has been compiled with, and using in `CFLAGS` a compiler flag
unknown to the compiler Python has been compiled with.
For example, on Ubuntu 18.04, we get this when building with CC=clang
(the -Wtautological-constant-out-of-range-compare is a clang-specific
warning flag currently specified in configure.ac):
x86_64-linux-gnu-gcc ... -Wtautological-constant-out-of-range-compare ... -o build/build_lib/bt2/_native_bt.cpython-38-x86_64-linux-gnu.so
x86_64-linux-gnu-gcc: error: unrecognized command line option ‘-Wtautological-constant-out-of-range-compare’
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
This is due to the fact that:
- The default link command used by distutils to link shared objects uses
its default compiler driver (gcc on Linux)
- It passes `CFLAGS` to the linker
Because of this, we end up passing a clang-specific warning flag to gcc,
which proceeds to error out.
To fix this, I have considered setting the LDSHARED variable to
override the command used for linking shared objects. If the compiler
driver used to drive the linking is the same as the compiler driver used
for compiling, it should understand all the passed flags.
However, it is not obvious to do this right, especially, considering the
various platforms. But most importantly, it is doesn't help with the
next scenario.
Scenario 2
----------
On Arch Linux (and presumably on Fedora too [1]), the flags passed by
distutils to the compiler contain `-fno-semantic-interposition`, which
is a gcc-specific flag. When building with CC=clang, we therefore get
this when compiling:
building 'bt2._native_bt' extension
clang ... -fno-semantic-interposition ... -c bt2/native_bt.c -o build/temp.linux-x86_64-3.8/bt2/native_bt.o
clang-9: error: unknown argument: '-fno-semantic-interposition'
clang errors out, because it gets passed a gcc-specific flag.
[1] https://fedoraproject.org/wiki/Changes/PythonNoSemanticInterpositionSpeedup
The fix
-------
Two important distutils configuration variables are at play in this
problem:
- LDSHARED: defines a command to link a build target
- CFLAGS: contains the compiler flags used to build the python
interpreter.
The configuration variables are changed on access by overriding
distutils' get_config_vars().
In the case of `LDSHARED`, distutils allows it to be specified as an
environment variable which would probably be cleaner (if it actually
works, I haven't tested). distutils seems to honor the environment
`CC` _sometimes_ (depending on whether or not it has performed the
`customize_compiler` step?)
The override always uses the environment `CC` and completely foregoes
the `LDSHARED` configuration variable if `LDFLAGS` are provided. If no
`LDFLAGS` are specified, the compiler is replaced in the LDSHARED
command.
Unfortunately, the CFLAGS environment variable is only appended to
the Python interpreter's build-time CFLAGS, which doesn't solve our
problem. get_cflags() completely overrides the CFLAGS configuration
variable to use babeltrace's build system-specified CFLAGS.
Drawbacks
---------
I can't think of a scenario where this doesn't work, but I'm afraid
this will break in non-trivial build environments.
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If3142ddb228758e63a986e735cb8f9d89dd39b67
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3286
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 16 Mar 2020 22:38:45 +0000 (18:38 -0400)]
configure: enable -Wsuggest-attribute=format
The -Wsuggest-attribute=format warning makes the compiler suggest places
where __attribute__((format(...))) would likely be useful. This patch
turns it on and adds such attributes everywhere my compiler (GCC 9)
suggested to add them.
In cases where we re-use the same format string multiple times, like:
const char *const msg = "Hello %d\n";
BT_LOGE(msg, some_value);
BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_MESSAGE_ITERATOR("modname", msg, some_value);
... my compiler (gcc (Arch Linux 9.2.1+
20200130-2) 9.2.1
20200130)
complains that the format string is not a literal, even though the `msg`
variable is const and assigned a literal. I've replaced these with a
macro.
Change-Id: I40dd2e70649ec2b651e0109097c217ca9557ad69
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3232
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 18 Feb 2020 18:14:22 +0000 (13:14 -0500)]
configure: simplify warning flags detection
We currently use the AX_COMPILER_FLAGS macro to detect the warning flags
that the current compiler supports. It works, but is quite invasive.
It unconditionally enables a bunch of warnings we don't want, which
forces us to disable them with many -Wno-foo switches.
Instead of using AX_COMPILER_FLAGS, we can use the slightly lower lever
macro AX_APPEND_COMPILE_FLAGS to achieve our goal of detecting which
warning flags are supported. This is what we ended up using in
lttng-tools (a completely unrelated project, but that has a suspiciously
high ratio of contributors in common with Babeltrace).
I looked in our git history to see which warning flags were mentioned in
commit messages. I have added the flags that did find actual problems
and are not enabled by default to the AX_APPEND_COMPILE_FLAGS invocation.
I have also added the flags that AX_COMPILER_FLAGS did provide, which we
didn't need to disable.
The --{enable,disable}-Werror flag is added using an explicit
AC_ARG_ENABLE. In lttng-tools, it was decided to _not_ have -Werror by
default, so I suggest we do the same in Babeltrace, for consistency
(although it saddens me very much). Developers who want to build with
-Werror will need to pass --enable-Werror.
Note that with this patch, we lose the following configure switch, that
is provided by AX_COMPILER_FLAGS:
--enable-compile-warnings=[no/yes/error]
Change-Id: If968f7385a7f5c48d27f402c76bc26241a8f505a
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3209
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Simon Marchi [Thu, 12 Mar 2020 15:09:48 +0000 (11:09 -0400)]
sink.text.details: remove LOG_WRONG_PARAM_TYPE
It is unused since we have added the more sophisticated parameter
validation utility.
Change-Id: I7ed57026903fd891f2118b6c6bd03841e07f5954
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3221
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Thu, 12 Mar 2020 17:33:09 +0000 (13:33 -0400)]
doc: bt_field_class...get_mapping_labels...(): clarify RV's validity
The label array which
bt_field_class_enumeration_unsigned_get_mapping_labels_for_value() and
bt_field_class_enumeration_signed_get_mapping_labels_for_value() return
remains valid as long as:
* The enumeration field class is not modified.
* You don't call the same function again with the same enumeration
field class.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I7b197ab5e176c77f4418d23b12e194c6477e5cf8
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3224
Philippe Proulx [Thu, 12 Mar 2020 17:24:00 +0000 (13:24 -0400)]
doc/api/libbabeltrace2/style.css: make font weight of `.intertd` normal
For some reason, `.intertd` paragraphs, which Doxygen creates when a
given table cell (used for parameter descriptions, amongst other things)
contains more than one paragraphs, are bold.
Here's an example to generate such paragraphs:
@param some_param
@parblock
Normal paragraph.
Bold paragraph.
Also bold.
@endparblock
I don't know the bold font weight's rationale here, but it does not look
pretty, so force the weight to be normal in `style.css`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ida6970a75f6cc1b4ac4f1fc873e86a3b453d09ac
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3223
Simon Marchi [Tue, 10 Mar 2020 16:09:20 +0000 (12:09 -0400)]
flt.utils.muxer: initialize variable to silence -Wmaybe-uninitialized warning
gcc 4.8 shows this warning:
CC muxer.lo
In file included from /home/smarchi/src/babeltrace/src/plugins/utils/muxer/muxer.c:26:0:
/home/smarchi/src/babeltrace/src/plugins/utils/muxer/muxer.c: In function ‘muxer_msg_iter_next’:
/home/smarchi/src/babeltrace/src/logging/comp-logging.h:145:3: error: ‘next_return_ts’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
(void) BT_CURRENT_THREAD_ERROR_APPEND_CAUSE_FROM_COMPONENT( \
^
/home/smarchi/src/babeltrace/src/plugins/utils/muxer/muxer.c:1042:10: note: ‘next_return_ts’ was declared here
int64_t next_return_ts;
^
I looked at the interaction between muxer_msg_iter_do_next_one and
muxer_msg_iter_youngest_upstream_msg_iter (which is the one that sets
next_return_ts), and I think the code is fine:
* muxer_msg_iter_youngest_upstream_msg_iter returns either OK, END, or
an error status code (< 0). It does not return AGAIN, because it
does not call the upstream iterators, it works with the data already
available to the muxer component.
* muxer_msg_iter_do_next_one, only uses next_return_ts when
muxer_msg_iter_youngest_upstream_msg_iter returns OK.
* When muxer_msg_iter_youngest_upstream_msg_iter returns OK, it always sets
*ts_ns.
I think that initializing the variable to suppress this warning doesn't
hurt, and I don't see any other modifications needed to the code.
Change-Id: If4e8f1fd381a6ec2da044cf4cb8ffc8de2b373d9
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3210
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Fri, 6 Mar 2020 20:05:57 +0000 (15:05 -0500)]
common: cast arguments to character classification functions to unsigned char
We get failures of this type on the cygwin CI machine:
15:28:20 common.c: In function `bt_common_string_is_printable`:
15:28:20 common.c:786:16: error: array subscript has type `char` [-Werror=char-subscripts]
15:28:20 786 | if (!isprint(*ch) && *ch != '\n' && *ch != '\r' &&
15:28:20 | ^~~
This error only pops up on some platforms that have isprint implemented
using a lookup table. This table is indexed using `*ch`, which is a
char. And because char is signed on some platforms, gcc warns that this
is dangerous: we could access the array with a negative index, which
would yield unexpected results.
This is on purpose in newlib (the libc used by cygwin, apparently), see
this comment:
https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;a=blob;f=newlib/libc/include/ctype.h;h=
a0009af17485acc3d70586a0051269a7a9c350d5;hb=HEAD#l78
The Linux man page for isprint also mentions it:
The standards require that the argument c for these functions is
either EOF or a value that is representable in the type unsigned
char. If the argument c is of type char, it must be cast to unsigned
char, as in the following example:
char c;
...
res = toupper((unsigned char) c);
This is necessary because char may be the equivalent of signed char,
in which case a byte where the top bit is set would be sign extended
when converting to int, yielding a value that is outside the range of
unsigned char.
Add casts to unsigned char to fix the various instances of this error.
Change-Id: Ice2305490997f595c6f5140a8be2abaa7fd1d8f6
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3194
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
CI-Build: Michael Jeanson <mjeanson@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 2 Mar 2020 19:18:30 +0000 (14:18 -0500)]
sink.text.pretty: remove error checks for bt_field_borrow_class_const results
bt_field_borrow_class_const can't fail, so these error checks are
unnecessary. Removing them reveals that some of these variables were in
fact unused, so remove them.
Change-Id: I57867e0eb01db3bd7c73dfedc9d1772cbfad02d5
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3155
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Jérémie Galarneau [Fri, 28 Feb 2020 23:54:55 +0000 (18:54 -0500)]
py-common: clean-up: unreachable error handling code
Both `bt_py_common_format_exception()` and `bt_py_common_format_tb()`
use the same error handling pattern of defining an `error` label and
free-ing `msg_buf` if it has been created before jumping there.
In both cases, the creation of `msg_buf` is the last operation that
can fail, which makes the check, and clean-up, unrechable.
From Coverity's report:
1408326 Logically dead code
The indicated dead code may have performed some action; that action
will never occur.
In bt_py_common_format_tb: Code can never be reached because of a
logical contradiction (CWE-561)
Reported-by: Coverity Scan
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I81b5a2db2cefe1fe08e25819bfa2d8e0fd78ee82
Reviewed-on: https://review.lttng.org/c/babeltrace/+/3154
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
This page took 0.058104 seconds and 4 git commands to generate.