X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Frelayd%2Frelayd.c;h=ccb23c065ca7aaeb8037fc30a42016fd7c9c9f3b;hp=a4c8a9261c29a9e58fc96e3023a68d8da8c44d68;hb=a4baae1b0463bc4ce65c2a458c4a941e7fabc594;hpb=d3e2ba59faddb31870e2ce29b6a881f7ad5ad883 diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index a4c8a9261..ccb23c065 100644 --- a/src/common/relayd/relayd.c +++ b/src/common/relayd/relayd.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include "relayd.h" @@ -122,7 +122,7 @@ error: */ static int relayd_create_session_2_4(struct lttcomm_relayd_sock *rsock, uint64_t *session_id, char *session_name, char *hostname, - int session_live_timer) + int session_live_timer, unsigned int snapshot) { int ret; struct lttcomm_relayd_create_session_2_4 msg; @@ -130,6 +130,7 @@ static int relayd_create_session_2_4(struct lttcomm_relayd_sock *rsock, strncpy(msg.session_name, session_name, sizeof(msg.session_name)); strncpy(msg.hostname, hostname, sizeof(msg.hostname)); msg.live_timer = htobe32(session_live_timer); + msg.snapshot = htobe32(snapshot); /* Send command */ ret = send_command(rsock, RELAYD_CREATE_SESSION, &msg, sizeof(msg), 0); @@ -167,7 +168,8 @@ error: * 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) + char *session_name, char *hostname, int session_live_timer, + unsigned int snapshot) { int ret; struct lttcomm_relayd_status_session reply; @@ -182,11 +184,12 @@ int relayd_create_session(struct lttcomm_relayd_sock *rsock, uint64_t *session_i case 2: case 3: ret = relayd_create_session_2_1(rsock, session_id); + break; case 4: default: - ret = relayd_create_session_2_4(rsock, session_id, - session_name, hostname, - session_live_timer); + ret = relayd_create_session_2_4(rsock, session_id, session_name, + hostname, session_live_timer, snapshot); + break; } if (ret < 0) { @@ -290,6 +293,59 @@ error: return ret; } +/* + * Inform the relay that all the streams for the current channel has been sent. + * + * On success return 0 else return ret_code negative value. + */ +int relayd_streams_sent(struct lttcomm_relayd_sock *rsock) +{ + int ret; + struct lttcomm_relayd_generic_reply reply; + + /* Code flow error. Safety net. */ + assert(rsock); + + DBG("Relayd sending streams sent."); + + /* This feature was introduced in 2.4, ignore it for earlier versions. */ + if (rsock->minor < 4) { + ret = 0; + goto end; + } + + /* Send command */ + ret = send_command(rsock, RELAYD_STREAMS_SENT, NULL, 0, 0); + if (ret < 0) { + goto error; + } + + /* Waiting for reply */ + ret = recv_reply(rsock, (void *) &reply, sizeof(reply)); + if (ret < 0) { + goto error; + } + + /* Back to host bytes order. */ + reply.ret_code = be32toh(reply.ret_code); + + /* Return session id or negative ret code. */ + if (reply.ret_code != LTTNG_OK) { + ret = -1; + ERR("Relayd streams sent replied error %d", reply.ret_code); + goto error; + } else { + /* Success */ + ret = 0; + } + + DBG("Relayd streams sent success"); + +error: +end: + return ret; +} + /* * Check version numbers on the relayd. * If major versions are compatible, we assign minor_to_use to the @@ -688,7 +744,7 @@ error: int relayd_end_data_pending(struct lttcomm_relayd_sock *rsock, uint64_t id, unsigned int *is_data_inflight) { - int ret; + int ret, recv_ret; struct lttcomm_relayd_end_data_pending msg; struct lttcomm_relayd_generic_reply reply; @@ -711,15 +767,15 @@ int relayd_end_data_pending(struct lttcomm_relayd_sock *rsock, uint64_t id, goto error; } - reply.ret_code = be32toh(reply.ret_code); - if (reply.ret_code < 0) { - ret = reply.ret_code; + recv_ret = be32toh(reply.ret_code); + if (recv_ret < 0) { + ret = recv_ret; goto error; } - *is_data_inflight = reply.ret_code; + *is_data_inflight = recv_ret; - DBG("Relayd end data pending is data inflight: %d", reply.ret_code); + DBG("Relayd end data pending is data inflight: %d", recv_ret); return 0; @@ -731,7 +787,7 @@ error: * Send index to the relayd. */ int relayd_send_index(struct lttcomm_relayd_sock *rsock, - struct lttng_packet_index *index, uint64_t relay_stream_id, + struct ctf_packet_index *index, uint64_t relay_stream_id, uint64_t net_seq_num) { int ret;