Extend the rotation API to provide network trace archive locations
[lttng-tools.git] / src / bin / lttng-relayd / stream.h
index 5030e5d4c47e03291b22102aaef1b50a093bd33a..47ae2e8f9927fdcd672a595bf3c20902fd375846 100644 (file)
 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;
@@ -58,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;
@@ -69,6 +63,11 @@ struct relay_stream {
        uint64_t tracefile_size_current;
        uint64_t tracefile_count;
 
+       /*
+        * Position in the tracefile where we have the full index also on disk.
+        */
+       uint64_t pos_after_last_complete_data_index;
+
        /*
         * Counts the number of received indexes. The "tag" associated
         * with an index is taken before incrementing this seqcount.
@@ -135,6 +134,24 @@ struct relay_stream {
        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. */
+       /*
+        * When we have written the data and index corresponding to this
+        * seq_num, rotate the tracefile (session rotation). The path_name is
+        * already up-to-date.
+        * This is set to -1ULL when no rotation is pending.
+        *
+        * Always access with stream lock held.
+        */
+       uint64_t rotate_at_seq_num;
+       /*
+        * This is the id of the chunk where we are writing to if no rotation is
+        * pending (rotate_at_seq_num == -1ULL). If a rotation is pending, this
+        * is the chunk_id we will have after the rotation. It must be updated
+        * atomically with rotate_at_seq_num.
+        *
+        * Always access with stream lock held.
+        */
+       uint64_t chunk_id;
 };
 
 struct relay_stream *stream_create(struct ctf_trace *trace,
This page took 0.029979 seconds and 4 git commands to generate.