Skip to contentSkip to conversation

qdiskd: backport dual socket connection to cman

PATCH New Fabio M. Di Nitto 2 participants 2 messages Aug 13, 2012

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 qdiskd: backport dual socket connection to cman

From: "Fabio M. Di Nitto" <[email protected]>

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

---
 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(-)
cman/qdisk/disk.h +3 -2
index d491de1..83167ea 100644
@@ -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 */
cman/qdisk/disk_util.c +4 -3
index f5539c0..25f4013 100644
@@ -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;
 
cman/qdisk/iostate.c +4 -4
index eb74ad2..ba7ad12 100644
@@ -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;
cman/qdisk/main.c +32 -37

189 lines not on this page · raw message

Signature · 1 line
1.7.7.6
#1 lore raw

PATCH 1/1 qdiskd: backport dual socket connection to cman

Quoted 9 lines · Fabio M. Di Nitto

From: "Fabio M. Di Nitto" <[email protected]>

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