Michael Jeanson [Fri, 28 Jun 2019 20:01:56 +0000 (16:01 -0400)]
fix: don't use realpath from GNU coreutils
Turns out 'realpath' is specific to GNU coretuils, we'll have to live
with uglier relative unresolved paths.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I7febbd12dd7f8d49c938f3fffc6db44c6dd89d6a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1573
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Mon, 17 Jun 2019 23:18:13 +0000 (19:18 -0400)]
lib: validate monotonicity of messages from upstream component
This patch adds two checks after having called an iterator's next
method, to verify the validity of what is returned.
Clock class compatibility
-------------------------
Check that the clock classes of new streams created through this
iterator are compatible with the clock classes of streams previously
created through the same iterator.
The first time a stream is created through an iterator, we save some
properties of that clock class (whether its origin is the Unix epoch,
and if it isn't, its uuid). When new streams appear, we compare those
properties to make sure the clock classes of the new streams are
compatible with those properties.
Clock snapshots increase
------------------------
Check that the clock snapshots of all messages (that have one) don't go
back in time.
For each incoming message, if it has a clock snapshot, we compare it
with the clock snapshot of the previous message and assert that it isn't
lower (the "previous message time" is initialized to INT64_MIN).
Some messages don't have a clock snapshot, for those we do nothing.
I am not considering the "infinity" value that stream activity end
messages can have. It would add a bit more complexity to validate them
propertly, because it's possible to have something like this:
Stream 1: ... EV(1) SAE(inf) SE
Stream 2: ... EV(2) EV(10) ...
As you can see, it is possible to have a finite value (10) on stream 2
after having received an SAE message at infinity on stream 1. We could,
validate that nothing with a finite clock snapshot comes on stream 1
specifically. It would however require some per-stream data, which adds
a bit of complexity. And since we plan on removing these messages
anyway, it doesn't seem to be worth the effort.
Change-Id: If18f475ed056fda77a539d700e6ad310111f6d6b
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1486
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 27 Jun 2019 19:56:28 +0000 (15:56 -0400)]
Fix: bt2: fix reference counting of messages returned by Python components
The refcount of messages returned by components implemented in Python
(in _UserMessageIterator._next_from_native) is not right.
When the C iterator method "next" puts bt_message pointers in the output
array, it gives its reference to the bt_messages to the array. If it
wishes to keep owning a copy of the message, it needs to acquire a new
reference.
For this reason, we currently make the Message Python object release its
reference to the bt_message in _UserMessageIterator.__next__ (otherwise
there would be a double free). Releasing the reference has the effect
of setting the _ptr property to None, without changing the refcount.
However, it's possible for the user to keep a reference to that Python
object and re-use it. This is a problem, since the Message Python
object now unexpectedly no longer wraps a valid bt_message. Trying to
return that message in the following call to __next__, for example, will
fail.
To fix this, this patch makes _next_from_native acquire a new reference
before returning the bt_message. If the user didn't keep a reference to
the Python object, the Python object will die and put the bt_message.
The message array will therefore be the sole owner of the message. If
the user did keep a reference to the Python object, then both the Python
object and the message array will now own a reference to the message.
Change-Id: I6f7c472fddeea35509ee669e11d913bec7091f40
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1559
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 27 Jun 2019 20:03:55 +0000 (16:03 -0400)]
lib: fix compilation for glib < 2.40
Code from commit "lib: add logic in auto-seek to recreate stream state"
uses the return value of function g_hash_table_insert to validate that
the inserted key did not previously exist in the hash table. This
feature was introduced in glib 2.40, before that the function returned
void.
To avoid breaking compatibility with glib < 2.40, we can do a lookup
before inserting to achieve the same result.
Change-Id: Ibd5f58fb6ab8f083a3152105db9e05522893132c
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1560
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Mon, 17 Jun 2019 20:48:02 +0000 (16:48 -0400)]
tests: Rework test suite
* Test script are not generated by autoconf anymore, instead the
parameters are passed trought a set of environment variable prefixed
with BT_TESTS_. This will enable the test suite to be used against
a system installed version of babeltrace with minimal configuration.
* Move all duplicated shell script code to 'utils.sh'.
* Add 'set -u' to common.sh to catch undefined variables in test
scripts. Variables that are expected to be undefined must be used as
'${var:-}'.
* All shell script is shellcheck tested.
* Removed unused test 'test_trace_ir'
* The python test runner now returns an error when no python test
scripts are found.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I15dcda1d147c8c72c6e4ee00052591eb6f9e30bd
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1429
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Thu, 27 Jun 2019 18:50:42 +0000 (14:50 -0400)]
port: Use sig_t instead of sighandler_t
The 'sighandler_t' is a GNU extension specific to Glibc, use the more
portable 'sig_t' to support macOs and others.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I0c6fd8792936c6559a8d8018b3b444559b6dc3b1
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1557
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Francis Deslauriers [Thu, 27 Jun 2019 23:38:59 +0000 (19:38 -0400)]
bt2: use `_extract_value()` on comparison
After further discussions, we realized that there was a better way to
address the issue that commit
7bb4180 is fixing.
The real issue was that we were unconditionally converting the `other`
object to the `complex` type even when neither objects were of the
`complex` type. This was causing problem because of the lost of
precision when storing very large integer value in a variable of
`complex` type.
The better solution is to convert both objects to the type of the wider
object, and that is what Python does automatically. To enable that, we
simply need to convert the `other` object to it's corresponding standard
numeric type [1]. This commit uses the existing `_extract_value()`
method to achieve that.
[1]: https://docs.python.org/3/library/stdtypes.html#numeric-types-int-float-complex
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: Ib658d1fdaf41a0ee592212a101fa4ad0ea952eb4
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1561
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Francis Deslauriers [Tue, 25 Jun 2019 21:44:32 +0000 (17:44 -0400)]
Fix: bt2: erroneous integer comparison of Field and Value
Issue
=====
The `{Unsigned, Signed}IntegerValue` class inherit its __eq__() method
from the `_NumericValue` class. This method converts the `other` object
to a `complex` number to make the comparison as generic as possible. The
issue is that the large complex number comparison is unreliable as it's
using float comparison[1]. The timestamps we are dealing with will often
be going beyond the limit of exact comparison possible with the IEEE 754
double-precision[2].
I encountered this issue while comparing a
`bt2.value.SignedIntegerValue` to a large Python Integer representing a
timestamp in nanosecond.
Here is a showcase of the issue reproduced without the `bt2` bindings:
In [1]: 42 == complex(42)
Out[1]: True
In [2]:
1561489497327275497 == complex(
1561489497327275497)
Out[2]: False
The same issue is reproducible with the `_{Unsigned,
Signed}IntegerField`.
Solution
========
Implement the __eq__() and __lt__() methods in the `_IntegralValue`
class and but still use `_NumericValue`'s methods if the `other` object
is not an instance of `numbers.Integral`.
Implement the __eq__() and __lt__() methods in the `_IntegralField`
class and but still use `_NumericField`'s methods if the `other` object
is not an instance of `numbers.Integral`.
Drawback
========
None.
Note
====
I added test cases to cover large integer comparison for both Integer Value and
integer Field classes.
[1]: https://stackoverflow.com/questions/
5595425/what-is-the-best-way-to-compare-floats-for-almost-equality-in-python
[2]: https://en.wikipedia.org/wiki/Double-precision_floating-point_format
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I8448bd42704ad1a2d215bece8534c839b9468f25
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1538
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Francis Deslauriers [Wed, 26 Jun 2019 15:07:53 +0000 (11:07 -0400)]
bt2: remove __le__() method already provided by @total_ordering
The `@total_ordering` decorator already provide all the rich comparison
methods because we implement the __lt__() and __eq__() methods. So there
is no need to implement any other rich comparison methods.
I chose __lt__() arbitrarily but it could have been __le__(), __gt__(),
or __ge__().
Documentation on `@total_ordering` [1]:
The class must define one of __lt__(), __le__(), __gt__(), or
__ge__(). In addition, the class should supply an __eq__() method.
[1]: https://docs.python.org/3/library/functools.html#functools.total_ordering
Signed-off-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Change-Id: I4c09ae725acadc59aa17d03063136ffc0dd854c2
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1544
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Thu, 27 Jun 2019 19:16:48 +0000 (15:16 -0400)]
fix: Use python-config 'ldflags' instead of 'libs'
This allows building the python plugin provider against a Python
installation that is not in the default system path.
The output of '--ldflags' is the same as '--libs' with the added linker
path to the python library.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: Idf0171bdc181a7d6d7593021dab957437772b2f5
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1558
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Mon, 17 Jun 2019 16:58:31 +0000 (12:58 -0400)]
lib: add logic in auto-seek to recreate stream state
The trimmer component uses the seek_ns_from_origin iterator method to
seek its input iterator to the beginning of its trim window. After,
that, it's possible for the first message after the seek time to be, for
example, an event message. If so, it needs to re-create some messages
(possibly stream begin, stream activity begin and packet begin) to put
the stream in the right state. Otherwise, it would emit messages in an
invalid sequence.
A problem arises however with the following sequence:
1. The trim window starts at timestamp 50
2. Trimmer gets event message with timestamp 100 on stream 0. The
trimmer will send the following messages: stream 0 beginning, stream
0 activity beginning at timestamp 50, packet beginning message on
stream 0 at timestamp 50, event message on stream 0 at timestamp 100.
3. Trimmer gets event message with timestamp 120 on stream 1. The
trimmer will send the following messages: stream 1 beginning, stream
1 activity beginning at timestamp 50, packet beginning message on
stream 0 at timestamp 50, event message on stream 1 at timestamp 120.
The "stream 1 activity beginning at timestamp 50" message is invalid,
because it is earlier than the previously sent message "event message on
stream 0 at timestamp 100".
To avoid this going back in time, we need to emit the made up messages
first thing after seeking, instead of waiting for an event message (or
some other message requiring a stream and/or packet to be open) to emit
them. The trimmer can't do that itself, because it doesn't know the
state of the streams right after seeking (it doesn't know what messages
would have come before the seek point).
Therefore, the patch moves the functionality of emitting the missing
messages to the iterator code. When seeking (and using the go to
beginning then fast forward strategy, AKA auto-seek), the iterator code
goes through (and drops) all messages before the seek point. It can
therefore maintain a table of the state of all the streams. Once it has
reached the seek time, it can generate the messages required to bring
the streams in the state they are supposed to be, before transmitting
the messages coming from upstream.
Moving this functionality to the iterator also has the advantage that if
other components use the seek_ns_from_origin method of the iterator,
they'll receive a valid flow of messages. They won't need to do the
same complex work that the trimmer was doing to try re-create messages.
Since the trimmer can now assume a valid message flow from its input
iterator, it doesn't need anymore to generate its own stream beginning,
stream activity beginning and packet beginning messages before
transmitting a message that is supposed to come after one of these.
This means that the ensure_stream_state_is_inited and
ensure_cur_packet_exists functions can be removed.
Change-Id: I548f6ceafa5ad315c65be48077898595882e4511
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1450
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Thu, 27 Jun 2019 18:02:58 +0000 (14:02 -0400)]
Append "library" to pkg-config packages names
It looks like most pkg-config package names have "library" in them, so
have it also in our files to normalize them.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5fd111e842edf9b55daaec034763d79878db8680
Michael Jeanson [Mon, 17 Jun 2019 20:34:03 +0000 (16:34 -0400)]
Provide proper pkg-config .pc files
* Update name and description for Babeltrace2
* Remove unneeded dependency on popt
* Replace static uuid dependency with configured values
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: Ie249ff75316fe6cf86f70a04b4ef80776f689f1e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1482
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Mon, 17 Jun 2019 17:01:03 +0000 (13:01 -0400)]
iterator: save original next callback in iterator struct
When we restore the iterator's next method (after we overrode it with
post_auto_seek_next), we inspect the upstream component class to find
out what was the original method. It seems simpler to save and restore
the function pointer. This is what this patch does.
No user-visible changes intended.
Change-Id: If5eb7df692d2aa745f7f19e22c8046afb5b8d1d2
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1485
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Mon, 17 Jun 2019 16:56:24 +0000 (12:56 -0400)]
iterator: move auto-seek data in its own struct, add comments
Further patches will add more fields related to this feature, so it
seems useful to group them under the same (anonymous) struct.
No functional changes intended.
Change-Id: I6ed922801cf5bd9001d388d7d8b050a6c8d01790
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1484
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Fri, 21 Jun 2019 14:57:25 +0000 (10:57 -0400)]
fix: Add missing include on macOs
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: Iad3dccd64a838890f0f79039df0e008ff8e9f34a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1529
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Jonathan Rajotte [Wed, 19 Jun 2019 17:27:34 +0000 (13:27 -0400)]
tests: remove carriage return when using diff
Carriage return are a problem when running tests on cross execution
platform such as Windows. This only happen when diffing text generated
on Windows and text from a linux file.
The removal of mid-sentence '\r' is not a problem here since we do not
expect bt to generate this kind of string.
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Change-Id: I107c5487bf3aa0f5cbd1fdfd1e948ee93f830d2f
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1521
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Jonathan Rajotte [Wed, 19 Jun 2019 17:27:21 +0000 (13:27 -0400)]
libs: Do not rely on nftw for detecting the validity of plugin path
test_plugin.c:test_create_all_from_dir with non existing path fails on
cygwin. An error is expected but bt_plugin_find_all_from_dir returns
success.
The cygwin implementation of nftw is not posix compliant regarding
returning ENOENT on non-existent path. [1] [2]
The cygwin implementation of nftw does not return ENOENT on non-existent
path. Instead, the non-existent path is passed through the fn function
(nftw_append_all_from_dir) and the flag is set to FTW_NS.
Since we are "discovering" plugins, nftw_append_all_from_dir does not
error out on FTW_NS and simply skip the file.
The proposed solution is to stat() the provided path and validate that
no errors occur before using nftw().
[1] https://pubs.opengroup.org/onlinepubs/
9699919799/functions/nftw.html
[2] https://cygwin.com/ml/cygwin/2019-06/msg00185.html
Change-Id: Ia7c88dbab5b16affbdb8ce1dbe261b03635727cc
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1520
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Jonathan Rajotte [Wed, 26 Jun 2019 18:48:06 +0000 (14:48 -0400)]
Fix: return status instead of ret
Commit
9736d991ea189f29b908e9cf18103c1452c59e05 modifies the error
handling of bt_plugin_create_append_all_from_dir but fails to return the
actual status.
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Change-Id: I147a212e1556d81a4fe9cbef839cfe65b345195c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1545
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Thu, 27 Jun 2019 02:46:08 +0000 (22:46 -0400)]
lib: rename `BABELTRACE_NO_DLCLOSE` -> `LIBBABELTRACE2_NO_DLCLOSE`
I feel like this environment variable is more about the library than
about the project as a whole, like `LIBBABELTRACE2_INIT_LOG_LEVEL`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I19e5229fc64d54f2a4ff23ef36647ba78917b619
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1554
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Thu, 27 Jun 2019 02:01:55 +0000 (22:01 -0400)]
bt2: fix formatting of C code in native_bt_component_class.i
Change-Id: Ia1bdd2916178a2f5512e00c9ef493e642d9d25cc
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1553
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Thu, 27 Jun 2019 00:04:49 +0000 (20:04 -0400)]
cli: add missing line in --plugin-path help
When doing "babeltrace2 convert --help", a line is missing from the
--plugin-path option help. This patch adds it, copied from the help of
the other commands.
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Change-Id: I823385cae29afa2bfa0650d4c5dd0142dd4f9cea
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1549
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Wed, 26 Jun 2019 13:49:57 +0000 (09:49 -0400)]
lib: reverse order of bt_self_component_port_input_message_iterator::auto_seek_msgs queue
The messages in this queue are in reverse chronological order, meaning
we push the incoming messages to the head and later consume them from
the tail.
It would be more expected (although functionally equivalent) to do the
opposite, so that the messages are in chronological order when iterating
the list in forward.
So this patch just swaps the push/pop calls around.
Change-Id: Id4892e12e064376e919647c0d8bb838156ef0fc5
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1543
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 25 Jun 2019 17:51:29 +0000 (13:51 -0400)]
bt2: rename native_bt_notifier.i to native_bt_message_iterator.i
We don't use the term notifier anymore, message iterator is more
contemporary.
Change-Id: Iadda98ac83a2dfddcb207d3beb99ddaa65181ad3
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1536
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Tue, 25 Jun 2019 17:22:00 +0000 (13:22 -0400)]
bt2: remove unused double* typemap
This typemap seems to be unused, remove it.
Change-Id: I06f1692f6cff224ecb164058edf87025b0d7cd35
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1535
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Fri, 21 Jun 2019 22:37:24 +0000 (18:37 -0400)]
bt2: replace copy of headers for SWIG with includes
The current approach of writing SWIG interface files is to copy paste
declarations. This can be tedious and error prone, when the API is
modified.
This patch changes the interface files to include the Babeltrace header
files containing those declarations instead.
The main difficulty with this is that we can't rely on parameter names
for typemap matching anymore. In most cases, using just the type is
fine (e.g. the only reason a function takes a
bt_self_component_port_input ** is as an output parameter).
In the case of "user data" it's a bit more tricky, since the type is
"void *". In these cases (in native_bt_component.i and
native_bt_port.i), I made it so we clear the typemap at the end of the
file, so hopefully it doesn't apply to an unexpected function in another
file.
In native_bt_field_class.i, the typemap for
(bt_field_class_enumeration_mapping_label_array *label_array, uint64_t *count)
doesn't work if I leave out the parameter names, for some reason, so I
have put the parameter names used in the headers.
Change-Id: I2e98c60c2dcb7c8ea243b4cf36e0fcfaf53e9cde
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1531
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
CI-Build: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Wed, 26 Jun 2019 19:02:28 +0000 (15:02 -0400)]
Rename `BT_LOG_LEVEL` -> `BT_MINIMAL_LOG_LEVEL`
This makes it very clear.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If3baf92799e2d0384d9f217c66414424155bac88
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1547
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Wed, 26 Jun 2019 18:39:42 +0000 (14:39 -0400)]
Do not require logging support for BT_[CTF_]ASSERT_PRE()
This patch makes the BT_ASSERT_PRE(), BT_ASSERT_PRE_MSG(),
BT_CTF_ASSERT_PRE(), and BT_CTF_ASSERT_PRE_MSG() not use BT_LIB_LOGF()
and BT_LOGF() directly to not rely on the active log level to print the
messages.
This makes it possible to configure the build with
`BABELTRACE_DEV_MODE=1` and `BABELTRACE_MINIMAL_LOG_LEVEL=NONE` and
still get the precondition failure messages. This removes some code
in `configure.ac` and `src/lib/logging.c` which ensured that the log
level could not be NONE when developer mode is enabled.
The macros now use _bt_log_write_d() (which does not check the active
log level) and bt_lib_log() (which uses _bt_log_write_d() without
checking the active log level) instead of BT_LOGF() and BT_LIB_LOGF().
The `assert-pre.h` header still require that you include
`"lib/logging.h"` or `"logging/log.h"` before because this is where the
logging tag and logging functions are found.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If98a1c074d211cf257742d55960b379bbe9c6cf0
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1546
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Tue, 25 Jun 2019 16:50:17 +0000 (12:50 -0400)]
lib: bt_plugin_find*(): return status code; add "fail on load error" param
The bt_plugin_find*() functions, before this patch, return a plugin
object or a plugin set object. When such a function returns `NULL`, you
have no way to tell if it's because there was an error or if no plugins
were found.
Also, when a plugin cannot be loaded for various reasons, sometimes it's
considered an error and sometimes not, so there's no way to be strict.
This patch makes:
* The bt_plugin_find*() functions return a status code, and return the
plugin or plugin set object by output parameter.
The available, new status codes are:
`BT_PLUGIN_STATUS_OK`:
Everything is fine.
`BT_PLUGIN_STATUS_NOT_FOUND`:
No plugins were found.
`BT_PLUGIN_STATUS_ERROR`:
There was a general error while trying to find plugins.
`BT_PLUGIN_STATUS_LOADING_ERROR`:
A plugin could not be loaded successfully while trying to find
plugins.
`BT_PLUGIN_STATUS_NOMEM`:
There was an allocation error while trying to find plugins.
The bt_plugin_find_all_from_file() and bt_plugin_find_all_from_dir()
never return an empty plugin set: they return
`BT_PLUGIN_STATUS_NOT_FOUND` instead.
* The bt_plugin_find*() functions accept a new `fail_on_load_error`
parameter which controls whether a plugin loading error is ignored
(can eventually lead to `BT_PLUGIN_STATUS_NOT_FOUND` being returned)
or triggers a loading error condition
(`BT_PLUGIN_STATUS_LOADING_ERROR`).
When `fail_on_load_error` is true, the functions log errors with
the WARN level. When it's false, they log errors with the INFO level
before ignoring them.
A file is known to be a Babeltrace plugin if:
* Its extension is `.so` (or `.dll` on Windows), g_module_open()
succeeds for that file, and the required
`__bt_get_begin_section_plugin_descriptors` symbol can be found.
* Its name starts with `bt_` and ends with `.py`.
Any file that does not meet the criteria above does not trigger a
loading error: the file is simply skipped.
A plugin loading error (`BT_PLUGIN_STATUS_LOADING_ERROR`) is caused by:
For a shared object (`.so` or `.dll`) plugin, one of:
* Missing `__bt_get_end_section_plugin_descriptors` symbol.
* Missing `__bt_get_begin_section_plugin_descriptor_attributes` and
`__bt_get_end_section_plugin_descriptor_attributes` symbols.
* Missing `__bt_get_begin_section_component_class_descriptors` and
`__bt_get_end_section_component_class_descriptors` symbols.
* Missing
`__bt_get_begin_section_component_class_descriptor_attributes` and
`__bt_get_end_section_component_class_descriptor_attributes`
symbols.
* Unknown plugin descriptor attribute.
* Unknown component class descriptor attribute.
* Unknown component class type in component class descriptors.
* Incompatible or missing ABI version.
* Failing plugin's user initialization function.
For a built-in plugin:
* Failing plugin's user initialization function.
For a Python plugin, one of:
* Failure to load the Python plugin module.
* Unexpected/malformed plugin info object (missing attributes, wrong
types, etc.).
With this patch, you must pass a valid file or directory path to
bt_plugin_find_all_from_file() and bt_plugin_find_all_from_dir(). When
you don't, the functions fail with `BT_PLUGIN_STATUS_ERROR`. This is not
considered a loading error (not `BT_PLUGIN_STATUS_LOADING_ERROR`), as
the user can control whether or not this error occurs by making sure
the path exists, and it does not occur while loading a plugin.
As of this patch, the CLI ignores loading errors (like before), that is,
passes `BT_FALSE` as the `fail_on_load_error` parameter. A strict mode
could be added, controlled by a command-line option.
In `native_bt_plugin.i`, wrappers are created to set the output
parameter to `NULL` if the status is not `BT_PLUGIN_STATUS_OK`. This is
similar to what was already done to wrap bt_plugin_get_version().
If you pass `fail_on_load_error=True` to bt2.find_plugins() or
bt2.find_plugin(), then this function can raise `bt2.Error` if there's
a loading error.
Tests are adapted to check the returned status code.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I88049c07163055503e9551940973390ebedcfae4
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1537
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Tue, 25 Jun 2019 17:19:02 +0000 (13:19 -0400)]
lib: rename parameter of bt_self_component_filter_add_{in,out}put_port
This makes is consistent with corresponding functions for sources and
sinks. It will help for a future patch that will re-work the SWIG
bindings to have the same name everywhere (to apply the same typemap to
all of these).
Change-Id: Icdeb32711e56d4b6a619a493a8b64817f3084bd5
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1534
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Wed, 19 Jun 2019 20:22:54 +0000 (16:22 -0400)]
lib: remove "accept port" concept
This patch removes the concept of a component needing to accept a port
connection before a connection is made. Since the component connections
are supposed to be transparent (a component behavior shouldn't change
based on which component is on the other side), there is no point in
letting a component refuse a connection. Refusing a port connection
based on the component class, for example, could lead to tightly coupled
components, which we want to avoid.
Change-Id: Ia2d0e09caaee069e9be22b8089ef5ccbae392bb2
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1522
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Thu, 20 Jun 2019 19:54:48 +0000 (15:54 -0400)]
Fix: `ctf` plugin: do not have an `mdec` variable where not strictly needed
Issue
=====
The `metadata-info` query needs to call
ctf_metadata_decoder_packetized_file_stream_to_buf() with a custom log
level and no self component (`NULL`). Eventually, this reaches
decode_packet() which is in the `decoder.c` file and thus uses
`mdec->self_comp` to find its self component in the BT_COMP_LOG*()
macros. But in this case, `mdec` is `NULL`, so there's an invalid
memory access.
Solution
========
Instead of using BT_COMP_LOG_CUR_LVL() everywhere in this function, and
because decode_packet() and
ctf_metadata_decoder_packetized_file_stream_to_buf_with_mdec() do not
strictly need `mdec` except for logging its address at some places, move
the functions to the new `decoder-packetized-file-stream-to-buf.c` file
and make them not accept an `mdec` argument.
This new file's logging uses the local `log_level` and `self_comp`
variables, so the logging statement are not modified.
Known drawbacks
===============
None.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I55874790b2b873ff1718a774e57011300e57518d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1526
Tested-by: jenkins <jenkins@lttng.org>
Michael Jeanson [Mon, 17 Jun 2019 20:44:24 +0000 (16:44 -0400)]
tests: Add missing copyright headers
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: If5de85403824e4a77c4a975c3354318070afb0eb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1495
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Thu, 13 Jun 2019 20:18:40 +0000 (16:18 -0400)]
tests: Move data files to a common directory
* Reduce errors when adding new data files, a single EXTRA_DIST
directive in tests/Makefile.am will cover all data files
* Standardise variables used to refer to the data files path and add
them to 'utils/common.sh'.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I5fd06e5280e5864593aca8e964eeda9121b8a48e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1428
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Fri, 21 Jun 2019 15:29:19 +0000 (11:29 -0400)]
bt2: add missing parameter to _UserComponentType._query
While running the Python test suite, I saw this unexpected stack trace:
test_query_not_implemented (test_component_class.UserComponentClassTestCase) ...
06-21 11:22:56.091 24065 24065 E BT2-PY bt_py3_component_class_query@native_bt_wrap.c:4442 Failed to call Python class's _query_from_native() method: py-cls-addr=0x6190001ce898
06-21 11:22:56.092 24065 24065 E BT2-PY bt2_py_loge_exception@native_bt_wrap.c:3838 Traceback (most recent call last):
File "/home/smarchi/build/babeltrace/src/bindings/python/bt2/build/build_lib/bt2/component.py", line 539, in _query_from_native
results = cls._query(query_exec, obj, params, log_level)
TypeError: _query() takes 4 positional arguments but 5 were given
This is because method _UserComponentType._query is missing the
log_level argument that was added in a recent commit. The reason the
test still passes is that it expects bt2.Error to be raised (coming from
the raise NotImplementedError). The failure to call _query also ends up
raising a bt2.Error. So it succeeds to fail, but it doesn't fail the
right way, and the test fails to properly catch that failure.
Change-Id: If13bfdecc2876610fe8568a12043be60762d1596
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1530
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Simon Marchi [Fri, 21 Jun 2019 14:30:11 +0000 (10:30 -0400)]
test utils: add failfast option to our testrunner.py
When iterating on a test, I like using the -f|--failfast option of the
unittest module. This patch adds the option to pass it to our
testrunner.
Here's one way to use it (with the babeltrace build dir as the current working
directory):
tests/utils/test_python_bt2_env python3 /home/smarchi/src/babeltrace/tests/utils/python/testrunner.py /home/smarchi/src/babeltrace/tests/bindings/python/bt2/ -f
Note that this is not absolutely essential, it is also possible to call
unittest directly:
tests/utils/test_python_bt2_env python3 -m unittest discover -s /home/smarchi/src/babeltrace/tests/bindings/python/bt2/ -f
However, I prefer using the same runner as what the testsuite uses.
To facilitate the handling of optional arguments, I made the script use
argparse.
Change-Id: Ia4c082dc0952cc8649491b2410ab2d99f1477c1b
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1528
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Mon, 17 Jun 2019 16:46:29 +0000 (12:46 -0400)]
fix: move static functions inside ifdef
Move static functions inside ifdef where they are used so we don't get
unused functions warnings on MINGW.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: Ie35fcdc7b0f7bf41ed53ed06b9dfd50042510207
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1477
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Philippe Proulx [Thu, 20 Jun 2019 19:50:20 +0000 (15:50 -0400)]
Fix: bt_config_convert_from_args(): set default log level at the end too
Issue
=====
There are code paths which make bt_config_convert_from_args() return a
configuration while not having set the default log level.
For example, with `-o ctf-metadata`, the function calls
bt_config_print_ctf_metadata_create() to create such a configuration,
and then goes to the `end` label).
Solution
========
Make sure it is set to the CLI's default log level value when reaching
the end of the function.
Known drawbacks
===============
None.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I2ee21a754aeaea65fd6d4fbfcae5bd2f07fcba7c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1525
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Thu, 20 Jun 2019 18:23:39 +0000 (14:23 -0400)]
Rename VERBOSE log level to TRACE
Some people reported that they have a hard time guessing whether the
VERBOSE log level is more or less verbose than the DEBUG log level.
The existing logging frameworks I looked at (Apache Log4j 2, SLF4J,
`java.util.logging`, syslog, Python, Ruby, Boost.Test, ASP.NET Core, to
name a few popular ones) do not have the VERBOSE level; they almost
always have the DEBUG level, and sometimes the TRACE level.
To conform with the common practice, let's use TRACE instead of VERBOSE.
It is my wish that DEBUG vs. TRACE will speak to more developers than
DEBUG vs. VERBOSE.
This means that BT_LOGV() and its variants become BT_LOGT(). Also,
the log level environment variables and the CLI's `--log-level` parameter
accept `T` and `TRACE` instead of `V` and `VERBOSE`. In the log output,
the messages contain `T` instead of `V`:
06-20 14:31:23.356 3612 3612 T PLUGIN/CTF/BFCR
read_unsigned_bitfield@bfcr.c:483 [N/A] Read unsigned bit array:
cur=32, size=8, bo=1, val=33
`CONTRIBUTING.adoc` is updated to document the TRACE level instead of
the VERBOSE level.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I20460c4569f8b755440511c6621a68a1ef6424fc
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1524
CI-Build: Simon Marchi <simon.marchi@efficios.com>
CI-Build: Jonathan Rajotte Julien <jonathan.rajotte-julien@efficios.com>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Simon Marchi [Mon, 17 Jun 2019 16:00:21 +0000 (12:00 -0400)]
bt2: Rename _set_default_clock_snapshot_ptr callback to _set_default_clock_snapshot
I don't think it should have the _ptr suffix, as it doesn't take a SWIG
pointer object, but a uint64_t.
Change-Id: I5a6915e61cd0b482fe04a1ba62babbc3f3bc63bb
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1475
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Jonathan Rajotte [Wed, 19 Jun 2019 17:28:14 +0000 (13:28 -0400)]
Fix: Unmap before truncating
The mmap/mman compat layer for mingw uses the CreateFileMapping
and UnmapViewOfFile thus implicitly imposes an order for truncation and
ummapping [1].
For truncation calls, the underlying windows API call is SetEndOfFile.
This function requires that the file be unmapped before being called [1].
[1]
If CreateFileMapping is called to create a file mapping object for
hFile, UnmapViewOfFile must be called first to unmap all views and
call CloseHandle to close the file mapping object before you can call
SetEndOfFile.
[1] https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setendoffile#remarks
Change-Id: Id4713ca3af612baa24e1fa4a749384eab452598a
Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1519
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Reviewed-by: Michael Jeanson <mjeanson@efficios.com>
Michael Jeanson [Mon, 17 Jun 2019 16:54:48 +0000 (12:54 -0400)]
fix: Add missing stdint include on Windows
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I3e1369e282360401a6e0c0516828068ea15de780
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1478
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Jonathan Rajotte Julien <jonathan.rajotte-julien@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Michael Jeanson [Mon, 17 Jun 2019 16:10:34 +0000 (12:10 -0400)]
fix: test_trimmer on macOs and Solaris
The 'wc' tool on BSD based system adds leading spaces to it's output,
which breaks the quoted compare. Use bash parameter expansion to trim all
spaces from the 'num_events' variable.
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Change-Id: I15aef8c6987e40bcb018f32c7c094eabbc3d83c3
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1476
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Reviewed-by: Philippe Proulx <eeppeliteloop@gmail.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Fri, 14 Jun 2019 21:24:49 +0000 (17:24 -0400)]
lib: remove BT_LIB_LOG*() macro usage comment
This is explained in `CONTRIBUTING.adoc` now.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I76ed90889f4648311735b0c66389c82b2a1cf31b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1447
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 18:08:28 +0000 (14:08 -0400)]
Update `CONTRIBUTING.adoc`
Changes:
* Change to Asciidoctor format. This is what GitHub uses, so this guide
is correctly converted on GitHub.
* Update reference count section's terminology and function names.
* Update logging section:
* Reorganize sections, making guides explicit.
* Header paths.
* More details about the available log levels.
* Library-specific logging statement macros (more or less copied from
`src/lib/logging.h`).
* Component-specific logging statement macros.
* Have clear guides on how to instrument generic, library, and
component class C source and header file
* More details about which log level to choose.
* More details about which logging tag to choose.
Removing the `CONTRIBUTING.html` global Makefile target as we cannot
use Asciidoc to build `CONTRIBUTING.adoc` anymore.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I98effa1fb087274c453014d95115d471b5b115ad
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1446
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Wed, 19 Jun 2019 07:11:36 +0000 (03:11 -0400)]
lib: add comment about why `bt_lib_log_level` is exported
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ic3dd3ff9cb6f39ac369a55c06ef9a752d60d7fc7
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1512
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Wed, 19 Jun 2019 07:03:38 +0000 (03:03 -0400)]
lib: use `LIBBABELTRACE2_INIT_LOG_LEVEL` env. var. to initialize log level
Use the `LIBBABELTRACE2_INIT_LOG_LEVEL` environment variable instead of
`BABELTRACE_LOGGING_GLOBAL_LEVEL` to make it very clear that it's about
the library, and not related to the individual component log levels, for
example.
`INIT` is in the name to indicate that it's only the initial log level;
the library user can still change it at run time with
bt_logging_set_global_level(), while the other log level environment
variables, `BABELTRACE_PLUGIN_CTF_METADATA_LOG_LEVEL` and
`BABELTRACE_PYTHON_BT2_LOG_LEVEL`, are used to set the definitive log
levels of those modules.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ibf580bed6c30d88b4fbe3aed20f38cc969bc9295
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1511
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Wed, 19 Jun 2019 06:38:56 +0000 (02:38 -0400)]
src.ctf.fs: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Iee65b871881b4719d429b6343e3a7e437bac732c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1510
Philippe Proulx [Wed, 19 Jun 2019 06:14:39 +0000 (02:14 -0400)]
src.ctf.fs: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I75064d71438939a351748671534efcdf83059192
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1509
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Wed, 19 Jun 2019 05:42:10 +0000 (01:42 -0400)]
src.ctf.lttng-live: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I9fe4f0ca7e6c061e90a3c46019e9e0913f737842
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1508
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Tue, 18 Jun 2019 19:20:23 +0000 (15:20 -0400)]
sink.ctf.fs: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I1b337c6fb7c38def67cd5418c96df2df6faa020e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1502
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Tue, 18 Jun 2019 18:58:17 +0000 (14:58 -0400)]
sink.text.details: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If44884543ec8e79ef4f940955033c991d1112ecb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1501
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Tue, 18 Jun 2019 18:48:54 +0000 (14:48 -0400)]
sink.text.details: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If24cf10be949c4e637b4677b9780c00a58e14df2
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1500
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Tue, 18 Jun 2019 18:38:53 +0000 (14:38 -0400)]
`ctf` plugin: metadata: use BT_COMP_LOG*() instead of BT_LOG*()
Because we need to pass around the log level and the self component
pointer at several places within the files of this directory, this patch
adds a new internal `struct meta_log_config` which contains both and can
be passed as a single parameter and contained as a single member. It is
not meant to be known by anything calling the functions from files
outside this directory.
The generated parser and lexer can't use the BT_COMP_LOG*() macros
because they lack contextual data to access the self component pointer,
so they are left as is.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ifa95256e7931416b890e8da0bb7c2552f396a8d2
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1499
Philippe Proulx [Tue, 18 Jun 2019 17:50:28 +0000 (13:50 -0400)]
`ctf` plugin: `bt_msg_iter`: use BT_COMP_LOG*() instead of BT_LOG*()
As of this patch, the users of `bt_msg_iter` set the new self component
parameter to `NULL` as this work is reserved for a following patch.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I98328d43e0f67d1c4b1cf5493fa9c9cd02a32393
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1498
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Tue, 18 Jun 2019 17:35:19 +0000 (13:35 -0400)]
`ctf` plugin: `bt_bfcr`: use BT_COMP_LOG*() instead of BT_LOG*()
As of this patch, the only user of `bt_bfcr` is `bt_msg_iter`, which
sets the new self component parameter to `NULL` because it's not
available at this point (work reserved for a following patch).
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Idcdbc21f0d6ab3062e4c9350228456bdfdeb23cf
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1497
Philippe Proulx [Tue, 18 Jun 2019 17:24:33 +0000 (13:24 -0400)]
sink.ctf.fs: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5381ab04b9f2e3611c5f08006896a30e63451635
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1496
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Tue, 18 Jun 2019 05:22:38 +0000 (01:22 -0400)]
src.ctf.lttng-live: honor component's initial log level and query LL
Except for `viewer-connection.c` which is pretty consistent in having a
named "viewer connection" instance in each function, the other files
deal with too many objects/concepts to have a systematic expression to
identify the log level, so they use local `log_level` variables.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I102408375d4d3d2df21c756b6581c642ece77ff1
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1494
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Tue, 18 Jun 2019 04:01:25 +0000 (00:01 -0400)]
lib/object.h: log conditionally to `BT_OBJECT_DONT_LOG` undefined
There are a few places within the project, but outside the library, that
for historic reasons use the library's internal `bt_object` API to have
reference counting. The `bt_object` API belongs to the library for the
moment and should not be included as such.
There's an issue when you need logging in your module and the functions
which log within `object.h` cannot make sense of the
`BT_LOG_OUTPUT_LEVEL` expression. To avoid this and save short-term
development time, make them not log if `BT_OBJECT_DONT_LOG` is defined.
Then, outside the library, you can do something like:
#define BT_LOG_OUTPUT_LEVEL my_log_level
#define BT_LOG_TAG MY-TAG
#include "logging/log.h"
#define BT_OBJECT_DONT_LOG
#include "lib/object.h"
Another solution would be to include `lib/logging.h` before
`logging/log.h`, but that's not always easy.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If3037b67e5c4f87f57db96528d0a9516c8f9d6ea
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1493
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 23:28:23 +0000 (19:28 -0400)]
Remove unused `src/plugins/ctf/print.h`
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I989c98d9273f69362fd9f4d7390a91323e780886
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1492
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 23:27:16 +0000 (19:27 -0400)]
Remove unused `src/plugins/ctf/common/utils`
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia66dfc005c8091187c3883727bf7f68582a201da
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1491
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 23:20:08 +0000 (19:20 -0400)]
`ctf` plugin: metadata: use local log level
As of this patch, the users of the common metadata functions and objects
set the new log level parameters to their own (global) log level.
The goal is to eventually have a per-component log level for the `ctf`
plugin's component classes.
Unfortunately, `YYFPRINTF` and `YY_FATAL_ERROR` are pretty limited in
terms of available context. I'm leaving the
`BABELTRACE_PLUGIN_CTF_METADATA_LOG_LEVEL` environment variable to set
the logging level of the parser and lexer modules.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I34651e6d0c14b5acc9b4198681c2aea4c003dc7a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1490
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 22:13:54 +0000 (18:13 -0400)]
`ctf` plugin: `bt_msg_iter`: use object's log level
As of this patch, the users of `bt_msg_iter` set the new log level
parameter to their own (global) log level.
The goal is to eventually have a per-component log level for the `ctf`
plugin's component classes.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I279d22831c5857dc10622e6cabacf64c32fa5ed4
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1488
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 22:00:09 +0000 (18:00 -0400)]
`ctf` plugin: `bt_bfcr`: use object's log level
As of this patch, the only user of `bt_bfcr` is `bt_msg_iter`, which
sets the new log level parameter to its own (global) log level.
The goal is to eventually have a per-component log level for the `ctf`
plugin's component classes.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ie77969d587c03c7d0257c19bb151ee22707b9842
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1487
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 17:19:57 +0000 (13:19 -0400)]
utils.sink.counter: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ic963197053b374df6b891c8b6af1050255c626d9
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1481
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 17:18:11 +0000 (13:18 -0400)]
flt.lttng-utils.debug-info: use BT_COMP_LOG*() instead of BT_LOG*()
Note that the API of `bin-info.h` is tested in
`tests/plugins/flt.lttng-utils.debug-info/test_bin_info.c`, and since
the BT_COMP_LOG*() macros can call bt_component_get_name(), which is
defined in the Babeltrace library, `test_bin_info` needs to be linked
with the Babeltrace library now.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ibb29ece3936478f0e82f28d7f889a067d771a703
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1480
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Mon, 17 Jun 2019 05:45:14 +0000 (01:45 -0400)]
flt.lttng-utils.debug-info: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I49d4f5ecbdcc546c511e2469581db4f0e785a54a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1479
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 17:02:55 +0000 (13:02 -0400)]
lib: rename `lib-logging.h` to `logging.h`
Now we include "lib/logging.h" instead of "lib/lib-logging.h" to get
internal library logging support. The old file name was redundant.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I996b58c4b8c4914207a9f7e0b8ff6146ad65f5cb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1473
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 16:58:38 +0000 (12:58 -0400)]
Logging: define `BT_LOG*_SUPPORTED` when logging is supported
Rely on those new `BT_LOG_SUPPORTED`, `BT_LIB_LOG_SUPPORTED`,
`BT_COMP_LOG_SUPPORTED`, definitions instead of the header include
guards to know whether or not logging is supported at a given point.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I4d076e30b528882d036f7cfc367b5dbb39401dda
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1472
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 15:32:09 +0000 (11:32 -0400)]
flt.utils.muxer: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I57e8c7980ad50ae687cfa545c5f434d4027b18e3
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1471
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 15:23:27 +0000 (11:23 -0400)]
flt.utils.trimmer: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ib4280e02ef7520fdca0dc4718ae36d5e34ae56ca
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1470
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 15:18:39 +0000 (11:18 -0400)]
src.text.dmesg: use BT_COMP_LOG*() instead of BT_LOG*()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I38ff470120dbc9c303bd0fb23e1b552b99e07fc0
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1469
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 15:04:54 +0000 (11:04 -0400)]
Logging: add `src/plugins/comp-logging.h` (BT_COMP_LOG*())
This new header is intended to be included by the different component
class files so that their logging statements can automatically include
the component's name. The BT_COMP_LOG*() macros prepend a prefix similar
to this to the logging message:
[mein-sink]
where `mein-sink` is a component's name.
Having the component name within each logging message of a given
component class adds valuable context and can help resolve issues
faster.
I did not include the plugin name and the component class's type and
name within the prefix because we already have them thanks to the
logging tag, for example `PLUGIN/SRC.CTF.FS`. This would be redundant,
make the logging message longer, and make `comp-logging.h` more complex.
The BT_COMP_LOG*() macros rely on the `BT_COMP_LOG_SELF_COMP`
definition. This is an expression which is, in the logging statement
context, the `bt_self_component *` address. Because we have the self
component there, we are free to prepend more contextual information to
the logging message in the future, should we need it.
Typically, when a component class source file defines
`BT_LOG_OUTPUT_LEVEL` to `(my_comp->log_level)`, where `my_comp` points
to the component's private structure, it will also define
`BT_COMP_LOG_SELF_COMP` to `(my_comp->self_comp)`.
If `BT_COMP_LOG_SELF_COMP` evaluates to `NULL`, the macros use the
prefix
[N/A]
This could be the case when instrumenting code that is shared for both
graph and non-graph contexts, for example the metadata and stream
decoders of the `ctf` plugin which can also be used within a query
operation.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I62c63ed78d234922f556631726fb7bb852924f0a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1468
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 06:39:50 +0000 (02:39 -0400)]
flt.utils.trimmer: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I785a46dad409a9d1ab75426ce49059169e47c74e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1467
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 06:31:40 +0000 (02:31 -0400)]
flt.utils.muxer: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ie0a6c76fa2c462bcd352081e98aa14411bfd13d8
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1466
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 06:29:58 +0000 (02:29 -0400)]
Move bt_{self_component,message_iterator}_status_string() to `common.h`
Now `muxer.c` does not include internal library headers.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I33a9cf2db3df6a8d06d385f352280d90a922c4d9
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1465
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 05:59:47 +0000 (01:59 -0400)]
sink.utils.counter: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ib5bc755a8ff3db0a869b448f83dd9a888ee7df9b
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1464
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 02:41:01 +0000 (22:41 -0400)]
src.text.dmesg: honor component's initial log level
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ibf940cce2980389241ee6f4790c4c651280918a5
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1463
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 04:44:52 +0000 (00:44 -0400)]
tests: bt2: add query log level tests
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I725d3b7d64b4a820da1f3762c3217af9a88a0ca3
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1462
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 04:42:10 +0000 (00:42 -0400)]
lib: pass log level to bt_query_executor_query()
This new parameter indicates the log level to use during the query
execution.
The project's component classes are changed to receive this log level,
but they do not use it. This work is reserved for a future patch.
The CLI passes its default log level (main `--log-level` option) to
bt_query_executor_query().
Python bindings are adapted accordingly.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I929d545a1df2f4d6d083f6c536f6fcf26aa972bd
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1461
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 03:59:04 +0000 (23:59 -0400)]
Logging: pass dynamic log level to common functions and subsystems
This patch makes the project's common functions and subsystems get a
dynamic log level instead of using a global one set from an environment
variable. The goal is to achieve per-component log levels, so the common
functions and subsystems must receive, eventually, the component's
specific log level.
"Naked" functions (without a context object of some sort) simply get
their log level from a new parameter. In that case `BT_LOG_OUTPUT_LEVEL`
is simply defined to `log_level`, so a local `log_level` variable must
exist when using logging statements. Subsystems, such as an FD cache or
a CTF serializer, get their log level from a new parameter in their
initialization function and then use it for their other operations.
It was somehow hard to do this for `src/common` alone without also doing
it for the rest so I'm doing all of them at once here.
For those subsystems, the local `logging.c` and `logging.h` disappear.
`tests/plugins/flt.lttng-utils.debug-info/test_bin_info.c` needs to pass
a log level to the FD cache subsystem; I used the WARN level instead of
setting the log level from an environment variable for this test alone.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I35979a8fe4c74afe5921c3b6651015cd7ee2760a
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1460
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 03:29:46 +0000 (23:29 -0400)]
src/logging/log.h: add BT_LOG_WRITE_CUR_LVL(), BT_LOG_WRITE_ERRNO_CUR_LVL()
BT_LOG_WRITE_CUR_LVL() is like BT_LOG_WRITE(), but it compares the
given log level to a current log level parameter instead of
`_BT_LOG_OUTPUT_LEVEL`.
BT_LOG_WRITE_ERRNO_CUR_LVL() is the same thing, but for
BT_LOG_WRITE_ERRNO().
The goal of this is to be able to control which variable contains the
current log level at the call site to achieve per-component log levels.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I670664a7cb465954c2f0f8b3551ea49fd1465e32
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1459
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 02:52:27 +0000 (22:52 -0400)]
cli: add component-specific `--log-level` option (run/convert commands)
This new option makes it possible to specify a log level for a specific
component instance. The main program's `--log-level` option becomes the
default log level which the specific `--log-level` options override.
For example:
babeltrace2 -c src.mein.source --log-level=I \
-c sink.ctf.fs --log-level=D
makes the log level of the source be INFO and the log level of the
sink be DEBUG. The log level of the other components (implicit muxer),
of the CLI, and of the library is the default WARN.
babeltrace2 --log-level=E -c src.mein.source --log-level=I \
-c sink.ctf.fs
makes the log level of the source be INFO and the log level of the sink,
of the other components (implicit muxer), of the CLI, and of the library
be ERROR.
The CLI still sets the known log level environment variables until
subsequent patches make each component honor its initial log level, that
is, until each component uses the log level for its logging statements
as returned by bt_component_get_logging_level().
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I8a3b05b7147fdb0149ecff670c542c9a229beddb
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1458
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 01:52:15 +0000 (21:52 -0400)]
sink.text.pretty: remove logging (not used)
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5449d5a3aa89466764bea8ba7523c580ac695e29
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1457
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 01:48:50 +0000 (21:48 -0400)]
test_graph.py: add bt2.Graph.add_component() logging level parameter tests
GraphTestCase.test_add_component_logging_level() is pretty much the same
test as GenericComponentTestCase.test_logging_level(), but the former's
purpose is to test the bt2.Graph.add_component() part of this, while the
latter tests the component's public `logging_level` property.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I9c82e8a7ab6a733810eabfee5ccef66cd619a610
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1456
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 01:44:11 +0000 (21:44 -0400)]
test_component.py: add `logging_level` property tests
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ibc7dbbbb3d497efe8b8c237488fd0733c094f242
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1455
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 01:16:07 +0000 (21:16 -0400)]
lib: set component's initial log level when adding it to the graph
This patch changes the bt_graph_add_*_component*() functions so that
they accept a log level parameter. This is now considered the
component's initial log level, so that we can achieve per-component log
levels.
The component initialization method types are not changed: because the
log level is part of a component's state, a component initialization
method can retrieve its own, current log level with the new
bt_component_get_logging_level() function. When you call
bt_graph_add_*_component*(), the function creates an initial component
object, sets its initial log level, and then calls its initialization
method.
Eventually, we can add a new, optional "logging level changed" component
method to notify it that its log level changed (caused by a call to
bt_component_set_logging_level(), for example).
The project's components do not honor their initial log level within the
scope of this patch: this is postponed to another patch. In other words,
they still use shared object constructors and environment variables to
set their log level at the component class level.
The CLI passes the configured log level (`--log-level`, `-v`, or `-d`
options) when it calls the bt_graph_add_*_component() functions. As of
this patch, it also still sets the known log level environment
variables.
Python bindings are adjusted accordingly. Their tests are not changed
because the log level parameter is optional (defaults to
`bt2.LoggingLevel.NONE`) and it's the last one of
bt2.Graph.add_component(). The constructor of `bt2.ComponentSpec` also
accepts a new, optional log level parameter to configure the component
specifier as such. You can access the log level of a component with the
new `logging_level` property.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: If258335f46ffabb587dd777b5109fc66d8a59f54
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1454
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 01:14:06 +0000 (21:14 -0400)]
Add internal bt_common_logging_level_string()
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I6fd26a0657d93efc8a30d6055d755c5e2b852f2e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1453
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 01:09:51 +0000 (21:09 -0400)]
cli: use log level integer instead of letter in configuration
This patch makes `struct bt_config` have an integer log level (to be set
to one of the `BT_LOG_*` values) instead of a letter. The
bt_log_get_letter_from_level() and bt_log_get_level_from_letter() can be
used to translate from/to a log level letter/integer, so we use that.
This is just cleaner and makes more sense than carrying a letter in the
configuration which is just one encoding of a log level value.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I5cbc3f2cb9ac868bc99e9458468a09c58e716884
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1452
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Sat, 15 Jun 2019 01:06:03 +0000 (21:06 -0400)]
src/logging/log.h: add utility functions for log level to/from string
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I389b5da1a574523a986d2884126b8f862765d914
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1451
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 21:29:56 +0000 (17:29 -0400)]
Logging: standardize logging tags
Use `/` to show the subsystem to source file hierarchy, and use typical
component class identifier, but in uppercase (for example,
`SRC.CTF.FS`).
See the changes in `CONTRIBUTING.adoc` for more details.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I94aaf431e6a93e607496267c54419b012564daaf
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1449
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Tested-by: jenkins <jenkins@lttng.org>
Philippe Proulx [Fri, 14 Jun 2019 21:15:27 +0000 (17:15 -0400)]
configure.ac: change default minimal log level from VERBOSE to DEBUG
The goal here is that Babeltrace users have enough logging by default
without impacting the performance too much. From what I measured once
this patch is applied, the performance is very similar to an INFO build.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I20346f0f3eecf725e730a3e5add94804637c7193
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1445
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 21:13:59 +0000 (17:13 -0400)]
sink.text.pretty: remove message iterator inactivity message logging
This is not the role of this component class. A detailed component
class, `sink.text.details`, shows all the messages.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ic01b766a81fd622fc768d71f70aec4b4a136c3d0
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1444
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 21:12:36 +0000 (17:12 -0400)]
lib: plugin.h: force header user to include "lib/logging.h"
This pattern is found in other headers where, instead of including the
logging header for the user, we ask her to set up the logging and then
include the header.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I922b09f63eff41b9c3ba30df7ace0b8b30b5b5b2
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1443
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 21:11:40 +0000 (17:11 -0400)]
Logging: check `BT_DEBUG_MODE` instead of `NDEBUG`
This project does not rely on `NDEBUG`.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I35b282711f373998ea8361b343e9abf32fb6390c
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1442
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 21:10:26 +0000 (17:10 -0400)]
lib: `component-class-sink-colander.c`: remove useless `void *` cast
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Iddd16093dbdd9236151d948f09afe084c5685a6f
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1441
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 21:08:08 +0000 (17:08 -0400)]
Rename: <some/internal-header.h> -> "some/internal-header.h"
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Icad3fb88de3c5c2e6658c44dc00ece97cb1096b8
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1440
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 20:58:49 +0000 (16:58 -0400)]
Standardize log levels used by logging statements across the project
Let's use this approach now:
INFO level:
Any useful information which a non-developer user would possibly
understand.
Anything logged with this level must _not_ happen repetitively on
the fast path, that is, nothing related to each message, for
example. This level is used for sporadic and one-shot events.
* CLI or component configuration report.
* Successful plugin, component, or message iterator initialization.
* In the library: anything related to plugins, graphs, component
classes, components, message iterators, connections, and ports
which is not on the fast path.
* Successful connection to or disconnection from another system.
* An _optional_ subsystem cannot be loaded.
* An _optional_ field/datum cannot be found.
DEBUG level:
Something that only Babeltrace developers would be interested into,
which can occur on the fast path, but not more often than once per
message.
* Object construction and destruction.
* Object recycling (except fields).
* Object copying (except fields and values).
* Object freezing (whatever the type, as freezing only occurs in
developer mode).
* Object cancellation.
* Calling user methods and logging the result.
* Setting object properties (except fields and values).
VERBOSE level:
Low-level debugging context information (anything that does not fit
the other log levels). More appropriate for tracing in general.
* Reference count change.
* Fast path, low level state machine's state change.
* Get or set an object's property.
* Object comparison's intermediate results.
This will also be written in `CONTRIBUTING.adoc` by another patch.
The goal here is to make the DEBUG level the default minimal, build-time
log level, so that Babeltrace users have enough logging by default
without impacting the performance too much. From what I measured once
this patch is applied, the performance is very similar to an INFO build.
Many DEBUG logging statements are upgraded to the INFO level because
they only occur once, or very rarely, and consist of interesting
information for someone who does not have deep knowledge of the
Babeltrace source code.
Many VERBOSE logging statements are upgraded to the DEBUG level so that,
by default, we have more information in the log file of someone who
needs support. Those statements are executed seldom enough (at most once
per message) to be promoted as such.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Icdd1ec8f1f54396eea5588968d85e446030f282d
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1439
Tested-by: jenkins <jenkins@lttng.org>
Reviewed-by: Francis Deslauriers <francis.deslauriers@efficios.com>
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Philippe Proulx [Mon, 17 Jun 2019 20:48:53 +0000 (16:48 -0400)]
bt2: message_iterator.py: packet beginning/end messages have a single CS
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: Ia650a2e33483a999216aaf15dccecc5196bb4876
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1483
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
Philippe Proulx [Fri, 14 Jun 2019 02:22:26 +0000 (22:22 -0400)]
bt2: stream activity messages: create with unknown/infinite default CS
This patch makes it possible to create stream activity beginning and end
messages with unknown or infinite default clock snapshots. It was
already possible to create them with known default clock snapshots, that
is, with a value.
With this patch, you pass either `self._unknown_clock_snapshot` or
`self._infinite_clock_snapshot`, when implementing a
`bt2._UserMessageIterator`, as the default clock snapshot when you call
self._create_stream_activity_beginning_message() or
self._create_stream_activity_end_message(). They are instances of
internal types which are only used for this. The creation methods use
`_unknown_clock_snapshot` by default. This is similar to how
bt_message_stream_activity_beginning_create() and
bt_message_stream_activity_end_create() create messages with unknown
default clock snapshots.
`test_message.py` tests the new feature.
Also in this patch: `_BaseClockSnapshot` does not inherit
`object._UniqueObject` anymore so that `_UnknownClockSnapshot` and
`_InfiniteClockSnapshot` do not either. This is so that the default
clock snapshot properties of the stream activity beginning/end messages
can return instances of those types without having actual native
pointers, because there are none.
Signed-off-by: Philippe Proulx <eeppeliteloop@gmail.com>
Change-Id: I56d5cd9fffb77d505f61522073aaf80ccd58eb8e
Reviewed-on: https://review.lttng.org/c/babeltrace/+/1430
Reviewed-by: Simon Marchi <simon.marchi@efficios.com>
This page took 0.051538 seconds and 4 git commands to generate.