[Cluster-devel] [PATCH] qdiskd: backport dual socket connection to cman

2012-08-13 Thread Fabio M. Di Nitto
From: Fabio M. Di Nitto fdini...@redhat.com

Patch 76741bb2a94ae94e493c609d50f570d02e2f3029 had a not so obvious
dependency on 08ae3ce147b2771c5ee6e1d364a5e48c88384427.

Backport portion of 08ae3ce147b2771c5ee6e1d364a5e48c88384427 to handle
dual cman socket (admin and user) and use the correct socket (user)
for send/receive data.

Move cman_alive check and heartbeat (for dispatch) to ch_user.

Resolves: rhbz#782900

Signed-off-by: Fabio M. Di Nitto fdini...@redhat.com
---
 cman/qdisk/disk.h  |5 ++-
 cman/qdisk/disk_util.c |7 +++--
 cman/qdisk/iostate.c   |8 +++---
 cman/qdisk/main.c  |   69 ++-
 4 files changed, 43 insertions(+), 46 deletions(-)

diff --git a/cman/qdisk/disk.h b/cman/qdisk/disk.h
index d491de1..83167ea 100644
--- a/cman/qdisk/disk.h
+++ b/cman/qdisk/disk.h
@@ -270,7 +270,8 @@ typedef struct {
int qc_master;  /* Master?! */
int qc_status_sock;
run_flag_t qc_flags;
-   cman_handle_t qc_ch;
+   cman_handle_t qc_ch_admin;
+   cman_handle_t qc_ch_user;
char *qc_device;
char *qc_label;
char *qc_status_file;
@@ -299,7 +300,7 @@ typedef struct {
 int qd_write_status(qd_ctx *ctx, int nid, disk_node_state_t state,
disk_msg_t *msg, memb_mask_t mask, memb_mask_t master);
 int qd_read_print_status(target_info_t *disk, int nid);
-int qd_init(qd_ctx *ctx, cman_handle_t ch, int me);
+int qd_init(qd_ctx *ctx, cman_handle_t ch_admin, cman_handle_t ch_user, int 
me);
 void qd_destroy(qd_ctx *ctx);
 
 /* proc.c */
diff --git a/cman/qdisk/disk_util.c b/cman/qdisk/disk_util.c
index f5539c0..25f4013 100644
--- a/cman/qdisk/disk_util.c
+++ b/cman/qdisk/disk_util.c
@@ -312,16 +312,17 @@ generate_token(void)
   Initialize a quorum disk context, given a CMAN handle and a nodeid.
  */
 int
-qd_init(qd_ctx *ctx, cman_handle_t ch, int me)
+qd_init(qd_ctx *ctx, cman_handle_t ch_admin, cman_handle_t ch_user, int me)
 {
-   if (!ctx || !ch || !me) {
+   if (!ctx || !ch_admin || !ch_user || !me) {
errno = EINVAL;
return -1;
}   
 
memset(ctx, 0, sizeof(*ctx));
ctx-qc_incarnation = generate_token();
-   ctx-qc_ch = ch;
+   ctx-qc_ch_admin = ch_admin;
+   ctx-qc_ch_user = ch_user;
ctx-qc_my_id = me;
ctx-qc_status_sock = -1;
 
diff --git a/cman/qdisk/iostate.c b/cman/qdisk/iostate.c
index eb74ad2..ba7ad12 100644
--- a/cman/qdisk/iostate.c
+++ b/cman/qdisk/iostate.c
@@ -69,7 +69,7 @@ io_nanny_thread(void *arg)
iostate_t last_main_state = 0, current_main_state = 0;
int last_main_incarnation = 0, current_main_incarnation = 0;
int logged_incarnation = 0;
-   cman_handle_t ch = (cman_handle_t)arg;
+   cman_handle_t ch_user = (cman_handle_t)arg;
int32_t whine_state;
 
/* Start with wherever we're at now */
@@ -105,7 +105,7 @@ io_nanny_thread(void *arg)
/* Whine on CMAN api */
whine_state = (int32_t)current_main_state;
swab32(whine_state);
-   cman_send_data(ch, whine_state, sizeof(int32_t), 0, 
CLUSTER_PORT_QDISKD, 0);
+   cman_send_data(ch_user, whine_state, sizeof(int32_t), 0, 
CLUSTER_PORT_QDISKD, 0);
 
/* Don't log things twice */
if (logged_incarnation == current_main_incarnation)
@@ -125,7 +125,7 @@ io_nanny_thread(void *arg)
 
 
 int
-io_nanny_start(cman_handle_t ch, int timeout)
+io_nanny_start(cman_handle_t ch_user, int timeout)
 {
int ret;
 
@@ -135,7 +135,7 @@ io_nanny_start(cman_handle_t ch, int timeout)
qdisk_timeout = timeout;
thread_active = 1;
 
-   ret = pthread_create(io_nanny_tid, NULL, io_nanny_thread, ch);
+   ret = pthread_create(io_nanny_tid, NULL, io_nanny_thread, ch_user);
pthread_mutex_unlock(state_mutex);
 
return ret;
diff --git a/cman/qdisk/main.c b/cman/qdisk/main.c
index 90d00ab..72a3c07 100644
--- a/cman/qdisk/main.c
+++ b/cman/qdisk/main.c
@@ -287,7 +287,7 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, 
memb_mask_t mask)
if (ctx-qc_flags  RF_ALLOW_KILL) {
clulog(LOG_DEBUG, Telling CMAN to 
kill the node\n);
-   cman_kill_node(ctx-qc_ch,
+   cman_kill_node(ctx-qc_ch_admin,
ni[x].ni_status.ps_nodeid);
}
}
@@ -325,7 +325,7 @@ check_transitions(qd_ctx *ctx, node_info_t *ni, int max, 
memb_mask_t mask)
if (ctx-qc_flags  RF_ALLOW_KILL) {
clulog(LOG_DEBUG, Telling CMAN to 
kill the node\n);
-   cman_kill_node(ctx-qc_ch,
+ 

Re: [Cluster-devel] [PATCH] qdiskd: backport dual socket connection to cman

2012-08-13 Thread Lon Hohberger
On 08/13/2012 08:39 AM, Fabio M. Di Nitto wrote:
 From: Fabio M. Di Nitto fdini...@redhat.com
 
 Patch 76741bb2a94ae94e493c609d50f570d02e2f3029 had a not so obvious
 dependency on 08ae3ce147b2771c5ee6e1d364a5e48c88384427.
 
 Backport portion of 08ae3ce147b2771c5ee6e1d364a5e48c88384427 to handle
 dual cman socket (admin and user) and use the correct socket (user)
 for send/receive data.
 

That looks right.  The cman admin socket can't be used for
sending/receiving data, so the previous patch wouldn't work without it.

-- Lon