(repost) This adds a list of nodes into the objdb so
people can see the current members of the cluster.

-Angus

Signed-off-by: Angus Salkeld <[email protected]>
---
 exec/main.c |   80 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 80 insertions(+), 0 deletions(-)

diff --git a/exec/main.c b/exec/main.c
index 392cc3f..0b7982a 100644
--- a/exec/main.c
+++ b/exec/main.c
@@ -131,6 +131,8 @@ struct sched_param global_sched_param;
 
 static hdb_handle_t object_connection_handle;
 
+static hdb_handle_t object_memb_handle;
+
 static corosync_timer_handle_t corosync_stats_timer_handle;
 
 static pthread_t corosync_exit_thread;
@@ -337,6 +339,77 @@ static int corosync_sync_v2_callbacks_retrieve (
 
 static struct memb_ring_id corosync_ring_id;
 
+static void member_object_joined (unsigned int nodeid)
+{
+       hdb_handle_t object_find_handle;
+       hdb_handle_t object_node_handle;
+       char * nodeint_str;
+       char nodeid_str[64];
+       unsigned int key_incr_dummy;
+
+       snprintf (nodeid_str, 64, "%d", nodeid);
+
+       objdb->object_find_create (
+               object_memb_handle,
+               nodeid_str,
+               strlen (nodeid_str),
+               &object_find_handle);
+
+       if (objdb->object_find_next (object_find_handle,
+                       &object_node_handle) == 0) {
+
+               objdb->object_key_increment (object_node_handle,
+                       "join_count", strlen("flap"),
+                       &key_incr_dummy);
+
+               objdb->object_key_replace (object_node_handle,
+                       "status", strlen("status"),
+                       "joined", strlen("joined"));
+       } else {
+               nodeint_str = (char*)api->totem_ifaces_print (nodeid);
+               objdb->object_create (object_memb_handle,
+                       &object_node_handle,
+                       nodeid_str, strlen (nodeid_str));
+
+               objdb->object_key_create_typed (object_node_handle,
+                       "ip",
+                       nodeint_str, strlen(nodeint_str),
+                       OBJDB_VALUETYPE_STRING);
+               key_incr_dummy = 1;
+               objdb->object_key_create_typed (object_node_handle,
+                       "join_count",
+                       &key_incr_dummy, sizeof (key_incr_dummy),
+                       OBJDB_VALUETYPE_UINT32);
+               objdb->object_key_create_typed (object_node_handle,
+                       "status",
+                       "joined", strlen("joined"),
+                       OBJDB_VALUETYPE_STRING);
+       }
+}
+
+static void member_object_left (unsigned int nodeid)
+{
+       hdb_handle_t object_find_handle;
+       hdb_handle_t object_node_handle;
+       char nodeid_str[64];
+
+       snprintf (nodeid_str, 64, "%u", nodeid);
+
+       objdb->object_find_create (
+               object_memb_handle,
+               nodeid_str,
+               strlen (nodeid_str),
+               &object_find_handle);
+
+       if (objdb->object_find_next (object_find_handle,
+                       &object_node_handle) == 0) {
+
+               objdb->object_key_replace (object_node_handle,
+                       "status", strlen("status"),
+                       "left", strlen("left"));
+       }
+}
+
 static void confchg_fn (
        enum totem_configuration_type configuration_type,
        const unsigned int *member_list, size_t member_list_entries,
@@ -357,10 +430,12 @@ static void confchg_fn (
        for (i = 0; i < left_list_entries; i++) {
                log_printf (LOGSYS_LEVEL_INFO,
                        "Member left: %s\n", api->totem_ifaces_print 
(left_list[i]));
+               member_object_left (left_list[i]);
        }
        for (i = 0; i < joined_list_entries; i++) {
                log_printf (LOGSYS_LEVEL_INFO,
                        "Member joined: %s\n", api->totem_ifaces_print 
(joined_list[i]));
+               member_object_joined (joined_list[i]);
        }
        /*
         * Call configuration change for all services
@@ -629,6 +704,11 @@ static void corosync_totem_stats_init (void)
                        &stats->mrp->srp->hdr.handle,
                        "srp", strlen ("srp"));
 
+               /* Members object */
+               objdb->object_create (stats->mrp->srp->hdr.handle,
+                       &object_memb_handle,
+                       "members", strlen ("members"));
+
                objdb->object_key_create_typed (stats->mrp->srp->hdr.handle,
                        "orf_token_tx", &stats->mrp->srp->orf_token_tx,
                        sizeof (stats->mrp->srp->orf_token_tx), 
OBJDB_VALUETYPE_UINT64);
-- 
1.6.6.1


_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to