case LTTNG_ROTATE_SESSION:
case LTTNG_ROTATION_GET_INFO:
case LTTNG_SESSION_GET_CURRENT_OUTPUT:
+ case LTTNG_ROTATION_SET_SCHEDULE:
need_domain = 0;
break;
default:
}
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;
}
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;
+ }
+
+ ret = LTTNG_OK;
+ break;
+ }
default:
ret = LTTNG_ERR_UND;
break;