Fix: loading of live session within userspace domains
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 5 Nov 2015 21:19:38 +0000 (16:19 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 20 May 2016 20:21:38 +0000 (16:21 -0400)
The output of a session is session-specific and not bound to
a domain. The "lttng_set_consumer_url" already acts on a
session-wide basis.

Fixes #973

Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/lttng/domain.h
include/lttng/handle.h
src/bin/lttng/commands/create.c
src/common/config/config.c
src/lib/lttng-ctl/lttng-ctl.c

index 3ee04191c45411b11cab7c782b44795280ac88ff..0f386f33446e9a09834508ebd724458b46411289 100644 (file)
@@ -28,6 +28,7 @@ extern "C" {
  * Domain types: the different possible tracers.
  */
 enum lttng_domain_type {
+       LTTNG_DOMAIN_NONE                     = 0,      /* No associated domain. */
        LTTNG_DOMAIN_KERNEL                   = 1,      /* Linux Kernel tracer. */
        LTTNG_DOMAIN_UST                      = 2,      /* Global Userspace tracer. */
        LTTNG_DOMAIN_JUL                      = 3,      /* Java Util Logging. */
index b1057efe530bc2865bbc3a2dad6d1a5c75b36a31..0f48c53540fbc1fa53f0c504043d5cf3bbe9d277 100644 (file)
@@ -43,7 +43,11 @@ struct lttng_handle {
  * This handle contains the session name and domain on which the command will
  * be executed. A domain is basically a tracer like the kernel or user space.
  *
- * Return an newly allocated handle that should be freed using
+ * A NULL domain indicates that the handle is not bound to a specific domain.
+ * This is mostly used for actions that apply on a session and not on a domain
+ * (e.g lttng_set_consumer_url).
+ *
+ * Return a newly allocated handle that should be freed using
  * lttng_destroy_handle. On error, NULL is returned.
  */
 extern struct lttng_handle *lttng_create_handle(const char *session_name,
index abc5cb9b8e1133170bb9df9fa4f93ec36676f737..dd3fa26886cbca5cc8e58a7f68f6800f7e8275ab 100644 (file)
@@ -215,18 +215,15 @@ static int set_consumer_url(const char *session_name, const char *ctrl_url,
 {
        int ret;
        struct lttng_handle *handle;
-       struct lttng_domain dom;
 
        assert(session_name);
 
        /*
-        * Set handle with the session name and the domain set to 0. This means to
-        * the session daemon that the next action applies on the tracing session
-        * rather then the domain specific session.
+        * Set handle with the session_name, but no domain. This implies that
+        * the actions taken with this handle apply on the tracing session
+        * rather then the domain-specific session.
         */
-       memset(&dom, 0, sizeof(dom));
-
-       handle = lttng_create_handle(session_name, &dom);
+       handle = lttng_create_handle(session_name, NULL);
        if (handle == NULL) {
                ret = CMD_FATAL;
                goto error;
index d12763872a3b8f26bb0c133fb4d7a61e825e9416..3875f1684cc0d68be6ce29c199997752b727ff32 100644 (file)
@@ -1102,17 +1102,16 @@ end:
 }
 
 static
-int create_session_net_output(const char *name, struct lttng_domain *domain,
-       const char *control_uri, const char *data_uri)
+int create_session_net_output(const char *name, const char *control_uri,
+               const char *data_uri)
 {
        int ret;
        struct lttng_handle *handle;
        const char *uri = NULL;
 
        assert(name);
-       assert(domain);
 
-       handle = lttng_create_handle(name, domain);
+       handle = lttng_create_handle(name, NULL);
        if (!handle) {
                ret = -LTTNG_ERR_NOMEM;
                goto end;
@@ -1294,11 +1293,6 @@ int create_session(const char *name,
        }
 
        if (output.control_uri || output.data_uri) {
-               int i;
-               struct lttng_domain *domain;
-               struct lttng_domain *domains[] =
-                       { kernel_domain, ust_domain, jul_domain, log4j_domain };
-
                /* network destination */
                if (live_timer_interval && live_timer_interval != UINT64_MAX) {
                        /*
@@ -1314,18 +1308,12 @@ int create_session(const char *name,
                        goto end;
                }
 
-               for (i = 0; i < (sizeof(domains) / sizeof(domains[0])); i++) {
-                       domain = domains[i];
-                       if (!domain) {
-                               continue;
-                       }
-
-                       ret = create_session_net_output(name, domain, output.control_uri,
-                                       output.data_uri);
-                       if (ret) {
-                               goto end;
-                       }
+               ret = create_session_net_output(name, output.control_uri,
+                               output.data_uri);
+               if (ret) {
+                       goto end;
                }
+
        } else {
                /* either local output or no output */
                ret = lttng_create_session(name, output.path);
index 615bf796f5aedae7ae607502b2a514f3d887d0e0..b190937cc8f42478e51612c3df7abc665e01728f 100644 (file)
@@ -486,10 +486,6 @@ struct lttng_handle *lttng_create_handle(const char *session_name,
 {
        struct lttng_handle *handle = NULL;
 
-       if (domain == NULL) {
-               goto end;
-       }
-
        handle = zmalloc(sizeof(struct lttng_handle));
        if (handle == NULL) {
                PERROR("malloc handle");
@@ -500,8 +496,10 @@ struct lttng_handle *lttng_create_handle(const char *session_name,
        lttng_ctl_copy_string(handle->session_name, session_name,
                        sizeof(handle->session_name));
 
-       /* Copy lttng domain */
-       lttng_ctl_copy_lttng_domain(&handle->domain, domain);
+       /* Copy lttng domain or leave initialized to 0. */
+       if (domain) {
+               lttng_ctl_copy_lttng_domain(&handle->domain, domain);
+       }
 
 end:
        return handle;
This page took 0.029218 seconds and 4 git commands to generate.