Fix: make indexes HT global for real
authorDavid Goulet <dgoulet@efficios.com>
Fri, 27 Sep 2013 18:54:03 +0000 (14:54 -0400)
committerDavid Goulet <dgoulet@efficios.com>
Fri, 27 Sep 2013 22:28:10 +0000 (18:28 -0400)
Signed-off-by: David Goulet <dgoulet@efficios.com>
src/bin/lttng-relayd/index.c
src/bin/lttng-relayd/index.h
src/bin/lttng-relayd/lttng-relayd.h
src/bin/lttng-relayd/main.c

index 97918cd0635225832221bea9800b089c3a1a5a1c..8cacdd2f01eb8807d9a5d5de239277b311776256 100644 (file)
@@ -22,6 +22,7 @@
 #include <common/common.h>
 #include <common/utils.h>
 
+#include "lttng-relayd.h"
 #include "index.h"
 
 /*
@@ -76,23 +77,20 @@ error:
  *
  * Return index object or else NULL on error.
  */
-struct relay_index *relay_index_find(uint64_t stream_id,
-               uint64_t net_seq_num, struct lttng_ht *ht)
+struct relay_index *relay_index_find(uint64_t stream_id, uint64_t net_seq_num)
 {
        struct lttng_ht_node_two_u64 *node;
        struct lttng_ht_iter iter;
        struct lttng_ht_two_u64 key;
        struct relay_index *index = NULL;
 
-       assert(ht);
-
        DBG3("Finding index for stream id %" PRIu64 " and seq_num %" PRIu64,
                        stream_id, net_seq_num);
 
        key.key1 = stream_id;
        key.key2 = net_seq_num;
 
-       lttng_ht_lookup(ht, (void *)(&key), &iter);
+       lttng_ht_lookup(indexes_ht, (void *)(&key), &iter);
        node = lttng_ht_iter_get_node_two_u64(&iter);
        if (node == NULL) {
                goto end;
@@ -111,21 +109,18 @@ end:
  *
  * RCU read side lock MUST be acquired.
  */
-void relay_index_add(struct relay_index *index, struct lttng_ht *ht,
-               struct relay_index **_index)
+void relay_index_add(struct relay_index *index, struct relay_index **_index)
 {
        struct cds_lfht_node *node_ptr;
 
        assert(index);
-       assert(ht);
-       assert(_index);
 
        DBG2("Adding relay index with stream id %" PRIu64 " and seqnum %" PRIu64,
                        index->key.key1, index->key.key2);
 
-       node_ptr = cds_lfht_add_unique(ht->ht,
-                       ht->hash_fct((void *) &index->index_n.key, lttng_ht_seed),
-                       ht->match_fct, (void *) &index->index_n.key,
+       node_ptr = cds_lfht_add_unique(indexes_ht->ht,
+                       indexes_ht->hash_fct((void *) &index->index_n.key, lttng_ht_seed),
+                       indexes_ht->match_fct, (void *) &index->index_n.key,
                        &index->index_n.node);
        if (node_ptr != &index->index_n.node) {
                *_index = caa_container_of(node_ptr, struct relay_index, index_n.node);
@@ -140,7 +135,7 @@ void relay_index_add(struct relay_index *index, struct lttng_ht *ht,
  *
  * Return 0 on success else a negative value.
  */
-int relay_index_write(int fd, struct relay_index *index, struct lttng_ht *ht)
+int relay_index_write(int fd, struct relay_index *index)
 {
        int ret;
        struct lttng_ht_iter iter;
@@ -150,7 +145,7 @@ int relay_index_write(int fd, struct relay_index *index, struct lttng_ht *ht)
 
        /* Delete index from hash table. */
        iter.iter.node = &index->index_n.node;
-       ret = lttng_ht_del(ht, &iter);
+       ret = lttng_ht_del(indexes_ht, &iter);
        assert(!ret);
        call_rcu(&index->rcu_node, deferred_free_relay_index);
 
@@ -182,7 +177,7 @@ void relay_index_free_safe(struct relay_index *index)
  *
  * RCU read side lock MUST be acquired.
  */
-void relay_index_delete(struct relay_index *index, struct lttng_ht *ht)
+void relay_index_delete(struct relay_index *index)
 {
        int ret;
        struct lttng_ht_iter iter;
@@ -192,25 +187,22 @@ void relay_index_delete(struct relay_index *index, struct lttng_ht *ht)
 
        /* Delete index from hash table. */
        iter.iter.node = &index->index_n.node;
-       ret = lttng_ht_del(ht, &iter);
+       ret = lttng_ht_del(indexes_ht, &iter);
        assert(!ret);
 }
 
 /*
  * Destroy every relay index with the given stream id as part of the key.
  */
-void relay_index_destroy_by_stream_id(uint64_t stream_id, struct lttng_ht *ht)
+void relay_index_destroy_by_stream_id(uint64_t stream_id)
 {
        struct lttng_ht_iter iter;
        struct relay_index *index;
 
-       assert(ht);
-       assert(ht->ht);
-
        rcu_read_lock();
-       cds_lfht_for_each_entry(ht->ht, &iter.iter, index, index_n.node) {
+       cds_lfht_for_each_entry(indexes_ht->ht, &iter.iter, index, index_n.node) {
                if (index->key.key1 == stream_id) {
-                       relay_index_delete(index, ht);
+                       relay_index_delete(index);
                        relay_index_free_safe(index);
                }
        }
index fc184e97dc74d4844b6741a90af8d8fe0cb805eb..3ca7263e388b9c904092de56b51b1868fcc92510 100644 (file)
@@ -47,14 +47,12 @@ struct relay_index {
 
 struct relay_index *relay_index_create(uint64_t stream_id,
                uint64_t net_seq_num);
-struct relay_index *relay_index_find(uint64_t stream_id,
-               uint64_t net_seq_num, struct lttng_ht *ht);
-void relay_index_add(struct relay_index *index, struct lttng_ht *ht,
-               struct relay_index **_index);
-int relay_index_write(int fd, struct relay_index *index, struct lttng_ht *ht);
+struct relay_index *relay_index_find(uint64_t stream_id, uint64_t net_seq_num);
+void relay_index_add(struct relay_index *index, struct relay_index **_index);
+int relay_index_write(int fd, struct relay_index *index);
 void relay_index_free(struct relay_index *index);
 void relay_index_free_safe(struct relay_index *index);
-void relay_index_delete(struct relay_index *index, struct lttng_ht *ht);
-void relay_index_destroy_by_stream_id(uint64_t stream_id, struct lttng_ht *ht);
+void relay_index_delete(struct relay_index *index);
+void relay_index_destroy_by_stream_id(uint64_t stream_id);
 
 #endif /* _RELAY_INDEX_H */
index 3b7c74604abaa59b97187c5183d7565f7fa198cf..da23240341a52b5f99dd1eaa0628b9be77b047eb 100644 (file)
@@ -166,6 +166,7 @@ extern char *opt_output_path;
 
 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);
 
index f12b1a335b6bd0eaf99a49bfa3bc234149fc833d..e426469a30ebe4125b70a0bec537af3d1c8a553c 100644 (file)
@@ -101,9 +101,6 @@ static struct relay_cmd_queue relay_cmd_queue;
 static char *data_buffer;
 static unsigned int data_buffer_size;
 
-/* Global hash table that stores relay index object. */
-static struct lttng_ht *indexes_ht;
-
 /* We need those values for the file/dir creation. */
 static uid_t relayd_uid;
 static gid_t relayd_gid;
@@ -114,6 +111,9 @@ struct lttng_ht *relay_streams_ht;
 /* Global relay viewer stream hash table. */
 struct lttng_ht *viewer_streams_ht;
 
+/* Global hash table that stores relay index object. */
+struct lttng_ht *indexes_ht;
+
 /*
  * usage function on stderr
  */
@@ -842,7 +842,7 @@ void relay_delete_session(struct relay_command *cmd,
                        destroy_stream(stream, cmd->ctf_traces_ht);
                }
                /* Cleanup index of that stream. */
-               relay_index_destroy_by_stream_id(stream->stream_handle, indexes_ht);
+               relay_index_destroy_by_stream_id(stream->stream_handle);
        }
 
        /* Make this session not visible anymore. */
@@ -1652,7 +1652,7 @@ end_no_session:
  */
 static
 int relay_recv_index(struct lttcomm_relayd_hdr *recv_hdr,
-               struct relay_command *cmd, struct lttng_ht *indexes_ht)
+               struct relay_command *cmd)
 {
        int ret, send_ret, index_created = 0;
        struct relay_session *session = cmd->session;
@@ -1663,7 +1663,6 @@ int relay_recv_index(struct lttcomm_relayd_hdr *recv_hdr,
        uint64_t net_seq_num;
 
        assert(cmd);
-       assert(indexes_ht);
 
        DBG("Relay receiving index");
 
@@ -1711,7 +1710,7 @@ int relay_recv_index(struct lttcomm_relayd_hdr *recv_hdr,
                stream->beacon_ts_end = -1ULL;
        }
 
-       index = relay_index_find(stream->stream_handle, net_seq_num, indexes_ht);
+       index = relay_index_find(stream->stream_handle, net_seq_num);
        if (!index) {
                /* A successful creation will add the object to the HT. */
                index = relay_index_create(stream->stream_handle, net_seq_num);
@@ -1729,7 +1728,7 @@ int relay_recv_index(struct lttcomm_relayd_hdr *recv_hdr,
                 * already exist, destroy back the index created, set the data in this
                 * object and write it on disk.
                 */
-               relay_index_add(index, indexes_ht, &wr_index);
+               relay_index_add(index, &wr_index);
                if (wr_index) {
                        copy_index_control_data(wr_index, &index_info);
                        free(index);
@@ -1752,7 +1751,7 @@ int relay_recv_index(struct lttcomm_relayd_hdr *recv_hdr,
                        stream->index_fd = ret;
                }
 
-               ret = relay_index_write(wr_index->fd, wr_index, indexes_ht);
+               ret = relay_index_write(wr_index->fd, wr_index);
                if (ret < 0) {
                        goto end_rcu_unlock;
                }
@@ -1818,7 +1817,7 @@ int relay_process_control(struct lttcomm_relayd_hdr *recv_hdr,
                ret = relay_end_data_pending(recv_hdr, cmd);
                break;
        case RELAYD_SEND_INDEX:
-               ret = relay_recv_index(recv_hdr, cmd, indexes_ht);
+               ret = relay_recv_index(recv_hdr, cmd);
                break;
        case RELAYD_UPDATE_SYNC_INFO:
        default:
@@ -1836,8 +1835,7 @@ end:
  * relay_process_data: Process the data received on the data socket
  */
 static
-int relay_process_data(struct relay_command *cmd,
-               struct lttng_ht *indexes_ht)
+int relay_process_data(struct relay_command *cmd)
 {
        int ret = 0, rotate_index = 0, index_created = 0;
        struct relay_stream *stream;
@@ -1924,7 +1922,7 @@ int relay_process_data(struct relay_command *cmd,
         * exists, the control thread already received the data for it thus we need
         * to write it on disk.
         */
-       index = relay_index_find(stream_id, net_seq_num, indexes_ht);
+       index = relay_index_find(stream_id, net_seq_num);
        if (!index) {
                /* A successful creation will add the object to the HT. */
                index = relay_index_create(stream->stream_handle, net_seq_num);
@@ -1954,7 +1952,7 @@ int relay_process_data(struct relay_command *cmd,
                 * Try to add the relay index object to the hash table. If an object
                 * already exist, destroy back the index created and set the data.
                 */
-               relay_index_add(index, indexes_ht, &wr_index);
+               relay_index_add(index, &wr_index);
                if (wr_index) {
                        /* Copy back data from the created index. */
                        wr_index->fd = index->fd;
@@ -1980,7 +1978,7 @@ int relay_process_data(struct relay_command *cmd,
                        stream->index_fd = ret;
                }
 
-               ret = relay_index_write(wr_index->fd, wr_index, indexes_ht);
+               ret = relay_index_write(wr_index->fd, wr_index);
                if (ret < 0) {
                        goto end_rcu_unlock;
                }
@@ -2311,7 +2309,7 @@ restart:
                                                continue;
                                        }
 
-                                       ret = relay_process_data(relay_connection, indexes_ht);
+                                       ret = relay_process_data(relay_connection);
                                        /* connection closed */
                                        if (ret < 0) {
                                                relay_cleanup_poll_connection(&events, pollfd);
@@ -2355,7 +2353,7 @@ error_poll_create:
        {
                struct relay_index *index;
                cds_lfht_for_each_entry(indexes_ht->ht, &iter.iter, index, index_n.node) {
-                       relay_index_delete(index, indexes_ht);
+                       relay_index_delete(index);
                }
                lttng_ht_destroy(indexes_ht);
        }
This page took 0.031057 seconds and 4 git commands to generate.