X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Frelayd%2Frelayd.c;h=ccb23c065ca7aaeb8037fc30a42016fd7c9c9f3b;hp=1f427e0e25cb8e1d2e502760294918be10a5172d;hb=a4baae1b0463bc4ce65c2a458c4a941e7fabc594;hpb=7d2f74525fbda4dcc744f33ea26c911545b5df13 diff --git a/src/common/relayd/relayd.c b/src/common/relayd/relayd.c index 1f427e0e2..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" @@ -184,10 +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, snapshot); + break; } if (ret < 0) { @@ -291,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 @@ -689,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; @@ -712,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; @@ -732,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;