LTTNG_CONSUMER_STREAMS_SENT,
LTTNG_CONSUMER_DISCARDED_EVENTS,
LTTNG_CONSUMER_LOST_PACKETS,
+ LTTNG_CONSUMER_CLEAR_QUIESCENT_CHANNEL,
+ LTTNG_CONSUMER_SET_CHANNEL_MONITOR_PIPE,
+ LTTNG_CONSUMER_ROTATE_RENAME,
+ LTTNG_CONSUMER_MKDIR,
};
/* State of each fd in consumer */
/* Metadata cache is metadata channel */
struct consumer_metadata_cache *metadata_cache;
+
/* For UST metadata periodical flush */
int switch_timer_enabled;
timer_t switch_timer;
timer_t live_timer;
int live_timer_error;
+ /* For channel monitoring timer. */
+ int monitor_timer_enabled;
+ timer_t monitor_timer;
+
/* On-disk circular buffer */
uint64_t tracefile_size;
uint64_t tracefile_count;
uint64_t discarded_events;
/* Total number of missed packets due to overwriting (overwrite). */
uint64_t lost_packets;
+
+ bool streams_sent_to_relayd;
};
/*
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.
/* 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;
/*
* 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;
/* Copy of the sequence number of the last packet extracted. */
uint64_t last_sequence_number;
/*
- * FD of the index file for this stream.
+ * Index file object of the index file for this stream.
*/
- int index_fd;
+ struct lttng_index_file *index_file;
/*
* Local pipe to extract data when using splice.
/* 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;
};
/*
int consumer_should_quit[2];
/* Metadata poll thread pipe. Transfer metadata stream to it */
struct lttng_pipe *consumer_metadata_pipe;
+ /*
+ * Pipe used by the channel monitoring timers to provide state samples
+ * to the session daemon (write-only).
+ */
+ int channel_monitor_pipe;
};
/*
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 int consumer_quit;
+
+/*
+ * Set to nonzero when the consumer is exiting. Updated by signal
+ * handler and thread exit, read by threads.
+ */
+extern int consumer_quit;
+
+/* Flag used to temporarily pause data consumption from testpoints. */
+extern int data_consumption_paused;
+
/*
* Init consumer data structures.
*/
*/
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
ssize_t lttng_consumer_read_subbuffer(struct lttng_consumer_stream *stream,
struct lttng_consumer_local_data *ctx);
int lttng_consumer_on_recv_stream(struct lttng_consumer_stream *stream);
-int consumer_add_relayd_socket(uint64_t net_seq_idx, int sock_type,
+void consumer_add_relayd_socket(uint64_t net_seq_idx, int sock_type,
struct lttng_consumer_local_data *ctx, int sock,
struct pollfd *consumer_sockpoll, struct lttcomm_relayd_sock *relayd_sock,
uint64_t sessiond_id, uint64_t relayd_session_id);
unsigned long consumer_get_consume_start_pos(unsigned long consumed_pos,
unsigned long produced_pos, uint64_t nb_packets_per_stream,
uint64_t max_sb_size);
-int consumer_add_data_stream(struct lttng_consumer_stream *stream);
+void consumer_add_data_stream(struct lttng_consumer_stream *stream);
void consumer_del_stream_for_data(struct lttng_consumer_stream *stream);
-int consumer_add_metadata_stream(struct lttng_consumer_stream *stream);
+void 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);
+int lttng_consumer_rotate_rename(const char *current_path, const char *new_path,
+ uid_t uid, gid_t gid, uint64_t relayd_id);
+int lttng_consumer_mkdir(const char *path, uid_t uid, gid_t gid,
+ uint64_t relayd_id);
#endif /* LIB_CONSUMER_H */