Fix: move set base_path of session to URI configuration
authorJonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Fri, 25 Oct 2019 22:12:00 +0000 (18:12 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 5 Nov 2019 20:03:31 +0000 (15:03 -0500)
The load code still uses the "old" API to create and configure network
session output (lttng_create_session followed by
lttng_set_consumer_url). The session base_path is only set in the
cmd_create_session_from_descriptor function. This results in invalid
network output paths when using a loaded session configuration (xml).

While we might want to move the load code to the new API, there is a
case to be made in not breaking the previous API behaviour.

To restore the expected behaviour of lttng_set_consumer_url, move the
assignation of the session base_path to the cmd_set_consumer_uri
function (LTTNG_SET_CONSUMER_URI).

Both the previous and session descriptor based creation API uses this
code path when needed (network output).

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
src/bin/lttng-sessiond/cmd.c
src/bin/lttng-sessiond/session.c
src/bin/lttng-sessiond/session.h
tests/unit/test_session.c

index a164cffc0fcd8b049f6ea63dcb19fa4a02707933..1dec61ea17b6ba7f74e122e37a7df99afa2e07c6 100644 (file)
@@ -2759,11 +2759,32 @@ int cmd_set_consumer_uri(struct ltt_session *session, size_t nb_uri,
                goto error;
        }
 
+       for (i = 0; i < nb_uri; i++) {
+               if (uris[i].stype != LTTNG_STREAM_CONTROL ||
+                               uris[i].subdir[0] == '\0') {
+                       /* Not interested in these URIs */
+                       continue;
+               }
+
+               if (session->base_path != NULL) {
+                       free(session->base_path);
+                       session->base_path = NULL;
+               }
+
+               /* Set session base_path */
+               session->base_path = strdup(uris[i].subdir);
+               if (!session->base_path) {
+                       PERROR("Copying base path: %s", uris[i].subdir);
+                       goto error;
+               }
+               DBG2("Setting base path for session %" PRIu64 ": %s",
+                               session->id, session->base_path);
+       }
+
        /* Set the "global" consumer URIs */
        for (i = 0; i < nb_uri; i++) {
-               ret = add_uri_to_consumer(session,
-                               session->consumer,
-                               &uris[i], LTTNG_DOMAIN_NONE);
+               ret = add_uri_to_consumer(session, session->consumer, &uris[i],
+                               LTTNG_DOMAIN_NONE);
                if (ret != LTTNG_OK) {
                        goto error;
                }
@@ -2894,7 +2915,6 @@ enum lttng_error_code cmd_create_session_from_descriptor(
        const char *session_name;
        struct ltt_session *new_session = NULL;
        enum lttng_session_descriptor_status descriptor_status;
-       const char *base_path;
 
        session_lock_list();
        if (home_path) {
@@ -2917,13 +2937,9 @@ enum lttng_error_code cmd_create_session_from_descriptor(
                ret_code = LTTNG_ERR_INVALID;
                goto end;
        }
-       ret = lttng_session_descriptor_get_base_path(descriptor, &base_path);
-       if (ret) {
-               ret_code = LTTNG_ERR_INVALID;
-               goto end;
-       }
+
        ret_code = session_create(session_name, creds->uid, creds->gid,
-                       base_path, &new_session);
+                       &new_session);
        if (ret_code != LTTNG_OK) {
                goto end;
        }
index 383c6fde714c229f5adccd5c2abcf8c3c1fd5211..ed68d153f20749630012c93a4487f6dad6efec96 100644 (file)
@@ -962,7 +962,7 @@ end:
  * Session list lock must be held by the caller.
  */
 enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
-               const char *base_path, struct ltt_session **out_session)
+               struct ltt_session **out_session)
 {
        int ret;
        enum lttng_error_code ret_code;
@@ -1086,16 +1086,6 @@ enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
                }
        }
 
-       if (base_path) {
-               new_session->base_path = strdup(base_path);
-               if (!new_session->base_path) {
-                       ERR("Failed to allocate base path of session \"%s\"",
-                                       name);
-                       ret_code = LTTNG_ERR_SESSION_FAIL;
-                       goto error;
-               }
-       }
-
        new_session->uid = uid;
        new_session->gid = gid;
 
index 31a40a741aee1797a20b61f345ca96d7a62181a2..20a7fcbc86ed0d4ab2057b5364515734325e8546 100644 (file)
@@ -193,7 +193,7 @@ struct ltt_session {
 
 /* Prototypes */
 enum lttng_error_code session_create(const char *name, uid_t uid, gid_t gid,
-               const char *base_path, struct ltt_session **out_session);
+               struct ltt_session **out_session);
 void session_lock(struct ltt_session *session);
 void session_lock_list(void);
 int session_trylock_list(void);
index b538bddc6bac261ca2a6615d065ebcce11b71126..d0111780993ec8d0621ff9a2cd03adf629987502 100644 (file)
@@ -132,7 +132,7 @@ static int create_one_session(char *name)
        struct ltt_session *session = NULL;
 
        session_lock_list();
-       ret_code = session_create(name, geteuid(), getegid(), NULL, &session);
+       ret_code = session_create(name, geteuid(), getegid(), &session);
        session_put(session);
        if (ret_code == LTTNG_OK) {
                /* Validate */
@@ -288,7 +288,7 @@ void test_session_name_generation(void)
        const char *expected_session_name_prefix = DEFAULT_SESSION_NAME;
 
        session_lock_list();
-       ret_code = session_create(NULL, geteuid(), getegid(), NULL, &session);
+       ret_code = session_create(NULL, geteuid(), getegid(), &session);
        ok(ret_code == LTTNG_OK,
                "Create session with a NULL name (auto-generate a name)");
        if (!session) {
This page took 0.030017 seconds and 4 git commands to generate.