X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcommon%2Fconsumer%2Fconsumer.h;h=54b919d2885905b8ff341c97462d125239180d9b;hb=0795c812fa10f1aacf1c2793d4d882991589d59a;hp=c7ef3fb38317a795b5d9f7bc394a708619108966;hpb=c8fea79c745d42ea8143b7020ae11b4fc2da0d8a;p=lttng-tools.git diff --git a/src/common/consumer/consumer.h b/src/common/consumer/consumer.h index c7ef3fb38..54b919d28 100644 --- a/src/common/consumer/consumer.h +++ b/src/common/consumer/consumer.h @@ -58,6 +58,9 @@ enum lttng_consumer_command { LTTNG_CONSUMER_SNAPSHOT_CHANNEL, LTTNG_CONSUMER_SNAPSHOT_METADATA, LTTNG_CONSUMER_STREAMS_SENT, + LTTNG_CONSUMER_DISCARDED_EVENTS, + LTTNG_CONSUMER_LOST_PACKETS, + LTTNG_CONSUMER_CLEAR_QUIESCENT_CHANNEL, }; /* State of each fd in consumer */ @@ -211,6 +214,12 @@ struct lttng_consumer_channel { int nr_stream_fds; char root_shm_path[PATH_MAX]; char shm_path[PATH_MAX]; + /* Total number of discarded events for that channel. */ + uint64_t discarded_events; + /* Total number of missed packets due to overwriting (overwrite). */ + uint64_t lost_packets; + + bool streams_sent_to_relayd; }; /* @@ -243,6 +252,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. @@ -286,6 +314,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; /* @@ -306,9 +339,9 @@ struct lttng_consumer_stream { * Lock to use the stream FDs since they are used between threads. * * This is nested INSIDE the consumer_data lock. - * This is nested INSIDE the metadata cache lock. * This is nested INSIDE the channel lock. * This is nested INSIDE the channel timer lock. + * This is nested OUTSIDE the metadata cache lock. * This is nested OUTSIDE consumer_relayd_sock_pair lock. */ pthread_mutex_t lock; @@ -352,9 +385,16 @@ struct lttng_consumer_stream { */ uint64_t ust_metadata_pushed; /* - * FD of the index file for this stream. + * Copy of the last discarded event value to detect the overflow of + * the counter. */ - int index_fd; + uint64_t last_discarded_events; + /* Copy of the sequence number of the last packet extracted. */ + uint64_t last_sequence_number; + /* + * Index file object of the index file for this stream. + */ + struct lttng_index_file *index_file; /* * Local pipe to extract data when using splice. @@ -369,6 +409,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; }; /* @@ -378,7 +423,7 @@ struct consumer_relayd_sock_pair { /* Network sequence number. */ uint64_t net_seq_idx; /* Number of stream associated with this relayd */ - unsigned int refcount; + int refcount; /* * This flag indicates whether or not we should destroy this object. The @@ -412,6 +457,7 @@ struct consumer_relayd_sock_pair { /* Session id on both sides for the sockets. */ uint64_t relayd_session_id; uint64_t sessiond_session_id; + struct lttng_consumer_local_data *ctx; }; /* @@ -548,6 +594,12 @@ struct lttng_consumer_global_data { struct lttng_ht *stream_per_chan_id_ht; }; +/* + * Set to nonzero when the consumer is exiting. Updated by signal + * handler and thread exit, read by threads. + */ +extern volatile int consumer_quit; + /* * Init consumer data structures. */ @@ -583,12 +635,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 @@ -694,5 +740,6 @@ void consumer_del_stream_for_data(struct lttng_consumer_stream *stream); int consumer_add_metadata_stream(struct lttng_consumer_stream *stream); void consumer_del_stream_for_metadata(struct lttng_consumer_stream *stream); int consumer_create_index_file(struct lttng_consumer_stream *stream); +void lttng_consumer_cleanup_relayd(struct consumer_relayd_sock_pair *relayd); #endif /* LIB_CONSUMER_H */