Size-based rotation
[lttng-tools.git] / src / bin / lttng-sessiond / rotate.h
CommitLineData
db66e574
JD
1/*
2 * Copyright (C) 2017 - Julien Desfossez <jdesfossez@efficios.com>
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License, version 2 only, as
6 * published by the Free Software Foundation.
7 *
8 * This program is distributed in the hope that it will be useful, but WITHOUT
9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
11 * more details.
12 *
13 * You should have received a copy of the GNU General Public License along with
14 * this program; if not, write to the Free Software Foundation, Inc., 51
15 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16 */
17
18#ifndef ROTATE_H
19#define ROTATE_H
20
90936dcf 21#include <lttng/notification/channel-internal.h>
db66e574
JD
22#include "rotation-thread.h"
23
24/*
25 * Key in channel_pending_rotate_ht to map a channel to a
26 * struct rotation_channel_info.
27 */
28struct rotation_channel_key {
29 uint64_t key;
30 enum lttng_domain_type domain;
31};
32
33/*
34 * Added in channel_pending_rotate_ht everytime we start the rotation of a
35 * channel. The consumer notifies the rotation thread with the channel_key to
36 * inform a rotation is complete, we use that information to lookup the related
37 * session from channel_pending_rotate_ht.
38 */
39struct rotation_channel_info {
40 uint64_t session_id;
41 struct rotation_channel_key channel_key;
42 struct cds_lfht_node rotate_channels_ht_node;
43};
44
90936dcf 45
db66e574 46extern struct cds_lfht *channel_pending_rotate_ht;
90936dcf 47extern struct lttng_notification_channel *rotate_notification_channel;
db66e574
JD
48
49unsigned long hash_channel_key(struct rotation_channel_key *key);
50
51/* session lock must be held by this function's caller. */
52int rename_complete_chunk(struct ltt_session *session, time_t ts);
53
d88744a4
JD
54int relay_rotate_pending(struct ltt_session *session, uint64_t chunk_id);
55
5c408ad8
JD
56/*
57 * When we start the rotation of a channel, we add its information in
58 * channel_pending_rotate_ht. This is called in the context of
59 * thread_manage_client when the client asks for a rotation, in the context
60 * of the sessiond_timer thread when periodic rotations are enabled and from
61 * the rotation_thread when size-based rotations are enabled.
62 */
63int rotate_add_channel_pending(uint64_t key, enum lttng_domain_type domain,
64 struct ltt_session *session);
65
90936dcf
JD
66/*
67 * Subscribe/unsubscribe the notification_channel from the rotation_thread to
68 * session usage notifications to perform size-based rotations.
69 */
70int subscribe_session_consumed_size_rotation(struct ltt_session *session,
71 uint64_t size,
72 struct notification_thread_handle *notification_thread_handle);
73int unsubscribe_session_consumed_size_rotation(struct ltt_session *session,
74 struct notification_thread_handle *notification_thread_handle);
75
db66e574 76#endif /* ROTATE_H */
This page took 0.027282 seconds and 5 git commands to generate.