X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Fstream.h;h=e385032cb71f98d4994dfad241e915f61e0cb28a;hb=627e69536f1f82c12abae866bf647237a415f910;hp=7e2b1334ec9c54e3e3ca3c5229b4e664c31c06b8;hpb=7591bab11eceedc6a0d1e02fd6f85592267a63b5;p=lttng-tools.git diff --git a/src/bin/lttng-relayd/stream.h b/src/bin/lttng-relayd/stream.h index 7e2b1334e..e385032cb 100644 --- a/src/bin/lttng-relayd/stream.h +++ b/src/bin/lttng-relayd/stream.h @@ -29,6 +29,7 @@ #include "session.h" #include "stream-fd.h" +#include "tracefile-array.h" /* * Represents a stream in the relay @@ -36,12 +37,6 @@ struct relay_stream { uint64_t stream_handle; - /* - * reflock used to synchronize the closing of this stream. - * stream reflock nests inside viewer stream reflock. - * stream reflock nests inside index reflock. - */ - pthread_mutex_t reflock; struct urcu_ref ref; /* Back reference to trace. Protected by refcount on trace object. */ struct ctf_trace *trace; @@ -57,8 +52,8 @@ struct relay_stream { /* FD on which to write the stream data. */ struct stream_fd *stream_fd; - /* FD on which to write the index data. */ - struct stream_fd *index_fd; + /* index file on which to write the index data. */ + struct lttng_index_file *index_file; char *path_name; char *channel_name; @@ -67,17 +62,25 @@ struct relay_stream { uint64_t tracefile_size; uint64_t tracefile_size_current; uint64_t tracefile_count; - uint64_t current_tracefile_id; - uint64_t current_tracefile_seq; /* Free-running counter. */ - uint64_t oldest_tracefile_seq; /* Free-running counter. */ - - /* To inform the viewer up to where it can go back in time. */ - uint64_t oldest_tracefile_id; + /* + * Counts the number of received indexes. The "tag" associated + * with an index is taken before incrementing this seqcount. + * Therefore, the sequence tag associated with the last index + * received is always index_received_seqcount - 1. + */ + uint64_t index_received_seqcount; - uint64_t total_index_received; + /* + * Tracefile array is an index of the stream trace files, + * indexed by position. It allows keeping track of the oldest + * available indexes when overwriting trace files in tracefile + * rotation. + */ + struct tracefile_array *tfa; - bool closed; /* Stream is closed. */ + bool closed; /* Stream is closed. */ + bool close_requested; /* Close command has been received. */ /* * Counts number of indexes in indexes_ht. Redundant info. @@ -124,6 +127,7 @@ struct relay_stream { * Node of stream within global stream hash table. */ struct lttng_ht_node_u64 node; + bool in_stream_ht; /* is stream in stream hash table. */ struct rcu_head rcu_node; /* For call_rcu teardown. */ }; @@ -135,7 +139,7 @@ struct relay_stream *stream_create(struct ctf_trace *trace, struct relay_stream *stream_get_by_id(uint64_t stream_id); bool stream_get(struct relay_stream *stream); void stream_put(struct relay_stream *stream); -void stream_close(struct relay_stream *stream); +void try_stream_close(struct relay_stream *stream); void stream_publish(struct relay_stream *stream); void print_relay_streams(void);