]> git.lttng.org Git - lttng-tools.git/log
lttng-tools.git
6 weeks agoClean-up: lttng-crash replace `exit()` with `return`
Kienan Stewart [Thu, 28 Nov 2024 20:30:53 +0000 (15:30 -0500)] 
Clean-up: lttng-crash replace `exit()` with `return`

Use `return` to avoid running into issues in the future when using
`lttng::scope_exit` objects to perform clean-up.

Change-Id: I11d9585a2e3fb5c5453220a07c29f166016d46b9
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoClean-up: sessiond: Replace `exit()` with `return`
Kienan Stewart [Thu, 28 Nov 2024 20:25:28 +0000 (15:25 -0500)] 
Clean-up: sessiond: Replace `exit()` with `return`

Use `return` to avoid running into issues in the future when using
`lttng::scope_exit` objects to perform clean-up.

Change-Id: Id4e4250c7f34355b953702ff8353300acca98ac8
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Use serial runner
Kienan Stewart [Thu, 7 Nov 2024 17:20:58 +0000 (12:20 -0500)] 
Tests: Use serial runner

Observed issue
==============

Running `make check -jN` with N greater than 1 will fail a number of
different checks.

Cause
=====

The majority of the tests aren't designed to work in
isolation (e.g. using `LTTNG_HOME` and `LTTNG_RUNDIR`), and some tests
that exercise global system resources (e.g. kernel modules) will never
work reliably in parallel.

Solution
========

Create a serial test runner that can execute all the tests that
require global resources while the other tests that are defined as
'safe to parallelize' can be run concurrently.

Known drawbacks
===============

None.

Change-Id: I0b87d2cd5e870ee7f9241ec78390ed96a01efb38
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests/Docs: Update recommendations on waiting on applications
Kienan Stewart [Thu, 14 Nov 2024 21:14:08 +0000 (16:14 -0500)] 
Tests/Docs: Update recommendations on waiting on applications

Change-Id: I0d79924b45f3cfa032348f2c90ffb8f80aa2b42c
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Track PIDs of started lttng-sessiond instances
Kienan Stewart [Thu, 14 Nov 2024 22:38:46 +0000 (17:38 -0500)] 
Tests: Track PIDs of started lttng-sessiond instances

Change-Id: I2f5538a7e94da77a6792974b0a5fa37bc5412009
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoClean-up: Tests: Remove duplicate lttng-sessiond start
Kienan Stewart [Wed, 4 Dec 2024 14:56:45 +0000 (09:56 -0500)] 
Clean-up: Tests: Remove duplicate lttng-sessiond start

Change-Id: I3ec9fa964133b90a0480f852b8b8cbae5d05b8e2
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Do not use `lttng_pgrep` when testing working directory
Kienan Stewart [Thu, 14 Nov 2024 16:47:15 +0000 (11:47 -0500)] 
Tests: Do not use `lttng_pgrep` when testing working directory

This allows the tests to avoid modifying other lttng-relayds that may
be running on the system (e.g., during parallel testing).

Change-Id: I3736d96f54f3da2b887d88526f60056a020528a2
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Track PIDs of started lttng-relayd instances
Kienan Stewart [Thu, 14 Nov 2024 21:08:40 +0000 (16:08 -0500)] 
Tests: Track PIDs of started lttng-relayd instances

Change-Id: I88af6660c59175b2bec992cd45a6800b51166450
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoClean-up: Tests: Provide default cwd when testing relayd working dir
Kienan Stewart [Thu, 28 Nov 2024 18:41:06 +0000 (13:41 -0500)] 
Clean-up: Tests: Provide default cwd when testing relayd working dir

In `tap.sh`, `is()` ends up aborting the test script if it is passed
an empty (null) value. When, for example, lttng-relayd fails to start,
the `cwd` will be empty as `readlink` will fail.

E.g. Output when a test fails and limits the runs:

```
...
ok 4 - lttng-relayd already started
  ---
    duration_ms: 12.914679
  ...

not ok 5 - Found lttng-relayd
  ---
    duration_ms: 49.119194
  ...

./tests/regression/tools/working-directory//../../..//utils/tap/tap.sh: line 288: 1: parameter null or not set
```

Change-Id: I54ac5c23a6d2604d261e8240679a827a12a57a1a
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Wait for specific PIDs of background applications
Kienan Stewart [Thu, 14 Nov 2024 19:28:06 +0000 (14:28 -0500)] 
Tests: Wait for specific PIDs of background applications

When running lttng-relayd or any other SUT from utils.sh in a fashion
that doesn't take it out of the test's process tree (e.g. when started
without '-d' or '-b'), `wait` will hang on those processes are well.

Change-Id: I82e0365d5165088980c0fce8e451fa0557ee201a
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agolttng-relayd: Add `--sig-parent` parameter
Kienan Stewart [Fri, 15 Nov 2024 15:55:39 +0000 (10:55 -0500)] 
lttng-relayd: Add `--sig-parent` parameter

Change-Id: I3a456f43de7ba2e557c1ca1c98466421e78e2f2e
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agolttng-relayd: Add `--pid-file` parameter
Kienan Stewart [Tue, 12 Nov 2024 20:23:06 +0000 (15:23 -0500)] 
lttng-relayd: Add `--pid-file` parameter

Intended to be used a mechanism to get the PID of the process when
starting with `-b` or `-d`.

`lttng-sessiond` writes to a well-known path inside `$LTTNG_HOME`
instead.

The exit for the lttng-relayd `main()` function is changed from
`exit()` to `return`. When using `exit()` or `std::exit()`, the
end-of-scope objects (e.g. from `lttng::make_scope_exit()` do not
fire.

Change-Id: I1ce6fd316356ac251cb3a0c0039c565f1ca1210f
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoerror: Add `PWARN_FMT` and `PERROR_FMT` macros
Kienan Stewart [Wed, 11 Dec 2024 15:53:59 +0000 (10:53 -0500)] 
error: Add `PWARN_FMT` and `PERROR_FMT` macros

Change-Id: Ib46fbed81c429f54793c9787a537950faa5552e0
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agocommon: Add arm() function to scope_exit objects
Kienan Stewart [Wed, 11 Dec 2024 15:53:23 +0000 (10:53 -0500)] 
common: Add arm() function to scope_exit objects

Change-Id: Ib8bc147f0fb7f884de4005af9bb372362af41850
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Start sessiond in python test environments with `--no-kernel`
Kienan Stewart [Thu, 7 Nov 2024 13:44:36 +0000 (08:44 -0500)] 
Tests: Start sessiond in python test environments with `--no-kernel`

Observed issue
==============

One of the goals of the lttngtest Environment is to be able to produce
separate test environments for each run in order to eventually run
some tests in parallel.

Solution
========

If `lttng-sessiond` is run as root, by default it will attempt to load
the lttng-modules kernel modules.

The session daemon is now started with `--no-kernel` to disable the
kernel domain and prevent that instance from loading the kernel
modules. This behaviour can be changed for specific tests that
exercise kernel tracing.

Known drawbacks
===============

The `--no-kernel` start is less representative of the default usage of
the session daemon.

Change-Id: Iacb85d0a33d6981bd038d57bf629d61117f9344d
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Use dynamically allocated ports for relayd
Kienan Stewart [Tue, 29 Oct 2024 18:33:05 +0000 (18:33 +0000)] 
Tests: Use dynamically allocated ports for relayd

Change-Id: I671885ef178e31abd8ffe7ca34a528da43f8044b
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoTests: Check python version before using signal.strsignal
Kienan Stewart [Thu, 7 Nov 2024 13:38:13 +0000 (08:38 -0500)] 
Tests: Check python version before using signal.strsignal

Observed issue
==============

When running CI tests against sles12sp5 (with python 3.4) the clean-up
of a stalled test produced the following output:

```
Traceback (most recent call last):
  File "./tools/live/test_early_inactive_app.py", line 111, in <module>
    log=tap.diagnostic, with_relayd=True, with_sessiond=True
  File "/usr/lib64/python3.4/contextlib.py", line 59, in __enter__
    return next(self.gen)
  File "/home/jenkins/workspace/dev_review_lttng-tools_master_slesbuild/babeltrace_version/stable-2.0/build/std/conf/agents/liburcu_version/master/platform/sles12sp5-amd64/src/lttng-tools/tests/utils/lttngtest/environment.py", line 1192, in test_environment
    with_sessiond, log, with_relayd, extra_env_vars, skip_temporary_lttng_home
  File "/home/jenkins/workspace/dev_review_lttng-tools_master_slesbuild/babeltrace_version/stable-2.0/build/std/conf/agents/liburcu_version/master/platform/sles12sp5-amd64/src/lttng-tools/tests/utils/lttngtest/environment.py", line 677, in __init__
    self._launch_lttng_relayd() if with_relayd else None
  File "/home/jenkins/workspace/dev_review_lttng-tools_master_slesbuild/babeltrace_version/stable-2.0/build/std/conf/agents/liburcu_version/master/platform/sles12sp5-amd64/src/lttng-tools/tests/utils/lttngtest/environment.py", line 933, in _launch_lttng_relayd
    time.sleep(0.1)
  File "/home/jenkins/workspace/dev_review_lttng-tools_master_slesbuild/babeltrace_version/stable-2.0/build/std/conf/agents/liburcu_version/master/platform/sles12sp5-amd64/src/lttng-tools/tests/utils/lttngtest/environment.py", line 1044, in _handle_termination_signal
    signal_name=signal.strsignal(signal_number)
AttributeError: 'module' object has no attribute 'strsignal'
```

Cause
=====

`signal.strsignal` is introduced in Python 3.8[1].

Solution
========

Check the system version and fall back to using `str(signal_number)`
which will give the numeric signal (e.g. signal.SIGKILL -> 9).

Known drawbacks
===============

None.

References
==========
[1]: https://docs.python.org/3/library/signal.html#signal.strsignal

Change-Id: I04d0560225f8332364d2da2ecd77be2802569cc9
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agolttng-relayd: Write control, data, and live ports to rundir
Kienan Stewart [Fri, 25 Oct 2024 20:58:46 +0000 (20:58 +0000)] 
lttng-relayd: Write control, data, and live ports to rundir

Change-Id: I7ff61e5dc6612de80641ac36fa98abdce3da97b4
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agolttng-relayd: Add option to delegate port choice to OS
Kienan Stewart [Fri, 25 Oct 2024 20:18:53 +0000 (20:18 +0000)] 
lttng-relayd: Add option to delegate port choice to OS

Change-Id: I8fdbfac5511f404eb6868c0f5b9de7bbb1ad7623
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoutils: Add generic helper to create value files
Kienan Stewart [Mon, 25 Nov 2024 16:06:39 +0000 (11:06 -0500)] 
utils: Add generic helper to create value files

Change-Id: Ie814a4ddd22d9af578a194b73ed52b65df5128e4
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoClean-up: lttng-relayd: Correct typo in error message
Kienan Stewart [Fri, 1 Nov 2024 14:58:08 +0000 (10:58 -0400)] 
Clean-up: lttng-relayd: Correct typo in error message

Change-Id: I53f2900f2233fcdd8723457d4cec8e8a0ef10391
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agoClean-up: lttng-relayd: Correct variable name typo
Kienan Stewart [Tue, 29 Oct 2024 15:31:37 +0000 (15:31 +0000)] 
Clean-up: lttng-relayd: Correct variable name typo

Change-Id: Id62a4e621c3e1d1cd138f85903143b7acd1197fb
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
6 weeks agomisc: Allow users to override the location of clang-format
Jérémie Galarneau [Thu, 12 Dec 2024 19:16:22 +0000 (19:16 +0000)] 
misc: Allow users to override the location of clang-format

Since the coding imposes a specific version of clang-format (16),
the pre-commit hook can fail for reasons out of the contributor's
control.

Local git config settings are used to allow the user to specify
the location of these tools.

  git config --local hooks.clangFormatPath /path/to/clang-format-16

The settings are retrieved by the script and used if they were
specified.

Note that we should probably do the same for `black` as they
change the formatting from version to version. Right now I
feel we imply "use the latest version", but we should probably
impose one and update it on a release-to-release basis.

Change-Id: Iabb3e3964dc137075474ae4a240f30e0ecf4ec0d
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
7 weeks agomisc: Add pre-commit hook for common checks
Kienan Stewart [Tue, 10 Dec 2024 17:11:37 +0000 (12:11 -0500)] 
misc: Add pre-commit hook for common checks

The initial version of the pre-commit hook, if installed, will check
the changed with clang-format, clang-tidy, and
python-black. Furthermore, C/C++ source files will be parsed using
python-clang and the comment style (starting with `/*` and ending with
`*/`) will be validated.

This pre-commit hook will check only the staged files.

To install the pre-commit hook:

    ln -s ../../extras/pre-commit.py .git/hooks/pre-commit

Example:

```
$ git hook run pre-commit 2>&1
ERROR:root:Failed rule 'cpp-comment-style'
Wrong comment style at <SourceRange start <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 109, column 1>, end <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 109, column 6>>
// hi
Wrong comment style at <SourceRange start <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 111, column 1>, end <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 111, column 12>>
/** hey **/
Wrong comment style at <SourceRange start <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 113, column 1>, end <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 113, column 11>>
/* sup **/
Wrong comment style at <SourceRange start <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 115, column 1>, end <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 115, column 3>>
//
Wrong comment style at <SourceRange start <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 117, column 1>, end <SourceLocation file 'src/bin/lttng-sessiond/main.cpp', line 117, column 5>>
/**/

ERROR:root:Failed rule 'clang-format'
src/bin/lttng-sessiond/main.cpp:1516:63: error: code should be clang-formatted [-Wclang-format-violations]
        /* Queue of rotation jobs populated by the sessiond-timer. */
                                                                     ^
src/bin/lttng-sessiond/main.cpp:1518:47: error: code should be clang-formatted [-Wclang-format-violations]
        struct lttng_thread *client_thread = nullptr;
                                                     ^

ERROR: root:Failed rule 'python-black'
would reformat asdf.py

Oh no! 💥 💔 💥
1 file would be reformatted.

Change-Id: I91f287a41f242d70aa4feb2b8ca8a6fd46ef708e
--- asdf.py     2024-12-10 19:56:34.558499+00:00
+++ asdf.py     2024-12-10 20:48:24.892474+00:00
@@ -1,4 +1,4 @@
 #!/usr/bin/python3

-if __name__ == '__main__':
+if __name__ == "__main__":
     pass

WARNING:root:Passed: 1
ERROR:root:Failed: 3
ERROR:root:Failed rule: cpp-comment-style
ERROR:root:Failed rule: clang-format
ERROR:root:Failed rule: python-black
```

Known drawbacks
===============

This operates on the whole files instead of the diffs.

The following supplementary tools are required for the pre-commit hook
to run:

 * clang-format
 * clang-tidy
 * python-blacken
 * python-clang (shipped with some clang releases)

Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Change-Id: Icc5e7c9324ebc937cf295619f53557649797d914
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
7 weeks agoCodingStyle.md: update clang-format version to 16
Jérémie Galarneau [Thu, 12 Dec 2024 19:09:32 +0000 (19:09 +0000)] 
CodingStyle.md: update clang-format version to 16

The formating script and .clang-format both require clang-format 16.

Change-Id: Icfbf96fc0e31715cc988b5413d8c100442bab44a
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
7 weeks agoClean-up: Remove checkpatch
Kienan Stewart [Tue, 10 Dec 2024 17:04:51 +0000 (12:04 -0500)] 
Clean-up: Remove checkpatch

The project rarely sees e-mail contributions and has moved to C++ as
the main programming language, so checkpatch.pl is not longer very
pertinent.

Change-Id: I799ecc6884e80e078c2cd46c284f1c50d3b332b6
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
7 weeks agoClean-up: docs: Correct typos in contributing documentation
Kienan Stewart [Tue, 10 Dec 2024 20:53:30 +0000 (15:53 -0500)] 
Clean-up: docs: Correct typos in contributing documentation

Change-Id: I3b4c25a5c53ec2ce7c24f7f3a7b674ce07354cd5
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agosessiond: document the types contained by the ust_app_channel HTs
Jérémie Galarneau [Thu, 5 Dec 2024 19:56:02 +0000 (19:56 +0000)] 
sessiond: document the types contained by the ust_app_channel HTs

Change-Id: I6b694da52ac35eeb046b9e33b143ecb01b42baf5
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agoClean-up: sessiond: remove unused ust_app_channel::ctx_list
Jérémie Galarneau [Thu, 5 Dec 2024 19:52:14 +0000 (19:52 +0000)] 
Clean-up: sessiond: remove unused ust_app_channel::ctx_list

Change-Id: Ice55acc6a40fd307e34ba952abd51b957768d131
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agolttng: Tests: Add test for shm size warning
Kienan Stewart [Wed, 13 Nov 2024 16:28:03 +0000 (11:28 -0500)] 
lttng: Tests: Add test for shm size warning

Change-Id: I20c5bc97f47288f308028d4c3c067a19e913a878
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agolttng: Warn on session start when client-visible shm path is too small
Kienan Stewart [Fri, 8 Nov 2024 20:59:43 +0000 (15:59 -0500)] 
lttng: Warn on session start when client-visible shm path is too small

Observed issue
==============

When adding one or more channels to a session, it is possible to
configure sessions such that the minimum memory required to
successfully trace exceeds the size of the shared memory location.

There is no user feedback when starting sessions that are configured
in such a way that they will never work. It therefore leads to
user confusion when no events are recorded.

Steps to reproduce
==================

On a system with 4 cpus:

```
sudo mount -t tmpfs -o size=64M tmpfs /mnt
lttng create --shm-path=/mnt
lttng enable-channel -u --subbuf-size=8M a0
lttng enable-event -u --all -c a0
lttng start

lttng stop
```

Cause
=====

As allocations are made lazily, there is no feedback for this type of
scenario visible to an lttng client. The session can successfully
start; however, there will be allocation errors visible in the
consumer daemon logs.

Solution
========

When starting a session, the minimum shared memory size required is
estimated using the configured non-kernel channels. This assumes
per-PID or per-UID buffers with a single PID or a single UID. An extra
set of buffers are estimated when the session is configured in
snapshot mode.

E.g.

```
$ lttng create
Session auto-20241112-102937 created.
Traces will be output to
/home/kstewart/src/efficios/lttng/master/home//lttng-traces/auto-20241112-102937

$ lttng enable-channel -u --subbuf-size=256M --num-subbuf=8 a2
user space channel `a2` enabled for session `auto-20241112-102937`

$ lttng start
Warning: The estimated minimum shared memory size for all non-kernel channels of session 'auto-20241112-102937' is greater than the total shared memory allocated to the default shared memory location (8192MiB >= 7873MiB). Tracing for this session may not record events due to allocation failures.
Tracing started for session `auto-20241112-102937`

$ lttng list
Available recording sessions:
  1) auto-20241112-102937 [active]
    Trace output:
    /home/kstewart/src/efficios/lttng/master/home//lttng-traces/auto-20241112-102937
```

Known drawbacks
===============

The intention of this change is to be backwards compatible, and
therefore doesn't stop the session from being started.

With per-PID or per-UID sub-buffers, the estimate is based only a
single PID or UID. Additional PIDs or UIDs could cause allocation
failures later on in the runtime which will continue to only be
visible in the consumer daemon logs.

The shm path is estimated by the lttng client rather than the consumer
daemon. It is possible for the consumer daemon be running in a
different container whose shared memory path maps to a different
backing storage.

This checks only against the total size of the shared memory storage -
not the current available usage. It does not take into account other
current enabled sessions.

Change-Id: I589ec461ec4a89b72bcdf1271065591ac471acca
Signed-off-by: Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agolttng-ctl/lttng: Move enable-channel memory check to client
Kienan Stewart [Wed, 13 Nov 2024 20:37:36 +0000 (15:37 -0500)] 
lttng-ctl/lttng: Move enable-channel memory check to client

Change-Id: I855284c3f2a6910363a075e6a7bb4c6d55b22685
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agolttng-ctl: Use max possible CPUs for per-CPU memory estimation
Kienan Stewart [Wed, 13 Nov 2024 19:55:44 +0000 (14:55 -0500)] 
lttng-ctl: Use max possible CPUs for per-CPU memory estimation

As of 2.13.4, LTTng-UST uses the max possible CPU count for per-CPU
allocations.

See lttng-ust commit 66dbdc3448a77043d0fd59f47b17e77a8d59fddb
("fix: num_possible_cpus() with hot-unplugged CPUs").

Change-Id: Ia4eb25988a268f48065903617ed59a5fdecb2ab9
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agocommon: Add helper to get max possible CPU count
Kienan Stewart [Wed, 13 Nov 2024 19:53:03 +0000 (14:53 -0500)] 
common: Add helper to get max possible CPU count

`get_max_possible_cpu_id()` is adapted from lttng-ust[1].

[1]: https://github.com/lttng/lttng-ust/blob/c0de10a2dab6d5cc6568e12c0ad3b97d85e0dc6b/src/common/smp.c#L197

Change-Id: I2697be51b21dad424c74d7397c1e6649ca7456bb
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agolttng-ctl: Add session shm_path to extended session attributes
Kienan Stewart [Fri, 8 Nov 2024 20:59:00 +0000 (15:59 -0500)] 
lttng-ctl: Add session shm_path to extended session attributes

Observed issue
==============

Once a session is created, any lttng clients have no way of checking
what the current shared memory path setting for a session is.

Solution
========

Expose the configure path via an attribute in the extended structure
of lttng sessions.

Known drawbacks
===============

None.

Change-Id: Ie257bcedfc913e09fc6a60e6b9387d2e8d4cb828
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agoTests: Add skip_all_remaining helper to python tap-generator
Kienan Stewart [Wed, 13 Nov 2024 17:03:11 +0000 (12:03 -0500)] 
Tests: Add skip_all_remaining helper to python tap-generator

`skip_all` can only be used if a plan hasn't been emitted yet.

Change-Id: Ib2f132edf496495068f6679d563a8a35de38a33a
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agoTests: Support multi-line diagnostic messages
Kienan Stewart [Wed, 13 Nov 2024 15:58:26 +0000 (10:58 -0500)] 
Tests: Support multi-line diagnostic messages

Change-Id: Icf16a39814b70ae9a9548add78135118477254ff
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agoTests: Add option to set session shm path
Kienan Stewart [Wed, 13 Nov 2024 15:58:06 +0000 (10:58 -0500)] 
Tests: Add option to set session shm path

Change-Id: I0a5b2b32351438d37c47f3e9920e5cebbf1bdf50
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agoTests: Add subbuf_size and subbuf_count options for channels
Kienan Stewart [Wed, 13 Nov 2024 15:56:50 +0000 (10:56 -0500)] 
Tests: Add subbuf_size and subbuf_count options for channels

Change-Id: I374dd4d1f9c501570dacd5f6e1abd90d6f383f62
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
8 weeks agoTests: Add pre-delete callbacks to TemporaryDirectory destructor
Kienan Stewart [Wed, 13 Nov 2024 15:53:18 +0000 (10:53 -0500)] 
Tests: Add pre-delete callbacks to TemporaryDirectory destructor

This will allow certain test clean-up operations (e.g., `umount`) to
be run before trying to to remove the directory.

Change-Id: I193030dfe4aeb0eeebc4370849681cbd9dcf500e
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agotests: Test that no LTTng modules are loaded before and after kernel tests
Kienan Stewart [Thu, 4 Jul 2024 13:28:32 +0000 (09:28 -0400)] 
tests: Test that no LTTng modules are loaded before and after kernel tests

Observed issue
==============

If a test or a component in LTTng fails to unload the modules
properly, the state of the system is polluted.

Solution
========

Use a helper test function and check before and after each of the
kernel tests.

Known drawbacks
===============

None.

Change-Id: I0cce0d9e280bd66535af490c9a111526ab78373c
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agotests: Add helper functions to validate if lttng modules are loaded
Kienan Stewart [Thu, 4 Jul 2024 13:25:51 +0000 (09:25 -0400)] 
tests: Add helper functions to validate if lttng modules are loaded

Observed issue
==============

Regression tests exercising kernel modules don't validate before and
after the test execution that there are no LTTng kernel modules
loaded.

Solution
========

Add convenient tap helper functions that may be used by shell TAP
tests.

Known drawbacks
===============

None.

Change-Id: I8244358137c2d049ed72e6dc7d9290cb9dda10e3
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: Update lttng-modules load list
Kienan Stewart [Wed, 3 Jul 2024 19:51:29 +0000 (15:51 -0400)] 
Fix: Update lttng-modules load list

Observed issue
==============

When starting a root sessiond, after stopping it there would still be
lttng-modules modules loaded in the kernel.

```
$ lsmod | grep lttng || echo "nothing"
nothing

$ lttng-sessiond -b

$ killall lttng-sessiond

$ lsmod | grep lttng || echo "nothing"
lttng_statedump       757760  0
lttng_wrapper          16384  1 lttng_statedump
lttng_uprobes          12288  0
lttng_clock            12288  0
lttng_kprobes          12288  0
lttng_lib_ring_buffer    90112  0
lttng_kretprobes       12288  0
```

Cause
=====

Not all modules are listed in the core/data modules in `modprobe.cpp`.

Solution
========

Add missing modules.

Known drawbacks
===============

None.

Change-Id: I28525c55eadb95467f77ffac0b9152ac8576e0fc
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: sessiond: notification-thread: add to pollset fails silently
Jérémie Galarneau [Wed, 20 Nov 2024 16:44:12 +0000 (16:44 +0000)] 
Fix: sessiond: notification-thread: add to pollset fails silently

Noticed when reviewing the code, so I don't have a reproducer
for the issue. However, the "ADD_TRACER_EVENT_SOURCE" command
returns LTTNG_OK even when the notification thread fails to add
the tracer event source to the poll set.

The error path properly performs the requisite clean-up, but
the command emitter will be under the impression that the command
succeeded. In doing so, it will most likely use the
"REMOVE_TRACER_EVENT_SOURCE" at a later point which will cause
a failed assertion to hit when the `source_element` isn't found.

Change-Id: I4a400d6affa21d2c2247ecfb845ca1e4aa730b5d
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agodocs: Fix up test documentation
Kienan Stewart [Tue, 29 Oct 2024 12:40:33 +0000 (08:40 -0400)] 
docs: Fix up test documentation

Observed issue
==============

Principally `LTTNG_TEST_GDBSERVER_SESSIOND` was listed twice in the
table, and `LTTNG_TEST_GDBSERVER_SESSIOND_WAIT` was no listed.

Solution
========

The duplicate `LTTNG_TEST_GDBSERVER_SESSIOND` has been removed and
`LTTNG_TEST_GDBSERVER_SESSIOND_WAIT` added.

The wording on the `*_GDBSERVER_WAIT` variables has been clarified.

The ordering of the new entries was modified to preserve alphabetical ordering.

Known drawbacks
===============

None.

Change-Id: I932a892a6aa78f37bb9a3a1c5ddaf8fadb552f56
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agodocs: Update coding standard blurb in contributions readme
Kienan Stewart [Tue, 29 Oct 2024 12:48:45 +0000 (08:48 -0400)] 
docs: Update coding standard blurb in contributions readme

Observed issue
==============

The CodingStyle document now includes style guidelines for Python,
Shell (bash), and legacy C code.

Solution
========

* Fix wording in the first sentence and use a relative link to the file
* Remove paragraph that other languages do not have a coding style
* Add a link to the test README

Known drawbacks
===============

None.

Change-Id: I057ae8d51afaa07892aa40b47c2f1716574b3b06
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoClean-up: sessiond: document ownership of agent
Jérémie Galarneau [Tue, 26 Nov 2024 15:44:52 +0000 (15:44 +0000)] 
Clean-up: sessiond: document ownership of agent

`agent` instances are lazily created at various sites and their
ownership can be confusing for both analysis tools and meat bags.

Document that the ownership of the instance is transferred by the
`agent_add` function.

Change-Id: I709d2908611bdebd88c82261d1e5d5ee3bde3a09
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: sessiond: cmd_add_ctx: leak of internal channel members
Jérémie Galarneau [Tue, 26 Nov 2024 15:27:10 +0000 (15:27 +0000)] 
Fix: sessiond: cmd_add_ctx: leak of internal channel members

lttng_channel instances must be released using channel_attr_destroy.
However, an error path of cmd_add_ctx uses free() directly, which causes
internal structures of lttng_channel to be leaked.

Wrap the lttng_channel instance to use a unique_ptr which invokes
channel_attr_destroy on release.

Change-Id: I77443c8a57475437dbb11792869e70840680492f
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoClean-up: sessiond: enable_event: use unique_ptr to manage memory
Jérémie Galarneau [Tue, 26 Nov 2024 15:07:53 +0000 (15:07 +0000)] 
Clean-up: sessiond: enable_event: use unique_ptr to manage memory

Simplify the error paths used to create the internal events associated
with agent events as copies of the filter bytecode and expressions are
performed.

Change-Id: I260bcabb8965e4c86cbc9e40fdd056a294ced676
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: sessiond: leak of filter_expression, bytecode, and exclusion
Jérémie Galarneau [Tue, 26 Nov 2024 14:56:53 +0000 (14:56 +0000)] 
Fix: sessiond: leak of filter_expression, bytecode, and exclusion

The filter_expression, bytecode, and exclusion arguments are leaked
whenever a client omits the transmission of an event-rule as part of an
enable-event command (a protocol error).

Ensure the three arguments are automatically managed using smart
pointers before performing the protocol consistency check.

Change-Id: I4c4f1d5d7b6acdd215ef34e1fc8f2c4bc81a674a
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: lttng-ctl: Validate lttng_enable_event_with_exclusions inputs at beginning of...
Mathieu Desnoyers [Tue, 26 Nov 2024 14:41:18 +0000 (14:41 +0000)] 
Fix: lttng-ctl: Validate lttng_enable_event_with_exclusions inputs at beginning of function

Checking for ev == nullptr after having dereferenced ev triggers this
Coverity warning:

    CID 1566411:  Null pointer dereferences  (REVERSE_INULL)
    Null-checking "ev" suggests that it may be null, but it has already been dereferenced on all paths leading to the check.

Move the handle and ev nullptr checks before the LTTNG_EVENT_ALL
special-case. This is relevant because within LTTNG_EVENT_ALL, after
modifying the event type, lttng_enable_event_with_exclusions is invoked
again with the modified type, which will end up doing the input
validation anyway.

Move the original_filter_expression before the LTTNG_EVENT_ALL event
type check for the same reason: it will end up being checked with the
modified event type in the nested call anyway, so favor early checking
of input arguments.

Change-Id: Id1c931300aa49477a9f480698f5dad645240b904
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: sessiond: uninitialized ust_app event_notifier_group
Kienan Stewart [Thu, 21 Nov 2024 20:03:56 +0000 (15:03 -0500)] 
Fix: sessiond: uninitialized ust_app event_notifier_group

Observed issue
==============

On SLES12SP5 (gcc 4.8.5), occasional crashes were observed with the
following log entry:

```
DBG1 - 18:49:41.084261033 [Notification]: Poll wait returned (1) (in thread_notification() at notification-thread.cpp:632)
DBG1 - 18:49:41.084264635 [Notification]: Handling fd (28) activity (1) (in thread_notification() at notification-thread.cpp:656)
DBG1 - 18:49:41.084269451 [Notification]: Received `REMOVE_TRACER_EVENT_SOURCE` command (in handle_notification_thread_command() at notification-thread-events.cpp:3178)
lttng-sessiond: notification-thread-events.cpp:2228: int
handle_notification_thread_command_remove_tracer_event_source(notification_thread_state*,
int, lttng_error_code*): Assertion `source_element' failed
```

The easiest reproduce was to comment out most all tests in
`regression/ust/ust-app-ctl-paths/test_ust_app_ctl_paths` except
`test_trace_self_default_paths`. Then run a loop until a failure is
detected, e.g.

```
make -j4 && \
ITER=0 && \
while true ; do LTTNG_UST_DEBUG=1 LTTNG_TEST_LOG_DIR=- LTTNG_TEST_VERBOSE_SESSIOND=1 ./tests/regression/ust/ust-app-ctl-paths/test_ust_app_ctl_paths 2>&1 | tee sessiond.log ; if grep -qE '^not ok' sessiond.log ; then break; fi ; ITER=$((ITER+1)) ; echo "Done $ITER iterations" ; sleep 1 ; done
```

Cause
=====

After investigation, it appears to be that `lta = new ust_app;` may
occasionally return the address multiple times when previous
allocation is rapidly de-allocated.

For example, in the following snippet of a log tracking an application
address that shows re-use:

```
DBG1 - 19:47:29.103043500 [UST registration dispatch]: Create new ust app allocation 0x7fce14001da0 for pid 23256 sock 53 (in ust_app_create() at ust-app.cpp:4061)
DBG1 - 19:47:29.115347169 [UST registration dispatch]: wait_node_in_queue looked up app 0x7fce14001da0 pid 23256 (in thread_dispatch_ust_registration() at dispatch.cpp:362)
DBG1 - 19:47:29.115933991 [UST registration dispatch]: ust app version app 0x7fce14001da0 pid 23256 (in thread_dispatch_ust_registration() at dispatch.cpp:392)
DBG1 - 19:47:29.115954872 [UST registration dispatch]: Added ust app 0x7fce14001da0 pid 23256 (in thread_dispatch_ust_registration() at dispatch.cpp:403)
DBG1 - 19:47:29.115958125 [UST registration dispatch]: ust_app_setup_event_notifier_group app 0x7fce14001da0 pid 23256 (in ust_app_setup_event_notifier_group() at ust-app.cpp:4226)
DBG1 - 19:47:29.116367064 [UST registration dispatch]: app 0x7fce14001da0 add tracer event source in setup_event_notifier_group fd 60 ret 10 (in ust_app_setup_event_notifier_group() at ust-app.cpp:4279)
DBG1 - 19:47:29.117653161 [UST registration dispatch]: app 0x7fce14001da0 pid 23256 return from setup trace event notifier group ret 0, event notifier group 0x7fce14003180 (in ust_app_setup_event_notifier_group() at ust-app.cpp:4313)
DBG1 - 19:47:29.152058781 [23308/23332]: delete_ust_app 0x7fce14001da0 pid 23256 sock 53 (in delete_ust_app() at ust-app.cpp:1021)
DBG1 - 19:47:29.152076408 [23308/23332]: No event notifier group object remove tracer event source fd 60 app 0x7fce14001da0 (in delete_ust_app() at ust-app.cpp:1075)
DBG1 - 19:47:29.191427936 [UST registration dispatch]: Create new ust app allocation 0x7fce14001da0 for pid 23371 sock 71 (in ust_app_create() at ust-app.cpp:4061)
DBG1 - 19:47:29.204450310 [UST registration dispatch]: wait node 0x7fce14001d10, app 0x7fce14001da0 (in sanitize_wait_queue() at dispatch.cpp:144)
DBG1 - 19:47:29.204454373 [UST registration dispatch]: Culling app from wait queue: pid=23371 app 0x7fce14001da0 (in sanitize_wait_queue() at dispatch.cpp:146)
DBG1 - 19:47:29.259291727 [23308/23332]: delete_ust_app 0x7fce14001da0 pid 23371 sock 71 (in delete_ust_app() at ust-app.cpp:1021)
DBG1 - 19:47:29.590230014 [23308/23332]: No event notifier group object remove tracer event source fd 81 app 0x7fce14001da0 (in delete_ust_app() at ust-app.cpp:1075)
lttng-sessiond: notification-thread-events.cpp:2233: int handle_notification_thread_command_remove_tracer_event_source(notification_thread_state*, int, lttng_error_code*):
Assertion `source_element' failed.
```

As this variable is default initialized[1], the memory contents are
indeterminate. In `ust_app_create`, many fields are manually
initialized; however `lta->event_notifier_group.object` is not set
explicitly.

The next time `event_notifier_group.object` is set is when the the
`notification_thread_command_add_tracer_event_source` succeeds. If the
app dies before than, or if that registration fails, the
`ust_app.event_notifier_group.object` may be non-NULL. When this
object passes to `delete_ust_app`, the only check made before trying
to remove the tracer event
source (`notification_thread_command_remove_tracer_event_source`) is
if `event_notifier_group.object` is NULL or not.

If the file descriptor hasn't been previously registered, the assert
is triggered.

While I haven't confirmed my hypothesis, it is possible that the
behaviour of GCC regarding default initialization has changed between
GCC 4.8.5 and now.

Solution
========

Use an explicit initialization for the new allocation.

Known drawbacks
===============

None.

References
==========

[1]: https://en.cppreference.com/w/cpp/language/default_initialization (See case 2)

Change-Id: I12de1864d2995be014d5526283fb843d0f99093e
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoDocs: Correct `LTTNG_RUNDIR` environment variable name
Kienan Stewart [Fri, 1 Nov 2024 15:33:39 +0000 (11:33 -0400)] 
Docs: Correct `LTTNG_RUNDIR` environment variable name

Change-Id: I13c803f946bf25cc9c622e2d4d156ecc3af3457d
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoDocs: Correct lttng-ust man page references
Kienan Stewart [Fri, 1 Nov 2024 15:17:18 +0000 (11:17 -0400)] 
Docs: Correct lttng-ust man page references

==== Observed issue ====

Deploying the lttng-www site fails with the following broken link:

```
urlname;parentname;base;result;warningstring;infostring;valid;url;line;column;name;dltime;size;checktime;cached;level;modified
/man/1/lttng-ust/v2.13;http://localhost:10000/man/8/lttng-sessiond/v2.13/;;404
Not
Found;;;False;http://localhost:10000/man/1/lttng-ust/v2.13;730;8;lttng-ust(1);-1;160;3.2490103244781494;0;3;
```

==== Cause ====

LTTng-UST does not ship a man page in section 1[1].

==== Solution ====

Correct the lttng-ust man page references in `lttng-sessiond.8.txt`.

==== Know drawbacks ====

None.

==== References ====

[1]: https://github.com/lttng/lttng-ust/tree/5cc8729236a95d784e9561abbcb93a0fce90890c/doc/man

Change-Id: If697be273a9c4db38a7723adc469f45818bad355
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: Close per-process event notifier error accounting fds on registration
Mathieu Desnoyers [Mon, 4 Nov 2024 18:26:50 +0000 (13:26 -0500)] 
Fix: Close per-process event notifier error accounting fds on registration

On application registration, the event notifier error accounting file
descriptors are duplicated to send the error accounting counter objects
to the application.

Those are left open until the application unregisters.

There is one file descriptor per CPU, so on larger systems (228 CPUs
Intel or 192 CPUs AMD EPYC), this adds up to a lot of file descriptors
when the number of registered applications is large, which can result in
file descriptor exhaustion errors.

Moreover, the application unregistration is done from delete_ust_app(),
which is used from a call_rcu() worker thread, thus after an RCU grace
period delay. This means that a steady stream of short-lived
applications with a short enough lifetime could end up allocating more
file descriptors than can be closed.

Fix this by closing those file descriptors immediately after the objects
are sent to the application, similarly to what is done for the ring
buffer streams.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ia1bbc3ff09a20f37d069ade7e267fb043ea1ac7f

2 months agoMaintain recording channel configuration objects in ltt_session
Jérémie Galarneau [Sat, 14 Sep 2024 09:36:09 +0000 (05:36 -0400)] 
Maintain recording channel configuration objects in ltt_session

Maintain the state of event rules in the ltt_session's channel
configurations. This is laying the groundwork to maintain triggers (and
ultimately, event-rules) associated with map channels.

liblttng-ctl now converts the lttng_event specifications into
event-rules which are used by the session daemon to maintain recording
channel configurations.

The objective is to share the synchronization code of
tracers (essentially, the description of enablers and channel
configuration) with the session configurations when adding support for
maps.

As of this commit, the event-rule-configurations are maintained
internally, but aren't use to synchronize the tracer configuration.

Change-Id: I6067ef31ca4b9cead55cf4c9dc2bac8dd8ca3400
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: unhandled value in lttng_consumer_type formatter
Jérémie Galarneau [Mon, 25 Nov 2024 19:57:37 +0000 (19:57 +0000)] 
Fix: unhandled value in lttng_consumer_type formatter

Change-Id: I6780fafba72c326a8ea036d0500db6f15524886f
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: path: handle truncation in utils_partial_realpath()
Jérémie Galarneau [Mon, 25 Nov 2024 19:53:57 +0000 (19:53 +0000)] 
Fix: path: handle truncation in utils_partial_realpath()

gcc warns that:
  warning: 'char* strncpy(char*, const char*, size_t)' specified bound 4096 equals destination size [-Wstringop-truncation]

Return an error when lttng_strncpy reports that a truncation occurred.

Change-Id: I03889d6d275566413df2848974e4d3ad83565b17
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: path: handle truncation in utils_partial_realpath()
Jérémie Galarneau [Mon, 25 Nov 2024 19:49:05 +0000 (19:49 +0000)] 
Fix: path: handle truncation in utils_partial_realpath()

gcc warns that:
  warning: 'char* strncpy(char*, const char*, size_t)' specified bound 4096 equals destination size [-Wstringop-truncation]

Error-out when snprintf indicates that a truncation occurred.

Change-Id: I8c514da6b0ccb1a59d1555b02bfea2dd3c57febb
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agoFix: sessiond: assertion on inconsistent filter bytecode and expression
Jérémie Galarneau [Tue, 1 Oct 2024 19:47:57 +0000 (15:47 -0400)] 
Fix: sessiond: assertion on inconsistent filter bytecode and expression

The session daemon correctly expects that a recording event-rule that
specifies a filter must have both a bytecode and an expression (or
neither of them).

However, it shouldn't assert as those elements are user-specified. The
handling is changed to return an "invalid parameter" error to the
client.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I3df6ce79bc6ce1fa9dadb184a7fd2b528dc2a597

2 months agolttng: list: refer to domain recording rules as "event rules"
Jérémie Galarneau [Fri, 11 Oct 2024 15:42:17 +0000 (15:42 +0000)] 
lttng: list: refer to domain recording rules as "event rules"

Change-Id: I1aeb6ad091fc1a65c055ff9e5a616c615e258c6f
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
2 months agouprobe: log binary path on failure to open
Jérémie Galarneau [Fri, 15 Nov 2024 16:22:00 +0000 (11:22 -0500)] 
uprobe: log binary path on failure to open

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Iacf81482ffe71272a4cc4eea306d6bf99d03bd24

2 months agoFix: uprobe event-rule: logging mentions pattern instead of name
Jérémie Galarneau [Fri, 15 Nov 2024 14:38:09 +0000 (09:38 -0500)] 
Fix: uprobe event-rule: logging mentions pattern instead of name

A uprobe event rule names a new event; it does not match existing
events. Thus, it doesn't make sense to use the "pattern" terminology
used by some other event rule types.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I86ed75f48723c37480016645a48c0c2bd11cf37d

2 months agoTests: use _run_lttng_cmd instead of directly calling the client
Jérémie Galarneau [Thu, 14 Nov 2024 21:37:25 +0000 (16:37 -0500)] 
Tests: use _run_lttng_cmd instead of directly calling the client

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I1ad6601fb8cdf3b9ca973f1476c12bba2ff867cd

2 months agoTests: python logging: log enable-event command
Jérémie Galarneau [Thu, 14 Nov 2024 20:54:46 +0000 (15:54 -0500)] 
Tests: python logging: log enable-event command

Log the enable-event commands by using the _run_lttng_cmd util
to improve the debuggability of failed test cases.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If250e014a7a22438ea3320fb90bf194dd7646a3d

3 months agosessiond: allocate ltt_session using `new`
Jérémie Galarneau [Sat, 14 Sep 2024 14:06:38 +0000 (10:06 -0400)] 
sessiond: allocate ltt_session using `new`

In order to make a follow-up change which adds non-POD members to
ltt_session, allocate it using the `new operator which causes
ltt_session's constructor to run.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ifd1fa8dc3e7a8cd3862985e1d30c5f032d0d4a8b

3 months agoTests: Fix: Use '.logfile' instead of '.log' for test app output
Kienan Stewart [Thu, 31 Oct 2024 12:33:04 +0000 (08:33 -0400)] 
Tests: Fix: Use '.logfile' instead of '.log' for test app output

Observed issue
==============

Frequent CI errors related to parsing TAP log files.

E.g.

```
17:04:55 Parsing TAP test result [/var/lib/jenkins/jobs/dev_review_lttng-tools_master_linuxbuild/configurations/axis-babeltrace_version/stable-2.0/axis-build/std/axis-conf/std/axis-liburcu_version/stable-0.14/axis-platform/deb12-amd64/builds/857/tap-master-files/tap/regression/ust/ust-app-ctl-paths/test_blocking.log.d/babeltrace.err.uMIm4i.log].
17:04:55 org.tap4j.parser.ParserException: Error parsing TAP Stream:
Missing TAP Plan.
```

Cause
=====

The TAP collector in the [CI][1] uses `**/*.*`[2] as the ANT pattern
for globbing test log files.

Consequently if, for example,  `./test.log.d/session.XXXXX.log` exists,
the content will try to be parsed as a TAP report and potentially
fail.

The Jenkins TAP plugin[3] does not expose the option of adding
excludes[4] to the globbing pattern.

Solution
========

Use `.logfile` as the suffix and modify the CI TAP collector
configuration to use `**/*.log`, as `.log` is the suffix for test logs
produced when running `make check`[5].

Known drawbacks
===============

None.

References
==========

[1]: https://ci.lttng.org
[2]: https://github.com/lttng/lttng-ci/blob/74c5e73d5d1961fcd8c530323b180c688f624e5c/jobs/lttng-tools.yaml#L430
[3]: https://github.com/jenkinsci/tap-plugin/
[4]: https://github.com/jenkinsci/tap-plugin/blob/8f9fb2d2b0ac9628380c6a56e3c7c97caf29d9ca/src/main/java/org/tap4j/plugin/TapPublisher.java#L472
[5]: https://www.gnu.org/software/automake/manual/html_node/Parallel-Test-Harness.html

Change-Id: I76b7203ce02645e222c7319ac576a9a1272cf985
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agosessiond/lttng-ctl: Introduce LTTNG_RUNDIR
Kienan Stewart [Thu, 18 Apr 2024 20:35:40 +0000 (16:35 -0400)] 
sessiond/lttng-ctl: Introduce LTTNG_RUNDIR

Observed issue
==============

Starting multiple instances of lttng-sessiond as the root user isn't
possible, even with setting different values for the `LTTNG_HOME`
environment variable.

Cause
=====

When starting `lttng-sessiond` the `apps_unix_sock_path`,
`client_unix_sock_path`, and `health_unix_sock_path` are set to
configure time static defines under `CONFIG_LTTNG_SYSTEM_RUNDIR`,
e.g. `/var/lib/lttng`.

Solution
========

A new environment variable `LTTNG_RUNDIR` is introduced to control the
base directory used by applications to find communication sockets.

The default behaviour is to emulate the existing divide: if
`LTTNG_RUNDIR` is not set the root `lttng-sessiond` will continue to
use `CONFIG_LTTNG_SYSTEM_RUNDIR`, and a non-root user `lttng-sessiond`
will use `LTTNG_HOME/.lttng`.

When `LTTNG_RUNDIR` is set, it takes priority over `LTTNG_HOME` for
determining the base directory. The output directory for traces is
not affected by `LTTNG_RUNDIR`, it continues to respect `LTTNG_HOME`.

Example with starting multiple root `lttng-sessiond`s:

```
DIR_A=$(mktemp -d)
DIR_B=$(mktemp -d)

LTTNG_RUNDIR="${DIR_A}" lttng-sessiond -b
LTTNG_RUNDIR="${DIR_B}" lttng-sessiond -b

LTTNG_RUNDIR="${DIR_A}" lttng list

LTTNG_RUNDIR="${DIR_B}" lttng list
```

In the example above, as `LTTNG_HOME` is not set, the default output
directory for traces by both over the `lttng-sessiond` instances will
be `$HOME/lttng-traces`.

The following will also work:

```
DIR_A=$(mktemp -d)
LTTNG_RUNDIR="${DIR_A}" lttng create
LTTNG_RUNDIR="${DIR_A}" lttng enable-event -u --all
LTTNG_RUNDIR="${DIR_A}" lttng start

LTTNG_UST_APP_PATH="${DIR_A}" test-application
```

The `LTTNG_UST_CTL_PATH` can be set to a location other than the
rundir as follows;

```
DIR_A=$(mktemp -d)
DIR_B=$(mktemp -d)
LTTNG_UST_CTL_PATH="${DIR_B}" LTTNG_RUNDIR="${DIR_A}" lttng create
LTTNG_RUNDIR="${DIR_A}" lttng enable-event -u -all
LTTNG_RUNDIR="${DIR_A}" lttng start

LTTNG_UST_APP_PATH="${DIR_B}" test-application

LTTNG_UST_APP_PATH="${DIR_A}" test-application
```

Known drawbacks
===============

None.

Change-Id: I371c2c72644277b7dcafaf970ee7b75d9bfbaedc
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agotests: Add test to cover daemon socket paths
Kienan Stewart [Fri, 26 Apr 2024 21:04:17 +0000 (17:04 -0400)] 
tests: Add test to cover daemon socket paths

Drawbacks
=========

The shared memory test uses `/dev/shm` which is only available on Linux
systems. The test is skipped otherwise.

Change-Id: I2e60c5b3191c638d6e36ceafa88e01473891c250
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agodocs: Add man page entry for LTTNG_UST_APP_PATH and LTTNG_UST_CTL_PATH
Kienan Stewart [Fri, 27 Oct 2023 18:58:03 +0000 (14:58 -0400)] 
docs: Add man page entry for LTTNG_UST_APP_PATH and LTTNG_UST_CTL_PATH

Add manual entries for the LTTNG_UST_APP_PATH and LTTNG_UST_CTL_PATH
environment variables in lttng-sessiond(8).

Change-Id: I9c7fd672d006b0e8afad7a8dfacbb3dd41e28f8f
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agotests: Add tests for LTTNG_UST_APP_PATH and LTTNG_UST_CTL_PATH
Kienan Stewart [Thu, 26 Oct 2023 20:08:27 +0000 (16:08 -0400)] 
tests: Add tests for LTTNG_UST_APP_PATH and LTTNG_UST_CTL_PATH

test_blocking_mode: Verifies that the sessiond starts (or doesn't start)
appropriately depending on the combination of path settings in
conjuction with `LTTNG_UST_ALLOW_BLOCKING` and `--blocking-timeout`.

test_path_separators:Path separators: Verifies the behaviour of the
sessiond and applications with multiple `LTTNG_UST_APP_PATH`s and
multiple `LTTNG_UST_CTL_PATHS`, including the verification of Java JUL
and Python agents.

test_ust_app_ctl_paths: Verifies the sessiond and traced applications
with different combinations of `LTTNG_UST_APP_PATH` and
`LTTNG_UST_CTL_PATH` settings.

Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I9f25cdc20fd482cdcc71294aadff3a2a6b34c01e

3 months agosessiond: exit early if it's possible to self-trace with blocking mode set
Kienan Stewart [Thu, 23 Nov 2023 19:16:21 +0000 (14:16 -0500)] 
sessiond: exit early if it's possible to self-trace with blocking mode set

Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I13e76160135e1cd9f0cb7d5ebe16e9662c1aee56

3 months agosessiond: Add initial support for multiple LTTNG_UST_CTL_PATHs
Kienan Stewart [Mon, 27 Nov 2023 16:32:42 +0000 (11:32 -0500)] 
sessiond: Add initial support for multiple LTTNG_UST_CTL_PATHs

LTTNG_UST_CTL_PATH may be separated with ':'. There is no provision
for escaping the ':' path separator (similar to `$PATH`). Subsequent
paths after the first are ignored.

Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I80f7d63e4be164f7afe3fe478794bd55c71c31fb

3 months agoIntroduce LTTNG_UST_CTL_PATH environment variable
Mathieu Desnoyers [Fri, 20 Oct 2023 20:39:40 +0000 (16:39 -0400)] 
Introduce LTTNG_UST_CTL_PATH environment variable

Example use to trace lttng-sessiond (tracee) with another lttng-sessiond
(tracer):

```
mkdir /tmp/tracer-ust
mkdir /tmp/tracee-ust
mkdir /tmp/tracer-home
mkdir /tmp/tracee-home
LTTNG_HOME=/tmp/tracer-home LTTNG_UST_CTL_PATH=/tmp/tracer-ust lttng-sessiond --daemon
LTTNG_HOME=/tmp/tracee-home LTTNG_UST_CTL_PATH=/tmp/tracee-ust \
LTTNG_UST_APP_PATH=/tmp/tracer-ust \
LD_PRELOAD=/usr/local/lib/liblttng-ust-fork.so:/usr/local/lib/liblttng-ust-fd.so \
lttng-sessiond --daemon
```

* Control the tracer sessiond by setting LTTNG_HOME=/tmp/tracer-home
* Control the tracee sessiond by setting LTTNG_HOME=/tmp/tracee-home
* Run an application traced by the tracee sessiond

```
LTTNG_UST_APP_PATH=/tmp/tracee-ust myapp
```

* Run an application traced by the tracer sessiond

```
LTTNG_UST_APP_PATH=/tmp/tracer-ust myapp
```

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ifcd05c366004b5fc0a4a362ad3556d7e6d8658b1

3 months agoClean-up: unify comment style
Jérémie Galarneau [Thu, 24 Oct 2024 21:01:44 +0000 (17:01 -0400)] 
Clean-up: unify comment style

Some comment blocks use /** in lieu of /* on the first line. Since the
latter style is prevalent in the code base, replace all instances to
attain One True Style.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: Ica1aee472bdbeaaa40ee32f67274e3c43f7f9850

3 months agoBump required clang-format version to 16
Simon Marchi [Mon, 16 Sep 2024 09:00:35 +0000 (05:00 -0400)] 
Bump required clang-format version to 16

Bump the required clang-format version from 14 to 16. For reference,
this is the version the Babeltrace project uses [1], and it is checked
by the LTTng CI [2], so I think it makes sense to go to that version.
More recent versions might not be readily available on the CI machines
(mostly running Debian 12 at the moment).

FWIW, I think that the code changes generated by this version change are
improvements.

[1] https://github.com/efficios/babeltrace/blob/d16ccfd174984c3d18f4f4427e4e438b1a64730e/tools/format-cpp.sh#L7
[2] https://ci.lttng.org/view/Babeltrace/job/babeltrace_master_lint/

Change-Id: I188f04928357ac7562b1a2dce3238a622189b04a
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoFix: relayd: leaked socket for live connections
Kienan Stewart [Thu, 17 Oct 2024 14:40:48 +0000 (10:40 -0400)] 
Fix: relayd: leaked socket for live connections

Observed issue
==============

While exploring an issue where Python programs using the `bt2` module
would crash on shutdown, it was noticed that the same case also
highlighted a leaked file descriptor.

The following Python program may be used to demonstrate the leak.

```

import os
import socket
import time

import bt2

def is_connected():
    ctf_live_cc = bt2.find_plugin("ctf").source_component_classes["lttng-live"]
    q = bt2.QueryExecutor(ctf_live_cc, "sessions", params={"url": "net://localhost"})
    connected = False
    try:
        for x in q.query():
            print(x)
            if x['session-name'] == 'test' and x['client-count'] >= 1:
                connected = True
                break
    except Exception as e:
        print(e)
    return connected

os.system("lttng create test --live")
os.system("lttng enable-event -u --all")
os.system("lttng start")

ctf_live_cc = bt2.find_plugin("ctf").source_component_classes["lttng-live"]
iterator = bt2.TraceCollectionMessageIterator(bt2.ComponentSpec(ctf_live_cc, {'inputs': ["net://localhost/host/{}/test".format(socket.gethostname())], 'session-not-found-action': 'end'}))

data = []
while not is_connected():
    try:
        data.append(next(iterator))
    except Exception as e:
        print(e)
    time.sleep(0.1)

os.system("lttng stop")
os.system("lttng destroy")
os.system("killall lttng-sessiond")
os.system("killall lttng-relayd")
```

Cause
=====

During the clean-up at the end of the live worker thread, all remaining
viewer connections have their references put (which should cause the
connection to be released).

When releasing connections, `close` is never called on the socket's file
descriptor. Furthermore, the release doesn't modify `the_fd_tracker`.

Solution
========

Explicitly close and stop tracking the sockets for viewer connections
just prior to the final put.

Known drawbacks
===============

None.

Change-Id: I5eb0a3e5b9cb14dc1199be463bc312cbc72d8244
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoTests: Document common environment variables used to control tests
Kienan Stewart [Tue, 15 Oct 2024 19:04:50 +0000 (19:04 +0000)] 
Tests: Document common environment variables used to control tests

Change-Id: I4837d506de0a366d847fd529e0c747b48701ccf1
Signed-off-by: Kienan Stewart <kstewart@efficos.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoTests: Convert tests readme to adoc format
Kienan Stewart [Tue, 15 Oct 2024 18:19:54 +0000 (18:19 +0000)] 
Tests: Convert tests readme to adoc format

New documentation should be in adoc, and it's not a big hassle to
change this one.

Change-Id: I43b82749db0795b488d936925683aaa3a6a4f95b
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoTests: Add test to cover live viewer hangs with an early inactive app
Kienan Stewart [Fri, 15 Dec 2023 14:34:28 +0000 (09:34 -0500)] 
Tests: Add test to cover live viewer hangs with an early inactive app

Refs: https://bugs.lttng.org/issues/1406

Change-Id: Iefe796d39ff39a04055acc5f95fc9440d5ee244a
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoTests: Add environment variables in tests to attach gdbserver
Kienan Stewart [Fri, 11 Oct 2024 15:40:34 +0000 (15:40 +0000)] 
Tests: Add environment variables in tests to attach gdbserver

When debugging tests, the current infrastructure in both the python and
bash test harnesses require that the user start the sessiond or relayd
beforehand, and run the tests with environment variables to stop the
spawning of the respective programs.

To facilitate the process, new environment variables are added to allow
gdbserver to be spawned and attach to the relayd or sessiond. The user
may then connect with gdb, for example: `gdb -ex "target
localhost:1001"`.

Change-Id: Id4d1b446c7d6682c011ef27682198fb4a503f5f4
Signed-off-by: kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoTests: Add wait_until_disconnected() to python test LiveViewer
Kienan Stewart [Thu, 10 Oct 2024 19:36:17 +0000 (19:36 +0000)] 
Tests: Add wait_until_disconnected() to python test LiveViewer

Change-Id: I70cf5e46a08c658b3fecbcea9317e1b2d9f769fb
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoTests: Add _LiveViewer.is_connected()
Kienan Stewart [Thu, 10 Oct 2024 18:42:25 +0000 (18:42 +0000)] 
Tests: Add _LiveViewer.is_connected()

Change-Id: I3adf51ceea08d62e3d23598b57460427cf5561ea
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoTests: Stop draining LiveViewer when iterator is inactive
Kienan Stewart [Thu, 10 Oct 2024 18:41:45 +0000 (18:41 +0000)] 
Tests: Stop draining LiveViewer when iterator is inactive

Change-Id: Ic67cea7c3fa57ed5c48bbab7d21d206a827852ad
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agodoc: Specify that string memory must be freed
Erica Bugden [Thu, 4 Jul 2024 19:26:16 +0000 (15:26 -0400)] 
doc: Specify that string memory must be freed

Specify that the caller of `get_session_name()` must explicitly free the
memory associated with the returned string.

Historically this software was written in C. C programmers have the
reflex to assume they are responsible for freeing memory. However, now
that this project is mixed C/C++ and is transitioning towards C++ the
assumption that developers will automatically know to free memory
(according to C programming conventions) does not hold as well. For this
reason, clarify that memory must be explicitly freed by the function
caller.

There are other C functions in this software that return variables that
must explicitly be freed by the caller. However, these changes have not
been applied consistently to all these cases. The assumption is that
this individual clarification still reduces confusion even if not
applied consistently.

Change-Id: I72d3568b5c1a7d8b7ff9b3d241bca1c5c55e47c1
Signed-off-by: Erica Bugden <ebugden@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
3 months agoFix: relayd: viewer_stream leak causes assertion failure on exit
Jérémie Galarneau [Fri, 11 Oct 2024 20:26:59 +0000 (16:26 -0400)] 
Fix: relayd: viewer_stream leak causes assertion failure on exit

Observed issue
==============

Running the test proposed in change #11584[1], the relay daemon aborts
when destroying the viewer_streams_ht as it is not empty.

Cause
=====

A viewer stream reference is leaked when sending streams to the live
client causing them to remain published in the viewer_streams_ht beyond
the lifetime of the viewer_connection.

The send_viewer_streams() function operates in two phases. First, it
iterates over the viewer_streams_ht to find streams that belong to the
target session and have not been sent yet.

In the second phase, it iterates over the session's unannounced stream
list. The commit message of 98b82dfa2 gives more background on the role
of the unannounced stream list.

When a viewer stream is created, two references are acquired:
  - one belongs to the global viewer_streams_ht,
  - the other belongs to the unannounced stream list.

When the viewer stream is eventually sent to the client, it is removed
from the unannounced stream list and that reference must be dropped.

Unfortunately, the reference is not dropped during the first phase.

Solution
========

Put the reference of the viewer streams that are sent during the first
phase of send_viewer_streams().

Known drawbacks
===============

None.

[1] https://review.lttng.org/c/lttng-tools/+/11584

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I7d5d5d3a77f6f08744b712d9ef1233a1d19a7124

4 months agoUse compiler-agnostic defines to silence warning
Jérémie Galarneau [Mon, 9 Sep 2024 15:53:28 +0000 (11:53 -0400)] 
Use compiler-agnostic defines to silence warning

g++ emits warnings that it can't recognize the clang-specific diagnostic
pragmas. They are replaced by the internal compiler-specific macros so
that nothing is emitted when g++ is used.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: I543987a861d2322aa2ef3b7d631f280d2ac999bf

4 months agoDisable clang warning for injected class name ambiguity in non_copyable_reference
Jérémie Galarneau [Fri, 6 Sep 2024 21:18:21 +0000 (21:18 +0000)] 
Disable clang warning for injected class name ambiguity in non_copyable_reference

clang raises a warning (-Winjected-class-name) due to ambiguity between
a constructor name and a type within the non_copyable_reference code.

Since clang could not infer the correct type context, this commit uses
`#pragma clang diagnostic` to disable the specific warning in the
affected area of the code.

The `push` and `pop` pragmas ensure that the warning is disabled only
where needed, preventing it from affecting other parts of the codebase,
and allowing us to maintain clean and clear code without unnecessary
compiler warnings.

A static_assert enforces that CustomDeleter::deleter is indeed a type,
although interpreting it as a constructor would be non-sensical here.

Change-Id: Ic0aac06d7af4272438f6f3d0275f29dc57a32194
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agolttng: remove use of variable length array
Jérémie Galarneau [Fri, 6 Sep 2024 21:39:23 +0000 (21:39 +0000)] 
lttng: remove use of variable length array

Use fmtlib to format the session attribute string when saving
the current session to .lttngrc. This eliminates a warning
emitted by clang (VLAs are not standard in C++).

Change-Id: Icdb8c1cc47adcbdfd82eefa8d2f1bf37a042a028
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoTests: Add and set new log-file-d for the tap driver
Kienan Stewart [Mon, 12 Aug 2024 19:59:15 +0000 (15:59 -0400)] 
Tests: Add and set new log-file-d for the tap driver

This adds a new option `--log-file-d` to the tap-driver, which will
create a `*.log.d` folder for each test when running `make check` and
the `LTTNG_TEST_LOG_DIR` accordingly.

Doing so allows the tests to be run in verbose and create logs in a
predictable location. These log folders are removed when running `make
clean`.

Change-Id: Ibcf7e2cb54098a3e9ccd828ca76df6efcf33431d
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoTests: Use _run_babeltrace_cmd where possible
Kienan Stewart [Wed, 31 Jul 2024 18:54:14 +0000 (14:54 -0400)] 
Tests: Use _run_babeltrace_cmd where possible

Change-Id: I5b279201a1806e8975de39fa85e666da3d0c5204
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoTests: Add environment variables for verbosity and log directory
Kienan Stewart [Tue, 30 Jul 2024 20:38:13 +0000 (16:38 -0400)] 
Tests: Add environment variables for verbosity and log directory

Observed issue
==============

When working locally with test failures, changes to `utils.sh` are often
required to produce verbose output.

Solution
========

By adding environment variables to allow running the various tools
with higher verbosity and potentially outputting to either stderr or
temporary files in a given directory test runners now have the option
to quickly get more information.

Known drawbacks
===============

Some tests depend on parsing either stderr or stdout, and these global
defaults may potentially make developing robust tests more
complicated.

Change-Id: I4128c421cdf9ce12827adc017dba5a298b62b6de
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoTests: Clean-up: Remove duplicate babeltrace calls
Kienan Stewart [Wed, 31 Jul 2024 18:55:07 +0000 (14:55 -0400)] 
Tests: Clean-up: Remove duplicate babeltrace calls

Change-Id: Iec2471dcc97c8a2d73df6afe1b93db95b6316c4f
Signed-off-by: Kienan Stewart <kstewart@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoClean-up: fix string truncation warning
Jérémie Galarneau [Thu, 5 Sep 2024 21:29:53 +0000 (21:29 +0000)] 
Clean-up: fix string truncation warning

Some version of g++ emits the following warning:
  'char* strncpy(char*, const char*, size_t)' output may be truncated
  copying 255 bytes from a string of length 255 [-Wstringop-truncation]

Using the internal strncpy wrapper, which checks for truncation,
fixes the problem.

Change-Id: I8ab0f2cca0247eee329b137f547d3dfed32c995f
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoFix: unload all kernel modules on sessiond exit
Michael Jeanson [Tue, 27 Aug 2024 18:19:03 +0000 (14:19 -0400)] 
Fix: unload all kernel modules on sessiond exit

Stopping a root lttng-sessiond that has loaded kernel modules currently
leaves some modules loaded, add them in the correct order to allow
unloading them all.

Change-Id: I71f25c798f8c42737d295f32a5e3708287168bc6
Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoclang-format: run clang-format on the tree
Jérémie Galarneau [Thu, 5 Sep 2024 20:23:39 +0000 (16:23 -0400)] 
clang-format: run clang-format on the tree

It appears re-running clang-format produces additional changes after
7c8d0f41c. This state now seems stable for the moment.

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
Change-Id: If46d7cab85fa6a5df41453b3ea3aa0e80782768d

4 months agoTests: test_session: reduce session count in unit test
Jérémie Galarneau [Thu, 5 Sep 2024 19:28:10 +0000 (19:28 +0000)] 
Tests: test_session: reduce session count in unit test

The destruction of the sessions takes 45 secondes to complete and
I don't see what testing 10 000 iterations tests that is not
achieved by 1 000 iterations.

That step now completes in 32ms on my development machine 🌪

Change-Id: I84e807750678144045974f27d084dd45f0f9713b
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoTests: test_session: fix conditionally-supported offsetof warning
Jérémie Galarneau [Thu, 5 Sep 2024 19:25:34 +0000 (19:25 +0000)] 
Tests: test_session: fix conditionally-supported offsetof warning

g++ produces the following warning when building test_session on the CI:

  /home/jenkins/workspace/dev_review_lttng-tools_master_linuxbuild/babeltrace_version/stable-2.0/build/std/conf/std/liburcu_version/stable-0.14/platform/deb12-amd64/deps/build/include/urcu/list.h:160:49: warning: ‘offsetof’ within non-standard-layout type ‘ltt_session’ is conditionally-supported [-Winvalid-offsetof]
     160 |         for (pos = cds_list_entry((head)->next, __typeof__(*(pos)), member); \
   /home/jenkins/workspace/dev_review_lttng-tools_master_linuxbuild/babeltrace_version/stable-2.0/build/std/conf/std/liburcu_version/stable-0.14/platform/deb12-amd64/deps/build/include/urcu/list.h:126:49: note: in expansion of macro ‘caa_container_of’
     126 | #define cds_list_entry(ptr, type, member)       caa_container_of(ptr, type, member)
         |                                                 ^~~~~~~~~~~~~~~~

Replace the problematic liburcu macros with the C++-ified internal
replacement wrappers.

Change-Id: I1396e9f6e1d99710150e03cabc33d07df3d8558a
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agovendor/argpar: sync with upstream repository
Simon Marchi [Mon, 18 Mar 2024 18:42:10 +0000 (14:42 -0400)] 
vendor/argpar: sync with upstream repository

Sync with argpar, commit 88d1c8ae5c47 ("tap: import some changes").

Change-Id: I2338119ffa55391f836ed2bacc09360fc3f47217
Signed-off-by: Simon Marchi <simon.marchi@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
4 months agoUpdate fmtlib to 11.0.2 and use the built library
Jérémie Galarneau [Fri, 30 Aug 2024 22:24:15 +0000 (18:24 -0400)] 
Update fmtlib to 11.0.2 and use the built library

Change-Id: I51c80c7d1829604a035e84dac7d87a48bb6fe05b
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
This page took 0.053318 seconds and 4 git commands to generate.