X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconsumer%2Fconsumer.h;h=256ea1976016feffcf805d5d5bd0df3d8598a2bf;hb=f5dbe415fb8c3efcdcd68968b8cc8f40369b9cd9;hp=3af7db9136f3b011eef851397a2747ac86878ce2;hpb=fb83fe64f250bec7416f18891a8264450c61ead3;p=lttng-tools.git diff --git a/src/common/consumer/consumer.h b/src/common/consumer/consumer.h index 3af7db913..256ea1976 100644 --- a/src/common/consumer/consumer.h +++ b/src/common/consumer/consumer.h @@ -60,6 +60,7 @@ enum lttng_consumer_command { LTTNG_CONSUMER_STREAMS_SENT, LTTNG_CONSUMER_DISCARDED_EVENTS, LTTNG_CONSUMER_LOST_PACKETS, + LTTNG_CONSUMER_CLEAR_QUIESCENT_CHANNEL, }; /* State of each fd in consumer */ @@ -249,6 +250,25 @@ struct lttng_consumer_stream { int data_read; int hangup_flush_done; + /* + * Whether the stream is in a "complete" state (e.g. it does not have a + * partially written sub-buffer. + * + * Initialized to "false" on stream creation (first packet is empty). + * + * The various transitions of the quiescent state are: + * - On "start" tracing: set to false, since the stream is not + * "complete". + * - On "stop" tracing: if !quiescent -> flush FINAL (update + * timestamp_end), and set to true; the stream has entered a + * complete/quiescent state. + * - On "destroy" or stream/application hang-up: if !quiescent -> + * flush FINAL, and set to true. + * + * NOTE: Update and read are protected by the stream lock. + */ + bool quiescent; + /* * metadata_timer_lock protects flags waiting_on_metadata and * missed_metadata_flush. @@ -292,6 +312,11 @@ struct lttng_consumer_stream { /* Identify if the stream is the metadata */ unsigned int metadata_flag; + /* + * Last known metadata version, reset the metadata file in case + * of change. + */ + uint64_t metadata_version; /* Used when the stream is set for network streaming */ uint64_t relayd_stream_id; /* @@ -382,6 +407,11 @@ struct lttng_consumer_stream { /* Indicate if the stream still has some data to be read. */ unsigned int has_data:1; + /* + * Inform the consumer or relay to reset the metadata + * file before writing in it (regeneration). + */ + unsigned int reset_metadata_flag:1; }; /* @@ -596,12 +626,6 @@ void lttng_consumer_should_exit(struct lttng_consumer_local_data *ctx); */ void lttng_consumer_cleanup(void); -/* - * Flush pending writes to trace output disk file. - */ -void lttng_consumer_sync_trace_file(struct lttng_consumer_stream *stream, - off_t orig_offset); - /* * Poll on the should_quit pipe and the command socket return -1 on error and * should exit, 0 if data is available on the command socket