X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fsessiond-trace-chunks.hpp;fp=src%2Fbin%2Flttng-relayd%2Fsessiond-trace-chunks.hpp;h=2e494292ac00e2d4f797427fc52a86c20cd9ca57;hp=0000000000000000000000000000000000000000;hb=c9e313bc594f40a86eed237dce222c0fc99c957f;hpb=4878de5c7deb512bbdac4fdfc498907efa06fb7c diff --git a/src/bin/lttng-relayd/sessiond-trace-chunks.hpp b/src/bin/lttng-relayd/sessiond-trace-chunks.hpp new file mode 100644 index 000000000..2e494292a --- /dev/null +++ b/src/bin/lttng-relayd/sessiond-trace-chunks.hpp @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 Jérémie Galarneau + * + * SPDX-License-Identifier: GPL-2.0-only + * + */ + +#ifndef SESSIOND_TRACE_CHUNK_REGISTRY_H +#define SESSIOND_TRACE_CHUNK_REGISTRY_H + +#include +#include +#include + +/* + * A session trace chunk registry allows the relay daemon to share trace chunks + * used by different "relay sessions" when they were created for the same + * user-visible session daemon session. Tracing multiple domains (e.g. ust and + * kernel) results in per-domain relay sessions being created. + * + * Sharing trace chunks, and their output directory more specifically, is + * essential to properly implement session rotations. The sharing of output + * directory handles allows directory renames to be performed once and without + * races that would stem from from multiple renames. + */ +struct sessiond_trace_chunk_registry; + +struct sessiond_trace_chunk_registry * +sessiond_trace_chunk_registry_create(void); + +void sessiond_trace_chunk_registry_destroy( + struct sessiond_trace_chunk_registry *sessiond_registry); + +int sessiond_trace_chunk_registry_session_created( + struct sessiond_trace_chunk_registry *sessiond_registry, + const lttng_uuid sessiond_uuid); + +int sessiond_trace_chunk_registry_session_destroyed( + struct sessiond_trace_chunk_registry *sessiond_registry, + const lttng_uuid sessiond_uuid); + +struct lttng_trace_chunk *sessiond_trace_chunk_registry_publish_chunk( + struct sessiond_trace_chunk_registry *sessiond_registry, + const lttng_uuid sessiond_uuid, uint64_t session_id, + struct lttng_trace_chunk *chunk); + +struct lttng_trace_chunk * +sessiond_trace_chunk_registry_get_anonymous_chunk( + struct sessiond_trace_chunk_registry *sessiond_registry, + const lttng_uuid sessiond_uuid, + uint64_t session_id); + +struct lttng_trace_chunk * +sessiond_trace_chunk_registry_get_chunk( + struct sessiond_trace_chunk_registry *sessiond_registry, + const lttng_uuid sessiond_uuid, + uint64_t session_id, uint64_t chunk_id); + +int sessiond_trace_chunk_registry_chunk_exists( + struct sessiond_trace_chunk_registry *sessiond_registry, + const lttng_uuid sessiond_uuid, + uint64_t session_id, uint64_t chunk_id, bool *chunk_exists); + +#endif /* SESSIOND_TRACE_CHUNK_REGISTRY_H */