From ad9f5c17782ec9d5fe735bcb0f3d7b52199f8feb Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Wed, 2 May 2018 15:27:37 -0400 Subject: [PATCH] Rename rotate_count to current_archive_id MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The ltt_session's rotate count will no longer be used only to count the number of rotations. It will be used to tag streams with a "trace archive chunk id" that indicates the epoch of their creation. Signed-off-by: Jérémie Galarneau --- src/bin/lttng-sessiond/cmd.c | 30 ++++++++++++------------ src/bin/lttng-sessiond/kernel.c | 4 ++-- src/bin/lttng-sessiond/rotate.c | 6 ++--- src/bin/lttng-sessiond/rotation-thread.c | 2 +- src/bin/lttng-sessiond/session.h | 16 +++++++++++-- src/bin/lttng-sessiond/ust-app.c | 8 +++---- 6 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/bin/lttng-sessiond/cmd.c b/src/bin/lttng-sessiond/cmd.c index 2e2ae6006..56c7633a0 100644 --- a/src/bin/lttng-sessiond/cmd.c +++ b/src/bin/lttng-sessiond/cmd.c @@ -2613,7 +2613,7 @@ int rename_active_chunk(struct ltt_session *session) { int ret; - session->rotate_count++; + session->current_archive_id++; /* * The currently active tracing path is now the folder we @@ -2646,7 +2646,7 @@ int rename_active_chunk(struct ltt_session *session) goto end; } end: - session->rotate_count--; + session->current_archive_id--; return ret; } @@ -2682,7 +2682,7 @@ int cmd_stop_trace(struct ltt_session *session) sessiond_rotate_timer_stop(session); } - if (session->rotate_count > 0 && !session->rotate_pending) { + if (session->current_archive_id > 0 && !session->rotate_pending) { ret = rename_active_chunk(session); if (ret) { /* @@ -4443,7 +4443,7 @@ int cmd_rotate_session(struct ltt_session *session, } /* Special case for the first rotation. */ - if (session->rotate_count == 0) { + if (session->current_archive_id == 0) { const char *base_path = NULL; /* Either one of the two sessions is enough to get the root path. */ @@ -4479,7 +4479,7 @@ int cmd_rotate_session(struct ltt_session *session, } DBG("Current rotate path %s", session->rotation_chunk.current_rotate_path); - session->rotate_count++; + session->current_archive_id++; session->rotate_pending = true; session->rotation_state = LTTNG_ROTATION_STATE_ONGOING; @@ -4516,7 +4516,7 @@ int cmd_rotate_session(struct ltt_session *session, sizeof(session->rotation_chunk.active_tracing_path), "%s/%s-%" PRIu64, session_get_base_path(session), - datetime, session->rotate_count + 1); + datetime, session->current_archive_id + 1); if (ret < 0 || ret == sizeof(session->rotation_chunk.active_tracing_path)) { ERR("Failed to format active kernel tracing path in rotate session command"); ret = -LTTNG_ERR_UNK; @@ -4529,7 +4529,7 @@ int cmd_rotate_session(struct ltt_session *session, ret = snprintf(session->kernel_session->consumer->chunk_path, sizeof(session->kernel_session->consumer->chunk_path), "/%s-%" PRIu64, datetime, - session->rotate_count + 1); + session->current_archive_id + 1); if (ret < 0 || ret == sizeof(session->kernel_session->consumer->chunk_path)) { ERR("Failed to format the kernel consumer's sub-directory in rotate session command"); ret = -LTTNG_ERR_UNK; @@ -4558,7 +4558,7 @@ int cmd_rotate_session(struct ltt_session *session, ret = snprintf(session->rotation_chunk.active_tracing_path, PATH_MAX, "%s/%s-%" PRIu64, session_get_base_path(session), - datetime, session->rotate_count + 1); + datetime, session->current_archive_id + 1); if (ret < 0) { ERR("Failed to format active UST tracing path in rotate session command"); ret = -LTTNG_ERR_UNK; @@ -4566,7 +4566,7 @@ int cmd_rotate_session(struct ltt_session *session, } ret = snprintf(session->ust_session->consumer->chunk_path, PATH_MAX, "/%s-%" PRIu64, datetime, - session->rotate_count + 1); + session->current_archive_id + 1); if (ret < 0) { ERR("Failed to format the UST consumer's sub-directory in rotate session command"); ret = -LTTNG_ERR_UNK; @@ -4609,11 +4609,11 @@ int cmd_rotate_session(struct ltt_session *session, } if (rotate_return) { - rotate_return->rotation_id = session->rotate_count; + rotate_return->rotation_id = session->current_archive_id; } - DBG("Cmd rotate session %s, rotate_id %" PRIu64 " sent", session->name, - session->rotate_count); + DBG("Cmd rotate session %s, current_archive_id %" PRIu64 " sent", + session->name, session->current_archive_id); ret = LTTNG_OK; end: @@ -4636,9 +4636,9 @@ int cmd_rotate_get_info(struct ltt_session *session, assert(session); DBG("Cmd rotate_get_info session %s, rotation id %" PRIu64, session->name, - session->rotate_count); + session->current_archive_id); - if (session->rotate_count != rotation_id) { + if (session->current_archive_id != rotation_id) { info_return->status = (int32_t) LTTNG_ROTATION_STATE_EXPIRED; ret = LTTNG_OK; goto end; @@ -4827,7 +4827,7 @@ int cmd_session_get_current_output(struct ltt_session *session, const char *path; if (!session->snapshot_mode) { - if (session->rotate_count == 0) { + if (session->current_archive_id == 0) { if (session->kernel_session) { path = session_get_base_path(session); } else if (session->ust_session) { diff --git a/src/bin/lttng-sessiond/kernel.c b/src/bin/lttng-sessiond/kernel.c index 2b59fe09d..19a325da1 100644 --- a/src/bin/lttng-sessiond/kernel.c +++ b/src/bin/lttng-sessiond/kernel.c @@ -1190,7 +1190,7 @@ int kernel_rotate_session(struct ltt_session *session) ksess->uid, ksess->gid, ksess->consumer, ksess->consumer->subdir, /* is_metadata_channel */ false, - session->rotate_count, + session->current_archive_id, &session->rotate_pending_relay); if (ret < 0) { ret = LTTNG_ERR_KERN_CONSUMER_FAIL; @@ -1205,7 +1205,7 @@ int kernel_rotate_session(struct ltt_session *session) ksess->uid, ksess->gid, ksess->consumer, ksess->consumer->subdir, /* is_metadata_channel */ true, - session->rotate_count, + session->current_archive_id, &session->rotate_pending_relay); if (ret < 0) { ret = LTTNG_ERR_KERN_CONSUMER_FAIL; diff --git a/src/bin/lttng-sessiond/rotate.c b/src/bin/lttng-sessiond/rotate.c index bd6dbddf9..dac0f2a1f 100644 --- a/src/bin/lttng-sessiond/rotate.c +++ b/src/bin/lttng-sessiond/rotate.c @@ -232,7 +232,7 @@ int rename_complete_chunk(struct ltt_session *session, time_t ts) goto end; } - if (session->rotate_count == 1) { + if (session->current_archive_id == 1) { char start_time[21]; timeinfo = localtime(&session->last_chunk_start_ts); @@ -258,7 +258,7 @@ int rename_complete_chunk(struct ltt_session *session, time_t ts) ret = snprintf(new_path, sizeof(new_path), "%s/%s-%s-%" PRIu64, session->rotation_chunk.current_rotate_path, start_time, - datetime, session->rotate_count); + datetime, session->current_archive_id); if (ret < 0 || ret >= sizeof(new_path)) { ERR("Failed to format new chunk path while renaming session \"%s\"'s first chunk", session->name); @@ -315,7 +315,7 @@ int rename_complete_chunk(struct ltt_session *session, time_t ts) ret = snprintf(new_path, sizeof(new_path), "%s/%s-%s-%" PRIu64, session_get_base_path(session), start_datetime, - datetime, session->rotate_count); + datetime, session->current_archive_id); if (ret < 0 || ret >= sizeof(new_path)) { ERR("Failed to format new chunk path while renaming chunk of session \"%s\"", session->name); diff --git a/src/bin/lttng-sessiond/rotation-thread.c b/src/bin/lttng-sessiond/rotation-thread.c index d39aad80b..dcae248b4 100644 --- a/src/bin/lttng-sessiond/rotation-thread.c +++ b/src/bin/lttng-sessiond/rotation-thread.c @@ -433,7 +433,7 @@ int rotate_pending_relay_timer(struct ltt_session *session) DBG("[rotation-thread] Check rotate pending on session %" PRIu64, session->id); - ret = relay_rotate_pending(session, session->rotate_count - 1); + ret = relay_rotate_pending(session, session->current_archive_id - 1); if (ret < 0) { ERR("[rotation-thread] Check relay rotate pending"); goto end; diff --git a/src/bin/lttng-sessiond/session.h b/src/bin/lttng-sessiond/session.h index b8c789081..3ace323ba 100644 --- a/src/bin/lttng-sessiond/session.h +++ b/src/bin/lttng-sessiond/session.h @@ -120,8 +120,20 @@ struct ltt_session { * Node in ltt_sessions_ht_by_id. */ struct lttng_ht_node_u64 node; - /* Number of session rotation for this session. */ - uint64_t rotate_count; + /* + * The current archive id corresponds to the number of session rotations + * that have occured for this session. The archive id + * is used to tag the "generation" of a stream. This tag allows the + * consumer and relay daemons to track when a given stream was created + * during the lifetime of a session. + * + * For instance, if a stream is created after a session rotation was + * launched, the consumer and relay daemons must not check its position + * to determine if that specific session rotation was completed. It is + * implicitly "completed" since the stream appeared _after_ the session + * rotation was initiated. + */ + uint64_t current_archive_id; /* * Rotation is pending between the time it starts until the consumer has * finished extracting the data. If the session uses a relay, data related diff --git a/src/bin/lttng-sessiond/ust-app.c b/src/bin/lttng-sessiond/ust-app.c index 6828660aa..8f0d89821 100644 --- a/src/bin/lttng-sessiond/ust-app.c +++ b/src/bin/lttng-sessiond/ust-app.c @@ -6365,7 +6365,7 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active) usess->uid, usess->gid, usess->consumer, pathname, /* is_metadata_channel */ false, - session->rotate_count, + session->current_archive_id, &session->rotate_pending_relay); if (ret < 0) { goto error; @@ -6379,7 +6379,7 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active) usess->uid, usess->gid, usess->consumer, pathname, /* is_metadata_channel */ true, - session->rotate_count, + session->current_archive_id, &session->rotate_pending_relay); if (ret < 0) { goto error; @@ -6456,7 +6456,7 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active) ua_sess->euid, ua_sess->egid, ua_sess->consumer, pathname, /* is_metadata_channel */ false, - session->rotate_count, + session->current_archive_id, &session->rotate_pending_relay); if (ret < 0) { goto error; @@ -6469,7 +6469,7 @@ int ust_app_rotate_session(struct ltt_session *session, bool *ust_active) ua_sess->euid, ua_sess->egid, ua_sess->consumer, pathname, /* is_metadata_channel */ true, - session->rotate_count, + session->current_archive_id, &session->rotate_pending_relay); if (ret < 0) { goto error; -- 2.34.1