Rotate timer
[lttng-tools.git] / src / bin / lttng-sessiond / rotation-thread.c
index 9e599e48999c90808f4861414c13f49286861925..ecccc7bb01ab00bbbba7dd71675b88a7f4b08e3d 100644 (file)
@@ -435,6 +435,48 @@ end:
        return ret;
 }
 
+/*
+ * Process the rotate_timer, called with session lock held.
+ */
+static
+int rotate_timer(struct ltt_session *session)
+{
+       int ret;
+
+       /*
+        * Complete _at most_ one scheduled rotation on a stopped session.
+        */
+       if (!session->active && session->rotate_timer_enabled &&
+                       session->rotated_after_last_stop) {
+               ret = 0;
+               goto end;
+       }
+
+       /* Ignore this timer if a rotation is already in progress. */
+       if (session->rotate_pending || session->rotate_pending_relay) {
+               ret = 0;
+               goto end;
+       }
+
+       DBG("[rotation-thread] Rotate timer on session %s", session->name);
+
+       ret = cmd_rotate_session(session, NULL);
+       if (ret == -LTTNG_ERR_ROTATION_PENDING) {
+               DBG("Scheduled rotation aborted since a rotation is already in progress");
+               ret = 0;
+               goto end;
+       } else if (ret != LTTNG_OK) {
+               ERR("[rotation-thread] Automatic time-triggered rotation failed with error code %i", ret);
+               ret = -1;
+               goto end;
+       }
+
+       ret = 0;
+
+end:
+       return ret;
+}
+
 static
 int handle_rotate_timer_pipe(uint32_t revents,
                struct rotation_thread_handle *handle,
@@ -504,6 +546,8 @@ int handle_rotate_timer_pipe(uint32_t revents,
 
                if (timer_data->signal == LTTNG_SESSIOND_SIG_ROTATE_PENDING) {
                        ret = rotate_pending_relay_timer(session);
+               } else if (timer_data->signal == LTTNG_SESSIOND_SIG_ROTATE_TIMER) {
+                       ret = rotate_timer(session);
                } else {
                        ERR("Unknown signal in rotate timer %d", timer_data->signal);
                        ret = -1;
This page took 0.023892 seconds and 5 git commands to generate.