X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-sessiond%2Frotation-thread.c;h=59b7123575eca788add644885a3282acd2719ed3;hb=e87d3c18a40fb3d3bee3dff29615636257824e29;hp=5b0267952676ccc549a95c7a3b21bab3a70d413b;hpb=82528808814c61c40b70da6309b1c38f843de8b5;p=lttng-tools.git diff --git a/src/bin/lttng-sessiond/rotation-thread.c b/src/bin/lttng-sessiond/rotation-thread.c index 5b0267952..59b712357 100644 --- a/src/bin/lttng-sessiond/rotation-thread.c +++ b/src/bin/lttng-sessiond/rotation-thread.c @@ -42,7 +42,7 @@ #include "rotate.h" #include "cmd.h" #include "session.h" -#include "sessiond-timer.h" +#include "timer.h" #include "notification-thread-commands.h" #include @@ -394,7 +394,7 @@ int check_session_rotation_pending_local_on_consumer( static int check_session_rotation_pending_local(struct ltt_session *session) { - int ret; + int ret = 0; struct consumer_socket *socket; struct cds_lfht_iter iter; bool rotation_completed = true; @@ -598,6 +598,44 @@ int check_session_rotation_pending(struct ltt_session *session, session->name); } + if (!session->active) { + /* + * A stop command was issued during the rotation, it is + * up to the rotation completion check to perform the + * renaming of the last chunk that was produced. + */ + 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("[rotation-thread] Failed to notify notification thread of completed rotation for session %s", + session->name); + } + + ret = rename_active_chunk(session); + if (ret < 0) { + ERR("[rotation-thread] Failed to rename active rotation chunk"); + goto end; + } + + /* 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("[rotation-thread] Failed to notify notification thread of completed rotation for session %s", + session->name); + } + } + ret = 0; end: if (session->rotation_state == LTTNG_ROTATION_STATE_ONGOING) { @@ -876,6 +914,9 @@ void *thread_rotation(void *data) goto end; } + rcu_register_thread(); + rcu_thread_online(); + health_register(health_sessiond, HEALTH_SESSIOND_TYPE_ROTATION); health_code_update(); @@ -945,6 +986,8 @@ error: DBG("[rotation-thread] Exit"); fini_thread_state(&thread); health_unregister(health_sessiond); + rcu_thread_offline(); + rcu_unregister_thread(); end: return NULL; }