Add notification session rotation hooks
[lttng-tools.git] / src / bin / lttng-sessiond / cmd.c
index ba7dd3d4dd9452b92328547f7f09e24a7e389cf1..7f05655ecd7371a60c6fc3b5b9e1bd9eef768f84 100644 (file)
@@ -38,6 +38,7 @@
 #include <lttng/channel.h>
 #include <lttng/channel-internal.h>
 #include <lttng/rotate-internal.h>
+#include <lttng/location-internal.h>
 #include <common/string-utils/string-utils.h>
 
 #include "channel.h"
@@ -4560,6 +4561,14 @@ int cmd_rotate_session(struct ltt_session *session,
        session->current_archive_id++;
        session->rotate_pending = true;
        session->rotation_state = LTTNG_ROTATION_STATE_ONGOING;
+       ret = notification_thread_command_session_rotation_ongoing(
+                       notification_thread_handle,
+                       session->name, session->uid, session->gid,
+                       session->current_archive_id);
+       if (ret != LTTNG_OK) {
+               ERR("Failed to notify notification thread that a session rotation is ongoing for session %s",
+                               session->name);
+       }
 
        /*
         * Create the path name for the next chunk.
@@ -4672,13 +4681,29 @@ int cmd_rotate_session(struct ltt_session *session,
                 * session_list locks.
                 */
                if (!session->kernel_session && !ust_active) {
+                       struct lttng_trace_archive_location *location;
+
+                       session->rotate_pending = false;
+                       session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED;
                        ret = rename_complete_chunk(session, now);
                        if (ret < 0) {
                                ERR("Failed to rename completed rotation chunk");
                                goto end;
                        }
-                       session->rotate_pending = false;
-                       session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED;
+
+                       /* Ownership of location is transferred. */
+                       location = session_get_trace_archive_location(session);
+                       ret = notification_thread_command_session_rotation_completed(
+                                       notification_thread_handle,
+                                       session->name,
+                                       session->uid,
+                                       session->gid,
+                                       session->current_archive_id,
+                                       location);
+                       if (ret != LTTNG_OK) {
+                               ERR("Failed to notify notification thread that rotation is complete for session %s",
+                                               session->name);
+                       }
                }
        }
 
@@ -4903,6 +4928,7 @@ int cmd_rotation_set_schedule(struct ltt_session *session,
                        if (ret) {
                                ERR("Failed to disable session rotation timer in ROTATION_SET_SCHEDULE command");
                                ret = LTTNG_ERR_UNK;
+                               goto end;
                        }
                }
                break;
This page took 0.025522 seconds and 5 git commands to generate.