good for merge On Tue, 2010-03-09 at 07:09 +1100, Angus Salkeld wrote: > (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);
_______________________________________________ Openais mailing list [email protected] https://lists.linux-foundation.org/mailman/listinfo/openais
