X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fcommon%2Fconsumer.h;h=0334c497e75e55dbe8585803cab995ff6c84e2a0;hp=fe1568382f3971728fb2a15fbc4b7bec348541d5;hb=8994307fa7ccf9b61cc0157f2c5d34e248c56641;hpb=3cc2f24a5cdabfbcb1022c0798f6b4845f72b498 diff --git a/src/common/consumer.h b/src/common/consumer.h index fe1568382..0334c497e 100644 --- a/src/common/consumer.h +++ b/src/common/consumer.h @@ -56,6 +56,8 @@ enum lttng_consumer_command { LTTNG_CONSUMER_ADD_RELAYD_SOCKET, /* Inform the consumer to kill a specific relayd connection */ LTTNG_CONSUMER_DESTROY_RELAYD, + /* Return to the sessiond if there is data pending for a session */ + LTTNG_CONSUMER_DATA_AVAILABLE, }; /* State of each fd in consumer */ @@ -72,6 +74,11 @@ enum lttng_consumer_type { LTTNG_CONSUMER32_UST, }; +enum consumer_endpoint_status { + CONSUMER_ENDPOINT_ACTIVE, + CONSUMER_ENDPOINT_INACTIVE, +}; + struct lttng_consumer_channel { struct lttng_ht_node_ulong node; int key; @@ -101,8 +108,10 @@ struct lttng_ust_lib_ring_buffer; * uniquely a stream. */ struct lttng_consumer_stream { - /* Hash table node for both metadata and data type */ + /* HT node used by the data_ht and metadata_ht */ struct lttng_ht_node_ulong node; + /* HT node used in consumer_data.stream_list_ht */ + struct lttng_ht_node_ulong node_session_id; struct lttng_consumer_channel *chan; /* associated channel */ /* * key is the key used by the session daemon to refer to the @@ -137,6 +146,22 @@ struct lttng_consumer_stream { uint64_t relayd_stream_id; /* Next sequence number to use for trace packet */ uint64_t next_net_seq_num; + /* + * Lock to use the stream FDs since they are used between threads. Using + * this lock with network streaming, when using the control mutex of a + * consumer_relayd_sock_pair, make sure to acquire this lock BEFORE locking + * it and releasing it AFTER the control mutex unlock. + */ + pthread_mutex_t lock; + /* Tracing session id */ + uint64_t session_id; + /* + * Indicates if the stream end point is still active or not (network + * streaming or local file system). The thread "owning" the stream is + * handling this status and can be notified of a state change through the + * consumer data appropriate pipe. + */ + enum consumer_endpoint_status endpoint_status; }; /* @@ -272,6 +297,15 @@ struct lttng_consumer_global_data { * stream has an index which associate the right relayd socket to use. */ struct lttng_ht *relayd_ht; + + /* + * This hash table contains all streams (metadata and data) indexed by + * session id. In other words, the ht is indexed by session id and each + * bucket contains the list of associated streams. + * + * This HT uses the "node_session_id" of the consumer stream. + */ + struct lttng_ht *stream_list_ht; }; /* Defined in consumer.c and coupled with explanations */ @@ -338,6 +372,7 @@ extern struct lttng_consumer_stream *consumer_allocate_stream( gid_t gid, int net_index, int metadata_flag, + uint64_t session_id, int *alloc_ret); extern void consumer_del_stream(struct lttng_consumer_stream *stream, struct lttng_ht *ht); @@ -396,5 +431,6 @@ int consumer_add_relayd_socket(int net_seq_idx, int sock_type, struct pollfd *consumer_sockpoll, struct lttcomm_sock *relayd_sock); void consumer_flag_relayd_for_destroy( struct consumer_relayd_sock_pair *relayd); +int consumer_data_available(uint64_t id); #endif /* LIB_CONSUMER_H */