Implement 2-step registration of userspace probe events
[lttng-tools.git] / src / bin / lttng-sessiond / rotate.h
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
21 #include <lttng/notification/channel-internal.h>
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 */
28 struct 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 */
39 struct 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
45
46 extern struct cds_lfht *channel_pending_rotate_ht;
47 extern struct lttng_notification_channel *rotate_notification_channel;
48
49 unsigned long hash_channel_key(struct rotation_channel_key *key);
50
51 /* session lock must be held by this function's caller. */
52 int rename_complete_chunk(struct ltt_session *session, time_t ts);
53
54 int relay_rotate_pending(struct ltt_session *session, uint64_t chunk_id);
55
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 */
63 int rotate_add_channel_pending(uint64_t key, enum lttng_domain_type domain,
64 struct ltt_session *session);
65
66 /*
67 * Subscribe/unsubscribe the notification_channel from the rotation_thread to
68 * session usage notifications to perform size-based rotations.
69 */
70 int subscribe_session_consumed_size_rotation(struct ltt_session *session,
71 uint64_t size,
72 struct notification_thread_handle *notification_thread_handle);
73 int unsubscribe_session_consumed_size_rotation(struct ltt_session *session,
74 struct notification_thread_handle *notification_thread_handle);
75
76 #endif /* ROTATE_H */
This page took 0.03671 seconds and 5 git commands to generate.