All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH lttng-tools 2/6] UST command to regenerate the statedump
       [not found] <1467304594-30100-1-git-send-email-jdesfossez@efficios.com>
@ 2016-06-30 16:36 ` Julien Desfossez
  2016-06-30 16:36 ` [PATCH lttng-tools 3/6] Kernel ioctl " Julien Desfossez
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: Julien Desfossez @ 2016-06-30 16:36 UTC (permalink / raw)
  To: jgalar, mathieu.desnoyers; +Cc: lttng-dev

From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

---
 src/bin/lttng-sessiond/lttng-ust-abi.h | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/bin/lttng-sessiond/lttng-ust-abi.h b/src/bin/lttng-sessiond/lttng-ust-abi.h
index 7bec0c9..9ef7b9a 100644
--- a/src/bin/lttng-sessiond/lttng-ust-abi.h
+++ b/src/bin/lttng-sessiond/lttng-ust-abi.h
@@ -275,6 +275,7 @@ struct lttng_ust_event_exclusion {
 	_UST_CMDW(0x51, struct lttng_ust_channel)
 #define LTTNG_UST_SESSION_START			_UST_CMD(0x52)
 #define LTTNG_UST_SESSION_STOP			_UST_CMD(0x53)
+#define LTTNG_UST_SESSION_STATEDUMP		_UST_CMD(0x54)
 
 /* Channel FD commands */
 #define LTTNG_UST_STREAM			_UST_CMD(0x60)
-- 
1.9.1

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH lttng-tools 3/6] Kernel ioctl to regenerate the statedump
       [not found] <1467304594-30100-1-git-send-email-jdesfossez@efficios.com>
  2016-06-30 16:36 ` [PATCH lttng-tools 2/6] UST command to regenerate the statedump Julien Desfossez
@ 2016-06-30 16:36 ` Julien Desfossez
  2016-06-30 16:36 ` [PATCH lttng-tools 4/6] Allow regenerating the statedump of a running session Julien Desfossez
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: Julien Desfossez @ 2016-06-30 16:36 UTC (permalink / raw)
  To: jgalar, mathieu.desnoyers; +Cc: lttng-dev

From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

---
 src/common/kernel-ctl/kernel-ioctl.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/common/kernel-ctl/kernel-ioctl.h b/src/common/kernel-ctl/kernel-ioctl.h
index 68056dc..805de02 100644
--- a/src/common/kernel-ctl/kernel-ioctl.h
+++ b/src/common/kernel-ctl/kernel-ioctl.h
@@ -134,6 +134,8 @@
  */
 #define LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS	_IO(0xF6, 0x58)
 #define LTTNG_KERNEL_SESSION_METADATA_REGEN	_IO(0xF6, 0x59)
+/* 0x5A and 0x5B are reserved for a future ABI-breaking cleanup. */
+#define LTTNG_KERNEL_SESSION_STATEDUMP		_IO(0xF6, 0x5C)
 
 /* Channel FD ioctl */
 #define LTTNG_KERNEL_STREAM			_IO(0xF6, 0x62)
-- 
1.9.1

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH lttng-tools 4/6] Allow regenerating the statedump of a running session
       [not found] <1467304594-30100-1-git-send-email-jdesfossez@efficios.com>
  2016-06-30 16:36 ` [PATCH lttng-tools 2/6] UST command to regenerate the statedump Julien Desfossez
  2016-06-30 16:36 ` [PATCH lttng-tools 3/6] Kernel ioctl " Julien Desfossez
@ 2016-06-30 16:36 ` Julien Desfossez
  2016-06-30 16:36 ` [PATCH lttng-tools 5/6] Tests for the regenerate statedump command Julien Desfossez
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: Julien Desfossez @ 2016-06-30 16:36 UTC (permalink / raw)
  To: jgalar, mathieu.desnoyers; +Cc: lttng-dev, Julien Desfossez

The "lttng regenerate statedump" command can be used to regenerate the
statedump of a running session whenever needed. This is particularly
useful in snapshot and trace-file rotation modes where the original
statedump may be lost.

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
---
 include/lttng/lttng-error.h              |  1 +
 include/lttng/lttng.h                    |  9 +++++
 src/bin/lttng-sessiond/cmd.c             | 44 +++++++++++++++++++++++
 src/bin/lttng-sessiond/cmd.h             |  1 +
 src/bin/lttng-sessiond/main.c            |  6 ++++
 src/bin/lttng-sessiond/ust-app.c         | 62 ++++++++++++++++++++++++++++++++
 src/bin/lttng-sessiond/ust-app.h         |  6 ++++
 src/bin/lttng/commands/regenerate.c      | 19 ++++++++++
 src/common/error.c                       |  1 +
 src/common/kernel-ctl/kernel-ctl.c       |  5 +++
 src/common/kernel-ctl/kernel-ctl.h       |  1 +
 src/common/sessiond-comm/sessiond-comm.h |  1 +
 src/lib/lttng-ctl/lttng-ctl.c            | 31 ++++++++++++++++
 13 files changed, 187 insertions(+)

diff --git a/include/lttng/lttng-error.h b/include/lttng/lttng-error.h
index 72194ef..52ce333 100644
--- a/include/lttng/lttng-error.h
+++ b/include/lttng/lttng-error.h
@@ -142,6 +142,7 @@ enum lttng_error_code {
 	LTTNG_ERR_LIVE_SESSION           = 119, /* Live session unsupported */
 	LTTNG_ERR_PER_PID_SESSION        = 120, /* Per-PID sessions unsupported */
 	LTTNG_ERR_KERN_CONTEXT_UNAVAILABLE = 121, /* Context unavailable on this kernel */
+	LTTNG_ERR_REGEN_STATEDUMP_FAIL   = 122, /* Failed to regenerate the statdump */
 
 	/* MUST be last element */
 	LTTNG_ERR_NR,                           /* Last element */
diff --git a/include/lttng/lttng.h b/include/lttng/lttng.h
index ed03bdb..7f9fa9d 100644
--- a/include/lttng/lttng.h
+++ b/include/lttng/lttng.h
@@ -172,6 +172,15 @@ extern int lttng_metadata_regenerate(const char *session_name);
  */
 extern int lttng_regenerate_metadata(const char *session_name);
 
+/*
+ * Trigger the regeneration of the statedump for a session. The new statedump
+ * information is appended to the currently active trace, the session needs to
+ * be started.
+ *
+ * Return 0 on success, a negative LTTng error code on error.
+ */
+extern int lttng_regenerate_statedump(const char *session_name);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c
index bd63389..480333d 100644
--- a/src/bin/lttng-sessiond/cmd.c
+++ b/src/bin/lttng-sessiond/cmd.c
@@ -3540,6 +3540,50 @@ end:
 }
 
 /*
+ * Command LTTNG_REGENERATE_STATEDUMP from the lttng-ctl library.
+ *
+ * Ask the tracer to regenerate a new statedump.
+ *
+ * Return 0 on success or else a LTTNG_ERR code.
+ */
+int cmd_regenerate_statedump(struct ltt_session *session)
+{
+	int ret;
+
+	assert(session);
+
+	if (!session->active) {
+		ret = LTTNG_ERR_SESSION_NOT_STARTED;
+		goto end;
+	}
+	ret = 0;
+
+	if (session->kernel_session) {
+		ret = kernctl_session_regenerate_statedump(
+				session->kernel_session->fd);
+		if (ret < 0) {
+			ret = LTTNG_ERR_REGEN_STATEDUMP_FAIL;
+			ERR("Failed to regenerate the kernel statedump");
+			goto end;
+		}
+	}
+
+	if (session->ust_session) {
+		ret = ust_app_regenerate_statedump_all(session->ust_session);
+		if (ret < 0) {
+			ret = LTTNG_ERR_REGEN_STATEDUMP_FAIL;
+			ERR("Failed to regenerate the UST statedump");
+			goto end;
+		}
+	}
+	DBG("Cmd regenerate statedump for session %s", session->name);
+	ret = LTTNG_OK;
+
+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 320d717..975a7f1 100644
--- a/src/bin/lttng-sessiond/cmd.h
+++ b/src/bin/lttng-sessiond/cmd.h
@@ -111,5 +111,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_regenerate_metadata(struct ltt_session *session);
+int cmd_regenerate_statedump(struct ltt_session *session);
 
 #endif /* CMD_H */
diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
index 3623e5d..8309c3f 100644
--- a/src/bin/lttng-sessiond/main.c
+++ b/src/bin/lttng-sessiond/main.c
@@ -3004,6 +3004,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock,
 	case LTTNG_SAVE_SESSION:
 	case LTTNG_SET_SESSION_SHM_PATH:
 	case LTTNG_REGENERATE_METADATA:
+	case LTTNG_REGENERATE_STATEDUMP:
 		need_domain = 0;
 		break;
 	default:
@@ -4119,6 +4120,11 @@ error_add_context:
 		ret = cmd_regenerate_metadata(cmd_ctx->session);
 		break;
 	}
+	case LTTNG_REGENERATE_STATEDUMP:
+	{
+		ret = cmd_regenerate_statedump(cmd_ctx->session);
+		break;
+	}
 	default:
 		ret = LTTNG_ERR_UND;
 		break;
diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c
index f30df20..37263e6 100644
--- a/src/bin/lttng-sessiond/ust-app.c
+++ b/src/bin/lttng-sessiond/ust-app.c
@@ -6148,3 +6148,65 @@ end:
 	rcu_read_unlock();
 	return ret;
 }
+
+static
+int ust_app_regenerate_statedump(struct ltt_ust_session *usess,
+		struct ust_app *app)
+{
+	int ret = 0;
+	struct ust_app_session *ua_sess;
+
+	DBG("Regenerating the metadata for ust app pid %d", app->pid);
+
+	rcu_read_lock();
+
+	ua_sess = lookup_session_by_app(usess, app);
+	if (ua_sess == NULL) {
+		/* The session is in teardown process. Ignore and continue. */
+		goto end;
+	}
+
+	pthread_mutex_lock(&ua_sess->lock);
+
+	if (ua_sess->deleted) {
+		pthread_mutex_unlock(&ua_sess->lock);
+		goto end;
+	}
+
+	pthread_mutex_lock(&app->sock_lock);
+	ret = ustctl_regenerate_statedump(app->sock, ua_sess->handle);
+	pthread_mutex_unlock(&app->sock_lock);
+	pthread_mutex_unlock(&ua_sess->lock);
+
+end:
+	rcu_read_unlock();
+	health_code_update();
+	return ret;
+}
+
+/*
+ * Regenerate the statedump for each app in the session.
+ */
+int ust_app_regenerate_statedump_all(struct ltt_ust_session *usess)
+{
+	int ret = 0;
+	struct lttng_ht_iter iter;
+	struct ust_app *app;
+
+	DBG("Regenerating the metadata for all UST apps");
+
+	rcu_read_lock();
+
+	cds_lfht_for_each_entry(ust_app_ht->ht, &iter.iter, app, pid_n.node) {
+		ret = ust_app_regenerate_statedump(usess, app);
+		if (ret < 0) {
+			/* Continue to next apps even on error */
+			continue;
+		}
+	}
+
+	rcu_read_unlock();
+
+	return 0;
+}
+
diff --git a/src/bin/lttng-sessiond/ust-app.h b/src/bin/lttng-sessiond/ust-app.h
index d02f353..8369d14 100644
--- a/src/bin/lttng-sessiond/ust-app.h
+++ b/src/bin/lttng-sessiond/ust-app.h
@@ -352,6 +352,7 @@ int ust_app_pid_get_channel_runtime_stats(struct ltt_ust_session *usess,
 		struct ltt_ust_channel *uchan,
 		struct consumer_output *consumer,
 		int overwrite, uint64_t *discarded, uint64_t *lost);
+int ust_app_regenerate_statedump_all(struct ltt_ust_session *usess);
 
 static inline
 int ust_app_supported(void)
@@ -583,6 +584,11 @@ int ust_app_pid_get_channel_runtime_stats(struct ltt_ust_session *usess,
 {
 	return 0;
 }
+static inline
+int ust_app_regenerate_metadata_all(struct ltt_ust_session *usess)
+{
+	return 0;
+}
 
 #endif /* HAVE_LIBLTTNG_UST_CTL */
 
diff --git a/src/bin/lttng/commands/regenerate.c b/src/bin/lttng/commands/regenerate.c
index c64d8fe..f111d06 100644
--- a/src/bin/lttng/commands/regenerate.c
+++ b/src/bin/lttng/commands/regenerate.c
@@ -32,6 +32,7 @@ static char *opt_session_name;
 static char *session_name = NULL;
 
 static int regenerate_metadata(int argc, const char **argv);
+static int regenerate_statedump(int argc, const char **argv);
 
 enum {
 	OPT_HELP = 1,
@@ -52,6 +53,7 @@ static struct poptOption long_options[] = {
 
 static struct cmd_struct actions[] = {
 	{ "metadata", regenerate_metadata },
+	{ "statedump", regenerate_statedump },
 	{ NULL, NULL }	/* Array closure */
 };
 
@@ -88,6 +90,23 @@ end:
 	return ret;
 }
 
+static int regenerate_statedump(int argc, const char **argv)
+{
+	int ret;
+
+	if (argc > 1) {
+		ret = -LTTNG_ERR_INVALID;
+		goto end;
+	}
+	ret = lttng_regenerate_statedump(session_name);
+	if (ret == 0) {
+		MSG("Statedump successfully regenerated for session %s", session_name);
+	}
+
+end:
+	return ret;
+}
+
 static int handle_command(const char **argv)
 {
 	struct cmd_struct *cmd;
diff --git a/src/common/error.c b/src/common/error.c
index bc42577..6730e14 100644
--- a/src/common/error.c
+++ b/src/common/error.c
@@ -183,6 +183,7 @@ static const char *error_string_array[] = {
 	[ ERROR_INDEX(LTTNG_ERR_LIVE_SESSION) ] = "Live sessions are not supported",
 	[ ERROR_INDEX(LTTNG_ERR_PER_PID_SESSION) ] = "Per-PID tracing sessions are not supported",
 	[ ERROR_INDEX(LTTNG_ERR_KERN_CONTEXT_UNAVAILABLE) ] = "Context unavailable on this kernel",
+	[ ERROR_INDEX(LTTNG_ERR_REGEN_STATEDUMP_FAIL) ] = "Statedump regeneration failed",
 
 	/* Last element */
 	[ ERROR_INDEX(LTTNG_ERR_NR) ] = "Unknown error code"
diff --git a/src/common/kernel-ctl/kernel-ctl.c b/src/common/kernel-ctl/kernel-ctl.c
index e1de0e7..1c2ab61 100644
--- a/src/common/kernel-ctl/kernel-ctl.c
+++ b/src/common/kernel-ctl/kernel-ctl.c
@@ -230,6 +230,11 @@ int kernctl_session_regenerate_metadata(int fd)
 	return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_METADATA_REGEN);
 }
 
+int kernctl_session_regenerate_statedump(int fd)
+{
+	return LTTNG_IOCTL_CHECK(fd, LTTNG_KERNEL_SESSION_STATEDUMP);
+}
+
 int kernctl_create_stream(int fd)
 {
 	return compat_ioctl_no_arg(fd, LTTNG_KERNEL_OLD_STREAM,
diff --git a/src/common/kernel-ctl/kernel-ctl.h b/src/common/kernel-ctl/kernel-ctl.h
index f30e6f3..7c25a17 100644
--- a/src/common/kernel-ctl/kernel-ctl.h
+++ b/src/common/kernel-ctl/kernel-ctl.h
@@ -66,6 +66,7 @@ int kernctl_untrack_pid(int fd, int pid);
 int kernctl_list_tracker_pids(int fd);
 
 int kernctl_session_regenerate_metadata(int fd);
+int kernctl_session_regenerate_statedump(int fd);
 
 /* Buffer operations */
 
diff --git a/src/common/sessiond-comm/sessiond-comm.h b/src/common/sessiond-comm/sessiond-comm.h
index 29740c1..628b1ea 100644
--- a/src/common/sessiond-comm/sessiond-comm.h
+++ b/src/common/sessiond-comm/sessiond-comm.h
@@ -95,6 +95,7 @@ enum lttcomm_sessiond_command {
 	LTTNG_LIST_TRACKER_PIDS             = 34,
 	LTTNG_SET_SESSION_SHM_PATH          = 40,
 	LTTNG_REGENERATE_METADATA           = 41,
+	LTTNG_REGENERATE_STATEDUMP          = 42,
 };
 
 enum lttcomm_relayd_command {
diff --git a/src/lib/lttng-ctl/lttng-ctl.c b/src/lib/lttng-ctl/lttng-ctl.c
index 8c78e1c..9e35d5f 100644
--- a/src/lib/lttng-ctl/lttng-ctl.c
+++ b/src/lib/lttng-ctl/lttng-ctl.c
@@ -2419,6 +2419,37 @@ int lttng_metadata_regenerate(const char *session_name)
 }
 
 /*
+ * Regenerate the statedump of a session.
+ * Return 0 on success, a negative error code on error.
+ */
+int lttng_regenerate_statedump(const char *session_name)
+{
+	int ret;
+	struct lttcomm_session_msg lsm;
+
+	if (!session_name) {
+		ret = -LTTNG_ERR_INVALID;
+		goto end;
+	}
+
+	memset(&lsm, 0, sizeof(lsm));
+	lsm.cmd_type = LTTNG_REGENERATE_STATEDUMP;
+
+	lttng_ctl_copy_string(lsm.session.name, session_name,
+			sizeof(lsm.session.name));
+
+	ret = lttng_ctl_ask_sessiond(&lsm, NULL);
+	if (ret < 0) {
+		goto end;
+	}
+
+	ret = 0;
+end:
+	return ret;
+}
+
+
+/*
  * lib constructor.
  */
 static void __attribute__((constructor)) init(void)
-- 
1.9.1

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH lttng-tools 5/6] Tests for the regenerate statedump command
       [not found] <1467304594-30100-1-git-send-email-jdesfossez@efficios.com>
                   ` (2 preceding siblings ...)
  2016-06-30 16:36 ` [PATCH lttng-tools 4/6] Allow regenerating the statedump of a running session Julien Desfossez
@ 2016-06-30 16:36 ` Julien Desfossez
  2016-06-30 16:36 ` [PATCH lttng-tools 6/6] Manpage " Julien Desfossez
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: Julien Desfossez @ 2016-06-30 16:36 UTC (permalink / raw)
  To: jgalar, mathieu.desnoyers; +Cc: lttng-dev, Julien Desfossez

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
---
 configure.ac                                       |  1 +
 tests/fast_regression                              |  1 +
 tests/regression/tools/Makefile.am                 |  2 +-
 tests/regression/tools/regen-statedump/Makefile.am | 16 ++++
 tests/regression/tools/regen-statedump/test_kernel | 80 +++++++++++++++++++
 tests/regression/tools/regen-statedump/test_ust    | 89 ++++++++++++++++++++++
 tests/root_regression                              |  1 +
 tests/utils/utils.sh                               | 54 +++++++++++++
 8 files changed, 243 insertions(+), 1 deletion(-)
 create mode 100644 tests/regression/tools/regen-statedump/Makefile.am
 create mode 100755 tests/regression/tools/regen-statedump/test_kernel
 create mode 100755 tests/regression/tools/regen-statedump/test_ust

diff --git a/configure.ac b/configure.ac
index 89a7858..6222e2b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -981,6 +981,7 @@ AC_CONFIG_FILES([
 	tests/regression/tools/wildcard/Makefile
 	tests/regression/tools/crash/Makefile
 	tests/regression/tools/regen-metadata/Makefile
+	tests/regression/tools/regen-statedump/Makefile
 	tests/regression/ust/Makefile
 	tests/regression/ust/nprocesses/Makefile
 	tests/regression/ust/high-throughput/Makefile
diff --git a/tests/fast_regression b/tests/fast_regression
index 262c846..8edbeca 100644
--- a/tests/fast_regression
+++ b/tests/fast_regression
@@ -17,6 +17,7 @@ regression/tools/mi/test_mi
 regression/tools/wildcard/test_event_wildcard
 regression/tools/crash/test_crash
 regression/tools/regen-metadata/test_ust
+regression/tools/regen-statedump/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/tools/Makefile.am b/tests/regression/tools/Makefile.am
index 91820ad..76374c7 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 regen-metadata
+		wildcard crash regen-metadata regen-statedump
diff --git a/tests/regression/tools/regen-statedump/Makefile.am b/tests/regression/tools/regen-statedump/Makefile.am
new file mode 100644
index 0000000..d4a92eb
--- /dev/null
+++ b/tests/regression/tools/regen-statedump/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-statedump/test_kernel b/tests/regression/tools/regen-statedump/test_kernel
new file mode 100755
index 0000000..85afe76
--- /dev/null
+++ b/tests/regression/tools/regen-statedump/test_kernel
@@ -0,0 +1,80 @@
+#!/bin/bash
+#
+# Copyright (C) - 2016 Julien Desfossez <jdesfossez@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="Regenerate the statedump - Kernel tracing"
+
+CURDIR=$(dirname $0)/
+TESTDIR=$CURDIR/../../..
+EVENT_NAME="lttng_test_filter_event"
+PID_RELAYD=0
+SESSION_NAME=""
+EVENT_NAME="lttng_statedump_start,lttng_statedump_end"
+
+TRACE_PATH=$(mktemp -d)
+
+NUM_TESTS=11
+
+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 test_kernel_local ()
+{
+	diag "Test kernel local with statedump 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_statedump_ok $SESSION_NAME
+	stop_lttng_tracing_ok $SESSION_NAME
+	validate_trace_count $EVENT_NAME $TRACE_PATH 4
+	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_sessiond
+	modprobe lttng-test
+
+	tests=( test_kernel_local )
+
+	for fct_test in ${tests[@]};
+	do
+		SESSION_NAME=$(randstring 16 0)
+		${fct_test}
+	done
+
+	rmmod lttng-test
+	stop_lttng_sessiond
+}
diff --git a/tests/regression/tools/regen-statedump/test_ust b/tests/regression/tools/regen-statedump/test_ust
new file mode 100755
index 0000000..486b9a5
--- /dev/null
+++ b/tests/regression/tools/regen-statedump/test_ust
@@ -0,0 +1,89 @@
+#!/bin/bash
+#
+# Copyright (C) - 2016 Julien Desfossez <jdesfossez@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="Regenerate the statedump - User-space tracing"
+
+CURDIR=$(dirname $0)/
+TESTDIR=$CURDIR/../../..
+NR_ITER=10
+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="lttng_ust_statedump:start,lttng_ust_statedump:end"
+PID_RELAYD=0
+
+TRACE_PATH=$(mktemp -d)
+
+NUM_TESTS=11
+
+source $TESTDIR/utils/utils.sh
+
+if [ ! -x "$TESTAPP_BIN" ]; then
+	BAIL_OUT "No UST events binary detected."
+fi
+
+function test_ust_local ()
+{
+	local file_sync_after_first=$(mktemp -u)
+	local file_sync_before_last=$(mktemp -u)
+
+	diag "Test UST local with statedump 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
+
+	while [ ! -f "${file_sync_after_first}" ]; do
+		sleep 0.5
+	done
+
+	regenerate_statedump_ok $SESSION_NAME
+
+	touch ${file_sync_before_last}
+
+	stop_lttng_tracing_ok $SESSION_NAME
+	destroy_lttng_session_ok $SESSION_NAME
+	# Validate test
+	validate_trace_count $EVENT_NAME $TRACE_PATH 4
+	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_sessiond
+
+tests=( test_ust_local )
+
+for fct_test in ${tests[@]};
+do
+	SESSION_NAME=$(randstring 16 0)
+	${fct_test}
+done
+
+stop_lttng_sessiond
+
+exit $out
diff --git a/tests/root_regression b/tests/root_regression
index d0fad04..d3eaf23 100644
--- a/tests/root_regression
+++ b/tests/root_regression
@@ -15,4 +15,5 @@ regression/tools/filtering/test_unsupported_op
 regression/tools/filtering/test_valid_filter
 regression/tools/wildcard/test_event_wildcard
 regression/tools/regen-metadata/test_kernel
+regression/tools/regen-statedump/test_kernel
 regression/ust/test_event_perf
diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh
index 3d744e2..c56a8aa 100644
--- a/tests/utils/utils.sh
+++ b/tests/utils/utils.sh
@@ -1294,6 +1294,35 @@ function validate_trace
 	return $ret
 }
 
+function validate_trace_count
+{
+	local event_name=$1
+	local trace_path=$2
+	local expected_count=$3
+
+	which $BABELTRACE_BIN >/dev/null
+	if [ $? -ne 0 ]; then
+	    skip 0 "Babeltrace binary not found. Skipping trace validation"
+	fi
+
+	cnt=0
+	OLDIFS=$IFS
+	IFS=","
+	for i in $event_name; do
+		traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l)
+		if [ "$traced" -ne 0 ]; then
+			pass "Validate trace for event $i, $traced events"
+		else
+			fail "Validate trace for event $i"
+			diag "Found $traced occurences of $i"
+		fi
+		cnt=$(($cnt + $traced))
+	done
+	IFS=$OLDIFS
+	test $cnt -eq $expected_count
+	ok $? "Read a total of $cnt events, expected $expected_count"
+}
+
 function trace_first_line
 {
 	local trace_path=$1
@@ -1391,6 +1420,31 @@ function regenerate_metadata_fail ()
 	regenerate_metadata 1 "$@"
 }
 
+function regenerate_statedump ()
+{
+	local expected_to_fail=$1
+	local sess_name=$2
+
+	$TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate statedump -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 statedump $sess_name"
+	else
+		ok $ret "Metadata regenerate $sess_name"
+	fi
+}
+
+function regenerate_statedump_ok ()
+{
+	regenerate_statedump 0 "$@"
+}
+
+function regenerate_statedump_fail ()
+{
+	regenerate_statedump 1 "$@"
+}
+
 function destructive_tests_enabled ()
 {
 	if [ ${LTTNG_ENABLE_DESTRUCTIVE_TESTS} = "will-break-my-system" ]; then
-- 
1.9.1

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH lttng-tools 6/6] Manpage for the regenerate statedump command
       [not found] <1467304594-30100-1-git-send-email-jdesfossez@efficios.com>
                   ` (3 preceding siblings ...)
  2016-06-30 16:36 ` [PATCH lttng-tools 5/6] Tests for the regenerate statedump command Julien Desfossez
@ 2016-06-30 16:36 ` Julien Desfossez
  2016-06-30 18:22 ` [PATCH lttng-tools 1/6] Rename the "metadata regenerate" command to "regenerate metadata" Mathieu Desnoyers
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: Julien Desfossez @ 2016-06-30 16:36 UTC (permalink / raw)
  To: jgalar, mathieu.desnoyers; +Cc: lttng-dev, Julien Desfossez

Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
---
 doc/man/lttng-regenerate.1.txt | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/doc/man/lttng-regenerate.1.txt b/doc/man/lttng-regenerate.1.txt
index dbbfa4d..80bae20 100644
--- a/doc/man/lttng-regenerate.1.txt
+++ b/doc/man/lttng-regenerate.1.txt
@@ -14,12 +14,19 @@ Regenerate the metadata of a session
 [verse]
 *lttng* ['linkgenoptions:(GENERAL OPTIONS)'] *regenerate metadata* [option:--session='SESSION']
 
+Regenerate the statedump of a session
+
+[verse]
+*lttng* ['linkgenoptions:(GENERAL OPTIONS)'] *regenerate statedump* [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.
+As of this version, the `metadata` and `statedump` command's action are
+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.
@@ -32,12 +39,16 @@ 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.
 
+Regenerating a tracing session's statedump can be used to collect up-to-date
+statedump informations during the trace session. This is particularly useful in
+snapshot or trace-file rotation modes where the statedump information may be
+lost.
 
 include::common-cmd-options-head.txt[]
 
 
 option:-s, option:--session='SESSION'::
-    Manage the metadata generation of the tracing session named 'SESSION'
+    Manage the data regeneration of the tracing session named 'SESSION'
     instead of the current tracing session.
 
 
-- 
1.9.1

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH lttng-tools 1/6] Rename the "metadata regenerate" command to "regenerate metadata"
       [not found] <1467304594-30100-1-git-send-email-jdesfossez@efficios.com>
                   ` (4 preceding siblings ...)
  2016-06-30 16:36 ` [PATCH lttng-tools 6/6] Manpage " Julien Desfossez
@ 2016-06-30 18:22 ` Mathieu Desnoyers
       [not found] ` <1467304594-30100-4-git-send-email-jdesfossez@efficios.com>
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 11+ messages in thread
From: Mathieu Desnoyers @ 2016-06-30 18:22 UTC (permalink / raw)
  To: Julien Desfossez; +Cc: lttng-dev, Jeremie Galarneau

----- On Jun 30, 2016, at 12:36 PM, Julien Desfossez jdesfossez@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@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@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@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@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@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@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

_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH lttng-tools 4/6] Allow regenerating the statedump of a running session
       [not found] ` <1467304594-30100-4-git-send-email-jdesfossez@efficios.com>
@ 2016-06-30 18:27   ` Mathieu Desnoyers
  0 siblings, 0 replies; 11+ messages in thread
From: Mathieu Desnoyers @ 2016-06-30 18:27 UTC (permalink / raw)
  To: Julien Desfossez; +Cc: lttng-dev, Jeremie Galarneau

----- On Jun 30, 2016, at 12:36 PM, Julien Desfossez jdesfossez@efficios.com wrote:

> The "lttng regenerate statedump" command can be used to regenerate the
> statedump of a running session whenever needed. This is particularly
> useful in snapshot and trace-file rotation modes where the original
> statedump may be lost.
> 
> Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
> ---
> include/lttng/lttng-error.h              |  1 +
> include/lttng/lttng.h                    |  9 +++++
> src/bin/lttng-sessiond/cmd.c             | 44 +++++++++++++++++++++++
> src/bin/lttng-sessiond/cmd.h             |  1 +
> src/bin/lttng-sessiond/main.c            |  6 ++++
> src/bin/lttng-sessiond/ust-app.c         | 62 ++++++++++++++++++++++++++++++++
> src/bin/lttng-sessiond/ust-app.h         |  6 ++++
> src/bin/lttng/commands/regenerate.c      | 19 ++++++++++
> src/common/error.c                       |  1 +
> src/common/kernel-ctl/kernel-ctl.c       |  5 +++
> src/common/kernel-ctl/kernel-ctl.h       |  1 +
> src/common/sessiond-comm/sessiond-comm.h |  1 +
> src/lib/lttng-ctl/lttng-ctl.c            | 31 ++++++++++++++++
> 13 files changed, 187 insertions(+)
> 
> diff --git a/include/lttng/lttng-error.h b/include/lttng/lttng-error.h
> index 72194ef..52ce333 100644
> --- a/include/lttng/lttng-error.h
> +++ b/include/lttng/lttng-error.h
> @@ -142,6 +142,7 @@ enum lttng_error_code {
> 	LTTNG_ERR_LIVE_SESSION           = 119, /* Live session unsupported */
> 	LTTNG_ERR_PER_PID_SESSION        = 120, /* Per-PID sessions unsupported */
> 	LTTNG_ERR_KERN_CONTEXT_UNAVAILABLE = 121, /* Context unavailable on this kernel
> 	*/
> +	LTTNG_ERR_REGEN_STATEDUMP_FAIL   = 122, /* Failed to regenerate the statdump
> */
> 
> 	/* MUST be last element */
> 	LTTNG_ERR_NR,                           /* Last element */
> diff --git a/include/lttng/lttng.h b/include/lttng/lttng.h
> index ed03bdb..7f9fa9d 100644
> --- a/include/lttng/lttng.h
> +++ b/include/lttng/lttng.h
> @@ -172,6 +172,15 @@ extern int lttng_metadata_regenerate(const char
> *session_name);
>  */
> extern int lttng_regenerate_metadata(const char *session_name);
> 
> +/*
> + * Trigger the regeneration of the statedump for a session. The new statedump
> + * information is appended to the currently active trace, the session needs to
> + * be started.
> + *
> + * Return 0 on success, a negative LTTng error code on error.
> + */
> +extern int lttng_regenerate_statedump(const char *session_name);
> +
> #ifdef __cplusplus
> }
> #endif
> diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c
> index bd63389..480333d 100644
> --- a/src/bin/lttng-sessiond/cmd.c
> +++ b/src/bin/lttng-sessiond/cmd.c
> @@ -3540,6 +3540,50 @@ end:
> }
> 
> /*
> + * Command LTTNG_REGENERATE_STATEDUMP from the lttng-ctl library.
> + *
> + * Ask the tracer to regenerate a new statedump.
> + *
> + * Return 0 on success or else a LTTNG_ERR code.
> + */
> +int cmd_regenerate_statedump(struct ltt_session *session)
> +{
> +	int ret;
> +
> +	assert(session);
> +
> +	if (!session->active) {
> +		ret = LTTNG_ERR_SESSION_NOT_STARTED;
> +		goto end;
> +	}
> +	ret = 0;
> +
> +	if (session->kernel_session) {
> +		ret = kernctl_session_regenerate_statedump(
> +				session->kernel_session->fd);
> +		if (ret < 0) {
> +			ret = LTTNG_ERR_REGEN_STATEDUMP_FAIL;
> +			ERR("Failed to regenerate the kernel statedump");
> +			goto end;
> +		}
> +	}
> +
> +	if (session->ust_session) {
> +		ret = ust_app_regenerate_statedump_all(session->ust_session);
> +		if (ret < 0) {
> +			ret = LTTNG_ERR_REGEN_STATEDUMP_FAIL;
> +			ERR("Failed to regenerate the UST statedump");
> +			goto end;
> +		}
> +	}
> +	DBG("Cmd regenerate statedump for session %s", session->name);
> +	ret = LTTNG_OK;
> +
> +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 320d717..975a7f1 100644
> --- a/src/bin/lttng-sessiond/cmd.h
> +++ b/src/bin/lttng-sessiond/cmd.h
> @@ -111,5 +111,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_regenerate_metadata(struct ltt_session *session);
> +int cmd_regenerate_statedump(struct ltt_session *session);
> 
> #endif /* CMD_H */
> diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c
> index 3623e5d..8309c3f 100644
> --- a/src/bin/lttng-sessiond/main.c
> +++ b/src/bin/lttng-sessiond/main.c
> @@ -3004,6 +3004,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx,
> int sock,
> 	case LTTNG_SAVE_SESSION:
> 	case LTTNG_SET_SESSION_SHM_PATH:
> 	case LTTNG_REGENERATE_METADATA:
> +	case LTTNG_REGENERATE_STATEDUMP:
> 		need_domain = 0;
> 		break;
> 	default:
> @@ -4119,6 +4120,11 @@ error_add_context:
> 		ret = cmd_regenerate_metadata(cmd_ctx->session);
> 		break;
> 	}
> +	case LTTNG_REGENERATE_STATEDUMP:
> +	{
> +		ret = cmd_regenerate_statedump(cmd_ctx->session);
> +		break;
> +	}
> 	default:
> 		ret = LTTNG_ERR_UND;
> 		break;
> diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c
> index f30df20..37263e6 100644
> --- a/src/bin/lttng-sessiond/ust-app.c
> +++ b/src/bin/lttng-sessiond/ust-app.c
> @@ -6148,3 +6148,65 @@ end:
> 	rcu_read_unlock();
> 	return ret;
> }
> +
> +static
> +int ust_app_regenerate_statedump(struct ltt_ust_session *usess,
> +		struct ust_app *app)
> +{
> +	int ret = 0;
> +	struct ust_app_session *ua_sess;
> +
> +	DBG("Regenerating the metadata for ust app pid %d", app->pid);
> +
> +	rcu_read_lock();
> +

missing:

        if (!app->compatible) {
                goto end_not_compatible;
        }

> +	ua_sess = lookup_session_by_app(usess, app);
> +	if (ua_sess == NULL) {
> +		/* The session is in teardown process. Ignore and continue. */
> +		goto end;
> +	}
> +
> +	pthread_mutex_lock(&ua_sess->lock);
> +
> +	if (ua_sess->deleted) {
> +		pthread_mutex_unlock(&ua_sess->lock);
> +		goto end;
> +	}
> +
> +	pthread_mutex_lock(&app->sock_lock);
> +	ret = ustctl_regenerate_statedump(app->sock, ua_sess->handle);
> +	pthread_mutex_unlock(&app->sock_lock);
> +	pthread_mutex_unlock(&ua_sess->lock);
> +
> +end:
> +	rcu_read_unlock();
> +	health_code_update();
> +	return ret;
> +}
> +

[...]

> /*
> + * Regenerate the statedump of a session.
> + * Return 0 on success, a negative error code on error.
> + */
> +int lttng_regenerate_statedump(const char *session_name)
> +{
> +	int ret;
> +	struct lttcomm_session_msg lsm;
> +
> +	if (!session_name) {
> +		ret = -LTTNG_ERR_INVALID;
> +		goto end;
> +	}
> +
> +	memset(&lsm, 0, sizeof(lsm));
> +	lsm.cmd_type = LTTNG_REGENERATE_STATEDUMP;
> +
> +	lttng_ctl_copy_string(lsm.session.name, session_name,
> +			sizeof(lsm.session.name));
> +
> +	ret = lttng_ctl_ask_sessiond(&lsm, NULL);
> +	if (ret < 0) {
> +		goto end;
> +	}
> +
> +	ret = 0;
> +end:
> +	return ret;
> +}
> +

Remove extra whiteline.

Thanks,

Mathieu

> +
> +/*
>  * lib constructor.
>  */
> static void __attribute__((constructor)) init(void)
> --
> 1.9.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH lttng-tools 5/6] Tests for the regenerate statedump command
       [not found] ` <1467304594-30100-5-git-send-email-jdesfossez@efficios.com>
@ 2016-06-30 18:30   ` Mathieu Desnoyers
  0 siblings, 0 replies; 11+ messages in thread
From: Mathieu Desnoyers @ 2016-06-30 18:30 UTC (permalink / raw)
  To: Julien Desfossez; +Cc: lttng-dev, Jeremie Galarneau

----- On Jun 30, 2016, at 12:36 PM, Julien Desfossez jdesfossez@efficios.com wrote:

Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

> Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
> ---
> configure.ac                                       |  1 +
> tests/fast_regression                              |  1 +
> tests/regression/tools/Makefile.am                 |  2 +-
> tests/regression/tools/regen-statedump/Makefile.am | 16 ++++
> tests/regression/tools/regen-statedump/test_kernel | 80 +++++++++++++++++++
> tests/regression/tools/regen-statedump/test_ust    | 89 ++++++++++++++++++++++
> tests/root_regression                              |  1 +
> tests/utils/utils.sh                               | 54 +++++++++++++
> 8 files changed, 243 insertions(+), 1 deletion(-)
> create mode 100644 tests/regression/tools/regen-statedump/Makefile.am
> create mode 100755 tests/regression/tools/regen-statedump/test_kernel
> create mode 100755 tests/regression/tools/regen-statedump/test_ust
> 
> diff --git a/configure.ac b/configure.ac
> index 89a7858..6222e2b 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -981,6 +981,7 @@ AC_CONFIG_FILES([
> 	tests/regression/tools/wildcard/Makefile
> 	tests/regression/tools/crash/Makefile
> 	tests/regression/tools/regen-metadata/Makefile
> +	tests/regression/tools/regen-statedump/Makefile
> 	tests/regression/ust/Makefile
> 	tests/regression/ust/nprocesses/Makefile
> 	tests/regression/ust/high-throughput/Makefile
> diff --git a/tests/fast_regression b/tests/fast_regression
> index 262c846..8edbeca 100644
> --- a/tests/fast_regression
> +++ b/tests/fast_regression
> @@ -17,6 +17,7 @@ regression/tools/mi/test_mi
> regression/tools/wildcard/test_event_wildcard
> regression/tools/crash/test_crash
> regression/tools/regen-metadata/test_ust
> +regression/tools/regen-statedump/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/tools/Makefile.am
> b/tests/regression/tools/Makefile.am
> index 91820ad..76374c7 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 regen-metadata
> +		wildcard crash regen-metadata regen-statedump
> diff --git a/tests/regression/tools/regen-statedump/Makefile.am
> b/tests/regression/tools/regen-statedump/Makefile.am
> new file mode 100644
> index 0000000..d4a92eb
> --- /dev/null
> +++ b/tests/regression/tools/regen-statedump/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-statedump/test_kernel
> b/tests/regression/tools/regen-statedump/test_kernel
> new file mode 100755
> index 0000000..85afe76
> --- /dev/null
> +++ b/tests/regression/tools/regen-statedump/test_kernel
> @@ -0,0 +1,80 @@
> +#!/bin/bash
> +#
> +# Copyright (C) - 2016 Julien Desfossez <jdesfossez@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="Regenerate the statedump - Kernel tracing"
> +
> +CURDIR=$(dirname $0)/
> +TESTDIR=$CURDIR/../../..
> +EVENT_NAME="lttng_test_filter_event"
> +PID_RELAYD=0
> +SESSION_NAME=""
> +EVENT_NAME="lttng_statedump_start,lttng_statedump_end"
> +
> +TRACE_PATH=$(mktemp -d)
> +
> +NUM_TESTS=11
> +
> +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 test_kernel_local ()
> +{
> +	diag "Test kernel local with statedump 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_statedump_ok $SESSION_NAME
> +	stop_lttng_tracing_ok $SESSION_NAME
> +	validate_trace_count $EVENT_NAME $TRACE_PATH 4
> +	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_sessiond
> +	modprobe lttng-test
> +
> +	tests=( test_kernel_local )
> +
> +	for fct_test in ${tests[@]};
> +	do
> +		SESSION_NAME=$(randstring 16 0)
> +		${fct_test}
> +	done
> +
> +	rmmod lttng-test
> +	stop_lttng_sessiond
> +}
> diff --git a/tests/regression/tools/regen-statedump/test_ust
> b/tests/regression/tools/regen-statedump/test_ust
> new file mode 100755
> index 0000000..486b9a5
> --- /dev/null
> +++ b/tests/regression/tools/regen-statedump/test_ust
> @@ -0,0 +1,89 @@
> +#!/bin/bash
> +#
> +# Copyright (C) - 2016 Julien Desfossez <jdesfossez@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="Regenerate the statedump - User-space tracing"
> +
> +CURDIR=$(dirname $0)/
> +TESTDIR=$CURDIR/../../..
> +NR_ITER=10
> +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="lttng_ust_statedump:start,lttng_ust_statedump:end"
> +PID_RELAYD=0
> +
> +TRACE_PATH=$(mktemp -d)
> +
> +NUM_TESTS=11
> +
> +source $TESTDIR/utils/utils.sh
> +
> +if [ ! -x "$TESTAPP_BIN" ]; then
> +	BAIL_OUT "No UST events binary detected."
> +fi
> +
> +function test_ust_local ()
> +{
> +	local file_sync_after_first=$(mktemp -u)
> +	local file_sync_before_last=$(mktemp -u)
> +
> +	diag "Test UST local with statedump 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
> +
> +	while [ ! -f "${file_sync_after_first}" ]; do
> +		sleep 0.5
> +	done
> +
> +	regenerate_statedump_ok $SESSION_NAME
> +
> +	touch ${file_sync_before_last}
> +
> +	stop_lttng_tracing_ok $SESSION_NAME
> +	destroy_lttng_session_ok $SESSION_NAME
> +	# Validate test
> +	validate_trace_count $EVENT_NAME $TRACE_PATH 4
> +	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_sessiond
> +
> +tests=( test_ust_local )
> +
> +for fct_test in ${tests[@]};
> +do
> +	SESSION_NAME=$(randstring 16 0)
> +	${fct_test}
> +done
> +
> +stop_lttng_sessiond
> +
> +exit $out
> diff --git a/tests/root_regression b/tests/root_regression
> index d0fad04..d3eaf23 100644
> --- a/tests/root_regression
> +++ b/tests/root_regression
> @@ -15,4 +15,5 @@ regression/tools/filtering/test_unsupported_op
> regression/tools/filtering/test_valid_filter
> regression/tools/wildcard/test_event_wildcard
> regression/tools/regen-metadata/test_kernel
> +regression/tools/regen-statedump/test_kernel
> regression/ust/test_event_perf
> diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh
> index 3d744e2..c56a8aa 100644
> --- a/tests/utils/utils.sh
> +++ b/tests/utils/utils.sh
> @@ -1294,6 +1294,35 @@ function validate_trace
> 	return $ret
> }
> 
> +function validate_trace_count
> +{
> +	local event_name=$1
> +	local trace_path=$2
> +	local expected_count=$3
> +
> +	which $BABELTRACE_BIN >/dev/null
> +	if [ $? -ne 0 ]; then
> +	    skip 0 "Babeltrace binary not found. Skipping trace validation"
> +	fi
> +
> +	cnt=0
> +	OLDIFS=$IFS
> +	IFS=","
> +	for i in $event_name; do
> +		traced=$($BABELTRACE_BIN $trace_path 2>/dev/null | grep $i | wc -l)
> +		if [ "$traced" -ne 0 ]; then
> +			pass "Validate trace for event $i, $traced events"
> +		else
> +			fail "Validate trace for event $i"
> +			diag "Found $traced occurences of $i"
> +		fi
> +		cnt=$(($cnt + $traced))
> +	done
> +	IFS=$OLDIFS
> +	test $cnt -eq $expected_count
> +	ok $? "Read a total of $cnt events, expected $expected_count"
> +}
> +
> function trace_first_line
> {
> 	local trace_path=$1
> @@ -1391,6 +1420,31 @@ function regenerate_metadata_fail ()
> 	regenerate_metadata 1 "$@"
> }
> 
> +function regenerate_statedump ()
> +{
> +	local expected_to_fail=$1
> +	local sess_name=$2
> +
> +	$TESTDIR/../src/bin/lttng/$LTTNG_BIN regenerate statedump -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 statedump $sess_name"
> +	else
> +		ok $ret "Metadata regenerate $sess_name"
> +	fi
> +}
> +
> +function regenerate_statedump_ok ()
> +{
> +	regenerate_statedump 0 "$@"
> +}
> +
> +function regenerate_statedump_fail ()
> +{
> +	regenerate_statedump 1 "$@"
> +}
> +
> function destructive_tests_enabled ()
> {
> 	if [ ${LTTNG_ENABLE_DESTRUCTIVE_TESTS} = "will-break-my-system" ]; then
> --
> 1.9.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH lttng-tools 6/6] Manpage for the regenerate statedump command
       [not found] ` <1467304594-30100-6-git-send-email-jdesfossez@efficios.com>
@ 2016-06-30 18:30   ` Mathieu Desnoyers
  0 siblings, 0 replies; 11+ messages in thread
From: Mathieu Desnoyers @ 2016-06-30 18:30 UTC (permalink / raw)
  To: Julien Desfossez; +Cc: lttng-dev, Jeremie Galarneau



----- On Jun 30, 2016, at 12:36 PM, Julien Desfossez jdesfossez@efficios.com wrote:

Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

> Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
> ---
> doc/man/lttng-regenerate.1.txt | 15 +++++++++++++--
> 1 file changed, 13 insertions(+), 2 deletions(-)
> 
> diff --git a/doc/man/lttng-regenerate.1.txt b/doc/man/lttng-regenerate.1.txt
> index dbbfa4d..80bae20 100644
> --- a/doc/man/lttng-regenerate.1.txt
> +++ b/doc/man/lttng-regenerate.1.txt
> @@ -14,12 +14,19 @@ Regenerate the metadata of a session
> [verse]
> *lttng* ['linkgenoptions:(GENERAL OPTIONS)'] *regenerate metadata*
> [option:--session='SESSION']
> 
> +Regenerate the statedump of a session
> +
> +[verse]
> +*lttng* ['linkgenoptions:(GENERAL OPTIONS)'] *regenerate statedump*
> [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.
> +As of this version, the `metadata` and `statedump` command's action are
> +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.
> @@ -32,12 +39,16 @@ 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.
> 
> +Regenerating a tracing session's statedump can be used to collect up-to-date
> +statedump informations during the trace session. This is particularly useful in
> +snapshot or trace-file rotation modes where the statedump information may be
> +lost.
> 
> include::common-cmd-options-head.txt[]
> 
> 
> option:-s, option:--session='SESSION'::
> -    Manage the metadata generation of the tracing session named 'SESSION'
> +    Manage the data regeneration of the tracing session named 'SESSION'
>     instead of the current tracing session.
> 
> 
> --
> 1.9.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH lttng-tools 2/6] UST command to regenerate the statedump
       [not found] ` <1467304594-30100-2-git-send-email-jdesfossez@efficios.com>
@ 2016-06-30 18:31   ` Mathieu Desnoyers
  0 siblings, 0 replies; 11+ messages in thread
From: Mathieu Desnoyers @ 2016-06-30 18:31 UTC (permalink / raw)
  To: Julien Desfossez; +Cc: lttng-dev, Jeremie Galarneau



----- On Jun 30, 2016, at 12:36 PM, Julien Desfossez jdesfossez@efficios.com wrote:

> From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

> 
> ---
> src/bin/lttng-sessiond/lttng-ust-abi.h | 1 +
> 1 file changed, 1 insertion(+)
> 
> diff --git a/src/bin/lttng-sessiond/lttng-ust-abi.h
> b/src/bin/lttng-sessiond/lttng-ust-abi.h
> index 7bec0c9..9ef7b9a 100644
> --- a/src/bin/lttng-sessiond/lttng-ust-abi.h
> +++ b/src/bin/lttng-sessiond/lttng-ust-abi.h
> @@ -275,6 +275,7 @@ struct lttng_ust_event_exclusion {
> 	_UST_CMDW(0x51, struct lttng_ust_channel)
> #define LTTNG_UST_SESSION_START			_UST_CMD(0x52)
> #define LTTNG_UST_SESSION_STOP			_UST_CMD(0x53)
> +#define LTTNG_UST_SESSION_STATEDUMP		_UST_CMD(0x54)
> 
> /* Channel FD commands */
> #define LTTNG_UST_STREAM			_UST_CMD(0x60)
> --
> 1.9.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH lttng-tools 3/6] Kernel ioctl to regenerate the statedump
       [not found] ` <1467304594-30100-3-git-send-email-jdesfossez@efficios.com>
@ 2016-06-30 18:31   ` Mathieu Desnoyers
  0 siblings, 0 replies; 11+ messages in thread
From: Mathieu Desnoyers @ 2016-06-30 18:31 UTC (permalink / raw)
  To: Julien Desfossez; +Cc: lttng-dev, Jeremie Galarneau



----- On Jun 30, 2016, at 12:36 PM, Julien Desfossez jdesfossez@efficios.com wrote:

> From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
> 

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>

> ---
> src/common/kernel-ctl/kernel-ioctl.h | 2 ++
> 1 file changed, 2 insertions(+)
> 
> diff --git a/src/common/kernel-ctl/kernel-ioctl.h
> b/src/common/kernel-ctl/kernel-ioctl.h
> index 68056dc..805de02 100644
> --- a/src/common/kernel-ctl/kernel-ioctl.h
> +++ b/src/common/kernel-ctl/kernel-ioctl.h
> @@ -134,6 +134,8 @@
>  */
> #define LTTNG_KERNEL_SESSION_LIST_TRACKER_PIDS	_IO(0xF6, 0x58)
> #define LTTNG_KERNEL_SESSION_METADATA_REGEN	_IO(0xF6, 0x59)
> +/* 0x5A and 0x5B are reserved for a future ABI-breaking cleanup. */
> +#define LTTNG_KERNEL_SESSION_STATEDUMP		_IO(0xF6, 0x5C)
> 
> /* Channel FD ioctl */
> #define LTTNG_KERNEL_STREAM			_IO(0xF6, 0x62)
> --
> 1.9.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
_______________________________________________
lttng-dev mailing list
lttng-dev@lists.lttng.org
https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-06-30 18:31 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <1467304594-30100-1-git-send-email-jdesfossez@efficios.com>
2016-06-30 16:36 ` [PATCH lttng-tools 2/6] UST command to regenerate the statedump Julien Desfossez
2016-06-30 16:36 ` [PATCH lttng-tools 3/6] Kernel ioctl " Julien Desfossez
2016-06-30 16:36 ` [PATCH lttng-tools 4/6] Allow regenerating the statedump of a running session Julien Desfossez
2016-06-30 16:36 ` [PATCH lttng-tools 5/6] Tests for the regenerate statedump command Julien Desfossez
2016-06-30 16:36 ` [PATCH lttng-tools 6/6] Manpage " Julien Desfossez
2016-06-30 18:22 ` [PATCH lttng-tools 1/6] Rename the "metadata regenerate" command to "regenerate metadata" Mathieu Desnoyers
     [not found] ` <1467304594-30100-4-git-send-email-jdesfossez@efficios.com>
2016-06-30 18:27   ` [PATCH lttng-tools 4/6] Allow regenerating the statedump of a running session Mathieu Desnoyers
     [not found] ` <1467304594-30100-5-git-send-email-jdesfossez@efficios.com>
2016-06-30 18:30   ` [PATCH lttng-tools 5/6] Tests for the regenerate statedump command Mathieu Desnoyers
     [not found] ` <1467304594-30100-6-git-send-email-jdesfossez@efficios.com>
2016-06-30 18:30   ` [PATCH lttng-tools 6/6] Manpage " Mathieu Desnoyers
     [not found] ` <1467304594-30100-2-git-send-email-jdesfossez@efficios.com>
2016-06-30 18:31   ` [PATCH lttng-tools 2/6] UST command to regenerate the statedump Mathieu Desnoyers
     [not found] ` <1467304594-30100-3-git-send-email-jdesfossez@efficios.com>
2016-06-30 18:31   ` [PATCH lttng-tools 3/6] Kernel ioctl " Mathieu Desnoyers

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.