{
int ret;
- session->rotate_count++;
+ session->current_archive_id++;
/*
* The currently active tracing path is now the folder we
goto end;
}
end:
- session->rotate_count--;
+ session->current_archive_id--;
return ret;
}
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) {
/*
}
/* 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. */
}
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;
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;
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;
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;
}
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;
}
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:
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;
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) {
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;
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;
goto end;
}
- if (session->rotate_count == 1) {
+ if (session->current_archive_id == 1) {
char start_time[21];
timeinfo = localtime(&session->last_chunk_start_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);
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);
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;
* 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
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;
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;
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;
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;