X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fcommon%2Frelayd%2Frelayd.c;h=ed788b993ffed5e27535e92b3e03323ef05a396b;hb=96b0ecff3ade3c7970d1cc5fb12a50a94c67ee67;hp=745bde816aa7471222f871c3859d981389e22638;hpb=272839375cd306a6a824bab1018655a65b39fd9d;p=lttng-tools.git diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index 745bde816..ed788b993 100644 --- a/src/common/relayd/relayd.c +++ b/src/common/relayd/relayd.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "relayd.h" @@ -126,8 +127,9 @@ error: * payload size is introduced. */ static int relayd_create_session_2_11(struct lttcomm_relayd_sock *rsock, - char *session_name, char *hostname, - int session_live_timer, unsigned int snapshot) + const char *session_name, const char *hostname, + int session_live_timer, unsigned int snapshot, + uint64_t sessiond_session_id, const lttng_uuid sessiond_uuid) { int ret; struct lttcomm_relayd_create_session_2_11 *msg = NULL; @@ -165,6 +167,9 @@ static int relayd_create_session_2_11(struct lttcomm_relayd_sock *rsock, msg->live_timer = htobe32(session_live_timer); msg->snapshot = !!snapshot; + lttng_uuid_copy(msg->sessiond_uuid, sessiond_uuid); + msg->session_id = htobe64(sessiond_session_id); + /* Send command */ ret = send_command(rsock, RELAYD_CREATE_SESSION, msg, msg_length, 0); if (ret < 0) { @@ -179,8 +184,8 @@ error: * support the live reading capability. */ static int relayd_create_session_2_4(struct lttcomm_relayd_sock *rsock, - char *session_name, char *hostname, int session_live_timer, - unsigned int snapshot) + const char *session_name, const char *hostname, + int session_live_timer, unsigned int snapshot) { int ret; struct lttcomm_relayd_create_session_2_4 msg; @@ -231,15 +236,18 @@ error: * On success, return 0 else a negative value which is either an errno error or * a lttng error code from the relayd. */ -int relayd_create_session(struct lttcomm_relayd_sock *rsock, uint64_t *session_id, - char *session_name, char *hostname, int session_live_timer, - unsigned int snapshot) +int relayd_create_session(struct lttcomm_relayd_sock *rsock, + uint64_t *relayd_session_id, + const char *session_name, const char *hostname, + int session_live_timer, + unsigned int snapshot, uint64_t sessiond_session_id, + const lttng_uuid sessiond_uuid) { int ret; struct lttcomm_relayd_status_session reply; assert(rsock); - assert(session_id); + assert(relayd_session_id); DBG("Relayd create session"); @@ -253,7 +261,8 @@ int relayd_create_session(struct lttcomm_relayd_sock *rsock, uint64_t *session_i } else { /* From 2.11 to ... */ ret = relayd_create_session_2_11(rsock, session_name, - hostname, session_live_timer, snapshot); + hostname, session_live_timer, snapshot, + sessiond_session_id, sessiond_uuid); } if (ret < 0) { @@ -276,7 +285,7 @@ int relayd_create_session(struct lttcomm_relayd_sock *rsock, uint64_t *session_i goto error; } else { ret = 0; - *session_id = reply.session_id; + *relayd_session_id = reply.session_id; } DBG("Relayd session created with id %" PRIu64, reply.session_id); @@ -349,7 +358,8 @@ error: static int relayd_add_stream_2_11(struct lttcomm_relayd_sock *rsock, const char *channel_name, const char *pathname, - uint64_t tracefile_size, uint64_t tracefile_count) + uint64_t tracefile_size, uint64_t tracefile_count, + uint64_t trace_archive_id) { int ret; struct lttcomm_relayd_add_stream_2_11 *msg = NULL; @@ -386,6 +396,7 @@ static int relayd_add_stream_2_11(struct lttcomm_relayd_sock *rsock, msg->tracefile_size = htobe64(tracefile_size); msg->tracefile_count = htobe64(tracefile_count); + msg->trace_archive_id = htobe64(trace_archive_id); /* Send command */ ret = send_command(rsock, RELAYD_ADD_STREAM, (void *) msg, msg_length, 0); @@ -406,7 +417,7 @@ 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 trace_archive_id) + struct lttng_trace_chunk *trace_chunk) { int ret; struct lttcomm_relayd_status_stream reply; @@ -421,16 +432,27 @@ int relayd_add_stream(struct lttcomm_relayd_sock *rsock, const char *channel_nam /* Compat with relayd 2.1 */ if (rsock->minor == 1) { /* For 2.1 */ + assert(!trace_chunk); ret = relayd_add_stream_2_1(rsock, channel_name, pathname); } else if (rsock->minor > 1 && rsock->minor < 11) { /* From 2.2 to 2.10 */ + assert(!trace_chunk); ret = relayd_add_stream_2_2(rsock, channel_name, pathname, tracefile_size, tracefile_count); } else { + enum lttng_trace_chunk_status chunk_status; + uint64_t chunk_id; + + assert(trace_chunk); + chunk_status = lttng_trace_chunk_get_id(trace_chunk, + &chunk_id); + assert(chunk_status == LTTNG_TRACE_CHUNK_STATUS_OK); + /* From 2.11 to ...*/ ret = relayd_add_stream_2_11(rsock, channel_name, pathname, - tracefile_size, tracefile_count); + tracefile_size, tracefile_count, + chunk_id); } if (ret) { @@ -1088,14 +1110,15 @@ error: } int relayd_rotate_stream(struct lttcomm_relayd_sock *rsock, uint64_t stream_id, - const char *new_pathname, uint64_t new_chunk_id, - uint64_t seq_num) + uint64_t new_chunk_id, uint64_t seq_num) { int ret; struct lttcomm_relayd_rotate_stream *msg = NULL; struct lttcomm_relayd_generic_reply reply; size_t len; int msg_len; + /* FIXME */ + char *new_pathname = NULL; /* Code flow error. Safety net. */ assert(rsock); @@ -1164,176 +1187,3 @@ error: free(msg); return ret; } - -int relayd_rotate_rename(struct lttcomm_relayd_sock *rsock, - const char *old_path, const char *new_path) -{ - int ret; - struct lttcomm_relayd_rotate_rename *msg = NULL; - struct lttcomm_relayd_generic_reply reply; - size_t old_path_length, new_path_length; - size_t msg_length; - - /* Code flow error. Safety net. */ - assert(rsock); - - DBG("Relayd rename chunk %s to %s", old_path, new_path); - - /* The two paths are sent with a '\0' delimiter between them. */ - old_path_length = strlen(old_path) + 1; - new_path_length = strlen(new_path) + 1; - - msg_length = sizeof(*msg) + old_path_length + new_path_length; - msg = zmalloc(msg_length); - if (!msg) { - PERROR("zmalloc rotate-rename command message"); - ret = -1; - goto error; - } - - assert(old_path_length <= UINT32_MAX); - msg->old_path_length = htobe32(old_path_length); - - assert(new_path_length <= UINT32_MAX); - msg->new_path_length = htobe32(new_path_length); - - strcpy(msg->paths, old_path); - strcpy(msg->paths + old_path_length, new_path); - - /* Send command */ - ret = send_command(rsock, RELAYD_ROTATE_RENAME, (const void *) msg, - msg_length, 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: - free(msg); - return ret; -} - -int relayd_rotate_pending(struct lttcomm_relayd_sock *rsock, uint64_t chunk_id) -{ - int ret; - struct lttcomm_relayd_rotate_pending msg; - struct lttcomm_relayd_rotate_pending_reply reply; - - /* Code flow error. Safety net. */ - assert(rsock); - - DBG("Querying relayd for rotate pending with chunk_id %" PRIu64, - chunk_id); - - memset(&msg, 0, sizeof(msg)); - msg.chunk_id = htobe64(chunk_id); - - /* Send command */ - ret = send_command(rsock, RELAYD_ROTATE_PENDING, (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.generic.ret_code = be32toh(reply.generic.ret_code); - - /* Return session id or negative ret code. */ - if (reply.generic.ret_code != LTTNG_OK) { - ret = -reply.generic.ret_code; - ERR("Relayd rotate pending replied with error %d", ret); - goto error; - } else { - /* No error, just rotate pending state */ - if (reply.is_pending == 0 || reply.is_pending == 1) { - ret = reply.is_pending; - DBG("Relayd rotate pending command completed successfully with result \"%s\"", - ret ? "rotation pending" : "rotation NOT pending"); - } else { - ret = -LTTNG_ERR_UNK; - } - } - -error: - return ret; -} - -int relayd_mkdir(struct lttcomm_relayd_sock *rsock, const char *path) -{ - int ret; - struct lttcomm_relayd_mkdir *msg; - struct lttcomm_relayd_generic_reply reply; - size_t len; - - /* Code flow error. Safety net. */ - assert(rsock); - - DBG("Relayd mkdir path %s", path); - - len = strlen(path) + 1; - msg = zmalloc(sizeof(msg->length) + len); - if (!msg) { - PERROR("Alloc mkdir msg"); - ret = -1; - goto error; - } - msg->length = htobe32((uint32_t) len); - - if (lttng_strncpy(msg->path, path, len)) { - ret = -1; - goto error; - } - - /* Send command */ - ret = send_command(rsock, RELAYD_MKDIR, (void *) msg, - sizeof(msg->length) + len, 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 mkdir replied error %d", reply.ret_code); - } else { - /* Success */ - ret = 0; - } - - DBG("Relayd mkdir completed successfully"); - -error: - free(msg); - return ret; -}