Hi
Just one comments inline.
-Angus
On Wed, May 11, 2011 at 05:35:44PM +0200, Jan Friesse wrote:
> Information about processes using cpg are now stored in objdb.
> Each process info is object stored in cpg object, with nodeid,
> pid and group name keys.
> ---
> services/cpg.c | 124
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 124 insertions(+), 0 deletions(-)
>
> diff --git a/services/cpg.c b/services/cpg.c
> index ec509e0..a40fb49 100644
> --- a/services/cpg.c
> +++ b/services/cpg.c
> @@ -177,6 +177,7 @@ struct process_info {
> uint32_t pid;
> mar_cpg_name_t group;
> struct list_head list; /* on the group_info members list */
> + hdb_handle_t objdb_object_handle;
> };
> DECLARE_LIST_INIT(process_info_list_head);
>
> @@ -580,6 +581,127 @@ static int notify_lib_totem_membership (
> return CPG_OK;
> }
>
> +static int object_find_or_create (
> + hdb_handle_t parent_object_handle,
> + hdb_handle_t *object_handle,
> + const void *object_name,
> + size_t object_name_len)
> +{
> + hdb_handle_t obj_finder;
> + hdb_handle_t obj;
> + int ret = -1;
> +
> + api->object_find_create (
> + parent_object_handle,
> + object_name,
> + object_name_len,
> + &obj_finder);
> +
> + if (api->object_find_next (obj_finder, &obj) == 0) {
> + /* found it */
> + *object_handle = obj;
> + ret = 0;
> + } else {
> + ret = api->object_create (parent_object_handle,
> + object_handle,
> + object_name, object_name_len);
> + }
> +
> + api->object_find_destroy (obj_finder);
> +
> + return ret;
> +}
> +
> +static int update_confdb_info_add_process(
> + struct process_info *pi)
> +{
> + hdb_handle_t cpg_handle;
> + hdb_handle_t pi_handle;
> + int ret;
> +
> + ret = object_find_or_create (OBJECT_PARENT_HANDLE, &cpg_handle, "cpg",
> strlen ("cpg"));
I think this should be under runtime/services/cpg
> + if (ret != 0) {
> + goto error_exit;
> + }
> +
> + ret = api->object_create (cpg_handle, &pi_handle, "process", strlen
> ("process"));
> + if (ret != 0) {
> + goto error_exit;
> + }
> +
> + ret = api->object_key_create_typed (pi_handle,
> + "nodeid", &pi->nodeid,
> + sizeof(pi->nodeid),
> + OBJDB_VALUETYPE_UINT32);
> + if (ret != 0) {
> + goto error_destroy_exit;
> + }
> +
> + ret = api->object_key_create_typed (pi_handle,
> + "pid", &pi->pid,
> + sizeof(pi->pid),
> + OBJDB_VALUETYPE_UINT32);
> + if (ret != 0) {
> + goto error_destroy_exit;
> + }
> +
> + ret = api->object_key_create (pi_handle,
> + "group", sizeof("group"),
> + &pi->group.value, pi->group.length);
> + if (ret != 0) {
> + goto error_destroy_exit;
> + }
> +
> + pi->objdb_object_handle = pi_handle;
> +
> + return 0;
> +
> +error_destroy_exit:
> + api->object_destroy (pi->objdb_object_handle);
> +error_exit:
> + log_printf(LOGSYS_LEVEL_WARNING, "can't update cpg membership
> information in objdb\n");
> + return ret;
> +}
> +
> +static int update_confdb_info_remove_process(
> + struct process_info *pi)
> +{
> + api->object_destroy (pi->objdb_object_handle);
> +
> + return 0;
> +}
> +
> +static int update_confdb_info(
> + const mar_cpg_name_t *group_name,
> + int joined_list_entries,
> + mar_cpg_address_t *joined_list,
> + int left_list_entries,
> + mar_cpg_address_t *left_list)
> +{
> + struct list_head *iter;
> + int i;
> +
> + for (iter = process_info_list_head.next; iter !=
> &process_info_list_head; iter = iter->next) {
> + struct process_info *pi = list_entry (iter, struct
> process_info, list);
> +
> + for (i = 0; i < joined_list_entries; i++) {
> + if (joined_list[i].nodeid == pi->nodeid &&
> joined_list[i].pid == pi->pid &&
> + mar_name_compare (&pi->group, group_name) == 0) {
> + update_confdb_info_add_process (pi);
> + }
> + }
> +
> + for (i = 0; i < left_list_entries; i++) {
> + if (left_list[i].nodeid == pi->nodeid &&
> left_list[i].pid == pi->pid &&
> + mar_name_compare (&pi->group, group_name) == 0) {
> + update_confdb_info_remove_process (pi);
> + }
> + }
> + }
> +
> + return (CPG_OK);
> +}
> +
> static int notify_lib_joinlist(
> const mar_cpg_name_t *group_name,
> void *conn,
> @@ -708,6 +830,8 @@ static int notify_lib_joinlist(
> }
> }
>
> + update_confdb_info(group_name, joined_list_entries, joined_list,
> left_list_entries, left_list);
> +
> return CPG_OK;
> }
>
> --
> 1.6.2.5
>
> _______________________________________________
> Openais mailing list
> [email protected]
> https://lists.linux-foundation.org/mailman/listinfo/openais
_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais