X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-relayd%2Ftracefile-array.h;h=04d9123d03fc3caa9a3257dd654a11e45d7a94ba;hp=9158f4fe40c3c16bd5446ea811cc44cef379b966;hb=78118e3bdace1208479db18df6553ab9c4400426;hpb=3c3c793599c40378d96b2fa135c748352c775606 diff --git a/src/bin/lttng-relayd/tracefile-array.h b/src/bin/lttng-relayd/tracefile-array.h index 9158f4fe4..04d9123d0 100644 --- a/src/bin/lttng-relayd/tracefile-array.h +++ b/src/bin/lttng-relayd/tracefile-array.h @@ -29,15 +29,30 @@ struct tracefile { uint64_t seq_tail; /* Oldest seqcount. Inclusive. */ }; +enum tracefile_rotate_type { + TRACEFILE_ROTATE_READ, + TRACEFILE_ROTATE_WRITE, +}; + /* * Represents an array of trace files in a stream. + * head is the most recent file/trace packet. + * tail is the oldest file/trace packet. + * + * There are two heads: a "read" head and a "write" head. The "write" head is + * the position of the newest data file. The "read" head position is only moved + * forward when the index is received. + * + * The viewer uses the "read" head position as upper bound, which + * ensures it never attempts to open a non-existing index file. */ struct tracefile_array { struct tracefile *tf; size_t count; /* Current head/tail files. */ - uint64_t file_head; + uint64_t file_head_read; + uint64_t file_head_write; uint64_t file_tail; /* Overall head/tail seq for the entire array. Inclusive. */ @@ -48,10 +63,10 @@ struct tracefile_array { struct tracefile_array *tracefile_array_create(size_t count); void tracefile_array_destroy(struct tracefile_array *tfa); -void tracefile_array_file_rotate(struct tracefile_array *tfa); +void tracefile_array_file_rotate(struct tracefile_array *tfa, enum tracefile_rotate_type type); void tracefile_array_commit_seq(struct tracefile_array *tfa); -uint64_t tracefile_array_get_file_index_head(struct tracefile_array *tfa); +uint64_t tracefile_array_get_read_file_index_head(struct tracefile_array *tfa); /* May return -1ULL in the case where we have not received any indexes yet. */ uint64_t tracefile_array_get_seq_head(struct tracefile_array *tfa);