X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Frotation-thread.c;h=01a963c25d45c026119a2300d78780ac82772736;hp=24ab0c8033fd715c829f036c67a2c3e891923c5d;hb=753f4df1c2a5090c772aee207bafe7839d288b2a;hpb=8aca663cd2a1cc1680b18a349f7d8b9bef8ef490 diff --git a/src/bin/lttng-sessiond/rotation-thread.c b/src/bin/lttng-sessiond/rotation-thread.c index 24ab0c803..01a963c25 100644 --- a/src/bin/lttng-sessiond/rotation-thread.c +++ b/src/bin/lttng-sessiond/rotation-thread.c @@ -42,6 +42,7 @@ #include "cmd.h" #include "session.h" #include "sessiond-timer.h" +#include "notification-thread-commands.h" #include #include @@ -409,7 +410,23 @@ int handle_channel_rotation_pipe(int fd, uint32_t revents, goto end_unlock_session; } } else { + struct lttng_trace_archive_location *location; + 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); + } + } DBG("Rotation completed for session %s", session->name); } @@ -442,6 +459,8 @@ int rotate_pending_relay_timer(struct ltt_session *session) goto end; } if (ret == 0) { + struct lttng_trace_archive_location *location; + DBG("[rotation-thread] Rotation completed on the relay for " "session %" PRIu64, session->id); /* @@ -450,6 +469,21 @@ int rotate_pending_relay_timer(struct ltt_session *session) */ session->rotate_pending_relay = false; session->rotation_state = LTTNG_ROTATION_STATE_COMPLETED; + + 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); + } } else if (ret == 1) { DBG("[rotation-thread] Rotation still pending on the relay for " "session %" PRIu64, session->id); @@ -657,7 +691,6 @@ int handle_condition( ret = cmd_rotate_session(session, NULL); if (ret == -LTTNG_ERR_ROTATION_PENDING) { DBG("Rotate already pending, subscribe to the next threshold value"); - ret = 0; } else if (ret != LTTNG_OK) { ERR("[rotation-thread] Failed to rotate on size notification with error: %s", lttng_strerror(ret));