X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Fmain.c;h=5e4148fb6e707fc653dfa3cea4f0c883c8bd0f7f;hb=e8360425c2fd0f8cfef1e678af5adfde7ae0a68e;hp=1d9ca91c5fc3b751d061fbcb3f543fcd52626f6b;hpb=5c408ad8ef08a226c018702aca969536f36ac4e5;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/main.c b/src/bin/lttng-sessiond/main.c index 1d9ca91c5..5e4148fb6 100644 --- a/src/bin/lttng-sessiond/main.c +++ b/src/bin/lttng-sessiond/main.c @@ -2964,8 +2964,9 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, case LTTNG_REGISTER_TRIGGER: case LTTNG_UNREGISTER_TRIGGER: case LTTNG_ROTATE_SESSION: - case LTTNG_ROTATE_PENDING: - case LTTNG_ROTATE_GET_CURRENT_PATH: + case LTTNG_ROTATION_GET_INFO: + case LTTNG_SESSION_GET_CURRENT_OUTPUT: + case LTTNG_ROTATION_SET_SCHEDULE: need_domain = 0; break; default: @@ -3009,7 +3010,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int sock, case LTTNG_LIST_TRACKER_PIDS: case LTTNG_DATA_PENDING: case LTTNG_ROTATE_SESSION: - case LTTNG_ROTATE_PENDING: + case LTTNG_ROTATION_GET_INFO: break; default: /* Setup lttng message with no payload */ @@ -3701,6 +3702,20 @@ error_add_context: } case LTTNG_START_TRACE: { + /* + * On the first start, if we have a kernel session and we have + * enabled time or size-based rotations, we have to make sure + * the kernel tracer supports it. + */ + if (!cmd_ctx->session->has_been_started && \ + cmd_ctx->session->kernel_session && \ + (cmd_ctx->session->rotate_timer_period || \ + cmd_ctx->session->rotate_size) && \ + !check_rotate_compatible()) { + DBG("Kernel tracer version is not compatible with the rotation feature"); + ret = LTTNG_ERR_ROTATION_WRONG_VERSION; + goto error; + } ret = cmd_start_trace(cmd_ctx->session); break; } @@ -4104,6 +4119,7 @@ error_add_context: DBG("Client rotate session \"%s\"", cmd_ctx->session->name); + memset(&rotate_return, 0, sizeof(rotate_return)); if (cmd_ctx->session->kernel_session && !check_rotate_compatible()) { DBG("Kernel tracer version is not compatible with the rotation feature"); ret = LTTNG_ERR_ROTATION_WRONG_VERSION; @@ -4126,20 +4142,20 @@ error_add_context: ret = LTTNG_OK; break; } - case LTTNG_ROTATE_PENDING: + case LTTNG_ROTATION_GET_INFO: { - struct lttng_rotate_pending_return *pending_return = NULL; + struct lttng_rotation_get_info_return get_info_return; - ret = cmd_rotate_pending(cmd_ctx->session, &pending_return, - cmd_ctx->lsm->u.rotate_pending.rotate_id); + memset(&get_info_return, 0, sizeof(get_info_return)); + ret = cmd_rotate_get_info(cmd_ctx->session, &get_info_return, + cmd_ctx->lsm->u.get_rotation_info.rotation_id); if (ret < 0) { ret = -ret; goto error; } - ret = setup_lttng_msg_no_cmd_header(cmd_ctx, pending_return, - sizeof(struct lttng_rotate_session_handle)); - free(pending_return); + ret = setup_lttng_msg_no_cmd_header(cmd_ctx, &get_info_return, + sizeof(get_info_return)); if (ret < 0) { ret = -ret; goto error; @@ -4148,19 +4164,39 @@ error_add_context: ret = LTTNG_OK; break; } - case LTTNG_ROTATE_GET_CURRENT_PATH: + case LTTNG_SESSION_GET_CURRENT_OUTPUT: { - struct lttng_rotate_get_current_path *get_return = NULL; + struct lttng_session_get_current_output_return output_return; + + memset(&output_return, 0, sizeof(output_return)); + ret = cmd_session_get_current_output(cmd_ctx->session, + &output_return); + if (ret < 0) { + ret = -ret; + goto error; + } - ret = cmd_rotate_get_current_path(cmd_ctx->session, &get_return); + ret = setup_lttng_msg_no_cmd_header(cmd_ctx, &output_return, + sizeof(output_return)); if (ret < 0) { ret = -ret; goto error; } - ret = setup_lttng_msg_no_cmd_header(cmd_ctx, get_return, - sizeof(struct lttng_rotate_get_current_path)); - free(get_return); + ret = LTTNG_OK; + break; + } + case LTTNG_ROTATION_SET_SCHEDULE: + { + if (cmd_ctx->session->kernel_session && !check_rotate_compatible()) { + DBG("Kernel tracer version does not support session rotations"); + ret = LTTNG_ERR_ROTATION_WRONG_VERSION; + goto error; + } + + ret = cmd_rotation_set_schedule(cmd_ctx->session, + cmd_ctx->lsm->u.rotate_setup.timer_us, + cmd_ctx->lsm->u.rotate_setup.size); if (ret < 0) { ret = -ret; goto error;