trace-chunk: Introduce chunk "path", relayd session "ongoing_rotation", sessiond...
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index 7af855eacb14e13b204730cdd2848f888c3bc352..db07082dbc4e0e50620d4b38d9bf27c97ac8b787 100644 (file)
@@ -2636,6 +2636,8 @@ int cmd_start_trace(struct ltt_session *session)
        struct ltt_ust_session *usess;
        const bool session_rotated_after_last_stop =
                        session->rotated_after_last_stop;
+       const bool session_cleared_after_last_stop =
+                       session->cleared_after_last_stop;
 
        assert(session);
 
@@ -2682,6 +2684,7 @@ int cmd_start_trace(struct ltt_session *session)
 
        session->active = 1;
        session->rotated_after_last_stop = false;
+       session->cleared_after_last_stop = false;
        if (session->output_traces && !session->current_trace_chunk) {
                if (!session->has_been_started) {
                        struct lttng_trace_chunk *trace_chunk;
@@ -2770,6 +2773,8 @@ error:
                /* Restore initial state on error. */
                session->rotated_after_last_stop =
                                session_rotated_after_last_stop;
+               session->cleared_after_last_stop =
+                               session_cleared_after_last_stop;
        }
        return ret;
 }
@@ -3323,9 +3328,7 @@ int cmd_destroy_session(struct ltt_session *session,
                session->rotate_size = 0;
        }
 
-       if (session->most_recent_chunk_id.is_set &&
-                       session->most_recent_chunk_id.value != 0 &&
-                       session->current_trace_chunk && session->output_traces) {
+       if (session->rotated && session->current_trace_chunk && session->output_traces) {
                /*
                 * Perform a last rotation on destruction if rotations have
                 * occurred during the session's lifetime.
@@ -4967,6 +4970,18 @@ int cmd_rotate_session(struct ltt_session *session,
                cmd_ret = LTTNG_ERR_ROTATION_MULTIPLE_AFTER_STOP;
                goto end;
        }
+
+       /*
+        * After a stop followed by a clear, disallow following rotations a they would
+        * generate empty chunks.
+        */
+       if (session->cleared_after_last_stop) {
+               DBG("Session \"%s\" was already cleared after stop, refusing rotation",
+                               session->name);
+               cmd_ret = LTTNG_ERR_ROTATION_AFTER_STOP_CLEAR;
+               goto end;
+       }
+
        if (session->active) {
                new_trace_chunk = session_create_new_trace_chunk(session, NULL,
                                NULL, NULL);
This page took 0.025612 seconds and 4 git commands to generate.