From fcf26e03036b6ae5a8ef762ea0b5691a4f790c92 Mon Sep 17 00:00:00 2001
From: Jan Friesse <jfriesse@redhat.com>
Date: Tue, 11 Feb 2014 15:27:31 +0100
Subject: [PATCH] cpg: Refactor mh_req_exec_cpg_procleave
Most of functionality is moved to do_proc_leave function to make it
reusable.
Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Reviewed-by: Christine Caulfield <ccaulfie@redhat.com>
---
exec/cpg.c | 67 +++++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 44 insertions(+), 23 deletions(-)
diff --git a/exec/cpg.c b/exec/cpg.c
index bc5feb6..9981440 100644
--- a/exec/cpg.c
+++ b/exec/cpg.c
@@ -313,6 +313,12 @@ static void do_proc_join(
unsigned int nodeid,
int reason);
+static void do_proc_leave(
+ const mar_cpg_name_t *name,
+ uint32_t pid,
+ unsigned int nodeid,
+ int reason);
+
static int notify_lib_totem_membership (
void *conn,
int member_list_entries,
@@ -1195,6 +1201,37 @@ static void do_proc_join(
MESSAGE_RES_CPG_CONFCHG_CALLBACK);
}
+static void do_proc_leave(
+ const mar_cpg_name_t *name,
+ uint32_t pid,
+ unsigned int nodeid,
+ int reason)
+{
+ struct process_info *pi;
+ struct list_head *iter;
+ mar_cpg_address_t notify_info;
+
+ notify_info.pid = pid;
+ notify_info.nodeid = nodeid;
+ notify_info.reason = reason;
+
+ notify_lib_joinlist(name, NULL,
+ 0, NULL,
+ 1, ¬ify_info,
+ MESSAGE_RES_CPG_CONFCHG_CALLBACK);
+
+ for (iter = process_info_list_head.next; iter != &process_info_list_head; ) {
+ pi = list_entry(iter, struct process_info, list);
+ iter = iter->next;
+
+ if (pi->pid == pid && pi->nodeid == nodeid &&
+ mar_name_compare (&pi->group, name)==0) {
+ list_del (&pi->list);
+ free (pi);
+ }
+ }
+}
+
static void message_handler_req_exec_cpg_downlist_old (
const void *message,
unsigned int nodeid)
@@ -1269,31 +1306,15 @@ static void message_handler_req_exec_cpg_procleave (
unsigned int nodeid)
{
const struct req_exec_cpg_procjoin *req_exec_cpg_procjoin = message;
- struct process_info *pi;
- struct list_head *iter;
- mar_cpg_address_t notify_info;
-
- log_printf(LOGSYS_LEVEL_DEBUG, "got procleave message from cluster node %d", nodeid);
-
- notify_info.pid = req_exec_cpg_procjoin->pid;
- notify_info.nodeid = nodeid;
- notify_info.reason = req_exec_cpg_procjoin->reason;
-
- notify_lib_joinlist(&req_exec_cpg_procjoin->group_name, NULL,
- 0, NULL,
- 1, ¬ify_info,
- MESSAGE_RES_CPG_CONFCHG_CALLBACK);
- for (iter = process_info_list_head.next; iter != &process_info_list_head; ) {
- pi = list_entry(iter, struct process_info, list);
- iter = iter->next;
+ log_printf(LOGSYS_LEVEL_DEBUG, "got procleave message from cluster node %x (%s) for pid %u",
+ nodeid,
+ api->totem_ifaces_print(nodeid),
+ (unsigned int)req_exec_cpg_procjoin->pid);
- if (pi->pid == req_exec_cpg_procjoin->pid && pi->nodeid == nodeid &&
- mar_name_compare (&pi->group, &req_exec_cpg_procjoin->group_name)==0) {
- list_del (&pi->list);
- free (pi);
- }
- }
+ do_proc_leave (&req_exec_cpg_procjoin->group_name,
+ req_exec_cpg_procjoin->pid, nodeid,
+ req_exec_cpg_procjoin->reason);
}
--
1.7.1