Fix: big relayd cleanup and refactor
[lttng-tools.git] / src / bin / lttng-relayd / lttng-relayd.h
index da23240341a52b5f99dd1eaa0628b9be77b047eb..f0c1abfee492356fb7052643a99e0ccd870dcdd0 100644 (file)
 #include <limits.h>
 #include <urcu.h>
 #include <urcu/wfqueue.h>
+#include <urcu/list.h>
 
 #include <common/hashtable/hashtable.h>
-#include <common/index/lttng-index.h>
+#include <common/index/ctf-index.h>
 
 #include "ctf-trace.h"
+#include "session.h"
 
 /*
  * Queue used to enqueue relay requests
@@ -44,102 +46,6 @@ enum connection_type {
        RELAY_VIEWER_NOTIFICATION   = 4,
 };
 
-/*
- * Represents a session for the relay point of view
- */
-struct relay_session {
-       /*
-        * This session id is used to identify a set of stream to a tracing session
-        * but also make sure we have a unique session id associated with a session
-        * daemon which can provide multiple data source.
-        */
-       uint64_t id;
-       struct lttcomm_sock *sock;
-       char session_name[NAME_MAX];
-       char hostname[HOST_NAME_MAX];
-       uint32_t live_timer;
-       struct lttng_ht_node_ulong session_n;
-       struct rcu_head rcu_node;
-       uint32_t viewer_attached;
-       uint32_t stream_count;
-};
-
-/*
- * Represents a stream in the relay
- */
-struct relay_stream {
-       uint64_t stream_handle;
-       uint64_t prev_seq;      /* previous data sequence number encountered */
-       struct lttng_ht_node_ulong stream_n;
-       struct relay_session *session;
-       struct rcu_head rcu_node;
-       int fd;
-       /* FD on which to write the index data. */
-       int index_fd;
-       /* FD on which to read the index data for the viewer. */
-       int read_index_fd;
-
-       char *path_name;
-       char *channel_name;
-       /* on-disk circular buffer of tracefiles */
-       uint64_t tracefile_size;
-       uint64_t tracefile_size_current;
-       uint64_t tracefile_count;
-       uint64_t tracefile_count_current;
-
-       uint64_t total_index_received;
-       struct relay_viewer_stream *viewer_stream;
-       uint64_t last_net_seq_num;
-       struct lttng_ht_node_str ctf_trace_node;
-
-       /*
-        * To protect from concurrent read/update between the
-        * streaming-side and the viewer-side.
-        * This lock must be held, we reading/updating the
-        * ctf_trace pointer.
-        */
-       pthread_mutex_t lock;
-
-       struct ctf_trace *ctf_trace;
-       /*
-        * If the stream is inactive, this field is updated with the live beacon
-        * timestamp end, when it is active, this field == -1ULL.
-        */
-       uint64_t beacon_ts_end;
-
-       /* Information telling us when to close the stream  */
-       unsigned int close_flag:1;
-       /* Indicate if the stream was initialized for a data pending command. */
-       unsigned int data_pending_check_done:1;
-       unsigned int metadata_flag:1;
-};
-
-/*
- * Shadow copy of the relay_stream structure for the viewer side.  The only
- * fields updated by the writer (streaming side) after allocation are :
- * total_index_received and close_flag. Everything else is updated by the
- * reader (viewer side).
- */
-struct relay_viewer_stream {
-       uint64_t stream_handle;
-       uint64_t session_id;
-       int read_fd;
-       int index_read_fd;
-       char *path_name;
-       char *channel_name;
-       uint64_t last_sent_index;
-       uint64_t total_index_received;
-       uint64_t tracefile_size;
-       uint64_t tracefile_size_current;
-       uint64_t tracefile_count;
-       uint64_t tracefile_count_current;
-       struct lttng_ht_node_u64 stream_n;
-       struct rcu_head rcu_node;
-       struct ctf_trace *ctf_trace;
-       /* Information telling us if the stream is a metadata stream. */
-       unsigned int metadata_flag:1;
-};
-
 /*
  * Internal structure to map a socket with the corresponding session.
  * A hashtable indexed on the socket FD is used for the lookups.
@@ -151,11 +57,12 @@ struct relay_command {
        struct lttng_ht_node_ulong sock_n;
        struct rcu_head rcu_node;
        enum connection_type type;
-       unsigned int version_check_done:1;
        /* protocol version to use for this session */
        uint32_t major;
        uint32_t minor;
-       struct lttng_ht *ctf_traces_ht; /* indexed by path name */
+       uint64_t session_id;
+       struct cds_list_head recv_head;
+       unsigned int version_check_done:1;
 };
 
 struct relay_local_data {
@@ -164,10 +71,20 @@ struct relay_local_data {
 
 extern char *opt_output_path;
 
+/*
+ * Contains stream indexed by ID. This is important since many commands lookup
+ * streams only by ID thus also keeping them in this hash table makes the
+ * search O(1) instead of iterating over the ctf_traces_ht of the session.
+ */
 extern struct lttng_ht *relay_streams_ht;
+
 extern struct lttng_ht *viewer_streams_ht;
 extern struct lttng_ht *indexes_ht;
 
-struct relay_stream *relay_stream_find_by_id(uint64_t stream_id);
+extern const char *tracing_group_name;
+
+extern const char * const config_section_name;
+
+void lttng_relay_notify_ready(void);
 
 #endif /* LTTNG_RELAYD_H */
This page took 0.027348 seconds and 5 git commands to generate.