* [lttng-dev] [PATCH lttng-tools 00/10] Fix: tracefile rotation rm-after-destroy race
@ 2016-05-18 18:04 Mathieu Desnoyers
2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 06/10] Fix: error.h: add missing parenthesis around macro parameter Mathieu Desnoyers
` (9 more replies)
0 siblings, 10 replies; 16+ messages in thread
From: Mathieu Desnoyers @ 2016-05-18 18:04 UTC (permalink / raw)
Mathieu Desnoyers (10):
Fix: bad file descriptors on close after rotation error
Fix: UST should not generate packet at destroy after stop
Fix: kernel tracing: flush after stop
Fix: ust-consumer: flush empty packets on snapshot channel
Fix: bogus mask on error.h PRINT types
Fix: error.h: add missing parenthesis around macro parameter
Fix: WARN() should print as WARN level, not ERR
Add environment variable to allow abort on error
test: kernel tracing destroy flush behavior with tracefile rotation
test: UST tracing destroy flush behavior with tracefile rotation
configure.ac | 1 +
doc/man/common-cmd-footer.txt | 3 +
doc/man/lttng-relayd.8.txt | 3 +
doc/man/lttng-sessiond.8.txt | 2 +
src/bin/lttng-sessiond/cmd.c | 20 +--
src/bin/lttng-sessiond/consumer.c | 32 +++++
src/bin/lttng-sessiond/consumer.h | 1 +
src/bin/lttng-sessiond/ust-app.c | 140 +++++++++++++++++++
src/common/consumer/consumer.h | 11 ++
src/common/error.c | 28 ++++
src/common/error.h | 33 +++--
src/common/sessiond-comm/sessiond-comm.h | 3 +
src/common/ust-consumer/ust-consumer.c | 75 +++++++++-
src/common/utils.c | 1 +
tests/fast_regression | 1 +
tests/regression/kernel/Makefile.am | 3 +-
.../regression/kernel/test_rotation_destroy_flush | 153 +++++++++++++++++++++
tests/regression/ust/Makefile.am | 3 +-
.../ust/rotation-destroy-flush/Makefile.am | 16 +++
.../test_rotation_destroy_flush | 150 ++++++++++++++++++++
tests/root_regression | 1 +
21 files changed, 651 insertions(+), 29 deletions(-)
create mode 100755 tests/regression/kernel/test_rotation_destroy_flush
create mode 100644 tests/regression/ust/rotation-destroy-flush/Makefile.am
create mode 100755 tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush
--
2.1.4
^ permalink raw reply [flat|nested] 16+ messages in thread* [lttng-dev] [PATCH lttng-tools 06/10] Fix: error.h: add missing parenthesis around macro parameter 2016-05-18 18:04 [lttng-dev] [PATCH lttng-tools 00/10] Fix: tracefile rotation rm-after-destroy race Mathieu Desnoyers @ 2016-05-18 18:04 ` Mathieu Desnoyers 2016-05-19 4:13 ` Jérémie Galarneau 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 07/10] Fix: WARN() should print as WARN level, not ERR Mathieu Desnoyers ` (8 subsequent siblings) 9 siblings, 1 reply; 16+ messages in thread From: Mathieu Desnoyers @ 2016-05-18 18:04 UTC (permalink / raw) Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> --- src/common/error.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/common/error.h b/src/common/error.h index 3ab1d46..ca5af86 100644 --- a/src/common/error.h +++ b/src/common/error.h @@ -75,18 +75,18 @@ extern int lttng_opt_mi; */ #define __lttng_print(type, fmt, args...) \ do { \ - if (!lttng_opt_quiet&& !lttng_opt_mi && \ - type == PRINT_MSG) { \ + if (!lttng_opt_quiet && !lttng_opt_mi && \ + (type) == PRINT_MSG) { \ fprintf(stdout, fmt, ## args); \ } else if (!lttng_opt_quiet && !lttng_opt_mi && \ - (((type & PRINT_DBG) && lttng_opt_verbose == 1) || \ - ((type & (PRINT_DBG | PRINT_DBG2)) && \ + ((((type) & PRINT_DBG) && lttng_opt_verbose == 1) || \ + (((type) & (PRINT_DBG | PRINT_DBG2)) && \ lttng_opt_verbose == 2) || \ - ((type & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) && \ + (((type) & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) && \ lttng_opt_verbose == 3))) { \ fprintf(stderr, fmt, ## args); \ } else if (!lttng_opt_quiet && \ - (type & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \ + ((type) & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \ fprintf(stderr, fmt, ## args); \ } \ } while (0); -- 2.1.4 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 06/10] Fix: error.h: add missing parenthesis around macro parameter 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 06/10] Fix: error.h: add missing parenthesis around macro parameter Mathieu Desnoyers @ 2016-05-19 4:13 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:13 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 2510 bytes --] Merged, thanks! Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > src/common/error.h | 12 ++++++------ > 1 file changed, 6 insertions(+), 6 deletions(-) > > diff --git a/src/common/error.h b/src/common/error.h > index 3ab1d46..ca5af86 100644 > --- a/src/common/error.h > +++ b/src/common/error.h > @@ -75,18 +75,18 @@ extern int lttng_opt_mi; > */ > #define __lttng_print(type, fmt, args...) \ > do { \ > - if (!lttng_opt_quiet&& !lttng_opt_mi && \ > - type == PRINT_MSG) { \ > + if (!lttng_opt_quiet && !lttng_opt_mi && \ > + (type) == PRINT_MSG) { \ > fprintf(stdout, fmt, ## args); \ > } else if (!lttng_opt_quiet && !lttng_opt_mi && \ > - (((type & PRINT_DBG) && lttng_opt_verbose == 1) || \ > - ((type & (PRINT_DBG | PRINT_DBG2)) && \ > + ((((type) & PRINT_DBG) && lttng_opt_verbose == 1) || \ > + (((type) & (PRINT_DBG | PRINT_DBG2)) && \ > lttng_opt_verbose == 2) || \ > - ((type & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) && \ > + (((type) & (PRINT_DBG | PRINT_DBG2 | PRINT_DBG3)) && \ > lttng_opt_verbose == 3))) { \ > fprintf(stderr, fmt, ## args); \ > } else if (!lttng_opt_quiet && \ > - (type & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \ > + ((type) & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \ > fprintf(stderr, fmt, ## args); \ > } \ > } while (0); > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 07/10] Fix: WARN() should print as WARN level, not ERR 2016-05-18 18:04 [lttng-dev] [PATCH lttng-tools 00/10] Fix: tracefile rotation rm-after-destroy race Mathieu Desnoyers 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 06/10] Fix: error.h: add missing parenthesis around macro parameter Mathieu Desnoyers @ 2016-05-18 18:04 ` Mathieu Desnoyers 2016-05-19 4:14 ` Jérémie Galarneau 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 08/10] Add environment variable to allow abort on error Mathieu Desnoyers ` (7 subsequent siblings) 9 siblings, 1 reply; 16+ messages in thread From: Mathieu Desnoyers @ 2016-05-18 18:04 UTC (permalink / raw) Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> --- src/common/error.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/error.h b/src/common/error.h index ca5af86..9c9d2a7 100644 --- a/src/common/error.h +++ b/src/common/error.h @@ -103,7 +103,7 @@ extern int lttng_opt_mi; #define ERR(fmt, args...) \ __lttng_print(PRINT_ERR, "Error: " fmt "\n", ## args) #define WARN(fmt, args...) \ - __lttng_print(PRINT_ERR, "Warning: " fmt "\n", ## args) + __lttng_print(PRINT_WARN, "Warning: " fmt "\n", ## args) #define BUG(fmt, args...) _ERRMSG("BUG", PRINT_BUG, fmt, ## args) -- 2.1.4 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 07/10] Fix: WARN() should print as WARN level, not ERR 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 07/10] Fix: WARN() should print as WARN level, not ERR Mathieu Desnoyers @ 2016-05-19 4:14 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:14 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 901 bytes --] Good catch (again)! Merged. Thanks, Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > src/common/error.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/common/error.h b/src/common/error.h > index ca5af86..9c9d2a7 100644 > --- a/src/common/error.h > +++ b/src/common/error.h > @@ -103,7 +103,7 @@ extern int lttng_opt_mi; > #define ERR(fmt, args...) \ > __lttng_print(PRINT_ERR, "Error: " fmt "\n", ## args) > #define WARN(fmt, args...) \ > - __lttng_print(PRINT_ERR, "Warning: " fmt "\n", ## args) > + __lttng_print(PRINT_WARN, "Warning: " fmt "\n", ## args) > > #define BUG(fmt, args...) _ERRMSG("BUG", PRINT_BUG, fmt, ## args) > > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 08/10] Add environment variable to allow abort on error 2016-05-18 18:04 [lttng-dev] [PATCH lttng-tools 00/10] Fix: tracefile rotation rm-after-destroy race Mathieu Desnoyers 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 06/10] Fix: error.h: add missing parenthesis around macro parameter Mathieu Desnoyers 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 07/10] Fix: WARN() should print as WARN level, not ERR Mathieu Desnoyers @ 2016-05-18 18:04 ` Mathieu Desnoyers 2016-05-19 4:45 ` Jérémie Galarneau 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 09/10] test: kernel tracing destroy flush behavior with tracefile rotation Mathieu Desnoyers ` (6 subsequent siblings) 9 siblings, 1 reply; 16+ messages in thread From: Mathieu Desnoyers @ 2016-05-18 18:04 UTC (permalink / raw) The new environment variable LTTNG_ABORT_ON_ERROR allows each lttng-tools program to call abort() on PERROR() and ERR() after the error message has been printed to stderr. Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> --- doc/man/common-cmd-footer.txt | 3 +++ doc/man/lttng-relayd.8.txt | 3 +++ doc/man/lttng-sessiond.8.txt | 2 ++ src/common/error.c | 28 ++++++++++++++++++++++++++++ src/common/error.h | 5 +++++ 5 files changed, 41 insertions(+) diff --git a/doc/man/common-cmd-footer.txt b/doc/man/common-cmd-footer.txt index d776cc4..8b1b66f 100644 --- a/doc/man/common-cmd-footer.txt +++ b/doc/man/common-cmd-footer.txt @@ -19,6 +19,9 @@ ENVIRONMENT VARIABLES The genoption:--sessiond-path option has precedence over this environment variable. +`LTTNG_ABORT_ON_ERROR`:: + Abort process after the first error is encountered. + Note that the man:lttng-create(1) command can spawn an LTTng session daemon automatically if none is running. See man:lttng-sessiond(8) for the environment variables influencing diff --git a/doc/man/lttng-relayd.8.txt b/doc/man/lttng-relayd.8.txt index d667be1..d3e5b3e 100644 --- a/doc/man/lttng-relayd.8.txt +++ b/doc/man/lttng-relayd.8.txt @@ -159,6 +159,9 @@ ENVIRONMENT VARIABLES `LTTNG_RELAYD_HEALTH`:: Path to relay daemon health's socket. +`LTTNG_ABORT_ON_ERROR`:: + Abort the relay daemon after the first error is encountered. + FILES ----- diff --git a/doc/man/lttng-sessiond.8.txt b/doc/man/lttng-sessiond.8.txt index f4348d8..949d566 100644 --- a/doc/man/lttng-sessiond.8.txt +++ b/doc/man/lttng-sessiond.8.txt @@ -275,6 +275,8 @@ The option:--kmod-probes option overrides this variable. `LTTNG_SESSION_CONFIG_XSD_PATH`:: Tracing session configuration XML schema definition (XSD) path. +`LTTNG_ABORT_ON_ERROR`:: + Abort the session daemon after the first error is encountered. FILES ----- diff --git a/src/common/error.c b/src/common/error.c index f7e11e1..84bc04f 100644 --- a/src/common/error.c +++ b/src/common/error.c @@ -18,14 +18,23 @@ #define _LGPL_SOURCE #include <assert.h> #include <inttypes.h> +#include <stdlib.h> +#include <string.h> #include <lttng/lttng-error.h> #include <common/common.h> +#include <common/compat/getenv.h> #include "error.h" #define ERROR_INDEX(code) (code - LTTNG_OK) +/* + * lttng_opt_abort_on_error: unset: -1, disabled: 0, enabled: 1. + * Controlled by the LTTNG_ABORT_ON_ERROR environment variable. + */ +static int lttng_opt_abort_on_error = -1; + /* TLS variable that contains the time of one single log entry. */ DEFINE_URCU_TLS(struct log_time, error_log_time); @@ -196,3 +205,22 @@ const char *error_get_str(int32_t code) return error_string_array[ERROR_INDEX(code)]; } + +LTTNG_HIDDEN +void lttng_abort_on_error(void) +{ + if (lttng_opt_abort_on_error < 0) { + /* Use lttng_secure_getenv() to query its state. */ + const char *value; + + value = lttng_secure_getenv("LTTNG_ABORT_ON_ERROR"); + if (value && !strcmp(value, "1")) { + lttng_opt_abort_on_error = 1; + } else { + lttng_opt_abort_on_error = 0; + } + } + if (lttng_opt_abort_on_error > 0) { + abort(); + } +} diff --git a/src/common/error.h b/src/common/error.h index 9c9d2a7..6c239fe 100644 --- a/src/common/error.h +++ b/src/common/error.h @@ -89,6 +89,9 @@ extern int lttng_opt_mi; ((type) & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \ fprintf(stderr, fmt, ## args); \ } \ + if ((type) & (PRINT_ERR | PRINT_BUG)) { \ + lttng_abort_on_error(); \ + } \ } while (0); /* Three level of debug. Use -v, -vv or -vvv for the levels */ @@ -174,4 +177,6 @@ const char *error_get_str(int32_t code); */ const char *log_add_time(); +void lttng_abort_on_error(void); + #endif /* _ERROR_H */ -- 2.1.4 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 08/10] Add environment variable to allow abort on error 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 08/10] Add environment variable to allow abort on error Mathieu Desnoyers @ 2016-05-19 4:45 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:45 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 4740 bytes --] Merged with some documentation changes, thanks! Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > The new environment variable LTTNG_ABORT_ON_ERROR allows each > lttng-tools program to call abort() on PERROR() and ERR() after the > error message has been printed to stderr. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > doc/man/common-cmd-footer.txt | 3 +++ > doc/man/lttng-relayd.8.txt | 3 +++ > doc/man/lttng-sessiond.8.txt | 2 ++ > src/common/error.c | 28 ++++++++++++++++++++++++++++ > src/common/error.h | 5 +++++ > 5 files changed, 41 insertions(+) > > diff --git a/doc/man/common-cmd-footer.txt b/doc/man/common-cmd-footer.txt > index d776cc4..8b1b66f 100644 > --- a/doc/man/common-cmd-footer.txt > +++ b/doc/man/common-cmd-footer.txt > @@ -19,6 +19,9 @@ ENVIRONMENT VARIABLES > The genoption:--sessiond-path option has precedence over this > environment variable. > > +`LTTNG_ABORT_ON_ERROR`:: > + Abort process after the first error is encountered. > + > Note that the man:lttng-create(1) command can spawn an LTTng > session daemon automatically if none is running. See > man:lttng-sessiond(8) for the environment variables influencing > diff --git a/doc/man/lttng-relayd.8.txt b/doc/man/lttng-relayd.8.txt > index d667be1..d3e5b3e 100644 > --- a/doc/man/lttng-relayd.8.txt > +++ b/doc/man/lttng-relayd.8.txt > @@ -159,6 +159,9 @@ ENVIRONMENT VARIABLES > `LTTNG_RELAYD_HEALTH`:: > Path to relay daemon health's socket. > > +`LTTNG_ABORT_ON_ERROR`:: > + Abort the relay daemon after the first error is encountered. > + > > FILES > ----- > diff --git a/doc/man/lttng-sessiond.8.txt b/doc/man/lttng-sessiond.8.txt > index f4348d8..949d566 100644 > --- a/doc/man/lttng-sessiond.8.txt > +++ b/doc/man/lttng-sessiond.8.txt > @@ -275,6 +275,8 @@ The option:--kmod-probes option overrides this variable. > `LTTNG_SESSION_CONFIG_XSD_PATH`:: > Tracing session configuration XML schema definition (XSD) path. > > +`LTTNG_ABORT_ON_ERROR`:: > + Abort the session daemon after the first error is encountered. > > FILES > ----- > diff --git a/src/common/error.c b/src/common/error.c > index f7e11e1..84bc04f 100644 > --- a/src/common/error.c > +++ b/src/common/error.c > @@ -18,14 +18,23 @@ > #define _LGPL_SOURCE > #include <assert.h> > #include <inttypes.h> > +#include <stdlib.h> > +#include <string.h> > > #include <lttng/lttng-error.h> > #include <common/common.h> > +#include <common/compat/getenv.h> > > #include "error.h" > > #define ERROR_INDEX(code) (code - LTTNG_OK) > > +/* > + * lttng_opt_abort_on_error: unset: -1, disabled: 0, enabled: 1. > + * Controlled by the LTTNG_ABORT_ON_ERROR environment variable. > + */ > +static int lttng_opt_abort_on_error = -1; > + > /* TLS variable that contains the time of one single log entry. */ > DEFINE_URCU_TLS(struct log_time, error_log_time); > > @@ -196,3 +205,22 @@ const char *error_get_str(int32_t code) > > return error_string_array[ERROR_INDEX(code)]; > } > + > +LTTNG_HIDDEN > +void lttng_abort_on_error(void) > +{ > + if (lttng_opt_abort_on_error < 0) { > + /* Use lttng_secure_getenv() to query its state. */ > + const char *value; > + > + value = lttng_secure_getenv("LTTNG_ABORT_ON_ERROR"); > + if (value && !strcmp(value, "1")) { > + lttng_opt_abort_on_error = 1; > + } else { > + lttng_opt_abort_on_error = 0; > + } > + } > + if (lttng_opt_abort_on_error > 0) { > + abort(); > + } > +} > diff --git a/src/common/error.h b/src/common/error.h > index 9c9d2a7..6c239fe 100644 > --- a/src/common/error.h > +++ b/src/common/error.h > @@ -89,6 +89,9 @@ extern int lttng_opt_mi; > ((type) & (PRINT_WARN | PRINT_ERR | PRINT_BUG))) { \ > fprintf(stderr, fmt, ## args); \ > } \ > + if ((type) & (PRINT_ERR | PRINT_BUG)) { \ > + lttng_abort_on_error(); \ > + } \ > } while (0); > > /* Three level of debug. Use -v, -vv or -vvv for the levels */ > @@ -174,4 +177,6 @@ const char *error_get_str(int32_t code); > */ > const char *log_add_time(); > > +void lttng_abort_on_error(void); > + > #endif /* _ERROR_H */ > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 09/10] test: kernel tracing destroy flush behavior with tracefile rotation 2016-05-18 18:04 [lttng-dev] [PATCH lttng-tools 00/10] Fix: tracefile rotation rm-after-destroy race Mathieu Desnoyers ` (2 preceding siblings ...) 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 08/10] Add environment variable to allow abort on error Mathieu Desnoyers @ 2016-05-18 18:04 ` Mathieu Desnoyers 2016-05-19 4:45 ` Jérémie Galarneau 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 10/10] test: UST " Mathieu Desnoyers ` (5 subsequent siblings) 9 siblings, 1 reply; 16+ messages in thread From: Mathieu Desnoyers @ 2016-05-18 18:04 UTC (permalink / raw) Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> --- tests/regression/kernel/Makefile.am | 3 +- .../regression/kernel/test_rotation_destroy_flush | 153 +++++++++++++++++++++ tests/root_regression | 1 + 3 files changed, 156 insertions(+), 1 deletion(-) create mode 100755 tests/regression/kernel/test_rotation_destroy_flush diff --git a/tests/regression/kernel/Makefile.am b/tests/regression/kernel/Makefile.am index ca73ed4..a8c397a 100644 --- a/tests/regression/kernel/Makefile.am +++ b/tests/regression/kernel/Makefile.am @@ -1,4 +1,5 @@ -EXTRA_DIST = test_event_basic test_all_events test_syscall test_clock_override +EXTRA_DIST = test_event_basic test_all_events test_syscall \ + test_clock_override test_rotation_destroy_flush all-local: @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ diff --git a/tests/regression/kernel/test_rotation_destroy_flush b/tests/regression/kernel/test_rotation_destroy_flush new file mode 100755 index 0000000..0b0b0ca --- /dev/null +++ b/tests/regression/kernel/test_rotation_destroy_flush @@ -0,0 +1,153 @@ +#!/bin/bash +# +# Copyright (C) - 2013 Christian Babeux <christian.babeux at efficios.com> +# Copyright (C) - 2014, 2016 Mathieu Desnoyers <mathieu.desnoyers at efficios.com> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License, version 2 only, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 51 +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +TEST_DESC="Kernel tracer - Rotation destroy flush" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../.. +SESSION_NAME="rotation_destroy_flush" + +NR_ITER=10 +NUM_TESTS=$((13*$NR_ITER)) +EVENT_NAME="lttng_test_filter_event" +CHANNEL_NAME="testchan" +PAGE_SIZE=$(getconf PAGE_SIZE) +SIZE_LIMIT=$PAGE_SIZE + +TESTCMD="echo -n 10000 > /proc/lttng-test-filter-event" + +# Ensure the daemons invoke abort on error. +export LTTNG_ABORT_ON_ERROR=1 + +source $TESTDIR/utils/utils.sh + +function signal_cleanup() +{ + diag "*** Exiting ***" + rmmod lttng-test + stop_lttng_sessiond + exit 1 +} + +function enable_kernel_lttng_channel_size_limit () +{ + sess_name="$1" + channel_name="$2" + tracefile_size_limit="$3" + + test_name="Enable channel $channel_name " + test_name+="for session $sess_name: " + test_name+="$tracefile_size_limit bytes tracefile limit" + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel \ + -k $channel_name -s $sess_name \ + -C $tracefile_size_limit >/dev/null 2>&1 + + ok $? "$test_name" +} + +function enable_kernel_lttng_event_per_channel () +{ + sess_name="$1" + event_name="$2" + channel_name="$3" + + test_name="Enable event $event_name " + test_name+="for session $sess_name " + test_name+="in channel $channel_name" + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" \ + -s $sess_name -k -c $channel_name >/dev/null 2>&1 + + ok $? "$test_name" +} + +function test_rotation_destroy_flush_single() +{ + start_lttng_sessiond + modprobe lttng-test + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + enable_kernel_lttng_channel_size_limit \ + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT + enable_kernel_lttng_event_per_channel \ + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME + start_lttng_tracing_ok $SESSION_NAME + eval ${TESTCMD} + # stop and destroy + stop_lttng_tracing_ok $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME + + rm -rf $TRACE_PATH + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + enable_kernel_lttng_channel_size_limit \ + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT + enable_kernel_lttng_event_per_channel \ + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME + start_lttng_tracing_ok $SESSION_NAME + eval ${TESTCMD} + # destroy only + destroy_lttng_session_ok $SESSION_NAME + + rm -rf $TRACE_PATH + + rmmod lttng-test + stop_lttng_sessiond +} + +function test_rotation_destroy_flush() +{ + for a in $(seq 1 ${NR_ITER}); do + diag "Iteration ${a}/${NR_ITER}" + test_rotation_destroy_flush_single + done +} + +# MUST set TESTDIR before calling those functions +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + +TESTS=( + "test_rotation_destroy_flush" +) + +TEST_COUNT=${#TESTS[@]} +i=0 + +if [ "$(id -u)" == "0" ]; then + isroot=1 +else + isroot=0 +fi + +skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || +{ + trap signal_cleanup SIGTERM SIGINT + + while [ "$i" -lt "$TEST_COUNT" ]; do + + TRACE_PATH=$(mktemp -d) + + # Execute test + ${TESTS[$i]} + + let "i++" + done +} diff --git a/tests/root_regression b/tests/root_regression index 4655c09..2981dc6 100644 --- a/tests/root_regression +++ b/tests/root_regression @@ -2,6 +2,7 @@ regression/kernel/test_all_events regression/kernel/test_event_basic regression/kernel/test_syscall regression/kernel/test_clock_override +regression/kernel/test_rotation_destroy_flush regression/tools/live/test_kernel regression/tools/live/test_lttng_kernel regression/tools/streaming/test_high_throughput_limits -- 2.1.4 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 09/10] test: kernel tracing destroy flush behavior with tracefile rotation 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 09/10] test: kernel tracing destroy flush behavior with tracefile rotation Mathieu Desnoyers @ 2016-05-19 4:45 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:45 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 6462 bytes --] Merged, thanks! Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > tests/regression/kernel/Makefile.am | 3 +- > .../regression/kernel/test_rotation_destroy_flush | 153 +++++++++++++++++++++ > tests/root_regression | 1 + > 3 files changed, 156 insertions(+), 1 deletion(-) > create mode 100755 tests/regression/kernel/test_rotation_destroy_flush > > diff --git a/tests/regression/kernel/Makefile.am b/tests/regression/kernel/Makefile.am > index ca73ed4..a8c397a 100644 > --- a/tests/regression/kernel/Makefile.am > +++ b/tests/regression/kernel/Makefile.am > @@ -1,4 +1,5 @@ > -EXTRA_DIST = test_event_basic test_all_events test_syscall test_clock_override > +EXTRA_DIST = test_event_basic test_all_events test_syscall \ > + test_clock_override test_rotation_destroy_flush > > all-local: > @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ > diff --git a/tests/regression/kernel/test_rotation_destroy_flush b/tests/regression/kernel/test_rotation_destroy_flush > new file mode 100755 > index 0000000..0b0b0ca > --- /dev/null > +++ b/tests/regression/kernel/test_rotation_destroy_flush > @@ -0,0 +1,153 @@ > +#!/bin/bash > +# > +# Copyright (C) - 2013 Christian Babeux <christian.babeux at efficios.com> > +# Copyright (C) - 2014, 2016 Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > +# > +# This program is free software; you can redistribute it and/or modify it > +# under the terms of the GNU General Public License, version 2 only, as > +# published by the Free Software Foundation. > +# > +# This program is distributed in the hope that it will be useful, but WITHOUT > +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or > +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for > +# more details. > +# > +# You should have received a copy of the GNU General Public License along with > +# this program; if not, write to the Free Software Foundation, Inc., 51 > +# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. > + > +TEST_DESC="Kernel tracer - Rotation destroy flush" > + > +CURDIR=$(dirname $0)/ > +TESTDIR=$CURDIR/../.. > +SESSION_NAME="rotation_destroy_flush" > + > +NR_ITER=10 > +NUM_TESTS=$((13*$NR_ITER)) > +EVENT_NAME="lttng_test_filter_event" > +CHANNEL_NAME="testchan" > +PAGE_SIZE=$(getconf PAGE_SIZE) > +SIZE_LIMIT=$PAGE_SIZE > + > +TESTCMD="echo -n 10000 > /proc/lttng-test-filter-event" > + > +# Ensure the daemons invoke abort on error. > +export LTTNG_ABORT_ON_ERROR=1 > + > +source $TESTDIR/utils/utils.sh > + > +function signal_cleanup() > +{ > + diag "*** Exiting ***" > + rmmod lttng-test > + stop_lttng_sessiond > + exit 1 > +} > + > +function enable_kernel_lttng_channel_size_limit () > +{ > + sess_name="$1" > + channel_name="$2" > + tracefile_size_limit="$3" > + > + test_name="Enable channel $channel_name " > + test_name+="for session $sess_name: " > + test_name+="$tracefile_size_limit bytes tracefile limit" > + > + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel \ > + -k $channel_name -s $sess_name \ > + -C $tracefile_size_limit >/dev/null 2>&1 > + > + ok $? "$test_name" > +} > + > +function enable_kernel_lttng_event_per_channel () > +{ > + sess_name="$1" > + event_name="$2" > + channel_name="$3" > + > + test_name="Enable event $event_name " > + test_name+="for session $sess_name " > + test_name+="in channel $channel_name" > + > + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" \ > + -s $sess_name -k -c $channel_name >/dev/null 2>&1 > + > + ok $? "$test_name" > +} > + > +function test_rotation_destroy_flush_single() > +{ > + start_lttng_sessiond > + modprobe lttng-test > + > + create_lttng_session_ok $SESSION_NAME $TRACE_PATH > + enable_kernel_lttng_channel_size_limit \ > + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT > + enable_kernel_lttng_event_per_channel \ > + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME > + start_lttng_tracing_ok $SESSION_NAME > + eval ${TESTCMD} > + # stop and destroy > + stop_lttng_tracing_ok $SESSION_NAME > + destroy_lttng_session_ok $SESSION_NAME > + > + rm -rf $TRACE_PATH > + > + create_lttng_session_ok $SESSION_NAME $TRACE_PATH > + enable_kernel_lttng_channel_size_limit \ > + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT > + enable_kernel_lttng_event_per_channel \ > + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME > + start_lttng_tracing_ok $SESSION_NAME > + eval ${TESTCMD} > + # destroy only > + destroy_lttng_session_ok $SESSION_NAME > + > + rm -rf $TRACE_PATH > + > + rmmod lttng-test > + stop_lttng_sessiond > +} > + > +function test_rotation_destroy_flush() > +{ > + for a in $(seq 1 ${NR_ITER}); do > + diag "Iteration ${a}/${NR_ITER}" > + test_rotation_destroy_flush_single > + done > +} > + > +# MUST set TESTDIR before calling those functions > +plan_tests $NUM_TESTS > + > +print_test_banner "$TEST_DESC" > + > +TESTS=( > + "test_rotation_destroy_flush" > +) > + > +TEST_COUNT=${#TESTS[@]} > +i=0 > + > +if [ "$(id -u)" == "0" ]; then > + isroot=1 > +else > + isroot=0 > +fi > + > +skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || > +{ > + trap signal_cleanup SIGTERM SIGINT > + > + while [ "$i" -lt "$TEST_COUNT" ]; do > + > + TRACE_PATH=$(mktemp -d) > + > + # Execute test > + ${TESTS[$i]} > + > + let "i++" > + done > +} > diff --git a/tests/root_regression b/tests/root_regression > index 4655c09..2981dc6 100644 > --- a/tests/root_regression > +++ b/tests/root_regression > @@ -2,6 +2,7 @@ regression/kernel/test_all_events > regression/kernel/test_event_basic > regression/kernel/test_syscall > regression/kernel/test_clock_override > +regression/kernel/test_rotation_destroy_flush > regression/tools/live/test_kernel > regression/tools/live/test_lttng_kernel > regression/tools/streaming/test_high_throughput_limits > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 10/10] test: UST tracing destroy flush behavior with tracefile rotation 2016-05-18 18:04 [lttng-dev] [PATCH lttng-tools 00/10] Fix: tracefile rotation rm-after-destroy race Mathieu Desnoyers ` (3 preceding siblings ...) 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 09/10] test: kernel tracing destroy flush behavior with tracefile rotation Mathieu Desnoyers @ 2016-05-18 18:04 ` Mathieu Desnoyers 2016-05-19 4:46 ` Jérémie Galarneau [not found] ` <1463594659-10964-2-git-send-email-mathieu.desnoyers@efficios.com> ` (4 subsequent siblings) 9 siblings, 1 reply; 16+ messages in thread From: Mathieu Desnoyers @ 2016-05-18 18:04 UTC (permalink / raw) Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> --- configure.ac | 1 + tests/fast_regression | 1 + tests/regression/ust/Makefile.am | 3 +- .../ust/rotation-destroy-flush/Makefile.am | 16 +++ .../test_rotation_destroy_flush | 150 +++++++++++++++++++++ 5 files changed, 170 insertions(+), 1 deletion(-) create mode 100644 tests/regression/ust/rotation-destroy-flush/Makefile.am create mode 100755 tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush diff --git a/configure.ac b/configure.ac index 20d0680..0c1f976 100644 --- a/configure.ac +++ b/configure.ac @@ -1002,6 +1002,7 @@ AC_CONFIG_FILES([ tests/regression/ust/getcpu-override/Makefile tests/regression/ust/clock-override/Makefile tests/regression/ust/type-declarations/Makefile + tests/regression/ust/rotation-destroy-flush/Makefile tests/stress/Makefile tests/unit/Makefile tests/unit/ini_config/Makefile diff --git a/tests/fast_regression b/tests/fast_regression index aa0c043..0c4f079 100644 --- a/tests/fast_regression +++ b/tests/fast_regression @@ -27,5 +27,6 @@ regression/ust/java-log4j/test_java_log4j regression/ust/python-logging/test_python_logging regression/ust/getcpu-override/test_getcpu_override regression/ust/clock-override/test_clock_override +regression/ust/rotation-destroy-flush/test_rotation_destroy_flush regression/ust/test_event_basic regression/ust/test_event_tracef diff --git a/tests/regression/ust/Makefile.am b/tests/regression/ust/Makefile.am index 1b87cc9..7686251 100644 --- a/tests/regression/ust/Makefile.am +++ b/tests/regression/ust/Makefile.am @@ -2,7 +2,8 @@ if HAVE_LIBLTTNG_UST_CTL SUBDIRS = nprocesses high-throughput low-throughput before-after multi-session \ overlap buffers-pid linking daemon exit-fast fork libc-wrapper \ periodical-metadata-flush java-jul java-log4j python-logging \ - getcpu-override clock-override type-declarations + getcpu-override clock-override type-declarations \ + rotation-destroy-flush if HAVE_OBJCOPY SUBDIRS += baddr-statedump ust-dl diff --git a/tests/regression/ust/rotation-destroy-flush/Makefile.am b/tests/regression/ust/rotation-destroy-flush/Makefile.am new file mode 100644 index 0000000..14b869e --- /dev/null +++ b/tests/regression/ust/rotation-destroy-flush/Makefile.am @@ -0,0 +1,16 @@ +noinst_SCRIPTS = test_rotation_destroy_flush +EXTRA_DIST = test_rotation_destroy_flush + +all-local: + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ + for script in $(EXTRA_DIST); do \ + cp -f $(srcdir)/$$script $(builddir); \ + done; \ + fi + +clean-local: + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ + for script in $(EXTRA_DIST); do \ + rm -f $(builddir)/$$script; \ + done; \ + fi diff --git a/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush b/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush new file mode 100755 index 0000000..a7a9377 --- /dev/null +++ b/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush @@ -0,0 +1,150 @@ +#!/bin/bash +# +# Copyright (C) - 2015 Jonathan Rajotte <jonathan.rajotte-julien at efficios.com> +# Copyright (C) - 2016 Mathieu Desnoyers <mathieu.desnoyers at efficios.com> +# +# This library is free software; you can redistribute it and/or modify it under +# the terms of the GNU Lesser General Public License as published by the Free +# Software Foundation; version 2.1 of the License. +# +# This library is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library; if not, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +TEST_DESC="UST - Rotation destroy flush" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../../.. +SESSION_NAME="rotation_destroy_flush" + +TESTAPP_PATH="$TESTDIR/utils/testapp" +TESTAPP_NAME="gen-ust-events" +TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" +NUM_EVENT=1000000 +EVENT_NAME="tp:tptest" +CHANNEL_NAME="testchan" +PAGE_SIZE=$(getconf PAGE_SIZE) +SIZE_LIMIT=$PAGE_SIZE + +NR_ITER=10 +NUM_TESTS=$((15*$NR_ITER)) + +# Ensure the daemons invoke abort on error. +export LTTNG_ABORT_ON_ERROR=1 + +source $TESTDIR/utils/utils.sh + +# MUST set TESTDIR before calling those functions +function run_app() +{ + $TESTAPP_BIN $NUM_EVENT + ok $? "Application done" +} + +function signal_cleanup() +{ + diag "*** Exiting ***" + stop_lttng_sessiond + exit 1 +} + +function enable_ust_lttng_channel_size_limit () +{ + sess_name="$1" + channel_name="$2" + tracefile_size_limit="$3" + + test_name="Enable channel $channel_name " + test_name+="for session $sess_name: " + test_name+="$tracefile_size_limit bytes tracefile limit" + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel \ + -u $channel_name -s $sess_name --buffers-pid \ + -C $tracefile_size_limit >/dev/null 2>&1 + + ok $? "$test_name" +} + +function enable_ust_lttng_event_per_channel () +{ + sess_name="$1" + event_name="$2" + channel_name="$3" + + test_name="Enable event $event_name " + test_name+="for session $sess_name " + test_name+="in channel $channel_name" + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" \ + -s $sess_name -u -c $channel_name >/dev/null 2>&1 + + ok $? "$test_name" +} + +function test_rotation_destroy_flush_single() +{ + start_lttng_sessiond + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + enable_ust_lttng_channel_size_limit \ + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT + enable_ust_lttng_event_per_channel \ + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME + start_lttng_tracing_ok $SESSION_NAME + run_app + # stop and destroy + stop_lttng_tracing_ok $SESSION_NAME + destroy_lttng_session_ok $SESSION_NAME + + rm -rf $TRACE_PATH + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + enable_ust_lttng_channel_size_limit \ + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT + enable_ust_lttng_event_per_channel \ + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME + start_lttng_tracing_ok $SESSION_NAME + run_app + # destroy only + destroy_lttng_session_ok $SESSION_NAME + + rm -rf $TRACE_PATH + + stop_lttng_sessiond +} + +function test_rotation_destroy_flush() +{ + for a in $(seq 1 ${NR_ITER}); do + diag "Iteration ${a}/${NR_ITER}" + test_rotation_destroy_flush_single + done +} + + +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + +TESTS=( + "test_rotation_destroy_flush" +) + +TEST_COUNT=${#TESTS[@]} +i=0 + +while [ "$i" -lt "$TEST_COUNT" ]; do + + trap signal_cleanup SIGTERM SIGINT + + TRACE_PATH=$(mktemp -d) + + # Execute test + ${TESTS[$i]} + + let "i++" +done -- 2.1.4 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [lttng-dev] [PATCH lttng-tools 10/10] test: UST tracing destroy flush behavior with tracefile rotation 2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 10/10] test: UST " Mathieu Desnoyers @ 2016-05-19 4:46 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:46 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 8173 bytes --] Merged, thanks! Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > configure.ac | 1 + > tests/fast_regression | 1 + > tests/regression/ust/Makefile.am | 3 +- > .../ust/rotation-destroy-flush/Makefile.am | 16 +++ > .../test_rotation_destroy_flush | 150 +++++++++++++++++++++ > 5 files changed, 170 insertions(+), 1 deletion(-) > create mode 100644 tests/regression/ust/rotation-destroy-flush/Makefile.am > create mode 100755 tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush > > diff --git a/configure.ac b/configure.ac > index 20d0680..0c1f976 100644 > --- a/configure.ac > +++ b/configure.ac > @@ -1002,6 +1002,7 @@ AC_CONFIG_FILES([ > tests/regression/ust/getcpu-override/Makefile > tests/regression/ust/clock-override/Makefile > tests/regression/ust/type-declarations/Makefile > + tests/regression/ust/rotation-destroy-flush/Makefile > tests/stress/Makefile > tests/unit/Makefile > tests/unit/ini_config/Makefile > diff --git a/tests/fast_regression b/tests/fast_regression > index aa0c043..0c4f079 100644 > --- a/tests/fast_regression > +++ b/tests/fast_regression > @@ -27,5 +27,6 @@ regression/ust/java-log4j/test_java_log4j > regression/ust/python-logging/test_python_logging > regression/ust/getcpu-override/test_getcpu_override > regression/ust/clock-override/test_clock_override > +regression/ust/rotation-destroy-flush/test_rotation_destroy_flush > regression/ust/test_event_basic > regression/ust/test_event_tracef > diff --git a/tests/regression/ust/Makefile.am b/tests/regression/ust/Makefile.am > index 1b87cc9..7686251 100644 > --- a/tests/regression/ust/Makefile.am > +++ b/tests/regression/ust/Makefile.am > @@ -2,7 +2,8 @@ if HAVE_LIBLTTNG_UST_CTL > SUBDIRS = nprocesses high-throughput low-throughput before-after multi-session \ > overlap buffers-pid linking daemon exit-fast fork libc-wrapper \ > periodical-metadata-flush java-jul java-log4j python-logging \ > - getcpu-override clock-override type-declarations > + getcpu-override clock-override type-declarations \ > + rotation-destroy-flush > > if HAVE_OBJCOPY > SUBDIRS += baddr-statedump ust-dl > diff --git a/tests/regression/ust/rotation-destroy-flush/Makefile.am b/tests/regression/ust/rotation-destroy-flush/Makefile.am > new file mode 100644 > index 0000000..14b869e > --- /dev/null > +++ b/tests/regression/ust/rotation-destroy-flush/Makefile.am > @@ -0,0 +1,16 @@ > +noinst_SCRIPTS = test_rotation_destroy_flush > +EXTRA_DIST = test_rotation_destroy_flush > + > +all-local: > + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ > + for script in $(EXTRA_DIST); do \ > + cp -f $(srcdir)/$$script $(builddir); \ > + done; \ > + fi > + > +clean-local: > + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ > + for script in $(EXTRA_DIST); do \ > + rm -f $(builddir)/$$script; \ > + done; \ > + fi > diff --git a/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush b/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush > new file mode 100755 > index 0000000..a7a9377 > --- /dev/null > +++ b/tests/regression/ust/rotation-destroy-flush/test_rotation_destroy_flush > @@ -0,0 +1,150 @@ > +#!/bin/bash > +# > +# Copyright (C) - 2015 Jonathan Rajotte <jonathan.rajotte-julien at efficios.com> > +# Copyright (C) - 2016 Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > +# > +# This library is free software; you can redistribute it and/or modify it under > +# the terms of the GNU Lesser General Public License as published by the Free > +# Software Foundation; version 2.1 of the License. > +# > +# This library is distributed in the hope that it will be useful, but WITHOUT > +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS > +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more > +# details. > +# > +# You should have received a copy of the GNU Lesser General Public License > +# along with this library; if not, write to the Free Software Foundation, Inc., > +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA > +TEST_DESC="UST - Rotation destroy flush" > + > +CURDIR=$(dirname $0)/ > +TESTDIR=$CURDIR/../../.. > +SESSION_NAME="rotation_destroy_flush" > + > +TESTAPP_PATH="$TESTDIR/utils/testapp" > +TESTAPP_NAME="gen-ust-events" > +TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" > +NUM_EVENT=1000000 > +EVENT_NAME="tp:tptest" > +CHANNEL_NAME="testchan" > +PAGE_SIZE=$(getconf PAGE_SIZE) > +SIZE_LIMIT=$PAGE_SIZE > + > +NR_ITER=10 > +NUM_TESTS=$((15*$NR_ITER)) > + > +# Ensure the daemons invoke abort on error. > +export LTTNG_ABORT_ON_ERROR=1 > + > +source $TESTDIR/utils/utils.sh > + > +# MUST set TESTDIR before calling those functions > +function run_app() > +{ > + $TESTAPP_BIN $NUM_EVENT > + ok $? "Application done" > +} > + > +function signal_cleanup() > +{ > + diag "*** Exiting ***" > + stop_lttng_sessiond > + exit 1 > +} > + > +function enable_ust_lttng_channel_size_limit () > +{ > + sess_name="$1" > + channel_name="$2" > + tracefile_size_limit="$3" > + > + test_name="Enable channel $channel_name " > + test_name+="for session $sess_name: " > + test_name+="$tracefile_size_limit bytes tracefile limit" > + > + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel \ > + -u $channel_name -s $sess_name --buffers-pid \ > + -C $tracefile_size_limit >/dev/null 2>&1 > + > + ok $? "$test_name" > +} > + > +function enable_ust_lttng_event_per_channel () > +{ > + sess_name="$1" > + event_name="$2" > + channel_name="$3" > + > + test_name="Enable event $event_name " > + test_name+="for session $sess_name " > + test_name+="in channel $channel_name" > + > + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" \ > + -s $sess_name -u -c $channel_name >/dev/null 2>&1 > + > + ok $? "$test_name" > +} > + > +function test_rotation_destroy_flush_single() > +{ > + start_lttng_sessiond > + > + create_lttng_session_ok $SESSION_NAME $TRACE_PATH > + enable_ust_lttng_channel_size_limit \ > + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT > + enable_ust_lttng_event_per_channel \ > + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME > + start_lttng_tracing_ok $SESSION_NAME > + run_app > + # stop and destroy > + stop_lttng_tracing_ok $SESSION_NAME > + destroy_lttng_session_ok $SESSION_NAME > + > + rm -rf $TRACE_PATH > + > + create_lttng_session_ok $SESSION_NAME $TRACE_PATH > + enable_ust_lttng_channel_size_limit \ > + $SESSION_NAME $CHANNEL_NAME $SIZE_LIMIT > + enable_ust_lttng_event_per_channel \ > + $SESSION_NAME $EVENT_NAME $CHANNEL_NAME > + start_lttng_tracing_ok $SESSION_NAME > + run_app > + # destroy only > + destroy_lttng_session_ok $SESSION_NAME > + > + rm -rf $TRACE_PATH > + > + stop_lttng_sessiond > +} > + > +function test_rotation_destroy_flush() > +{ > + for a in $(seq 1 ${NR_ITER}); do > + diag "Iteration ${a}/${NR_ITER}" > + test_rotation_destroy_flush_single > + done > +} > + > + > +plan_tests $NUM_TESTS > + > +print_test_banner "$TEST_DESC" > + > +TESTS=( > + "test_rotation_destroy_flush" > +) > + > +TEST_COUNT=${#TESTS[@]} > +i=0 > + > +while [ "$i" -lt "$TEST_COUNT" ]; do > + > + trap signal_cleanup SIGTERM SIGINT > + > + TRACE_PATH=$(mktemp -d) > + > + # Execute test > + ${TESTS[$i]} > + > + let "i++" > +done > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <1463594659-10964-2-git-send-email-mathieu.desnoyers@efficios.com>]
* [lttng-dev] [PATCH lttng-tools 01/10] Fix: bad file descriptors on close after rotation error [not found] ` <1463594659-10964-2-git-send-email-mathieu.desnoyers@efficios.com> @ 2016-05-19 2:57 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 2:57 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 1014 bytes --] Merged, thanks! Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > Ensure we don't try to close output stream file descriptors twice when a > trace file rotation error occurs (once at tracefile rotation, once when > closing the stream). Set the fd value to -1 after the first close to > ensure we don't try to close it again. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > src/common/utils.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/src/common/utils.c b/src/common/utils.c > index df55dc9..fdd8802 100644 > --- a/src/common/utils.c > +++ b/src/common/utils.c > @@ -850,6 +850,7 @@ int utils_rotate_stream_file(char *path_name, char *file_name, uint64_t size, > PERROR("Closing tracefile"); > goto error; > } > + *stream_fd = -1; > > if (count > 0) { > /* > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <1463594659-10964-3-git-send-email-mathieu.desnoyers@efficios.com>]
* [lttng-dev] [PATCH lttng-tools 02/10] Fix: UST should not generate packet at destroy after stop [not found] ` <1463594659-10964-3-git-send-email-mathieu.desnoyers@efficios.com> @ 2016-05-19 4:09 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:09 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 15243 bytes --] On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > In the following scenario: > - create, enable events (ust), > - start > - ... > - stop (await for data_pending to complete) > - destroy > - rm the trace directory > > We would expect that the "rm" operation would not conflict with the > consumer daemon trying to output data into the trace files, since the > "stop" operation ensured that there was no data_pending. > > However, the "destroy" operation currently generates an extra packet > after the data_pending check (the "on_stream_hangup"). This causes the > consumer daemon to try to perform trace file rotation concurrently with > the trace directory removal in the scenario above, which triggers > errors. The main reason why this empty packet is generated by "destroy" > is to deal with trace start/stop scenario which would otherwise generate > a completely empty stream. > > Therefore, introduce the concept of a "quiescent stream". It is > initialized at false on stream creation (first packet is empty). When > tracing is started, it is set to false (for cases of start/stop/start). > When tracing is stopped, if the stream is not quiescent, perform a > "final" flush (which will generate an empty packet if the current packet > was empty), and set quiescent to true. On "destroy" stream and on > application hangup: if the stream is not quiescent, perform a "final" > flush, and set the quiescent state to true. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > src/bin/lttng-sessiond/consumer.c | 32 +++++++ > src/bin/lttng-sessiond/consumer.h | 1 + > src/bin/lttng-sessiond/ust-app.c | 142 +++++++++++++++++++++++++++++++ > src/common/consumer/consumer.h | 13 +++ > src/common/sessiond-comm/sessiond-comm.h | 3 + > src/common/ust-consumer/ust-consumer.c | 67 ++++++++++++++- > 6 files changed, 256 insertions(+), 2 deletions(-) > > diff --git a/src/bin/lttng-sessiond/consumer.c b/src/bin/lttng-sessiond/consumer.c > index bd019dd..2da3723 100644 > --- a/src/bin/lttng-sessiond/consumer.c > +++ b/src/bin/lttng-sessiond/consumer.c > @@ -1185,6 +1185,38 @@ end: > } > > /* > + * Send a clear quiescent command to consumer using the given channel key. > + * > + * Return 0 on success else a negative value. > + */ > +int consumer_clear_quiescent_channel(struct consumer_socket *socket, uint64_t key) > +{ > + int ret; > + struct lttcomm_consumer_msg msg; > + > + assert(socket); > + > + DBG2("Consumer clear quiescent channel key %" PRIu64, key); > + > + memset(&msg, 0, sizeof(msg)); > + msg.cmd_type = LTTNG_CONSUMER_CLEAR_QUIESCENT_CHANNEL; > + msg.u.clear_quiescent_channel.key = key; > + > + pthread_mutex_lock(socket->lock); > + health_code_update(); > + > + ret = consumer_send_msg(socket, &msg); > + if (ret < 0) { > + goto end; > + } > + > +end: > + health_code_update(); > + pthread_mutex_unlock(socket->lock); > + return ret; > +} > + > +/* > * Send a close metadata command to consumer using the given channel key. > * Called with registry lock held. > * > diff --git a/src/bin/lttng-sessiond/consumer.h b/src/bin/lttng-sessiond/consumer.h > index 75a40f8..08b57eb 100644 > --- a/src/bin/lttng-sessiond/consumer.h > +++ b/src/bin/lttng-sessiond/consumer.h > @@ -284,6 +284,7 @@ int consumer_push_metadata(struct consumer_socket *socket, > uint64_t metadata_key, char *metadata_str, size_t len, > size_t target_offset, uint64_t version); > int consumer_flush_channel(struct consumer_socket *socket, uint64_t key); > +int consumer_clear_quiescent_channel(struct consumer_socket *socket, uint64_t key); > int consumer_get_discarded_events(uint64_t session_id, uint64_t channel_key, > struct consumer_output *consumer, uint64_t *discarded); > int consumer_get_lost_packets(uint64_t session_id, uint64_t channel_key, > diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c > index 1bb183d..bf0569e 100644 > --- a/src/bin/lttng-sessiond/ust-app.c > +++ b/src/bin/lttng-sessiond/ust-app.c > @@ -4650,6 +4650,140 @@ int ust_app_flush_session(struct ltt_ust_session *usess) > return ret; > } > > +static > +int ust_app_clear_quiescent_app_session(struct ust_app *app, > + struct ust_app_session *ua_sess) > +{ > + int ret, retval = 0; > + struct lttng_ht_iter iter; > + struct ust_app_channel *ua_chan; > + struct consumer_socket *socket; > + > + DBG("Clearing stream quiescent state for ust app pid %d", app->pid); > + > + rcu_read_lock(); > + > + if (!app->compatible) { > + goto end_not_compatible; > + } > + > + pthread_mutex_lock(&ua_sess->lock); > + > + if (ua_sess->deleted) { > + goto end_deleted; > + } > + > + health_code_update(); > + > + socket = consumer_find_socket_by_bitness(app->bits_per_long, > + ua_sess->consumer); Added error checking (logging) for "!socket" here. > + > + /* Clear quiescent state. */ > + switch (ua_sess->buffer_type) { > + case LTTNG_BUFFER_PER_PID: > + cds_lfht_for_each_entry(ua_sess->channels->ht, &iter.iter, ua_chan, > + node.node) { > + health_code_update(); > + ret = consumer_clear_quiescent_channel(socket, ua_chan->key); > + if (ret) { > + ERR("Error clearing quiescent state for consumer channel"); > + retval = -1; Combined ret and retval. > + continue; > + } > + } > + break; > + case LTTNG_BUFFER_PER_UID: > + default: > + assert(0); > + break; > + } > + > + health_code_update(); > + > +end_deleted: > + pthread_mutex_unlock(&ua_sess->lock); > + > +end_not_compatible: > + rcu_read_unlock(); > + health_code_update(); > + return retval; > +} > + > +/* > + * Clear quiescent state in each stream for all applications for a > + * specific UST session. > + * Called with UST session lock held. > + */ > +static > +int ust_app_clear_quiescent_session(struct ltt_ust_session *usess) > + > +{ > + int ret = 0; > + > + DBG("Clearing stream quiescent state for all ust apps"); > + > + rcu_read_lock(); > + > + switch (usess->buffer_type) { > + case LTTNG_BUFFER_PER_UID: > + { > + struct buffer_reg_uid *reg; > + struct lttng_ht_iter iter; > + > + /* > + * Clear quiescent for all per UID buffers associated to > + * that session. > + */ > + cds_list_for_each_entry(reg, &usess->buffer_reg_uid_list, lnode) { > + struct buffer_reg_channel *reg_chan; > + struct consumer_socket *socket; > + > + /* Get associated consumer socket.*/ > + socket = consumer_find_socket_by_bitness(reg->bits_per_long, > + usess->consumer); > + if (!socket) { > + /* Ignore request if no consumer is found for the session. */ > + continue; > + } > + > + cds_lfht_for_each_entry(reg->registry->channels->ht, &iter.iter, > + reg_chan, node.node) { > + /* > + * The following call will print error values so the return > + * code is of little importance because whatever happens, we > + * have to try them all. > + */ > + (void) consumer_clear_quiescent_channel(socket, reg_chan->consumer_key); > + } > + } > + break; > + } > + case LTTNG_BUFFER_PER_PID: > + { > + struct ust_app_session *ua_sess; > + struct lttng_ht_iter iter; > + struct ust_app *app; > + > + cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { > + ua_sess = lookup_session_by_app(usess, app); > + if (ua_sess == NULL) { > + continue; > + } > + (void) ust_app_clear_quiescent_app_session(app, ua_sess); > + } > + break; > + } > + default: > + ret = -1; > + assert(0); > + break; > + } > + > + rcu_read_unlock(); > + health_code_update(); > + return ret; > +} > + > /* > * Destroy a specific UST session in apps. > */ > @@ -4708,6 +4842,14 @@ int ust_app_start_trace_all(struct ltt_ust_session *usess) > > rcu_read_lock(); > > + /* > + * In a start-stop-start use-case, we need to clear the quiescent state > + * of each channel set by the prior stop command, thus ensuring that a > + * following stop or destroy is sure to grab a timestamp_end near those > + * operations, even if the packet is empty. > + */ > + (void) ust_app_clear_quiescent_session(usess); > + > cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) { > ret = ust_app_start_trace(usess, app); > if (ret < 0) { > diff --git a/src/common/consumer/consumer.h b/src/common/consumer/consumer.h > index 59764e1..d2f225a 100644 > --- a/src/common/consumer/consumer.h > +++ b/src/common/consumer/consumer.h > @@ -60,6 +60,7 @@ enum lttng_consumer_command { > LTTNG_CONSUMER_STREAMS_SENT, > LTTNG_CONSUMER_DISCARDED_EVENTS, > LTTNG_CONSUMER_LOST_PACKETS, > + LTTNG_CONSUMER_CLEAR_QUIESCENT_CHANNEL, > }; > > /* State of each fd in consumer */ > @@ -250,6 +251,18 @@ struct lttng_consumer_stream { > int hangup_flush_done; > > /* > + * Whether the stream is in a "complete" state, e.g. no > + * partially written sub-buffer. > + * Initialized at false on stream creation (first packet is empty). > + * "start" tracing: set to false. > + * "stop" tracing: if !quiescent -> flush FINAL, set to true. > + * "destroy" stream/application hangup: if !quiescent -> flush > + * FINAL, set to true. > + * Update and read are protected by the stream lock. I fleshed this out a bit more since I don't want to go through that gymnastic again ;-) The rest of the patch looks good, merged! Thanks! Jérémie > + */ > + bool quiescent; > + > + /* > * metadata_timer_lock protects flags waiting_on_metadata and > * missed_metadata_flush. > */ > diff --git a/src/common/sessiond-comm/sessiond-comm.h b/src/common/sessiond-comm/sessiond-comm.h > index e7fd69d..0983865 100644 > --- a/src/common/sessiond-comm/sessiond-comm.h > +++ b/src/common/sessiond-comm/sessiond-comm.h > @@ -501,6 +501,9 @@ struct lttcomm_consumer_msg { > uint64_t key; /* Channel key. */ > } LTTNG_PACKED flush_channel; > struct { > + uint64_t key; /* Channel key. */ > + } LTTNG_PACKED clear_quiescent_channel; > + struct { > char pathname[PATH_MAX]; > /* Indicate if the snapshot goes on the relayd or locally. */ > uint32_t use_relayd; > diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c > index a113ef1..91ffdce 100644 > --- a/src/common/ust-consumer/ust-consumer.c > +++ b/src/common/ust-consumer/ust-consumer.c > @@ -767,7 +767,54 @@ static int flush_channel(uint64_t chan_key) > > health_code_update(); > > - ustctl_flush_buffer(stream->ustream, 1); > + pthread_mutex_lock(&stream->lock); > + if (!stream->quiescent) { > + stream->quiescent = true; > + ustctl_flush_buffer(stream->ustream, 0); > + } > + pthread_mutex_unlock(&stream->lock); > + } > +error: > + rcu_read_unlock(); > + return ret; > +} > + > +/* > + * Clear quiescent state from channel's streams using the given key to > + * retrieve the channel. > + * > + * Return 0 on success else an LTTng error code. > + */ > +static int clear_quiescent_channel(uint64_t chan_key) > +{ > + int ret = 0; > + struct lttng_consumer_channel *channel; > + struct lttng_consumer_stream *stream; > + struct lttng_ht *ht; > + struct lttng_ht_iter iter; > + > + DBG("UST consumer clear quiescent channel key %" PRIu64, chan_key); > + > + rcu_read_lock(); > + channel = consumer_find_channel(chan_key); > + if (!channel) { > + ERR("UST consumer clear quiescent channel %" PRIu64 " not found", chan_key); > + ret = LTTNG_ERR_UST_CHAN_NOT_FOUND; > + goto error; > + } > + > + ht = consumer_data.stream_per_chan_id_ht; > + > + /* For each stream of the channel id, clear quiescent state. */ > + cds_lfht_for_each_entry_duplicate(ht->ht, > + ht->hash_fct(&channel->key, lttng_ht_seed), ht->match_fct, > + &channel->key, &iter.iter, stream, node_channel_id.node) { > + > + health_code_update(); > + > + pthread_mutex_lock(&stream->lock); > + stream->quiescent = false; > + pthread_mutex_unlock(&stream->lock); > } > error: > rcu_read_unlock(); > @@ -1582,6 +1629,17 @@ int lttng_ustconsumer_recv_cmd(struct lttng_consumer_local_data *ctx, > > goto end_msg_sessiond; > } > + case LTTNG_CONSUMER_CLEAR_QUIESCENT_CHANNEL: > + { > + int ret; > + > + ret = clear_quiescent_channel(msg.u.clear_quiescent_channel.key); > + if (ret != 0) { > + ret_code = ret; > + } > + > + goto end_msg_sessiond; > + } > case LTTNG_CONSUMER_PUSH_METADATA: > { > int ret; > @@ -1951,7 +2009,12 @@ void lttng_ustconsumer_on_stream_hangup(struct lttng_consumer_stream *stream) > assert(stream); > assert(stream->ustream); > > - ustctl_flush_buffer(stream->ustream, 0); > + pthread_mutex_lock(&stream->lock); > + if (!stream->quiescent) { > + stream->quiescent = true; > + ustctl_flush_buffer(stream->ustream, 0); > + } > + pthread_mutex_unlock(&stream->lock); > stream->hangup_flush_done = 1; > } > > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <1463594659-10964-4-git-send-email-mathieu.desnoyers@efficios.com>]
* [lttng-dev] [PATCH lttng-tools 03/10] Fix: kernel tracing: flush after stop [not found] ` <1463594659-10964-4-git-send-email-mathieu.desnoyers@efficios.com> @ 2016-05-19 4:09 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:09 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 2380 bytes --] Good catch, merged! Thanks, Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > We should flush the last packet after stop, not before. Otherwise, we > may end up with events written immediately after the flush, which > defeats the purpose of flushing. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > src/bin/lttng-sessiond/cmd.c | 20 ++++++++++---------- > 1 file changed, 10 insertions(+), 10 deletions(-) > > diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c > index 16d8ba2..d57edcd 100644 > --- a/src/bin/lttng-sessiond/cmd.c > +++ b/src/bin/lttng-sessiond/cmd.c > @@ -2437,7 +2437,15 @@ int cmd_stop_trace(struct ltt_session *session) > if (ksession && ksession->active) { > DBG("Stop kernel tracing"); > > - /* Flush metadata if exist */ > + ret = kernel_stop_session(ksession); > + if (ret < 0) { > + ret = LTTNG_ERR_KERN_STOP_FAIL; > + goto error; > + } > + > + kernel_wait_quiescent(kernel_tracer_fd); > + > + /* Flush metadata after stopping (if exists) */ > if (ksession->metadata_stream_fd >= 0) { > ret = kernel_metadata_flush_buffer(ksession->metadata_stream_fd); > if (ret < 0) { > @@ -2445,7 +2453,7 @@ int cmd_stop_trace(struct ltt_session *session) > } > } > > - /* Flush all buffers before stopping */ > + /* Flush all buffers after stopping */ > cds_list_for_each_entry(kchan, &ksession->channel_list.head, list) { > ret = kernel_flush_buffer(kchan); > if (ret < 0) { > @@ -2453,14 +2461,6 @@ int cmd_stop_trace(struct ltt_session *session) > } > } > > - ret = kernel_stop_session(ksession); > - if (ret < 0) { > - ret = LTTNG_ERR_KERN_STOP_FAIL; > - goto error; > - } > - > - kernel_wait_quiescent(kernel_tracer_fd); > - > ksession->active = 0; > } > > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <1463594659-10964-5-git-send-email-mathieu.desnoyers@efficios.com>]
* [lttng-dev] [PATCH lttng-tools 04/10] Fix: ust-consumer: flush empty packets on snapshot channel [not found] ` <1463594659-10964-5-git-send-email-mathieu.desnoyers@efficios.com> @ 2016-05-19 4:12 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:12 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 1578 bytes --] Merged, thanks! Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > Snapshot operation on a non-stopped stream should use a "final" flush to > ensure empty packets are flushed, so we gather timestamps at the moment > where the snapshot is taken. This is important for streams that have a > low amount of activity, which might be on an empty packet when the > snapshot is triggered. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > src/common/ust-consumer/ust-consumer.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/src/common/ust-consumer/ust-consumer.c b/src/common/ust-consumer/ust-consumer.c > index 91ffdce..c631904 100644 > --- a/src/common/ust-consumer/ust-consumer.c > +++ b/src/common/ust-consumer/ust-consumer.c > @@ -1111,7 +1111,13 @@ static int snapshot_channel(uint64_t key, char *path, uint64_t relayd_id, > } > } > > - ustctl_flush_buffer(stream->ustream, 1); > + /* > + * If tracing is active, we want to perform a "full" buffer flush. > + * Else, if quiescent, it has already been done by the prior stop. > + */ > + if (!stream->quiescent) { > + ustctl_flush_buffer(stream->ustream, 0); > + } > > ret = lttng_ustconsumer_take_snapshot(stream); > if (ret < 0) { > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
[parent not found: <1463594659-10964-6-git-send-email-mathieu.desnoyers@efficios.com>]
* [lttng-dev] [PATCH lttng-tools 05/10] Fix: bogus mask on error.h PRINT types [not found] ` <1463594659-10964-6-git-send-email-mathieu.desnoyers@efficios.com> @ 2016-05-19 4:12 ` Jérémie Galarneau 0 siblings, 0 replies; 16+ messages in thread From: Jérémie Galarneau @ 2016-05-19 4:12 UTC (permalink / raw) [-- Warning: decoded text below may be mangled, UTF-8 assumed --] [-- Attachment #1: Type: text/plain, Size: 1584 bytes --] Good catch, merged! Thanks! Jérémie On Wed, May 18, 2016 at 2:04 PM, Mathieu Desnoyers <mathieu.desnoyers at efficios.com> wrote: > PRINT_ERR maps to 0x1, PRINT_WARN maps to 0x2, which is fine so far to > use as masks, but PRINT_BUG maps to 0x3, which is the same as both > PRINT_ERR and PRINT_WARN, and does not make sense to use in masks with > __lttng_print: > > (type & (PRINT_WARN | PRINT_ERR | PRINT_BUG)) > > Fix this by ensuring PRINT_BUG has its own mask, and express all > constants as shifts to eliminate the risk of re-introducing a similar > bug in the future. > > Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers at efficios.com> > --- > src/common/error.h | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/src/common/error.h b/src/common/error.h > index f2a31df..3ab1d46 100644 > --- a/src/common/error.h > +++ b/src/common/error.h > @@ -57,13 +57,13 @@ extern int lttng_opt_verbose; > extern int lttng_opt_mi; > > /* Error type. */ > -#define PRINT_ERR 0x1 > -#define PRINT_WARN 0x2 > -#define PRINT_BUG 0x3 > -#define PRINT_MSG 0x4 > -#define PRINT_DBG 0x10 > -#define PRINT_DBG2 0x20 > -#define PRINT_DBG3 0x30 > +#define PRINT_ERR (1 << 0) > +#define PRINT_WARN (1 << 1) > +#define PRINT_BUG (1 << 2) > +#define PRINT_MSG (1 << 3) > +#define PRINT_DBG (1 << 4) > +#define PRINT_DBG2 (1 << 5) > +#define PRINT_DBG3 (1 << 6) > > /* > * Macro for printing message depending on command line option and verbosity. > -- > 2.1.4 > -- Jérémie Galarneau EfficiOS Inc. http://www.efficios.com ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2016-05-19 4:46 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-18 18:04 [lttng-dev] [PATCH lttng-tools 00/10] Fix: tracefile rotation rm-after-destroy race Mathieu Desnoyers
2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 06/10] Fix: error.h: add missing parenthesis around macro parameter Mathieu Desnoyers
2016-05-19 4:13 ` Jérémie Galarneau
2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 07/10] Fix: WARN() should print as WARN level, not ERR Mathieu Desnoyers
2016-05-19 4:14 ` Jérémie Galarneau
2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 08/10] Add environment variable to allow abort on error Mathieu Desnoyers
2016-05-19 4:45 ` Jérémie Galarneau
2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 09/10] test: kernel tracing destroy flush behavior with tracefile rotation Mathieu Desnoyers
2016-05-19 4:45 ` Jérémie Galarneau
2016-05-18 18:04 ` [lttng-dev] [PATCH lttng-tools 10/10] test: UST " Mathieu Desnoyers
2016-05-19 4:46 ` Jérémie Galarneau
[not found] ` <1463594659-10964-2-git-send-email-mathieu.desnoyers@efficios.com>
2016-05-19 2:57 ` [lttng-dev] [PATCH lttng-tools 01/10] Fix: bad file descriptors on close after rotation error Jérémie Galarneau
[not found] ` <1463594659-10964-3-git-send-email-mathieu.desnoyers@efficios.com>
2016-05-19 4:09 ` [lttng-dev] [PATCH lttng-tools 02/10] Fix: UST should not generate packet at destroy after stop Jérémie Galarneau
[not found] ` <1463594659-10964-4-git-send-email-mathieu.desnoyers@efficios.com>
2016-05-19 4:09 ` [lttng-dev] [PATCH lttng-tools 03/10] Fix: kernel tracing: flush " Jérémie Galarneau
[not found] ` <1463594659-10964-5-git-send-email-mathieu.desnoyers@efficios.com>
2016-05-19 4:12 ` [lttng-dev] [PATCH lttng-tools 04/10] Fix: ust-consumer: flush empty packets on snapshot channel Jérémie Galarneau
[not found] ` <1463594659-10964-6-git-send-email-mathieu.desnoyers@efficios.com>
2016-05-19 4:12 ` [lttng-dev] [PATCH lttng-tools 05/10] Fix: bogus mask on error.h PRINT types Jérémie Galarneau
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox