Rotate timer
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 5377ad8ee7ea44fced57db158ae85d9d8ddec044..924ac92316bf0c9add8a79e15b7087aa421a6c44 100644 (file)
@@ -2579,6 +2579,16 @@ int cmd_start_trace(struct ltt_session *session)
         */
        session->rotated_after_last_stop = false;
 
+       if (session->rotate_timer_period) {
+               ret = sessiond_rotate_timer_start(session,
+                               session->rotate_timer_period);
+               if (ret < 0) {
+                       ERR("Failed to enable rotate timer");
+                       ret = LTTNG_ERR_UNK;
+                       goto error;
+               }
+       }
+
        ret = LTTNG_OK;
 
 error:
@@ -2655,6 +2665,10 @@ int cmd_stop_trace(struct ltt_session *session)
                sessiond_timer_rotate_pending_stop(session);
        }
 
+       if (session->rotate_timer_enabled) {
+               sessiond_rotate_timer_stop(session);
+       }
+
        if (session->rotate_count > 0 && !session->rotate_pending) {
                ret = rename_active_chunk(session);
                if (ret) {
@@ -2957,6 +2971,10 @@ int cmd_destroy_session(struct ltt_session *session, int wpipe)
                sessiond_timer_rotate_pending_stop(session);
        }
 
+       if (session->rotate_timer_enabled) {
+               sessiond_rotate_timer_stop(session);
+       }
+
        /*
         * The rename of the current chunk is performed at stop, but if we rotated
         * the session after the previous stop command, we need to rename the
@@ -4570,7 +4588,7 @@ int cmd_rotate_session(struct ltt_session *session,
                rotate_return->rotation_id = session->rotate_count;
        }
 
-       DBG("Cmd rotate session %s, rotate_id %" PRIu64 " completed", session->name,
+       DBG("Cmd rotate session %s, rotate_id %" PRIu64 " sent", session->name,
                        session->rotate_count);
        ret = LTTNG_OK;
 
@@ -4632,6 +4650,71 @@ end:
        return ret;
 }
 
+/*
+ * Command LTTNG_ROTATION_SET_SCHEDULE from the lttng-ctl library.
+ *
+ * Configure the automatic rotation parameters.
+ * Set to -1ULL to disable them.
+ *
+ * Return 0 on success or else an LTTNG_ERR code.
+ */
+int cmd_rotation_set_schedule(struct ltt_session *session,
+               uint64_t timer_us, uint64_t size)
+{
+       int ret;
+
+       assert(session);
+
+       DBG("Cmd rotate set schedule session %s", session->name);
+
+       if (session->live_timer || session->snapshot_mode ||
+                       !session->output_traces) {
+               ret = LTTNG_ERR_ROTATION_NOT_AVAILABLE;
+               goto end;
+       }
+
+       /* Trying to override an already active timer. */
+       if (timer_us && timer_us != -1ULL && session->rotate_timer_period) {
+               ret = LTTNG_ERR_ROTATION_TIMER_SET;
+               goto end;
+       /* Trying to disable an inactive timer. */
+       } else if (timer_us == -1ULL && !session->rotate_timer_period) {
+               ret = LTTNG_ERR_ROTATION_NO_TIMER_SET;
+               goto end;
+       }
+
+       if (timer_us && !session->rotate_timer_period) {
+               if (timer_us > UINT_MAX) {
+                       ret = LTTNG_ERR_INVALID;
+                       goto end;
+               }
+
+               session->rotate_timer_period = timer_us;
+               /*
+                * Only start the timer if the session is active, otherwise
+                * it will be started when the session starts.
+                */
+               if (session->active) {
+                       ret = sessiond_rotate_timer_start(session, timer_us);
+                       if (ret) {
+                               ERR("Failed to enable rotate timer");
+                               ret = LTTNG_ERR_UNK;
+                               goto end;
+                       }
+               }
+       } else if (timer_us == -1ULL && session->rotate_timer_period > 0) {
+               sessiond_rotate_timer_stop(session);
+               session->rotate_timer_period = 0;
+       }
+
+       ret = LTTNG_OK;
+
+       goto end;
+
+end:
+       return ret;
+}
+
 /*
  * Command ROTATE_GET_CURRENT_PATH from the lttng-ctl library.
  *
This page took 0.024254 seconds and 4 git commands to generate.