X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Findex.h;h=11c0c5d0c1d82388eac3cfb7cbba2b51649ddb03;hp=3ca7263e388b9c904092de56b51b1868fcc92510;hb=8bb66c3cd60938352927ee865759433387324250;hpb=0a6518b0685cb9e07cf156a4c882dc6ec40db35a diff --git a/src/bin/lttng-relayd/index.h b/src/bin/lttng-relayd/index.h index 3ca7263e3..11c0c5d0c 100644 --- a/src/bin/lttng-relayd/index.h +++ b/src/bin/lttng-relayd/index.h @@ -1,6 +1,10 @@ +#ifndef _RELAY_INDEX_H +#define _RELAY_INDEX_H + /* * Copyright (C) 2013 - Julien Desfossez * David Goulet + * 2015 - Mathieu Desnoyers * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License, version 2 only, as @@ -16,43 +20,64 @@ * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ -#ifndef _RELAY_INDEX_H -#define _RELAY_INDEX_H - #include #include #include #include +struct relay_stream; +struct relay_connection; +struct lttcomm_relayd_index; + struct relay_index { - /* FD on which to write the index data. */ - int fd; /* - * When destroying this object, this fd is checked and if valid, close it - * so this is basically a lazy close of the previous fd corresponding to - * the same stream id. This is used for the rotate file feature. + * index lock nests inside stream lock. */ - int to_close_fd; + struct urcu_ref ref; /* Reference from getters. */ + struct relay_stream *stream; /* Back ref to stream */ + + pthread_mutex_t lock; + /* + * index file on which to write the index data. May differ from + * stream->index_file due to tracefile rotation. + */ + struct lttng_index_file *index_file; /* Index packet data. This is the data that is written on disk. */ - struct lttng_packet_index index_data; + struct ctf_packet_index index_data; + /* Data + padding size of this packet, filled by the data thread. */ + uint64_t total_size; + + bool has_index_data; + bool flushed; + bool in_hash_table; - /* key1 = stream_id, key2 = net_seq_num */ - struct lttng_ht_two_u64 key; - struct lttng_ht_node_two_u64 index_n; - struct rcu_head rcu_node; - pthread_mutex_t mutex; + /* + * Node within indexes_ht that corresponds to this struct + * relay_index. Indexed by net_seq_num, which is unique for this + * index across the stream. + */ + struct lttng_ht_node_u64 index_n; + struct rcu_head rcu_node; /* For call_rcu teardown. */ }; -struct relay_index *relay_index_create(uint64_t stream_id, +struct relay_index *relay_index_get_by_id_or_create(struct relay_stream *stream, uint64_t net_seq_num); -struct relay_index *relay_index_find(uint64_t stream_id, uint64_t net_seq_num); -void relay_index_add(struct relay_index *index, struct relay_index **_index); -int relay_index_write(int fd, struct relay_index *index); -void relay_index_free(struct relay_index *index); -void relay_index_free_safe(struct relay_index *index); -void relay_index_delete(struct relay_index *index); -void relay_index_destroy_by_stream_id(uint64_t stream_id); +void relay_index_put(struct relay_index *index); +int relay_index_set_file(struct relay_index *index, + struct lttng_index_file *index_file, + uint64_t data_offset); +int relay_index_set_data(struct relay_index *index, + const struct ctf_packet_index *data); +int relay_index_try_flush(struct relay_index *index); + +void relay_index_close_all(struct relay_stream *stream); +void relay_index_close_partial_fd(struct relay_stream *stream); +uint64_t relay_index_find_last(struct relay_stream *stream); +int relay_index_switch_all_files(struct relay_stream *stream); +int relay_index_set_control_data(struct relay_index *index, + const struct lttcomm_relayd_index *data, + unsigned int minor_version); #endif /* _RELAY_INDEX_H */