#include "stream-fd.h"
#include "tracefile-array.h"
+struct relay_stream_chunk_id {
+ bool is_set;
+ uint64_t value;
+};
+
/*
* Represents a stream in the relay
*/
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.
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.
+ *
+ * This attribute is not set if the stream is created by a pre-2.11
+ * consumer.
+ */
+ struct relay_stream_chunk_id current_chunk_id;
};
struct relay_stream *stream_create(struct ctf_trace *trace,
uint64_t stream_handle, char *path_name,
char *channel_name, uint64_t tracefile_size,
- uint64_t tracefile_count);
+ uint64_t tracefile_count, const struct relay_stream_chunk_id *chunk_id);
struct relay_stream *stream_get_by_id(uint64_t stream_id);
bool stream_get(struct relay_stream *stream);