Send domain with streams to the relay
[deliverable/lttng-tools.git] / src / common / relayd / relayd.c
index 7f0ea74e94085b99873049a736941015e85fda5c..dad845d5c95f08e8f323b496d169f55f710cf306 100644 (file)
@@ -237,11 +237,13 @@ error:
  */
 int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_name,
                const char *pathname, uint64_t *stream_id,
-               uint64_t tracefile_size, uint64_t tracefile_count)
+               uint64_t tracefile_size, uint64_t tracefile_count,
+               enum lttng_domain_type domain)
 {
        int ret;
        struct lttcomm_relayd_add_stream msg;
        struct lttcomm_relayd_add_stream_2_2 msg_2_2;
+       struct lttcomm_relayd_add_stream_2_11 msg_2_11;
        struct lttcomm_relayd_status_stream reply;
 
        /* Code flow error. Safety net. */
@@ -252,7 +254,8 @@ int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_nam
        DBG("Relayd adding stream for channel name %s", channel_name);
 
        /* Compat with relayd 2.1 */
-       if (rsock->minor == 1) {
+       switch (rsock->minor) {
+       case 1:
                memset(&msg, 0, sizeof(msg));
                if (lttng_strncpy(msg.channel_name, channel_name,
                                sizeof(msg.channel_name))) {
@@ -270,7 +273,16 @@ int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_nam
                if (ret < 0) {
                        goto error;
                }
-       } else {
+               break;
+       case 2:
+       case 3:
+       case 4:
+       case 5:
+       case 6:
+       case 7:
+       case 8:
+       case 9:
+       case 10:
                memset(&msg_2_2, 0, sizeof(msg_2_2));
                /* Compat with relayd 2.2+ */
                if (lttng_strncpy(msg_2_2.channel_name, channel_name,
@@ -291,6 +303,31 @@ int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_nam
                if (ret < 0) {
                        goto error;
                }
+               break;
+       case 11:
+       default:
+               memset(&msg_2_11, 0, sizeof(msg_2_11));
+               /* Compat with relayd 2.11+ */
+               if (lttng_strncpy(msg_2_11.channel_name, channel_name,
+                               sizeof(msg_2_11.channel_name))) {
+                       ret = -1;
+                       goto error;
+               }
+               if (lttng_strncpy(msg_2_11.pathname, pathname,
+                               sizeof(msg_2_11.pathname))) {
+                       ret = -1;
+                       goto error;
+               }
+               msg_2_11.tracefile_size = htobe64(tracefile_size);
+               msg_2_11.tracefile_count = htobe64(tracefile_count);
+               msg_2_11.domain = htobe32(domain);
+
+               /* Send command */
+               ret = send_command(rsock, RELAYD_ADD_STREAM, (void *) &msg_2_11, sizeof(msg_2_11), 0);
+               if (ret < 0) {
+                       goto error;
+               }
+               break;
        }
 
        /* Waiting for reply */
@@ -856,7 +893,11 @@ int relayd_send_index(struct lttcomm_relayd_sock *rsock,
        }
 
        /* Send command */
-       ret = send_command(rsock, RELAYD_SEND_INDEX, &msg, sizeof(msg), 0);
+       ret = send_command(rsock, RELAYD_SEND_INDEX, &msg,
+               lttcomm_relayd_index_len(lttng_to_index_major(rsock->major,
+                                                               rsock->minor),
+                               lttng_to_index_minor(rsock->major, rsock->minor)),
+                               0);
        if (ret < 0) {
                goto error;
        }
@@ -936,3 +977,106 @@ int relayd_reset_metadata(struct lttcomm_relayd_sock *rsock,
 error:
        return ret;
 }
+
+int relayd_rotate_stream(struct lttcomm_relayd_sock *rsock, uint64_t stream_id,
+               const char *new_pathname)
+{
+       int ret;
+       struct lttcomm_relayd_rotate_stream msg;
+       struct lttcomm_relayd_generic_reply reply;
+
+       /* Code flow error. Safety net. */
+       assert(rsock);
+
+       DBG("Relayd rotating stream id %" PRIu64, stream_id);
+
+       memset(&msg, 0, sizeof(msg));
+       msg.stream_id = htobe64(stream_id);
+       if (lttng_strncpy(msg.new_pathname, new_pathname,
+                               sizeof(msg.new_pathname))) {
+               ret = -1;
+               goto error;
+       }
+
+       /* Send command */
+       ret = send_command(rsock, RELAYD_ROTATE_STREAM, (void *) &msg, sizeof(msg), 0);
+       if (ret < 0) {
+               goto error;
+       }
+
+       /* Receive response */
+       ret = recv_reply(rsock, (void *) &reply, sizeof(reply));
+       if (ret < 0) {
+               goto error;
+       }
+
+       reply.ret_code = be32toh(reply.ret_code);
+
+       /* Return session id or negative ret code. */
+       if (reply.ret_code != LTTNG_OK) {
+               ret = -1;
+               ERR("Relayd rotate stream replied error %d", reply.ret_code);
+       } else {
+               /* Success */
+               ret = 0;
+       }
+
+       DBG("Relayd rotated stream id %" PRIu64 " successfully", stream_id);
+
+error:
+       return ret;
+}
+
+int relayd_rotate_rename(struct lttcomm_relayd_sock *rsock,
+               const char *current_path, const char *new_path)
+{
+       int ret;
+       struct lttcomm_relayd_rotate_rename msg;
+       struct lttcomm_relayd_generic_reply reply;
+
+       /* Code flow error. Safety net. */
+       assert(rsock);
+
+       DBG("Relayd rename chunk %s to %s", current_path, new_path);
+
+       memset(&msg, 0, sizeof(msg));
+       if (lttng_strncpy(msg.current_path, current_path,
+                               sizeof(msg.current_path))) {
+               ret = -1;
+               goto error;
+       }
+       if (lttng_strncpy(msg.new_path, new_path,
+                               sizeof(msg.new_path))) {
+               ret = -1;
+               goto error;
+       }
+
+       /* Send command */
+       ret = send_command(rsock, RELAYD_ROTATE_RENAME, (void *) &msg, sizeof(msg), 0);
+       if (ret < 0) {
+               goto error;
+       }
+
+       /* Receive response */
+       ret = recv_reply(rsock, (void *) &reply, sizeof(reply));
+       if (ret < 0) {
+               goto error;
+       }
+
+       reply.ret_code = be32toh(reply.ret_code);
+
+       /* Return session id or negative ret code. */
+       if (reply.ret_code != LTTNG_OK) {
+               ret = -1;
+               ERR("Relayd rotate rename replied error %d", reply.ret_code);
+       } else {
+               /* Success */
+               ret = 0;
+       }
+
+       DBG("Relayd rotate rename completed successfully");
+
+error:
+       return ret;
+
+}
This page took 0.026286 seconds and 5 git commands to generate.