[lttng-dev] [PATCH lttng-tools 1/6] Rename the "metadata regenerate" command to "regenerate metadata"
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Thu Jun 30 18:22:31 UTC 2016
----- On Jun 30, 2016, at 12:36 PM, Julien Desfossez jdesfossez at efficios.com wrote:
> Prepare the deprecation of the "metadata regenerate" command since we
> need to regenerate the statedump as well, so it is more convenient to
> have one command to regenerate various session's attributes.
>
> Signed-off-by: Julien Desfossez <jdesfossez at efficios.com>
> ---
> configure.ac | 2 +-
> doc/man/Makefile.am | 3 +-
> doc/man/lttng-metadata.1.txt | 28 +--
> doc/man/lttng-regenerate.1.txt | 63 +++++
> include/lttng/lttng.h | 7 +-
> src/bin/lttng-sessiond/cmd.c | 15 +-
> src/bin/lttng-sessiond/cmd.h | 2 +-
> src/bin/lttng-sessiond/main.c | 6 +-
> src/bin/lttng/Makefile.am | 1 +
> src/bin/lttng/command.h | 1 +
> src/bin/lttng/commands/metadata.c | 2 +-
> src/bin/lttng/commands/regenerate.c | 266 ++++++++++++++++++++++
> src/bin/lttng/lttng.c | 1 +
> src/common/kernel-ctl/kernel-ctl.c | 2 +-
> src/common/kernel-ctl/kernel-ctl.h | 2 +-
> src/common/mi-lttng.c | 2 +
> src/common/mi-lttng.h | 2 +
> src/common/sessiond-comm/sessiond-comm.h | 4 +-
> src/lib/lttng-ctl/lttng-ctl.c | 12 +-
> tests/destructive/metadata-regeneration | 8 +-
> tests/fast_regression | 2 +-
> tests/regression/Makefile.am | 2 +-
> tests/regression/tools/Makefile.am | 2 +-
> tests/regression/tools/metadata-regen/Makefile.am | 16 --
> tests/regression/tools/metadata-regen/test_kernel | 109 ---------
> tests/regression/tools/metadata-regen/test_ust | 208 -----------------
> tests/regression/tools/mi/test_mi | 4 +-
> tests/regression/tools/regen-metadata/Makefile.am | 16 ++
> tests/regression/tools/regen-metadata/test_kernel | 109 +++++++++
> tests/regression/tools/regen-metadata/test_ust | 208 +++++++++++++++++
> tests/root_regression | 2 +-
> tests/utils/utils.sh | 14 +-
> 32 files changed, 723 insertions(+), 398 deletions(-)
> create mode 100644 doc/man/lttng-regenerate.1.txt
> create mode 100644 src/bin/lttng/commands/regenerate.c
> delete mode 100644 tests/regression/tools/metadata-regen/Makefile.am
> delete mode 100755 tests/regression/tools/metadata-regen/test_kernel
> delete mode 100755 tests/regression/tools/metadata-regen/test_ust
> create mode 100644 tests/regression/tools/regen-metadata/Makefile.am
> create mode 100755 tests/regression/tools/regen-metadata/test_kernel
> create mode 100755 tests/regression/tools/regen-metadata/test_ust
>
> diff --git a/configure.ac b/configure.ac
> index fb2b013..89a7858 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -980,7 +980,7 @@ AC_CONFIG_FILES([
> tests/regression/tools/mi/Makefile
> tests/regression/tools/wildcard/Makefile
> tests/regression/tools/crash/Makefile
> - tests/regression/tools/metadata-regen/Makefile
> + tests/regression/tools/regen-metadata/Makefile
> tests/regression/ust/Makefile
> tests/regression/ust/nprocesses/Makefile
> tests/regression/ust/high-throughput/Makefile
> diff --git a/doc/man/Makefile.am b/doc/man/Makefile.am
> index 1090f1a..f75db6e 100644
> --- a/doc/man/Makefile.am
> +++ b/doc/man/Makefile.am
> @@ -30,7 +30,8 @@ MAN1_NAMES = \
> lttng-enable-event \
> lttng-disable-event \
> lttng-crash \
> - lttng-metadata
> + lttng-metadata \
> + lttng-regenerate
> MAN3_NAMES =
> MAN8_NAMES = lttng-sessiond lttng-relayd
> MAN1_NO_ASCIIDOC_NAMES =
> diff --git a/doc/man/lttng-metadata.1.txt b/doc/man/lttng-metadata.1.txt
> index 0fa240e..3410183 100644
> --- a/doc/man/lttng-metadata.1.txt
> +++ b/doc/man/lttng-metadata.1.txt
> @@ -15,33 +15,9 @@ SYNOPSIS
>
> DESCRIPTION
> -----------
> -The `lttng metadata` command manages a tracing session's metadata
> -generation options.
> -
> -As of this version, only the `regenerate` command's action is available.
> -Regenerating a tracing session's metadata can be used to
> -resample the offset between the system's monotonic clock and
> -the wall-clock time.
> -
> -This command is meant to be used to resample the wall-clock time
> -following a major
> -link:https://en.wikipedia.org/wiki/Network_Time_Protocol[NTP]
> -correction. As such, a system booting with an incorrect wall time can be
> -traced before its wall time is NTP-corrected. Regenerating the tracing
> -session's metadata ensures that trace viewers can accurately determine
> -the events time relative to Unix Epoch.
> -
> -
> -include::common-cmd-options-head.txt[]
> -
> -
> -option:-s, option:--session='SESSION'::
> - Manage the metadata generation of the tracing session named 'SESSION'
> - instead of the current tracing session.
> -
> -
> -include::common-cmd-help-options.txt[]
>
> +Deprecated, replaced by the *regenerate metadata* command, see
> +man:lttng-regenerate(1).
>
> LIMITATIONS
> -----------
> diff --git a/doc/man/lttng-regenerate.1.txt b/doc/man/lttng-regenerate.1.txt
> new file mode 100644
> index 0000000..dbbfa4d
> --- /dev/null
> +++ b/doc/man/lttng-regenerate.1.txt
> @@ -0,0 +1,63 @@
> +lttng-regenerate(1)
> +=================
> +
> +
> +NAME
> +----
> +lttng-regenerate - Manage an LTTng tracing session's data regeneration
> +
> +
> +SYNOPSIS
> +--------
> +Regenerate the metadata of a session
> +
> +[verse]
> +*lttng* ['linkgenoptions:(GENERAL OPTIONS)'] *regenerate metadata*
> [option:--session='SESSION']
> +
> +DESCRIPTION
> +-----------
> +The `lttng regenerate` command manages a tracing session's data regeneration
> +options.
> +
> +As of this version, only the `metadata` command's action is available.
> +Regenerating a tracing session's metadata can be used to
> +resample the offset between the system's monotonic clock and
> +the wall-clock time.
> +
> +This command is meant to be used to resample the wall-clock time
> +following a major
> +link:https://en.wikipedia.org/wiki/Network_Time_Protocol[NTP]
> +correction. As such, a system booting with an incorrect wall time can be
> +traced before its wall time is NTP-corrected. Regenerating the tracing
> +session's metadata ensures that trace viewers can accurately determine
> +the events time relative to Unix Epoch.
> +
> +
> +include::common-cmd-options-head.txt[]
> +
> +
> +option:-s, option:--session='SESSION'::
> + Manage the metadata generation of the tracing session named 'SESSION'
> + instead of the current tracing session.
> +
> +
> +include::common-cmd-help-options.txt[]
> +
> +
> +LIMITATIONS
> +-----------
> +The `lttng regenerate metadata` command can only be used on kernel and
> +user space tracing sessions (using per-user buffering), in non-live
> +mode.
> +
> +See man:lttng-enable-channel(1) for more information about
> +buffering schemes and man:lttng-create(1) for more information
> +about the different tracing session modes.
> +
> +
> +include::common-cmd-footer.txt[]
> +
> +
> +SEE ALSO
> +--------
> +man:lttng(1)
> diff --git a/include/lttng/lttng.h b/include/lttng/lttng.h
> index 2088864..ed03bdb 100644
> --- a/include/lttng/lttng.h
> +++ b/include/lttng/lttng.h
> @@ -160,12 +160,17 @@ extern int lttng_set_consumer_url(struct lttng_handle
> *handle,
> extern int lttng_data_pending(const char *session_name);
>
> /*
> + * Deprecated, replaced by lttng_regenerate_metadata.
> + */
> +extern int lttng_metadata_regenerate(const char *session_name);
Should we use the LTTNG_DEPRECATED() macro ?
Thanks,
Mathieu
> +
> +/*
> * Trigger the regeneration of the metadata for a session.
> * The new metadata overwrite the previous one locally or remotely (through
> * the lttng-relayd). Only kernel, per-uid and non-live sessions are supported.
> * Return 0 on success, a negative LTTng error code on error.
> */
> -extern int lttng_metadata_regenerate(const char *session_name);
> +extern int lttng_regenerate_metadata(const char *session_name);
>
> #ifdef __cplusplus
> }
> diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c
> index c74da94..bd63389 100644
> --- a/src/bin/lttng-sessiond/cmd.c
> +++ b/src/bin/lttng-sessiond/cmd.c
> @@ -3397,7 +3397,7 @@ error:
> * Return 0 if the metadata can be generated, a LTTNG_ERR code otherwise.
> */
> static
> -int check_metadata_regenerate_support(struct ltt_session *session)
> +int check_regenerate_metadata_support(struct ltt_session *session)
> {
> int ret;
>
> @@ -3436,7 +3436,7 @@ end:
> }
>
> static
> -int ust_metadata_regenerate(struct ltt_ust_session *usess)
> +int ust_regenerate_metadata(struct ltt_ust_session *usess)
> {
> int ret = 0;
> struct buffer_reg_uid *uid_reg = NULL;
> @@ -3497,7 +3497,7 @@ end:
> }
>
> /*
> - * Command LTTNG_METADATA_REGENERATE from the lttng-ctl library.
> + * Command LTTNG_REGENERATE_METADATA from the lttng-ctl library.
> *
> * Ask the consumer to truncate the existing metadata file(s) and
> * then regenerate the metadata. Live and per-pid sessions are not
> @@ -3505,19 +3505,19 @@ end:
> *
> * Return 0 on success or else a LTTNG_ERR code.
> */
> -int cmd_metadata_regenerate(struct ltt_session *session)
> +int cmd_regenerate_metadata(struct ltt_session *session)
> {
> int ret;
>
> assert(session);
>
> - ret = check_metadata_regenerate_support(session);
> + ret = check_regenerate_metadata_support(session);
> if (ret) {
> goto end;
> }
>
> if (session->kernel_session) {
> - ret = kernctl_session_metadata_regenerate(
> + ret = kernctl_session_regenerate_metadata(
> session->kernel_session->fd);
> if (ret < 0) {
> ERR("Failed to regenerate the kernel metadata");
> @@ -3526,7 +3526,7 @@ int cmd_metadata_regenerate(struct ltt_session *session)
> }
>
> if (session->ust_session) {
> - ret = ust_metadata_regenerate(session->ust_session);
> + ret = ust_regenerate_metadata(session->ust_session);
> if (ret < 0) {
> ERR("Failed to regenerate the UST metadata");
> goto end;
> @@ -3539,7 +3539,6 @@ end:
> return ret;
> }
>
> -
> /*
> * Send relayd sockets from snapshot output to consumer. Ignore request if the
> * snapshot output is *not* set with a remote destination.
> diff --git a/src/bin/lttng-sessiond/cmd.h b/src/bin/lttng-sessiond/cmd.h
> index a220e3a..320d717 100644
> --- a/src/bin/lttng-sessiond/cmd.h
> +++ b/src/bin/lttng-sessiond/cmd.h
> @@ -110,6 +110,6 @@ int cmd_snapshot_record(struct ltt_session *session,
>
> int cmd_set_session_shm_path(struct ltt_session *session,
> const char *shm_path);
> -int cmd_metadata_regenerate(struct ltt_session *session);
> +int cmd_regenerate_metadata(struct ltt_session *session);
>
> #endif /* CMD_H */
> diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
> index 497f4ee..3623e5d 100644
> --- a/src/bin/lttng-sessiond/main.c
> +++ b/src/bin/lttng-sessiond/main.c
> @@ -3003,7 +3003,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx,
> int sock,
> case LTTNG_SNAPSHOT_RECORD:
> case LTTNG_SAVE_SESSION:
> case LTTNG_SET_SESSION_SHM_PATH:
> - case LTTNG_METADATA_REGENERATE:
> + case LTTNG_REGENERATE_METADATA:
> need_domain = 0;
> break;
> default:
> @@ -4114,9 +4114,9 @@ error_add_context:
> cmd_ctx->lsm->u.set_shm_path.shm_path);
> break;
> }
> - case LTTNG_METADATA_REGENERATE:
> + case LTTNG_REGENERATE_METADATA:
> {
> - ret = cmd_metadata_regenerate(cmd_ctx->session);
> + ret = cmd_regenerate_metadata(cmd_ctx->session);
> break;
> }
> default:
> diff --git a/src/bin/lttng/Makefile.am b/src/bin/lttng/Makefile.am
> index b911f33..acd973b 100644
> --- a/src/bin/lttng/Makefile.am
> +++ b/src/bin/lttng/Makefile.am
> @@ -18,6 +18,7 @@ lttng_SOURCES = command.h conf.c conf.h commands/start.c \
> commands/track-untrack.c \
> commands/status.c \
> commands/metadata.c \
> + commands/regenerate.c \
> commands/help.c \
> utils.c utils.h lttng.c
>
> diff --git a/src/bin/lttng/command.h b/src/bin/lttng/command.h
> index 72cf4e0..3ac61e1 100644
> --- a/src/bin/lttng/command.h
> +++ b/src/bin/lttng/command.h
> @@ -76,6 +76,7 @@ DECL_COMMAND(load);
> DECL_COMMAND(track);
> DECL_COMMAND(untrack);
> DECL_COMMAND(metadata);
> +DECL_COMMAND(regenerate);
>
> extern int cmd_help(int argc, const char **argv,
> const struct cmd_struct commands[]);
> diff --git a/src/bin/lttng/commands/metadata.c
> b/src/bin/lttng/commands/metadata.c
> index f6a821a..08d6e58 100644
> --- a/src/bin/lttng/commands/metadata.c
> +++ b/src/bin/lttng/commands/metadata.c
> @@ -79,7 +79,7 @@ static int metadata_regenerate(int argc, const char **argv)
> ret = -LTTNG_ERR_INVALID;
> goto end;
> }
> - ret = lttng_metadata_regenerate(session_name);
> + ret = lttng_regenerate_metadata(session_name);
> if (ret == 0) {
> MSG("Metadata successfully regenerated for session %s", session_name);
> }
> diff --git a/src/bin/lttng/commands/regenerate.c
> b/src/bin/lttng/commands/regenerate.c
> new file mode 100644
> index 0000000..c64d8fe
> --- /dev/null
> +++ b/src/bin/lttng/commands/regenerate.c
> @@ -0,0 +1,266 @@
> +/*
> + * Copyright (C) 2015 - Julien Desfossez <jdesfossez 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.
> + */
> +
> +#define _LGPL_SOURCE
> +#include <assert.h>
> +#include <ctype.h>
> +#include <popt.h>
> +#include <stdio.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <unistd.h>
> +
> +#include <common/mi-lttng.h>
> +
> +#include "../command.h"
> +
> +static char *opt_session_name;
> +static char *session_name = NULL;
> +
> +static int regenerate_metadata(int argc, const char **argv);
> +
> +enum {
> + OPT_HELP = 1,
> + OPT_LIST_OPTIONS,
> + OPT_LIST_COMMANDS,
> +};
> +
> +static struct mi_writer *writer;
> +
> +static struct poptOption long_options[] = {
> + /* { longName, shortName, argInfo, argPtr, value, descrip, argDesc, } */
> + { "help", 'h', POPT_ARG_NONE, 0, OPT_HELP, 0, 0, },
> + { "session", 's', POPT_ARG_STRING, &opt_session_name, 0, 0, 0},
> + { "list-options", 0, POPT_ARG_NONE, NULL, OPT_LIST_OPTIONS, 0, 0, },
> + { "list-commands", 0, POPT_ARG_NONE, NULL, OPT_LIST_COMMANDS},
> + { 0, 0, 0, 0, 0, 0, 0, },
> +};
> +
> +static struct cmd_struct actions[] = {
> + { "metadata", regenerate_metadata },
> + { NULL, NULL } /* Array closure */
> +};
> +
> +/*
> + * Count and return the number of arguments in argv.
> + */
> +static int count_arguments(const char **argv)
> +{
> + int i = 0;
> +
> + assert(argv);
> +
> + while (argv[i] != NULL) {
> + i++;
> + }
> +
> + return i;
> +}
> +
> +static int regenerate_metadata(int argc, const char **argv)
> +{
> + int ret;
> +
> + if (argc > 1) {
> + ret = -LTTNG_ERR_INVALID;
> + goto end;
> + }
> + ret = lttng_regenerate_metadata(session_name);
> + if (ret == 0) {
> + MSG("Metadata successfully regenerated for session %s", session_name);
> + }
> +
> +end:
> + return ret;
> +}
> +
> +static int handle_command(const char **argv)
> +{
> + struct cmd_struct *cmd;
> + int ret = CMD_SUCCESS, i = 0, argc, command_ret = CMD_SUCCESS;
> +
> + if (argv == NULL) {
> + ERR("argv is null");
> + command_ret = CMD_ERROR;
> + goto end;
> + }
> +
> + argc = count_arguments(argv);
> +
> + cmd = &actions[i];
> + while (cmd->func != NULL) {
> + /* Find command */
> + if (strcmp(argv[0], cmd->name) == 0) {
> + if (lttng_opt_mi) {
> + /* Action element */
> + ret = mi_lttng_writer_open_element(writer,
> + mi_lttng_element_command_regenerate_action);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> +
> + /* Name of the action */
> + ret = mi_lttng_writer_write_element_string(writer,
> + config_element_name, argv[0]);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> + }
> + command_ret = cmd->func(argc, argv);
> + if (lttng_opt_mi) {
> + /* Close output and action element */
> + ret = mi_lttng_writer_close_element(writer);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> + }
> + goto end;
> + }
> +
> + cmd = &actions[i++];
> + }
> +
> + ret = CMD_UNDEFINED;
> +
> +end:
> + /* Overwrite ret if an error occurred in cmd->func() */
> + ret = command_ret ? command_ret : ret;
> + return ret;
> +}
> +
> +/*
> + * regenerate command handling.
> + */
> +int cmd_regenerate(int argc, const char **argv)
> +{
> + int opt, ret = CMD_SUCCESS, command_ret = CMD_SUCCESS, success = 1;
> + static poptContext pc;
> +
> + if (argc < 1) {
> + SHOW_HELP();
> + ret = CMD_ERROR;
> + goto end;
> + }
> +
> + pc = poptGetContext(NULL, argc, argv, long_options, 0);
> + poptReadDefaultConfig(pc, 0);
> +
> + if (lttng_opt_mi) {
> + writer = mi_lttng_writer_create(fileno(stdout), lttng_opt_mi);
> + if (!writer) {
> + ret = -LTTNG_ERR_NOMEM;
> + goto end;
> + }
> + /* Open command element */
> + ret = mi_lttng_writer_command_open(writer,
> + mi_lttng_element_command_regenerate);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> +
> + /* Open output element */
> + ret = mi_lttng_writer_open_element(writer,
> + mi_lttng_element_command_output);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> + }
> +
> + while ((opt = poptGetNextOpt(pc)) != -1) {
> + switch (opt) {
> + case OPT_HELP:
> + SHOW_HELP();
> + goto end;
> + case OPT_LIST_OPTIONS:
> + list_cmd_options(stdout, long_options);
> + goto end;
> + case OPT_LIST_COMMANDS:
> + list_commands(actions, stdout);
> + goto end;
> + default:
> + SHOW_HELP();
> + ret = CMD_UNDEFINED;
> + goto end;
> + }
> + }
> +
> + if (!opt_session_name) {
> + session_name = get_session_name();
> + if (session_name == NULL) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> + } else {
> + session_name = opt_session_name;
> + }
> +
> + command_ret = handle_command(poptGetArgs(pc));
> + if (command_ret) {
> + switch (-command_ret) {
> + default:
> + ERR("%s", lttng_strerror(command_ret));
> + success = 0;
> + break;
> + }
> + }
> +
> + if (lttng_opt_mi) {
> + /* Close output element */
> + ret = mi_lttng_writer_close_element(writer);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> +
> + /* Success ? */
> + ret = mi_lttng_writer_write_element_bool(writer,
> + mi_lttng_element_command_success, success);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> +
> + /* Command element close */
> + ret = mi_lttng_writer_command_close(writer);
> + if (ret) {
> + ret = CMD_ERROR;
> + goto end;
> + }
> + }
> +
> +end:
> + /* Mi clean-up */
> + if (writer && mi_lttng_writer_destroy(writer)) {
> + /* Preserve original error code */
> + ret = ret ? ret : -LTTNG_ERR_MI_IO_FAIL;
> + }
> +
> + if (!opt_session_name) {
> + free(session_name);
> + }
> +
> + /* Overwrite ret if an error occurred during handle_command() */
> + ret = command_ret ? command_ret : ret;
> +
> + poptFreeContext(pc);
> + return ret;
> +}
> diff --git a/src/bin/lttng/lttng.c b/src/bin/lttng/lttng.c
> index 987a9dd..34816be 100644
> --- a/src/bin/lttng/lttng.c
> +++ b/src/bin/lttng/lttng.c
> @@ -88,6 +88,7 @@ static struct cmd_struct commands[] = {
> { "help", NULL},
> { "version", cmd_version},
> { "view", cmd_view},
> + { "regenerate", cmd_regenerate},
> { NULL, NULL} /* Array closure */
> };
>
> diff --git a/src/common/kernel-ctl/kernel-ctl.c
> b/src/common/kernel-ctl/kernel-ctl.c
> index 3d12df4..e1de0e7 100644
> --- a/src/common/kernel-ctl/kernel-ctl.c
> +++ b/src/common/kernel-ctl/kernel-ctl.c
> @@ -225,7 +225,7 @@ int kernctl_list_tracker_pids(int fd)
> return LTTNG_IOCTL_NO_CHECK(fd, LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS);
> }
>
> -int kernctl_session_metadata_regenerate(int fd)
> +int kernctl_session_regenerate_metadata(int fd)
> {
> return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_METADATA_REGEN);
> }
> diff --git a/src/common/kernel-ctl/kernel-ctl.h
> b/src/common/kernel-ctl/kernel-ctl.h
> index 6736937..f30e6f3 100644
> --- a/src/common/kernel-ctl/kernel-ctl.h
> +++ b/src/common/kernel-ctl/kernel-ctl.h
> @@ -65,7 +65,7 @@ int kernctl_track_pid(int fd, int pid);
> int kernctl_untrack_pid(int fd, int pid);
> int kernctl_list_tracker_pids(int fd);
>
> -int kernctl_session_metadata_regenerate(int fd);
> +int kernctl_session_regenerate_metadata(int fd);
>
> /* Buffer operations */
>
> diff --git a/src/common/mi-lttng.c b/src/common/mi-lttng.c
> index 109fb41..57678c1 100644
> --- a/src/common/mi-lttng.c
> +++ b/src/common/mi-lttng.c
> @@ -58,6 +58,8 @@ const char * const mi_lttng_element_command_list = "list";
> const char * const mi_lttng_element_command_load = "load";
> LTTNG_HIDDEN const char * const mi_lttng_element_command_metadata = "metadata";
> LTTNG_HIDDEN const char * const mi_lttng_element_command_metadata_action =
> "metadata_action";
> +LTTNG_HIDDEN const char * const mi_lttng_element_command_regenerate =
> "regenerate";
> +LTTNG_HIDDEN const char * const mi_lttng_element_command_regenerate_action =
> "regenerate_action";
> const char * const mi_lttng_element_command_name = "name";
> const char * const mi_lttng_element_command_output = "output";
> const char * const mi_lttng_element_command_save = "save";
> diff --git a/src/common/mi-lttng.h b/src/common/mi-lttng.h
> index 585818d..cf5f468 100644
> --- a/src/common/mi-lttng.h
> +++ b/src/common/mi-lttng.h
> @@ -64,6 +64,8 @@ extern const char * const mi_lttng_element_command_list;
> extern const char * const mi_lttng_element_command_load;
> extern const char * const mi_lttng_element_command_metadata;
> extern const char * const mi_lttng_element_command_metadata_action;
> +extern const char * const mi_lttng_element_command_regenerate;
> +extern const char * const mi_lttng_element_command_regenerate_action;
> extern const char * const mi_lttng_element_command_name;
> extern const char * const mi_lttng_element_command_output;
> extern const char * const mi_lttng_element_command_save;
> diff --git a/src/common/sessiond-comm/sessiond-comm.h
> b/src/common/sessiond-comm/sessiond-comm.h
> index 0983865..29740c1 100644
> --- a/src/common/sessiond-comm/sessiond-comm.h
> +++ b/src/common/sessiond-comm/sessiond-comm.h
> @@ -94,7 +94,7 @@ enum lttcomm_sessiond_command {
> LTTNG_UNTRACK_PID = 33,
> LTTNG_LIST_TRACKER_PIDS = 34,
> LTTNG_SET_SESSION_SHM_PATH = 40,
> - LTTNG_METADATA_REGENERATE = 41,
> + LTTNG_REGENERATE_METADATA = 41,
> };
>
> enum lttcomm_relayd_command {
> @@ -526,7 +526,7 @@ struct lttcomm_consumer_msg {
> } LTTNG_PACKED lost_packets;
> struct {
> uint64_t session_id;
> - } LTTNG_PACKED metadata_regenerate;
> + } LTTNG_PACKED regenerate_metadata;
> } u;
> } LTTNG_PACKED;
>
> diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
> index 0ae6b0b..8c78e1c 100644
> --- a/src/lib/lttng-ctl/lttng-ctl.c
> +++ b/src/lib/lttng-ctl/lttng-ctl.c
> @@ -2384,7 +2384,7 @@ int lttng_list_tracker_pids(struct lttng_handle *handle,
> * Regenerate the metadata for a session.
> * Return 0 on success, a negative error code on error.
> */
> -int lttng_metadata_regenerate(const char *session_name)
> +int lttng_regenerate_metadata(const char *session_name)
> {
> int ret;
> struct lttcomm_session_msg lsm;
> @@ -2395,7 +2395,7 @@ int lttng_metadata_regenerate(const char *session_name)
> }
>
> memset(&lsm, 0, sizeof(lsm));
> - lsm.cmd_type = LTTNG_METADATA_REGENERATE;
> + lsm.cmd_type = LTTNG_REGENERATE_METADATA;
>
> lttng_ctl_copy_string(lsm.session.name, session_name,
> sizeof(lsm.session.name));
> @@ -2411,6 +2411,14 @@ end:
> }
>
> /*
> + * Deprecated, replaced by lttng_regenerate_metadata.
> + */
> +int lttng_metadata_regenerate(const char *session_name)
> +{
> + return lttng_regenerate_metadata(session_name);
> +}
> +
> +/*
> * lib constructor.
> */
> static void __attribute__((constructor)) init(void)
> diff --git a/tests/destructive/metadata-regeneration
> b/tests/destructive/metadata-regeneration
> index 32469b5..d4e632a 100755
> --- a/tests/destructive/metadata-regeneration
> +++ b/tests/destructive/metadata-regeneration
> @@ -89,7 +89,7 @@ function test_kernel_local ()
> validate_trace_date $DATE1 $TRACE_PATH
> start_lttng_tracing_ok $SESSION_NAME
> date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null
> - metadata_regenerate_ok $SESSION_NAME
> + regenerate_metadata_ok $SESSION_NAME
> stop_lttng_tracing_ok $SESSION_NAME
> validate_trace_date $DATE2 $TRACE_PATH
> if [ $? -eq 0 ]; then
> @@ -111,7 +111,7 @@ function test_kernel_streaming ()
> validate_trace_date $DATE1 $TRACE_PATH/$HOSTNAME/$SESSION_NAME*
> start_lttng_tracing_ok $SESSION_NAME
> date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null
> - metadata_regenerate_ok $SESSION_NAME
> + regenerate_metadata_ok $SESSION_NAME
> stop_lttng_tracing_ok $SESSION_NAME
> # Validate test
> validate_trace_date $DATE2 $TRACE_PATH/$HOSTNAME/$SESSION_NAME*
> @@ -147,7 +147,7 @@ function test_ust_local ()
>
> start_lttng_tracing_ok $SESSION_NAME
> date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null
> - metadata_regenerate_ok $SESSION_NAME
> + regenerate_metadata_ok $SESSION_NAME
>
> stop_lttng_tracing_ok $SESSION_NAME
> destroy_lttng_session_ok $SESSION_NAME
> @@ -184,7 +184,7 @@ function test_ust_streaming ()
> start_lttng_tracing_ok $SESSION_NAME
> date "+%Y-%m-%d %H:%M" -s "$DATE2 $HOUR" >/dev/null
>
> - metadata_regenerate_ok $SESSION_NAME
> + regenerate_metadata_ok $SESSION_NAME
>
> stop_lttng_tracing_ok $SESSION_NAME
> destroy_lttng_session_ok $SESSION_NAME
> diff --git a/tests/fast_regression b/tests/fast_regression
> index 0c4f079..262c846 100644
> --- a/tests/fast_regression
> +++ b/tests/fast_regression
> @@ -16,7 +16,7 @@ regression/tools/save-load/test_load
> regression/tools/mi/test_mi
> regression/tools/wildcard/test_event_wildcard
> regression/tools/crash/test_crash
> -regression/tools/metadata-regen/test_ust
> +regression/tools/regen-metadata/test_ust
> regression/ust/before-after/test_before_after
> regression/ust/buffers-pid/test_buffers_pid
> regression/ust/multi-session/test_multi_session
> diff --git a/tests/regression/Makefile.am b/tests/regression/Makefile.am
> index 6a2d24c..2297ea1 100644
> --- a/tests/regression/Makefile.am
> +++ b/tests/regression/Makefile.am
> @@ -22,7 +22,7 @@ TESTS = tools/filtering/test_invalid_filter \
> tools/mi/test_mi \
> tools/wildcard/test_event_wildcard \
> tools/crash/test_crash \
> - tools/metadata-regen/test_ust
> + tools/regen-metadata/test_ust
>
> if HAVE_LIBLTTNG_UST_CTL
> SUBDIRS += ust
> diff --git a/tests/regression/tools/Makefile.am
> b/tests/regression/tools/Makefile.am
> index 6c39c9f..91820ad 100644
> --- a/tests/regression/tools/Makefile.am
> +++ b/tests/regression/tools/Makefile.am
> @@ -1,2 +1,2 @@
> SUBDIRS = streaming filtering health tracefile-limits snapshots live exclusion
> save-load mi \
> - wildcard crash metadata-regen
> + wildcard crash regen-metadata
> diff --git a/tests/regression/tools/metadata-regen/Makefile.am
> b/tests/regression/tools/metadata-regen/Makefile.am
> deleted file mode 100644
> index d4a92eb..0000000
> --- a/tests/regression/tools/metadata-regen/Makefile.am
> +++ /dev/null
> @@ -1,16 +0,0 @@
> -noinst_SCRIPTS = test_ust test_kernel
> -EXTRA_DIST = test_ust test_kernel
> -
> -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/tools/metadata-regen/test_kernel
> b/tests/regression/tools/metadata-regen/test_kernel
> deleted file mode 100755
> index fb9940a..0000000
> --- a/tests/regression/tools/metadata-regen/test_kernel
> +++ /dev/null
> @@ -1,109 +0,0 @@
> -#!/bin/bash
> -#
> -# Copyright (C) - 2015 Julien Desfossez <jdesfossez 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="Streaming - Kernel tracing"
> -
> -CURDIR=$(dirname $0)/
> -TESTDIR=$CURDIR/../../..
> -EVENT_NAME="lttng_test_filter_event"
> -PID_RELAYD=0
> -SESSION_NAME=""
> -
> -TRACE_PATH=$(mktemp -d)
> -
> -NUM_TESTS=18
> -
> -source $TESTDIR/utils/utils.sh
> -
> -# LTTng kernel modules check
> -out=`ls /lib/modules/$(uname -r)/extra | grep lttng`
> -if [ -z "$out" ]; then
> - BAIL_OUT "LTTng modules not detected."
> -fi
> -
> -function lttng_create_session_uri
> -{
> - # Create session with default path
> - $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $SESSION_NAME -U net://localhost
> >/dev/null 2>&1
> -
> - ok $? "Create session $SESSION_NAME"
> -}
> -
> -function test_kernel_streaming ()
> -{
> - diag "Test kernel streaming with metadata regeneration"
> - lttng_create_session_uri
> - lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
> - start_lttng_tracing_ok $SESSION_NAME
> - echo -n "100" > /proc/lttng-test-filter-event
> - metadata_regenerate_ok $SESSION_NAME
> - stop_lttng_tracing_ok $SESSION_NAME
> - # Validate test
> - validate_trace $EVENT_NAME $TRACE_PATH/$HOSTNAME/$SESSION_NAME*
> - if [ $? -eq 0 ]; then
> - # Only delete if successful
> - rm -rf $TRACE_PATH
> - else
> - break
> - fi
> - destroy_lttng_session_ok $SESSION_NAME
> -}
> -
> -function test_kernel_local ()
> -{
> - diag "Test kernel local with metadata regeneration"
> - create_lttng_session_ok $SESSION_NAME $TRACE_PATH
> - lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
> - start_lttng_tracing_ok $SESSION_NAME
> - echo -n "100" > /proc/lttng-test-filter-event
> - metadata_regenerate_ok $SESSION_NAME
> - stop_lttng_tracing_ok $SESSION_NAME
> - validate_trace $EVENT_NAME $TRACE_PATH
> - if [ $? -eq 0 ]; then
> - # Only delete if successful
> - rm -rf $TRACE_PATH
> - fi
> - destroy_lttng_session_ok $SESSION_NAME
> -}
> -
> -plan_tests $NUM_TESTS
> -
> -print_test_banner "$TEST_DESC"
> -
> -if [ "$(id -u)" == "0" ]; then
> - isroot=1
> -else
> - isroot=0
> -fi
> -
> -skip $isroot "Root access is needed. Skipping all kernel streaming tests."
> $NUM_TESTS ||
> -{
> - start_lttng_relayd "-o $TRACE_PATH"
> - start_lttng_sessiond
> - modprobe lttng-test
> -
> - tests=( test_kernel_streaming test_kernel_local )
> -
> - for fct_test in ${tests[@]};
> - do
> - SESSION_NAME=$(randstring 16 0)
> - ${fct_test}
> - done
> -
> - rmmod lttng-test
> - stop_lttng_sessiond
> - stop_lttng_relayd
> -}
> diff --git a/tests/regression/tools/metadata-regen/test_ust
> b/tests/regression/tools/metadata-regen/test_ust
> deleted file mode 100755
> index fe6ffd8..0000000
> --- a/tests/regression/tools/metadata-regen/test_ust
> +++ /dev/null
> @@ -1,208 +0,0 @@
> -#!/bin/bash
> -#
> -# Copyright (C) - 2015 Julien Desfossez <jdesfossez 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="Streaming - User space tracing"
> -
> -CURDIR=$(dirname $0)/
> -TESTDIR=$CURDIR/../../..
> -NR_ITER=1
> -NR_USEC_WAIT=0
> -TESTAPP_PATH="$TESTDIR/utils/testapp"
> -TESTAPP_NAME="gen-ust-events"
> -TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
> -SESSION_NAME="stream"
> -EVENT_NAME="tp:tptest"
> -PID_RELAYD=0
> -
> -TRACE_PATH=$(mktemp -d)
> -
> -NUM_TESTS=33
> -
> -source $TESTDIR/utils/utils.sh
> -
> -if [ ! -x "$TESTAPP_BIN" ]; then
> - BAIL_OUT "No UST events binary detected."
> -fi
> -
> -function lttng_create_session_uri
> -{
> - # Create session with default path
> - $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $SESSION_NAME -U net://localhost
> >/dev/null 2>&1
> - ok $? "Create session with default path"
> -}
> -
> -function lttng_create_session_uri_live
> -{
> - # Create session with default path
> - $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $SESSION_NAME --live -U
> net://localhost >/dev/null 2>&1
> - ok $? "Create live session"
> -}
> -
> -function enable_channel_per_pid()
> -{
> - sess_name=$1
> - channel_name=$2
> -
> - $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-pid -u
> $channel_name -s $sess_name >/dev/null 2>&1
> - ok $? "Enable channel $channel_name per PID for session $sess_name"
> -}
> -
> -# MUST set TESTDIR before calling those functions
> -
> -function test_ust_streaming ()
> -{
> - local file_sync_after_first=$(mktemp -u)
> - local file_sync_before_last=$(mktemp -u)
> -
> - diag "Test UST streaming with metadata regeneration"
> - lttng_create_session_uri
> - enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
> -
> - $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> -
> - start_lttng_tracing_ok $SESSION_NAME
> -
> - touch ${file_sync_before_last}
> -
> - # Wait for the applications started in background
> - wait
> - metadata_regenerate_ok $SESSION_NAME
> -
> - stop_lttng_tracing_ok $SESSION_NAME
> - destroy_lttng_session_ok $SESSION_NAME
> - # Validate test
> - validate_trace $EVENT_NAME $TRACE_PATH/$HOSTNAME/$SESSION_NAME*
> - if [ $? -eq 0 ]; then
> - # Only delete if successful
> - rm -rf $TRACE_PATH
> - fi
> - rm -f ${file_sync_after_first}
> - rm -f ${file_sync_before_last}
> -}
> -
> -function test_ust_local ()
> -{
> - local file_sync_after_first=$(mktemp -u)
> - local file_sync_before_last=$(mktemp -u)
> -
> - diag "Test UST local with metadata regeneration"
> - create_lttng_session_ok $SESSION_NAME $TRACE_PATH
> - enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
> -
> - $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> -
> - start_lttng_tracing_ok $SESSION_NAME
> -
> - touch ${file_sync_before_last}
> -
> - # Wait for the applications started in background
> - wait
> - metadata_regenerate_ok $SESSION_NAME
> -
> - stop_lttng_tracing_ok $SESSION_NAME
> - destroy_lttng_session_ok $SESSION_NAME
> - # Validate test
> - validate_trace $EVENT_NAME $TRACE_PATH
> - if [ $? -eq 0 ]; then
> - # Only delete if successful
> - rm -rf $TRACE_PATH
> - fi
> - rm -f ${file_sync_after_first}
> - rm -f ${file_sync_before_last}
> -}
> -
> -function test_ust_pid ()
> -{
> - local file_sync_after_first=$(mktemp -u)
> - local file_sync_before_last=$(mktemp -u)
> -
> - diag "Test UST per-pid with metadata regeneration (expect failure)"
> - create_lttng_session_ok $SESSION_NAME $TRACE_PATH
> - enable_channel_per_pid $SESSION_NAME "channel0"
> - enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
> -
> - $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> -
> - start_lttng_tracing_ok $SESSION_NAME
> -
> - touch ${file_sync_before_last}
> -
> - # Wait for the applications started in background
> - wait
> - metadata_regenerate_fail $SESSION_NAME
> -
> - stop_lttng_tracing_ok $SESSION_NAME
> - destroy_lttng_session_ok $SESSION_NAME
> - # Validate test
> - validate_trace $EVENT_NAME $TRACE_PATH
> - if [ $? -eq 0 ]; then
> - # Only delete if successful
> - rm -rf $TRACE_PATH
> - fi
> - rm -f ${file_sync_after_first}
> - rm -f ${file_sync_before_last}
> -}
> -
> -function test_ust_live ()
> -{
> - local file_sync_after_first=$(mktemp -u)
> - local file_sync_before_last=$(mktemp -u)
> -
> - diag "Test UST live with metadata regeneration (expect failure)"
> - lttng_create_session_uri_live $SESSION_NAME $TRACE_PATH
> - enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
> -
> - $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> -
> - start_lttng_tracing_ok $SESSION_NAME
> -
> - touch ${file_sync_before_last}
> -
> - # Wait for the applications started in background
> - wait
> - metadata_regenerate_fail $SESSION_NAME
> -
> - stop_lttng_tracing_ok $SESSION_NAME
> - destroy_lttng_session_ok $SESSION_NAME
> - # Validate test
> - validate_trace $EVENT_NAME $TRACE_PATH
> - if [ $? -eq 0 ]; then
> - # Only delete if successful
> - rm -rf $TRACE_PATH
> - fi
> - rm -f ${file_sync_after_first}
> - rm -f ${file_sync_before_last}
> -}
> -
> -plan_tests $NUM_TESTS
> -
> -print_test_banner "$TEST_DESC"
> -
> -start_lttng_relayd "-o $TRACE_PATH"
> -start_lttng_sessiond
> -
> -tests=( test_ust_streaming test_ust_local test_ust_pid test_ust_live )
> -
> -for fct_test in ${tests[@]};
> -do
> - SESSION_NAME=$(randstring 16 0)
> - ${fct_test}
> -done
> -
> -stop_lttng_sessiond
> -stop_lttng_relayd
> -
> -exit $out
> diff --git a/tests/regression/tools/mi/test_mi
> b/tests/regression/tools/mi/test_mi
> index 0e8fa67..380385f 100755
> --- a/tests/regression/tools/mi/test_mi
> +++ b/tests/regression/tools/mi/test_mi
> @@ -631,9 +631,9 @@ function test_start_stop () {
> ok $? "Mi test: enabled element : $result expected: true"
>
> #Test metadata regenerate command
> - metadata_regenerate_ok $session_name
> + regenerate_metadata_ok $session_name
> $XML_VALIDATE $OUTPUT_DEST
> - ok $? "Mi test: metadata regenerate"
> + ok $? "Mi test: regenerate metadata"
>
> #Test stop command
> stop_lttng_tracing_ok $session_name
> diff --git a/tests/regression/tools/regen-metadata/Makefile.am
> b/tests/regression/tools/regen-metadata/Makefile.am
> new file mode 100644
> index 0000000..d4a92eb
> --- /dev/null
> +++ b/tests/regression/tools/regen-metadata/Makefile.am
> @@ -0,0 +1,16 @@
> +noinst_SCRIPTS = test_ust test_kernel
> +EXTRA_DIST = test_ust test_kernel
> +
> +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/tools/regen-metadata/test_kernel
> b/tests/regression/tools/regen-metadata/test_kernel
> new file mode 100755
> index 0000000..fd139ae
> --- /dev/null
> +++ b/tests/regression/tools/regen-metadata/test_kernel
> @@ -0,0 +1,109 @@
> +#!/bin/bash
> +#
> +# Copyright (C) - 2015 Julien Desfossez <jdesfossez 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="Streaming - Kernel tracing"
> +
> +CURDIR=$(dirname $0)/
> +TESTDIR=$CURDIR/../../..
> +EVENT_NAME="lttng_test_filter_event"
> +PID_RELAYD=0
> +SESSION_NAME=""
> +
> +TRACE_PATH=$(mktemp -d)
> +
> +NUM_TESTS=18
> +
> +source $TESTDIR/utils/utils.sh
> +
> +# LTTng kernel modules check
> +out=`ls /lib/modules/$(uname -r)/extra | grep lttng`
> +if [ -z "$out" ]; then
> + BAIL_OUT "LTTng modules not detected."
> +fi
> +
> +function lttng_create_session_uri
> +{
> + # Create session with default path
> + $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $SESSION_NAME -U net://localhost
> >/dev/null 2>&1
> +
> + ok $? "Create session $SESSION_NAME"
> +}
> +
> +function test_kernel_streaming ()
> +{
> + diag "Test kernel streaming with metadata regeneration"
> + lttng_create_session_uri
> + lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
> + start_lttng_tracing_ok $SESSION_NAME
> + echo -n "100" > /proc/lttng-test-filter-event
> + regenerate_metadata_ok $SESSION_NAME
> + stop_lttng_tracing_ok $SESSION_NAME
> + # Validate test
> + validate_trace $EVENT_NAME $TRACE_PATH/$HOSTNAME/$SESSION_NAME*
> + if [ $? -eq 0 ]; then
> + # Only delete if successful
> + rm -rf $TRACE_PATH
> + else
> + break
> + fi
> + destroy_lttng_session_ok $SESSION_NAME
> +}
> +
> +function test_kernel_local ()
> +{
> + diag "Test kernel local with metadata regeneration"
> + create_lttng_session_ok $SESSION_NAME $TRACE_PATH
> + lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
> + start_lttng_tracing_ok $SESSION_NAME
> + echo -n "100" > /proc/lttng-test-filter-event
> + regenerate_metadata_ok $SESSION_NAME
> + stop_lttng_tracing_ok $SESSION_NAME
> + validate_trace $EVENT_NAME $TRACE_PATH
> + if [ $? -eq 0 ]; then
> + # Only delete if successful
> + rm -rf $TRACE_PATH
> + fi
> + destroy_lttng_session_ok $SESSION_NAME
> +}
> +
> +plan_tests $NUM_TESTS
> +
> +print_test_banner "$TEST_DESC"
> +
> +if [ "$(id -u)" == "0" ]; then
> + isroot=1
> +else
> + isroot=0
> +fi
> +
> +skip $isroot "Root access is needed. Skipping all kernel streaming tests."
> $NUM_TESTS ||
> +{
> + start_lttng_relayd "-o $TRACE_PATH"
> + start_lttng_sessiond
> + modprobe lttng-test
> +
> + tests=( test_kernel_streaming test_kernel_local )
> +
> + for fct_test in ${tests[@]};
> + do
> + SESSION_NAME=$(randstring 16 0)
> + ${fct_test}
> + done
> +
> + rmmod lttng-test
> + stop_lttng_sessiond
> + stop_lttng_relayd
> +}
> diff --git a/tests/regression/tools/regen-metadata/test_ust
> b/tests/regression/tools/regen-metadata/test_ust
> new file mode 100755
> index 0000000..b7f1af1
> --- /dev/null
> +++ b/tests/regression/tools/regen-metadata/test_ust
> @@ -0,0 +1,208 @@
> +#!/bin/bash
> +#
> +# Copyright (C) - 2015 Julien Desfossez <jdesfossez 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="Streaming - User space tracing"
> +
> +CURDIR=$(dirname $0)/
> +TESTDIR=$CURDIR/../../..
> +NR_ITER=1
> +NR_USEC_WAIT=0
> +TESTAPP_PATH="$TESTDIR/utils/testapp"
> +TESTAPP_NAME="gen-ust-events"
> +TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME"
> +SESSION_NAME="stream"
> +EVENT_NAME="tp:tptest"
> +PID_RELAYD=0
> +
> +TRACE_PATH=$(mktemp -d)
> +
> +NUM_TESTS=33
> +
> +source $TESTDIR/utils/utils.sh
> +
> +if [ ! -x "$TESTAPP_BIN" ]; then
> + BAIL_OUT "No UST events binary detected."
> +fi
> +
> +function lttng_create_session_uri
> +{
> + # Create session with default path
> + $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $SESSION_NAME -U net://localhost
> >/dev/null 2>&1
> + ok $? "Create session with default path"
> +}
> +
> +function lttng_create_session_uri_live
> +{
> + # Create session with default path
> + $TESTDIR/../src/bin/lttng/$LTTNG_BIN create $SESSION_NAME --live -U
> net://localhost >/dev/null 2>&1
> + ok $? "Create live session"
> +}
> +
> +function enable_channel_per_pid()
> +{
> + sess_name=$1
> + channel_name=$2
> +
> + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-channel --buffers-pid -u
> $channel_name -s $sess_name >/dev/null 2>&1
> + ok $? "Enable channel $channel_name per PID for session $sess_name"
> +}
> +
> +# MUST set TESTDIR before calling those functions
> +
> +function test_ust_streaming ()
> +{
> + local file_sync_after_first=$(mktemp -u)
> + local file_sync_before_last=$(mktemp -u)
> +
> + diag "Test UST streaming with metadata regeneration"
> + lttng_create_session_uri
> + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
> +
> + $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> +
> + start_lttng_tracing_ok $SESSION_NAME
> +
> + touch ${file_sync_before_last}
> +
> + # Wait for the applications started in background
> + wait
> + regenerate_metadata_ok $SESSION_NAME
> +
> + stop_lttng_tracing_ok $SESSION_NAME
> + destroy_lttng_session_ok $SESSION_NAME
> + # Validate test
> + validate_trace $EVENT_NAME $TRACE_PATH/$HOSTNAME/$SESSION_NAME*
> + if [ $? -eq 0 ]; then
> + # Only delete if successful
> + rm -rf $TRACE_PATH
> + fi
> + rm -f ${file_sync_after_first}
> + rm -f ${file_sync_before_last}
> +}
> +
> +function test_ust_local ()
> +{
> + local file_sync_after_first=$(mktemp -u)
> + local file_sync_before_last=$(mktemp -u)
> +
> + diag "Test UST local with metadata regeneration"
> + create_lttng_session_ok $SESSION_NAME $TRACE_PATH
> + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
> +
> + $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> +
> + start_lttng_tracing_ok $SESSION_NAME
> +
> + touch ${file_sync_before_last}
> +
> + # Wait for the applications started in background
> + wait
> + regenerate_metadata_ok $SESSION_NAME
> +
> + stop_lttng_tracing_ok $SESSION_NAME
> + destroy_lttng_session_ok $SESSION_NAME
> + # Validate test
> + validate_trace $EVENT_NAME $TRACE_PATH
> + if [ $? -eq 0 ]; then
> + # Only delete if successful
> + rm -rf $TRACE_PATH
> + fi
> + rm -f ${file_sync_after_first}
> + rm -f ${file_sync_before_last}
> +}
> +
> +function test_ust_pid ()
> +{
> + local file_sync_after_first=$(mktemp -u)
> + local file_sync_before_last=$(mktemp -u)
> +
> + diag "Test UST per-pid with metadata regeneration (expect failure)"
> + create_lttng_session_ok $SESSION_NAME $TRACE_PATH
> + enable_channel_per_pid $SESSION_NAME "channel0"
> + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
> +
> + $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> +
> + start_lttng_tracing_ok $SESSION_NAME
> +
> + touch ${file_sync_before_last}
> +
> + # Wait for the applications started in background
> + wait
> + regenerate_metadata_fail $SESSION_NAME
> +
> + stop_lttng_tracing_ok $SESSION_NAME
> + destroy_lttng_session_ok $SESSION_NAME
> + # Validate test
> + validate_trace $EVENT_NAME $TRACE_PATH
> + if [ $? -eq 0 ]; then
> + # Only delete if successful
> + rm -rf $TRACE_PATH
> + fi
> + rm -f ${file_sync_after_first}
> + rm -f ${file_sync_before_last}
> +}
> +
> +function test_ust_live ()
> +{
> + local file_sync_after_first=$(mktemp -u)
> + local file_sync_before_last=$(mktemp -u)
> +
> + diag "Test UST live with metadata regeneration (expect failure)"
> + lttng_create_session_uri_live $SESSION_NAME $TRACE_PATH
> + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME
> +
> + $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first}
> ${file_sync_before_last} /dev/null 2>&1 &
> +
> + start_lttng_tracing_ok $SESSION_NAME
> +
> + touch ${file_sync_before_last}
> +
> + # Wait for the applications started in background
> + wait
> + regenerate_metadata_fail $SESSION_NAME
> +
> + stop_lttng_tracing_ok $SESSION_NAME
> + destroy_lttng_session_ok $SESSION_NAME
> + # Validate test
> + validate_trace $EVENT_NAME $TRACE_PATH
> + if [ $? -eq 0 ]; then
> + # Only delete if successful
> + rm -rf $TRACE_PATH
> + fi
> + rm -f ${file_sync_after_first}
> + rm -f ${file_sync_before_last}
> +}
> +
> +plan_tests $NUM_TESTS
> +
> +print_test_banner "$TEST_DESC"
> +
> +start_lttng_relayd "-o $TRACE_PATH"
> +start_lttng_sessiond
> +
> +tests=( test_ust_streaming test_ust_local test_ust_pid test_ust_live )
> +
> +for fct_test in ${tests[@]};
> +do
> + SESSION_NAME=$(randstring 16 0)
> + ${fct_test}
> +done
> +
> +stop_lttng_sessiond
> +stop_lttng_relayd
> +
> +exit $out
> diff --git a/tests/root_regression b/tests/root_regression
> index 2981dc6..d0fad04 100644
> --- a/tests/root_regression
> +++ b/tests/root_regression
> @@ -14,5 +14,5 @@ regression/tools/filtering/test_invalid_filter
> regression/tools/filtering/test_unsupported_op
> regression/tools/filtering/test_valid_filter
> regression/tools/wildcard/test_event_wildcard
> -regression/tools/metadata-regen/test_kernel
> +regression/tools/regen-metadata/test_kernel
> regression/ust/test_event_perf
> diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh
> index da2efe9..3d744e2 100644
> --- a/tests/utils/utils.sh
> +++ b/tests/utils/utils.sh
> @@ -1366,29 +1366,29 @@ function validate_trace_empty()
> return $ret
> }
>
> -function metadata_regenerate ()
> +function regenerate_metadata ()
> {
> local expected_to_fail=$1
> local sess_name=$2
>
> - $TESTDIR/../src/bin/lttng/$LTTNG_BIN metadata regenerate -s $sess_name 1>
> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
> + $TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate metadata -s $sess_name 1>
> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST
> ret=$?
> if [[ $expected_to_fail -eq "1" ]]; then
> test "$ret" -ne "0"
> - ok $? "Expected fail on regenerate $sess_name"
> + ok $? "Expected fail on regenerate metadata $sess_name"
> else
> ok $ret "Metadata regenerate $sess_name"
> fi
> }
>
> -function metadata_regenerate_ok ()
> +function regenerate_metadata_ok ()
> {
> - metadata_regenerate 0 "$@"
> + regenerate_metadata 0 "$@"
> }
>
> -function metadata_regenerate_fail ()
> +function regenerate_metadata_fail ()
> {
> - metadata_regenerate 1 "$@"
> + regenerate_metadata 1 "$@"
> }
>
> function destructive_tests_enabled ()
> --
> 1.9.1
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list