lttng-tools.git
12 years agoFix: Wrong returned error code on UST enable event
David Goulet [Fri, 21 Sep 2012 16:59:10 +0000 (12:59 -0400)] 
Fix: Wrong returned error code on UST enable event

Instead of sending back a FATAL error, correctly notify the user of a
failed UST enable event.

The bug261 was not reproducible anymore but led to this fix.

(Closes 261)

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd consumer commands to lttng.1 man page
David Goulet [Wed, 19 Sep 2012 16:25:52 +0000 (12:25 -0400)] 
Add consumer commands to lttng.1 man page

enable-consumer and disable-consumer are documented in lttng.1

The create command was also modified in version 2.1.

Some basic fixes of indentation, syntax and updates.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd lttng_health_check(3) man page
David Goulet [Tue, 18 Sep 2012 16:24:51 +0000 (12:24 -0400)] 
Add lttng_health_check(3) man page

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Remove LPOLLNVAL from consumer metadata revents
David Goulet [Tue, 18 Sep 2012 15:13:33 +0000 (11:13 -0400)] 
Fix: Remove LPOLLNVAL from consumer metadata revents

Without epoll(7), this value does not exist in the compat layer. For
now, this poll error is set within the LPOLLHUP in the poll(2) compat
header and POLLNVAL of epoll is set to POLLHUP so we basically don't
need it at all if we simply use the LPOLLHUP code.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Mismatch of field name between ust and tools
Christian Babeux [Mon, 17 Sep 2012 21:32:03 +0000 (17:32 -0400)] 
Fix: Mismatch of field name between ust and tools

The "written" field of the lttng_event_field and lttng_ust_field_iter
structures has been renamed to "nowrite" in the upstream version of
lttng-ust.

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd the written value when listing fields
David Goulet [Mon, 17 Sep 2012 16:25:41 +0000 (12:25 -0400)] 
Add the written value when listing fields

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Consumer return value check after mmap/splice
David Goulet [Mon, 17 Sep 2012 15:57:07 +0000 (11:57 -0400)] 
Fix: Consumer return value check after mmap/splice

With the feature of not sending the trace file padding over the network
for streaming, the return value of mmap or splice failed to match the
passed value when the trace is written on disk since we ignore the
padding for that case.

However, this was simply to print an error message so no behavior is
changed with this patch.

Detail comments were added to explain this "complex" return value check.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoDon't send the subbuffer padding for streaming
David Goulet [Thu, 13 Sep 2012 18:19:19 +0000 (14:19 -0400)] 
Don't send the subbuffer padding for streaming

For network streaming, with the mmap() mechanism only for now, the
consumer does NOT send the padding over the network. Instead, the size
of the padding is specified in the data header or metadata payload.

The lttng-relayd now is the one appending the zeros to the trace files.

Again, this feature is NOT available yet for splice output.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoUpdate coding style. Add error handling section
David Goulet [Wed, 12 Sep 2012 19:26:46 +0000 (15:26 -0400)] 
Update coding style. Add error handling section

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Returned error code in consumer on read buffer
David Goulet [Wed, 12 Sep 2012 19:19:05 +0000 (15:19 -0400)] 
Fix: Returned error code in consumer on read buffer

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoUpdate version to v2.1.0-rc3 v2.1.0-rc3
David Goulet [Wed, 12 Sep 2012 15:33:24 +0000 (11:33 -0400)] 
Update version to v2.1.0-rc3

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Relayd fix ret value when adding a connection
David Goulet [Tue, 11 Sep 2012 20:24:56 +0000 (16:24 -0400)] 
Fix: Relayd fix ret value when adding a connection

The pointer was used and not the struct size.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd new thread in consumer for metadata handling
David Goulet [Tue, 11 Sep 2012 17:48:56 +0000 (13:48 -0400)] 
Add new thread in consumer for metadata handling

To prioritize the consumption of the metadata, this patch introduce a
new thread in the consumer which exclusively handles metadata in order
to separate them from the trace data.

The motivation behind this change is that once a start command is done
on the tracer (kernel or UST), the start waits up to 10 seconds for the
metadata to be written (LTTNG_METADATA_TIMEOUT_MSEC). However, there is
a case where there is not enough space in the metadata buffers and the
tracer waits so to not drop data. After the timeout, if the write(s) is
unsuccessful, the start session command fails.

The previous problem can occur with network streaming with high
throughput data such as enable-event -a -k and a low bandwitdh
connection.

The separation between metadata and trace data does the trick where
consuming metadata does not depend anymore on the arbitrary time to
stream trace data while metadata buffers needs to get consumed.

Of course, this fix is more _visible_ on multiprocessor/core machines
but can also help on single processor to prioritize metadata
consumption.

It helps on single-processor too because the scheduler will schedule
both the data and metadata threads. Even if the data thread need to send
many MB of data, if the metadata thread sends small enough metadata we
should be good with half of the CPU time.

I see that the metadata reaches easily 192k for kernel traces though. On
a 5KB/s connection, this sums up to 38s. However, thanks to the fact
that the 10s delay is allowed between each sub-buffer, we don't reach
the limit. This limits us to small trace packet sizes though, if we ever
have lots of metadata. E.g. on a 5KB/s connection, metadata buffers
configured as 2x64KB, with metadata size of e.g. 512KB, would trigger
the 10s delay error.

So we should be good for now, but removing this arbitrary 10s delay is
something to keep in mind as future improvement.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: consumer recv command error path
David Goulet [Tue, 11 Sep 2012 19:28:59 +0000 (15:28 -0400)] 
Fix: consumer recv command error path

See bug #332.

The debug output now prints this and does not infinite loop:

DEBUG1: Communication interrupted on command socket [in
lttng_consumer_thread_receive_fds() at consumer.c:1784]
DEBUG1: consumer_thread_receive_fds exiting [in
lttng_consumer_thread_receive_fds() at consumer.c:1794]

Fixes #332

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix filter: fix recent regressions
Mathieu Desnoyers [Mon, 10 Sep 2012 14:45:41 +0000 (10:45 -0400)] 
Fix filter: fix recent regressions

Fix:
commit d93c4f1ffcffa73102e3299276f2f83951a68c36
Author: Christian Babeux <christian.babeux@efficios.com>
Date:   Thu Sep 6 13:40:19 2012 -0400

    Fix: Accept bytecode of length 65536 bytes

Broke the filter: it changed the reloc table format, without knowledge
of UST, and without good reason: it should stay { uint16_t, string } --
it does not need a uint32_t offset. Add a check for the value returned
by bytecode_get_len() when populating the reloc table.

Fix:
commit 5ddb0a08c5c3ca917b025032b864d78e53c7c68a
Author: Christian Babeux <christian.babeux@efficios.com>
Date:   Mon Aug 27 14:48:21 2012 -0400

    Fix: Generation of bytecode longer than 32768 bytes fails

Mixed the concepts of "len" and "alloc_len". It was therefore not
checking the bounds correctly, and was not zeroing the memory range
expected to be zeroed, causing out-of-bound array access.

Acked-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoUpdate lttng-ust-abi.h from upstream lttng-ust
David Goulet [Fri, 7 Sep 2012 17:41:10 +0000 (13:41 -0400)] 
Update lttng-ust-abi.h from upstream lttng-ust

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Accept bytecode of length 65536 bytes
Christian Babeux [Thu, 6 Sep 2012 17:40:19 +0000 (13:40 -0400)] 
Fix: Accept bytecode of length 65536 bytes

In order to support the filter bytecode maximum length (65536 bytes),
the lttng_ust_filter_bytecode len field type must be able to hold more
than a uint16_t. Change the field type to a uint32_t.

Also, since the relocation table is located at the end of the actual
bytecode, the reloc_table_offset (reloc_offset in ust-abi) field must
support offset values larger than 65535. Change the field type to a
uint32_t. This change will allow support of relocation table appended to
larger bytecode without breaking the ABI if the need arise in the
future.

Both changes currently breaks the filter ABI, but this should be a
reasonable compromise since the filtering feature has not been released
yet.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Generation of bytecode longer than 32768 bytes fails
Christian Babeux [Mon, 27 Aug 2012 18:48:21 +0000 (14:48 -0400)] 
Fix: Generation of bytecode longer than 32768 bytes fails

The bytecode buffer length field is currently limited to a uint16_t.  A
larger buffer, lttng_filter_bytecode_alloc, is the underlying storage
for the bytecode.

The current allocation policy dictate that the alloc buffer size must be
doubled everytime the bytecode size plus padding exceeds its capacity.

A problem arise when generating bytecode larger than 32768 bytes.

e.g.:

Legend
* required_len: new bytecode len
* old_len: current alloc_len
* new_len: new alloc_len

src/bin/lttng/lttng enable-event event:bla -s foo -u --filter "`perl -e 'print "intfield" . " && 1" x2730'`"
UST event ust_tests_hello:tptest created in channel channel0
[debug liblttng-ctl] Generating IR... [debug liblttng-ctl] done
[debug liblttng-ctl] Validating IR... [debug liblttng-ctl] done
[debug liblttng-ctl] Generating bytecode... required_len = 11, old_len = 4, new_len = 16
required_len = 7, old_len = 4, new_len = 8
required_len = 16, old_len = 8, new_len = 16
required_len = 19, old_len = 16, new_len = 32
required_len = 40, old_len = 32, new_len = 64
required_len = 67, old_len = 64, new_len = 128
required_len = 136, old_len = 128, new_len = 256
required_len = 259, old_len = 256, new_len = 512
required_len = 520, old_len = 512, new_len = 1024
required_len = 1027, old_len = 1024, new_len = 2048
required_len = 2056, old_len = 2048, new_len = 4096
required_len = 4099, old_len = 4096, new_len = 8192
required_len = 8200, old_len = 8192, new_len = 16384
required_len = 16387, old_len = 16384, new_len = 32768
required_len = 32776, old_len = 32768, new_len = 65536 <-- Overflow 16-bits
Generate bytecode error
Error: Error setting filter

The last new_len exceed the range of 16-bits values. In order to support
the largest bytecode length (65535), the underlying alloc buffer len
must be able to store more than 65535. Fix this by using a uint32_t for
alloc_len.

Also, add a check to ensure that a bytecode longer than
LTTNG_FILTER_MAX_LEN (65535) bytes can't be generated.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Filter bytecode alloc buffer size must be a power of 2
Christian Babeux [Mon, 27 Aug 2012 18:48:19 +0000 (14:48 -0400)] 
Fix: Filter bytecode alloc buffer size must be a power of 2

The current allocation policy for the filter bytecode buffer is to
double the size each time the underlying buffer can no longer contain
the entire bytecode plus padding.

In some cases, the initial allocation length is not a multiple of 2,
thus possibly leading to odd-looking allocation size each time the
buffer size is doubled.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd lttng-ctl SWIG python bindings
Danny Serres [Thu, 9 Aug 2012 15:24:02 +0000 (11:24 -0400)] 
Add lttng-ctl SWIG python bindings

The lttng-tools Python module can be used to directly control the
lttng-tools API inside Python, using 'import lttng'.

Therefore, it becomes possible to create a trace, add events, start/stop
tracing, destroy a session and so on from within Python.

SWIG >= 2.0 is used to create the wrapper and its 'warning md variable
unused' bug is patched in Makefile.am.

In the interface file, struct and enum are directly copied from lttng.h
(all changes must be made in both files).

To install with python bingings, configure using
    --enable-python-bindings

Please note that this extra feature is added in extras/ hence not
supported and not yet shipped by default with the tarball or packages.

Signed-off-by: Danny Serres <danny.serres@efficios.com>
Signed-off-by: Yannick Brosseau <yannick.brosseau@gmail.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd C++ support to API header files
David Goulet [Mon, 27 Aug 2012 16:49:35 +0000 (12:49 -0400)] 
Add C++ support to API header files

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoLibrarify filter in liblttng-ctl and hide symbols
David Goulet [Fri, 24 Aug 2012 19:13:34 +0000 (15:13 -0400)] 
Librarify filter in liblttng-ctl and hide symbols

Create the libfilter.la inside the liblttng-ctl directory so we can
statically link with lttng-ctl and the tests.

Also hide the dynamic symbol of libfilter used in liblttng-ctl.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoSet hidden visibility for calls used in lttng-ctl
David Goulet [Fri, 24 Aug 2012 18:36:58 +0000 (14:36 -0400)] 
Set hidden visibility for calls used in lttng-ctl

The liblttng-ctl had multiple dynamic symbols that are only used inside
the lttng-tools code tree and should not be exposed to the user.

This commit sets every function calls found with "objdump -T" with a
hidden visibility attribute.

The strpbrk_or_eos() is set static and the struct net_families as well
so we don't export those two symbols.

At this stage there is still the filter_* calls that need to be fixed.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoNotify the user if a filter is already enabled
Christian Babeux [Fri, 24 Aug 2012 02:05:12 +0000 (22:05 -0400)] 
Notify the user if a filter is already enabled

When using the enable-event command in conjunction with the --filter
option, a user can specify a filter expression to refine the trace
output.

As stated in the lttng(1) man page, only the first activation of a
filter on an event will work. Subsequent activation of any filter
expression on the same event will fail.

e.g:

> lttng enable-event app:tp -s session -u --filter 'somefield > 42'

Case: invalid filter expression
> lttng enable-event app:tp -s session -u --filter 'invalid expression'
  Error: Error setting filter
  Warning: Some command(s) went wrong

> ...

Case: filter already enabled for event app:tp
> lttng enable-event app:tp -s session -u --filter 'someotherfield < 42'
  Error: Error setting filter
  Warning: Some command(s) went wrong

This commit differentiate the case where a filter was already set for
the specified event from the generic 'Error setting filter' error
message.

e.g:

> lttng enable-event app:tp -s session -u --filter 'somefield > 42'

Case: invalid filter expression
> lttng enable-event app:tp -s session -u --filter 'invalid expression'
  Error: Error setting filter
  Warning: Some command(s) went wrong

> ...

Case: filter already enabled for event app:tp
> lttng enable-event app:tp -s session -u --filter 'someotherfield < 42'
  Error: Filter on event app:tp is already enabled (channel 0, session session)
  Warning: Some command(s) went wrong

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoInstall lttng-error.h and include it in lttng.h
David Goulet [Fri, 24 Aug 2012 15:15:29 +0000 (11:15 -0400)] 
Install lttng-error.h and include it in lttng.h

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd lttng-error.h containing every API err. code
David Goulet [Wed, 22 Aug 2012 19:04:52 +0000 (15:04 -0400)] 
Add lttng-error.h containing every API err. code

Move all error codes from sessiond-comm.h to lttng-error.h and rename
them changing the prefix LTTCOMM* to the LTTNG_ERR_*.

With this change, the error codes will soon be public in
<lttng/lttng-error.h> that lttng.h will include by default.

This commit also removes a bunch of unused code but does NOT changed the
values so we don't break the 2.0 API.

The lttng_strerror() call uses the new error_get_str function. The
lttcomm_* API now only have internal communication error code such as
the consumerd errors. Those codes must NEVER be exposed to the public
API or, in that case, must be moved to lttng-error.h *without* changing
the current values of the lttng_error_code enum.

The gaps in the lttng_error_code enum found in lttng-error.h can be used
for new error codes but the assigned value are considered immutable for
the 2.x API.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: missing hostname context
Julien Desfossez [Thu, 23 Aug 2012 17:24:46 +0000 (13:24 -0400)] 
Fix: missing hostname context

This context adds the hostname context field for the event(s) selected.
It is particularly useful when tracing a machine with containers (lxc),
that way we can easily distinguish events generated inside a container.

The API is extended but no features nor behaviors are changed.

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoUpdate version to v2.1.0-rc2 v2.1.0-rc2
David Goulet [Wed, 22 Aug 2012 16:41:55 +0000 (12:41 -0400)] 
Update version to v2.1.0-rc2

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: put back 2.0 output text for lttng create cmd
David Goulet [Wed, 22 Aug 2012 16:27:23 +0000 (12:27 -0400)] 
Fix: put back 2.0 output text for lttng create cmd

The create command was printing new messages with the changes made from
2.0 to 2.1 which is considered to be an API breakage.

This patch puts back the message output of 2.0 for the lttng create
command.

Reported-by: <bernd.hufmann@ericsson.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: remove set subdir call that uses bad ptr
David Goulet [Wed, 22 Aug 2012 16:12:27 +0000 (12:12 -0400)] 
Fix: remove set subdir call that uses bad ptr

When copying a consumer object from the tracing session to a specific
domain session, the original consumer of the session was modified by
appending the session name and datetime once again.

We ended up removing the call since at this stage in the code, the
session name and date is already appended if necessary.

Reported-by: <bernd.hufmann@ericsson.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFilter: Handle the unary bitwise not operator (~) with an unsupported op error
Christian Babeux [Wed, 22 Aug 2012 13:34:03 +0000 (09:34 -0400)] 
Filter: Handle the unary bitwise not operator (~) with an unsupported op error

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: missing mutex unlock on register consumer err
David Goulet [Tue, 21 Aug 2012 16:31:14 +0000 (12:31 -0400)] 
Fix: missing mutex unlock on register consumer err

Reported-by: Julien Desfossez <julien.desfossez@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoRemove underscore from ifndef of lttng.h
David Goulet [Tue, 21 Aug 2012 15:51:23 +0000 (11:51 -0400)] 
Remove underscore from ifndef of lttng.h

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoRemove unused define in lttng.h
David Goulet [Tue, 21 Aug 2012 15:49:44 +0000 (11:49 -0400)] 
Remove unused define in lttng.h

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoStandardize lttng command line usage text
David Goulet [Tue, 21 Aug 2012 15:38:27 +0000 (11:38 -0400)] 
Standardize lttng command line usage text

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoMerge duplicate code in consumer for destroy relayd
David Goulet [Mon, 20 Aug 2012 21:12:51 +0000 (17:12 -0400)] 
Merge duplicate code in consumer for destroy relayd

Kernel and UST were using the same exact code for the DESTROY_RELAYD
command received from the session daemon.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoMerge duplicate code in consumer for add relayd
David Goulet [Mon, 20 Aug 2012 20:52:07 +0000 (16:52 -0400)] 
Merge duplicate code in consumer for add relayd

The kernel and UST consumer were basically using the same exact code
when receiving a ADD_RELAYD command from the session daemon. We have
merge it in one simple function that both uses.

The daemon behavior is NOT altered with this patch.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Possible buffer overflows in strncat() usage
Christian Babeux [Mon, 20 Aug 2012 19:56:06 +0000 (15:56 -0400)] 
Fix: Possible buffer overflows in strncat() usage

When using strncat, the size_t n argument must indicate the left over
space remaining in the buffer, *not* the total buffer size. Also, proper
care must be taken for the case where src contains n or more bytes and
thus allow space for the null terminating byte appended to dest (e.g.
strncat() will write n+1 bytes).

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoMove code out of main.c and fix some issues
David Goulet [Mon, 20 Aug 2012 19:42:10 +0000 (15:42 -0400)] 
Move code out of main.c and fix some issues

This is a "code location refactoring". The file main.c was getting a bit
too HUGE so this commit splits the command subsystem of the session
daemon into cmd.c/.h and all helper functions used.

This commit also fixes missing rcu read side lock and the consumer
output hashtable memory leak on destroy.

Minor changes were made to functions call to pass needed variables from
the main.c to the command subsystem.

The behavior was not changed nor altered in any way.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoUpdate version to v2.1.0-rc1 v2.1.0-rc1
David Goulet [Fri, 17 Aug 2012 19:50:00 +0000 (15:50 -0400)] 
Update version to v2.1.0-rc1

Bump internal UST major version.

Fix comments and debug output to follow this change.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd missing decl. when UST is disabled
David Goulet [Fri, 17 Aug 2012 19:48:23 +0000 (15:48 -0400)] 
Add missing decl. when UST is disabled

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd missing scripts to the dist package
David Goulet [Fri, 17 Aug 2012 19:38:05 +0000 (15:38 -0400)] 
Add missing scripts to the dist package

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: UST app major version check
David Goulet [Fri, 17 Aug 2012 19:23:09 +0000 (15:23 -0400)] 
Fix: UST app major version check

Makes a direct match between the major version of the application and
the one supported by lttng-tools (==).

Note that this version numbering is an internal scheme between UST and
lttng-tools. It has no link whatsoever with the public version of the
toolchain.

The 2.1.0-rc1 release commit will make sure this version corresponds to
the UST rc1.

CC: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix relayd version check and remove unused code
David Goulet [Fri, 17 Aug 2012 19:03:39 +0000 (15:03 -0400)] 
Fix relayd version check and remove unused code

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix lttng view using lttng list sessions
David Goulet [Fri, 17 Aug 2012 18:02:56 +0000 (14:02 -0400)] 
Fix lttng view using lttng list sessions

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix comments and help text
David Goulet [Fri, 17 Aug 2012 17:02:14 +0000 (13:02 -0400)] 
Fix comments and help text

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: lttng list command with network path
David Goulet [Fri, 17 Aug 2012 16:47:16 +0000 (12:47 -0400)] 
Fix: lttng list command with network path

With network consumer, the session path was simply NULL or set to the
wrong local filesystem path when a consumer was set to use the network.

This commit adds the support for network path description when a lttng
list command is received.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoDeny register consumer if one exists
David Goulet [Thu, 16 Aug 2012 20:12:12 +0000 (16:12 -0400)] 
Deny register consumer if one exists

Is a LTTNG_REGISTER_CONSUMER command is received and a consumer is
already spawned, the command is denied returning a kernel consumer
error.

CC: Julien Desfossez <julien.desfossez@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Subdirectory handling for lttng and sessiond
David Goulet [Thu, 16 Aug 2012 18:57:13 +0000 (14:57 -0400)] 
Fix: Subdirectory handling for lttng and sessiond

The subdirectory creation was not right for a number of scenarios. With
this commit, if the user defines a path (either local or remote), the
session name will NOT be added to the path.

To handle the timestamp creation of the directory, a hidden function was
added to the lttng-ctl (meaning not visible through lttng.h) which takes
the date and time as a string and append it to the URI subdirectory if
none was provided for a network destination. This function is declared
as extern in the lttng client so it could link to it through the
liblttng-ctl (_lttng_create_session_ext).

It allows the timestamp of a session to be created on the client side
and keep the lttng_create_session() behavior intact meaning if a path is
define by the user when using the API directly, the traces are written
in that path without an extra session name directory.

There is one case where the timestamp is generated on the daemon side.
When creating a session with a local filesystem destination and then
switching to a network consumer, at that time the timestamp is
generated.

The real problematic, and why this has been done this way, is because we
can't transfer the timestamp between the client and the session daemon.
The only possible way that could be achieve right now is by parsing the
subdirectory of the URI containing the session name and timestamp
appended. This could be error prone and bring false negative.

CC: Julien Desfossez <julien.desfossez@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoCleanup: Remove unused get_default_session_name()
Christian Babeux [Wed, 15 Aug 2012 16:39:31 +0000 (12:39 -0400)] 
Cleanup: Remove unused get_default_session_name()

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Invalid free on session_name when destroying session
Christian Babeux [Wed, 15 Aug 2012 16:39:30 +0000 (12:39 -0400)] 
Fix: Invalid free on session_name when destroying session

The session_name should not be free(3) if the user has specified a
session name on the command line. Also, the caller is responsible to
free the allocated string when calling get_session_name().  Handle both
cases gracefully.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: 32-bit print format type mismatch warnings
Mathieu Desnoyers [Thu, 16 Aug 2012 19:17:11 +0000 (15:17 -0400)] 
Fix: 32-bit print format type mismatch warnings

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoCleanup: symbols in parser protected -> hidden
Mathieu Desnoyers [Thu, 16 Aug 2012 14:51:01 +0000 (10:51 -0400)] 
Cleanup: symbols in parser protected -> hidden

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoFix: set kernel consumer output directory
David Goulet [Thu, 16 Aug 2012 14:46:26 +0000 (10:46 -0400)] 
Fix: set kernel consumer output directory

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd commented debug lines to test
David Goulet [Wed, 15 Aug 2012 20:50:27 +0000 (16:50 -0400)] 
Add commented debug lines to test

Useful when a test fails, just uncomment the lines :)

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: multiple consumer locking problems
David Goulet [Wed, 15 Aug 2012 20:41:37 +0000 (16:41 -0400)] 
Fix: multiple consumer locking problems

First, a lot of rcu_read_unlock() were missing the consumer command
handler which could make a rcu lock and return on error without
unlocking.

Fix goto error path in the consumer.

Fix a missing lock control socket mutex.

Fix memory leaks in a UST session where the consumers output object were
not freed during a destroy command.

Add a relayd sockets sent flag so we don't resend existing sockets to
the consumer during an enable_consumer command.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoBackport HT fixes from urcu upstream
David Goulet [Wed, 15 Aug 2012 15:47:06 +0000 (11:47 -0400)] 
Backport HT fixes from urcu upstream

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoMake the configure check for ustctl_set_filter
David Goulet [Wed, 15 Aug 2012 15:10:36 +0000 (11:10 -0400)] 
Make the configure check for ustctl_set_filter

This function call will be part of the 2.1 release and lttng-tools 2.1
needs lttng-ust-ctl 2.1 for user space tracing to work.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix typos in uri_switch test
David Goulet [Wed, 15 Aug 2012 14:41:46 +0000 (10:41 -0400)] 
Fix typos in uri_switch test

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoNew URI switching tests
Christian Babeux [Tue, 14 Aug 2012 22:02:32 +0000 (18:02 -0400)] 
New URI switching tests

test_uri_switch_localhost_folder:
Random switching of the ouput folder for streaming on localhost.

test_uri_switch_file_network:
Create a session with a file:// URI and enable the consumer with a
net:// URI.

test_uri_switch_network_file:
Create a session with a net:// URI and enable the consumer with a
file:// URI.

All tests support IPv4 and IPv6 streaming targets.

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Possible invalid read on string in set_ip_address()
David Goulet [Tue, 14 Aug 2012 21:14:04 +0000 (17:14 -0400)] 
Fix: Possible invalid read on string in set_ip_address()

Acked-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Use Python 2.x for the run-report script
Christian Babeux [Tue, 14 Aug 2012 20:33:39 +0000 (16:33 -0400)] 
Fix: Use Python 2.x for the run-report script

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoActivate streaming tests in make check
David Goulet [Tue, 14 Aug 2012 21:08:12 +0000 (17:08 -0400)] 
Activate streaming tests in make check

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Memory leaks in uri_parsing unit tests.
Christian Babeux [Tue, 14 Aug 2012 20:33:41 +0000 (16:33 -0400)] 
Fix: Memory leaks in uri_parsing unit tests.

lttng_uri need to be free'd by calling uri_free().

Add: Unit tests for uri comparison (uri_cmp).

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoExtend API and remove lttng_uri from lttng.h
David Goulet [Tue, 7 Aug 2012 19:47:19 +0000 (15:47 -0400)] 
Extend API and remove lttng_uri from lttng.h

This is a big commit but actually not adding much.

First, struct lttng_uri is removed from lttng.h and replaced by calls
using string URL. The lttng_set_consumer_url is changed to "_url" taking
an handle, a control and a data string URL. You can find the definition
in proposal doc/proposals/0004-lttng-address-api.txt.

The lttng_create_session_uri is removed and the path from the original
lttng_create_session is now used to either pass a local filesystem full
path or a string URL.

Multiple fixes in uri_parse() also especially for IPv6 where address
MUST be enclosed in brackets [] in the string representation.

The help of lttng create and enable-consumer is updated and improved.

Also, the enable-consumer command can now be used without a domain
switch (-u/-k) so the destination URL is set to the global tracing
session and on both UST and kernel session if there is an existing
consumer.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: bad file descriptor on close in health check
David Goulet [Tue, 14 Aug 2012 20:13:00 +0000 (16:13 -0400)] 
Fix: bad file descriptor on close in health check

The new socket used to store the accept() socket was not initialized
making the close() failed if NO health check command was previously
done.

Reported-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: remove adjustment on written var for metadata
David Goulet [Tue, 14 Aug 2012 17:12:24 +0000 (13:12 -0400)] 
Fix: remove adjustment on written var for metadata

This was generating the following error each time metadata was streamed
over the network.

    Error: Error writing to tracefile

The return value was off by 8 bytes which is the header stream id size.
However, the "written" variable is not used in the metadata command to
the relayd so there is no use of updating it to fit the expected len of
the mmap() caller.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoUpdate proposal 0004-lttng-address-api
David Goulet [Tue, 14 Aug 2012 14:30:26 +0000 (10:30 -0400)] 
Update proposal 0004-lttng-address-api

Change the lttng_set_consumer_url(...) to use two URL arguments for the
control and data.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Missing libs dependencies in configure check for lttng-ust-ctl
Christian Babeux [Fri, 3 Aug 2012 20:31:28 +0000 (16:31 -0400)] 
Fix: Missing libs dependencies in configure check for lttng-ust-ctl

The lttng-ust-ctl library depends on liburcu-{common,bp,cds}.  The
AC_CHECK_LIBRARY macro can't automatically resolve dependents libraries
(ala libtool), so any additionnals dependencies must be manually
specified.

Also, the AC_CHECK_LIB action-if-found case for the lttng-ust-ctl check
is modified to have a similar behavior as the default action, which is
to define HAVE_LIBxxx and append -lxxx to $LIBS, *except* for the later
step. This is to ensure that any future addition of AC_CHECK_LIB after
the one for lttng-ust-ctl will not need to append the liburcu
dependencies or fail unexpectedly.

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Libtool fails to find dependent libraries when cross-compiling lttng-tools
Christian Babeux [Fri, 3 Aug 2012 20:31:27 +0000 (16:31 -0400)] 
Fix: Libtool fails to find dependent libraries when cross-compiling lttng-tools

This problem arise when cross compiling and linking libraries with
indirect libraries dependencies (such as liblttng-ust). This "bug" is
caused by an upstream modification in the libtool package on Debian
system. The libtool "link_all_deplibs" flag is set to "no" by default
on linux targets (AFAIK, other distros set it to "unknown").

The chosen solution is to detect such cases via the configure script
and automagically patch the libtool.m4 by forcing the "link_all_deplibs"
to "unknown".

This fixup can be disabled with the appropriate configure flag:

./configure --disable-libtool-linkdep-fixup

Sample configure output on affected systems:

checking for occurence(s) of link_all_deplibs = no in
 ./config/libtool.m4... 3
configure: WARNING: the detected libtool will not link all
     dependencies, forcing link_all_deplibs = unknown

Acked-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: protect visibility of filter-parser functions
Mathieu Desnoyers [Fri, 10 Aug 2012 21:19:53 +0000 (17:19 -0400)] 
Fix: protect visibility of filter-parser functions

Some functions share the same name between ctf-parser/lexer and
filter-parser/lexer.

This patch protects the visibility of the functions with the same name
to avoid linkage confusions.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
12 years agoFix: Wrong domain used when initializing IPv6 sockets
Christian Babeux [Fri, 10 Aug 2012 17:22:52 +0000 (13:22 -0400)] 
Fix: Wrong domain used when initializing IPv6 sockets

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Off by one in lttcomm_sock_domain enum
Christian Babeux [Fri, 10 Aug 2012 17:22:51 +0000 (13:22 -0400)] 
Fix: Off by one in lttcomm_sock_domain enum

The wrong value is used to lookup the socket creation function in
net_families causing a segfault when using IPv6.

Signed-off-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd lttng URL proposal for the public API
David Goulet [Tue, 7 Aug 2012 16:08:30 +0000 (12:08 -0400)] 
Add lttng URL proposal for the public API

Initial import after three round of review on lttng-dev mailing list.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoRevert "Cleanup: YYPARSE_PARAM and YYLEX_PARAM are deprecated in bison 2.6"
Mathieu Desnoyers [Tue, 7 Aug 2012 17:40:28 +0000 (13:40 -0400)] 
Revert "Cleanup: YYPARSE_PARAM and YYLEX_PARAM are deprecated in bison 2.6"

This reverts commit 9d3e6f62fde8c9ca7335ba12ee4560bc887b41a5.

Still needed for bison 2.5.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoCleanup: YYPARSE_PARAM and YYLEX_PARAM are deprecated in bison 2.6
Mathieu Desnoyers [Tue, 7 Aug 2012 15:23:21 +0000 (11:23 -0400)] 
Cleanup: YYPARSE_PARAM and YYLEX_PARAM are deprecated in bison 2.6

See https://lists.gnu.org/archive/html/info-gnu/2012-07/msg00011.html

Reported-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoFilter fix: support bison 2.6
Mathieu Desnoyers [Tue, 7 Aug 2012 15:19:52 +0000 (11:19 -0400)] 
Filter fix: support bison 2.6

Bison 2.6 generates warnings and errors if filter-ast.h is not included
before filter-parser.h.

Reported-by: Christian Babeux <christian.babeux@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoCleanup: Remove misplaced config.h include
Mathieu Desnoyers [Tue, 7 Aug 2012 14:43:18 +0000 (10:43 -0400)] 
Cleanup: Remove misplaced config.h include

config.h should _always_ be included first, before system headers, to
ensure coherent size_t across the file.

We force the config.h inclusion by the compiler, so this is not an issue
(configure.ac: DEFAULT_INCLUDES="-I\$(top_srcdir) -I\$(top_builddir)
-I\$(top_builddir)/src -I\$(top_builddir)/include -include config.h"),
but let's remove this misleading line of code.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix socket lock and PID in register_consumer
David Goulet [Mon, 6 Aug 2012 17:57:31 +0000 (13:57 -0400)] 
Fix socket lock and PID in register_consumer

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd lttng address API proposal. Initial import
David Goulet [Tue, 31 Jul 2012 16:40:01 +0000 (12:40 -0400)] 
Add lttng address API proposal. Initial import

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoDivide read subbuffer consumer function
David Goulet [Tue, 31 Jul 2012 16:35:39 +0000 (12:35 -0400)] 
Divide read subbuffer consumer function

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoMerge mmap/splice fct. for both consumers
David Goulet [Mon, 30 Jul 2012 16:41:10 +0000 (12:41 -0400)] 
Merge mmap/splice fct. for both consumers

Between UST and kernel, there was duplicate portion of code for the mmap
and splice read subbuffer functions.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd consumer socket object and relayd commands
David Goulet [Thu, 26 Jul 2012 18:54:20 +0000 (14:54 -0400)] 
Add consumer socket object and relayd commands

This commit adds a consumer_socket object and a lock to access it. This
fixes the possible concurrent access to the consumer(s) socket between
threads in the session daemon.

This also introduce the use of a sequence number during streaming so the
relayd can know when to close the trace file according to the sent
versus the expected sequence number.

Introduce the close_stream command between the consumer and relayd. Upon
a destroy session or a stream that hung up, the consumer now sends the
close stream command indicating the last sequence number. The consumer
never closes the relayd sockets unless a destroy relayd command (new) is
received from the session daemon which occurs on a destroy session
command.

Some fixes here and there but overall the streaming synchronization
issues have been resolved.

Signed-off-by: David Goulet <dgoulet@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoFix: relayd metadata size
Mathieu Desnoyers [Wed, 25 Jul 2012 21:39:12 +0000 (17:39 -0400)] 
Fix: relayd metadata size

Trying to see better how the metadata size was handled, I ended up doing
a couple of modifications to the size value sent by the sender: given
that this header contains a size value that should cover both the
metadata packet header size, and the following payload size (this is how
kernel splice sent behaves), I modified kernel/UST mmap to do the same.

I therefore changed the recently updated recv_metadata payload size
calculation to match the encoded size, which should hopefully work for
all kernel splice/mmap and UST mmap cases.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoMinor fix for the UST streaming test
David Goulet [Wed, 25 Jul 2012 21:03:47 +0000 (17:03 -0400)] 
Minor fix for the UST streaming test

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Off by uint64_t in the metadata transfer
David Goulet [Wed, 25 Jul 2012 20:59:30 +0000 (16:59 -0400)] 
Fix: Off by uint64_t in the metadata transfer

This patch also adds a couple of debug output along with this fix.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: consumer relay sender RCU usage
Mathieu Desnoyers [Wed, 25 Jul 2012 20:31:02 +0000 (16:31 -0400)] 
Fix: consumer relay sender RCU usage

* RCU read-side lock needs to be held across entire usage of the
  returned structure pointer, not just the lookup.
* Moving refcount inc/dec to uatomic ops. Theoretically not 100%
  required for now, but won't hurt when we move to multithread.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agoAdd comments for the relayd ctrl socket mutex
David Goulet [Wed, 25 Jul 2012 17:21:14 +0000 (13:21 -0400)] 
Add comments for the relayd ctrl socket mutex

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoDeactivate streaming tests from make check
David Goulet [Wed, 25 Jul 2012 14:57:05 +0000 (10:57 -0400)] 
Deactivate streaming tests from make check

The new streaming tests fail so no need to make them global to the check
process until they are fixed for now or we'll cause problem(s) to our
packagers.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd unit tests for URIs
David Goulet [Wed, 25 Jul 2012 14:21:09 +0000 (10:21 -0400)] 
Add unit tests for URIs

Tests uri_parse() using multiple URI strings where some are bad and some
are well formed.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd UST and kernel streaming tests
David Goulet [Tue, 24 Jul 2012 22:31:58 +0000 (18:31 -0400)] 
Add UST and kernel streaming tests

Add four tests for network streaming. For user space, we have two tests
where tracing is started before and after the applications.

For kernel tests, we enable an event before and after the start command.

At this stage, some tests fails which indicates a bug.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: some error in uri.c were still using printf()
David Goulet [Wed, 25 Jul 2012 14:18:41 +0000 (10:18 -0400)] 
Fix: some error in uri.c were still using printf()

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: don't install the filter grammar test
David Goulet [Tue, 24 Jul 2012 19:55:32 +0000 (15:55 -0400)] 
Fix: don't install the filter grammar test

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd health counter to ust-app.c
David Goulet [Tue, 24 Jul 2012 17:34:37 +0000 (13:34 -0400)] 
Add health counter to ust-app.c

Any UST command can take an unknown amount of time to complete
especially with multiple applications and/or sessions even though it's
the correct behavior, the health check must not flag a bad health so
this patch adds a series of health code update to each ustctl actions in
ust-app.c.

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: typo in time_diff() with nsec difference
David Goulet [Tue, 24 Jul 2012 17:37:10 +0000 (13:37 -0400)] 
Fix: typo in time_diff() with nsec difference

Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoAdd time validation to health check
Mathieu Desnoyers [Tue, 24 Jul 2012 15:52:36 +0000 (11:52 -0400)] 
Add time validation to health check

The health check code does not have a notion of "time flow": therefore,
two consecutive calls to lttng_health_check() might end up returning a
bad state (0) just because there was too little time between the
invocations.

Add some time information to the "last" snapshot, so we can do a time
delta between the current and last snapshot to figure out if we need to
report the thread as stalled or not.

At this point, a thread is considered stalled with a wait time of over
20 seconds.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: Multiple health monitoring fixes
Mathieu Desnoyers [Mon, 23 Jul 2012 18:00:42 +0000 (14:00 -0400)] 
Fix: Multiple health monitoring fixes

* Fix modulo operation bug on
  #define HEALTH_IS_IN_CODE(x) (x % HEALTH_POLL_VALUE) which is causing
  the check to think it is never within code.  (x % 1 always equals 0).
  Simplify this by using a simple & on the poll value, and remove the
  IS_IN_CODE, using ! on IS_IN_POLL instead (which removes nothing to
  clarity).

* Atomic operations should apply to at most "unsigned long" (32-bit on
  32-bit arch) rather than uint64_t.

* Separate the "error" condition from the counters. We clearly cannot
  use the "0" value as an error on 32-bit counters anymore, because they
  can easily wrap.

* Introduce "exit" condition, will be useful for state tracking in the
  future. Error and exit conditions implemented as flags.

* Add "APP_MANAGE" in addition to "APP_REG" health check, to monitor the
  app registration thread (which was missing, only the app manager
  thread was checked, under the name "APP_REG", which was misleading).

* Remove bogus usage of uatomic_xchg() in health_check_state():
  It is not needed to update the "last" value, since the last value is
  read and written to by a single thread. Moreover, this specific use of
  xchg was not exchanging anything: it was just setting the last value
  to the "current" one, and doing nothing with the return value.
  Whatever was expected to be achieved by using uatomic_xchg() clearly
  wasn't.

* Because the health check thread could still be answering a request
  concurrently sessiond teardown, we need to ensure that all threads
  only set the "error" condition if they reach teardown paths due to an
  actual error, not on "normal" teardown condition (thread quit pipe
  being closed). Flagging threads as being in error condition upon all
  exit paths would lead to false "errors" sent to the client, which we
  want to avoid, since the client could then think it needs to kill a
  sessiond when the sessiond might be in the process of gracefully
  restarting.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Signed-off-by: David Goulet <dgoulet@efficios.com>
12 years agoFix: relayd typo: lock -> unlock
Mathieu Desnoyers [Tue, 24 Jul 2012 15:39:19 +0000 (11:39 -0400)] 
Fix: relayd typo: lock -> unlock

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agofix: lttng-relayd: use appropriate RCU locking with hash tables
Mathieu Desnoyers [Tue, 24 Jul 2012 13:08:15 +0000 (09:08 -0400)] 
fix: lttng-relayd: use appropriate RCU locking with hash tables

RCU hash tables used in lttng-relayd use the auto-resize feature, which
is performed by concurrent call rcu worker threads. Therefore, we need
to protect the calls to the hash table with appropriate RCU read-side
locking, and use call_rcu to defer memory reclaim.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
12 years agolttng-relayd: memory management fixes, with cleanups
Mathieu Desnoyers [Tue, 24 Jul 2012 03:11:48 +0000 (23:11 -0400)] 
lttng-relayd: memory management fixes, with cleanups

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
This page took 0.045373 seconds and 4 git commands to generate.