Add create session snapshot API in lttng-sessiond
[lttng-tools.git] / src / lib / lttng-ctl / lttng-ctl.c
index afd55a1abf882e41ce6acb8bbceaec46ff77fe2e..d8d5db6c7ff6838d087309c421c83cb919e0758c 100644 (file)
@@ -340,6 +340,11 @@ static int connect_sessiond(void)
 {
        int ret;
 
+       /* Don't try to connect if already connected. */
+       if (connected) {
+               return 0;
+       }
+
        ret = set_session_daemon_path();
        if (ret < 0) {
                goto error;
@@ -1466,7 +1471,7 @@ int _lttng_create_session_ext(const char *name, const char *url,
        struct lttcomm_session_msg lsm;
        struct lttng_uri *uris = NULL;
 
-       if (name == NULL || datetime == NULL || url == NULL) {
+       if (name == NULL || datetime == NULL) {
                return -LTTNG_ERR_INVALID;
        }
 
@@ -1542,6 +1547,41 @@ int lttng_data_pending(const char *session_name)
        return ret;
 }
 
+/*
+ * Create a session exclusively used for snapshot.
+ *
+ * Returns LTTNG_OK on success or a negative error code.
+ */
+int lttng_create_session_snapshot(const char *name, const char *snapshot_url)
+{
+       int ret;
+       ssize_t size;
+       struct lttcomm_session_msg lsm;
+       struct lttng_uri *uris = NULL;
+
+       if (name == NULL) {
+               return -LTTNG_ERR_INVALID;
+       }
+
+       memset(&lsm, 0, sizeof(lsm));
+
+       lsm.cmd_type = LTTNG_CREATE_SESSION_SNAPSHOT;
+       lttng_ctl_copy_string(lsm.session.name, name, sizeof(lsm.session.name));
+
+       size = uri_parse_str_urls(snapshot_url, NULL, &uris);
+       if (size < 0) {
+               return -LTTNG_ERR_INVALID;
+       }
+
+       lsm.u.uri.size = size;
+
+       ret = lttng_ctl_ask_sessiond_varlen(&lsm, uris,
+                       sizeof(struct lttng_uri) * size, NULL);
+
+       free(uris);
+       return ret;
+}
+
 /*
  * lib constructor
  */
This page took 0.024933 seconds and 5 git commands to generate.