mirror of
git://sourceware.org/git/lvm2.git
synced 2025-03-10 16:58:47 +03:00
The attached patch is a try to make clvmd work correctly on openais stack.
It does 2 things. 1. The cpg_deliver_callback make a compare between target_nodeid and our_nodeid. It turns out openais set target_nodeid to 0 sometimes. for broadcasting ? I change the behavior so that lvm will process_remote also on target_nodeid == 0 2. The joined_list passed to cpg_confchg_callback doesn't include the already exist nodes in the group, which leads to an incomplete node_hash. I simply add all other nodes in member_list to node_hash also. Thanks to Xinwei Hu for this patch.
This commit is contained in:
parent
b5618c07d8
commit
746e7dc42e
@ -1,5 +1,6 @@
|
|||||||
Version 2.02.36 -
|
Version 2.02.36 -
|
||||||
=================================
|
=================================
|
||||||
|
Fix nodes list in clvmd-openais, and allow for broadcast messages.
|
||||||
Exclude VG_GLOBAL from internal concurrent VG lock counter.
|
Exclude VG_GLOBAL from internal concurrent VG lock counter.
|
||||||
Fix vgsplit internal counting of snapshot LVs.
|
Fix vgsplit internal counting of snapshot LVs.
|
||||||
Fix vgmerge snapshot_count when source VG contains snapshots.
|
Fix vgmerge snapshot_count when source VG contains snapshots.
|
||||||
|
@ -245,12 +245,13 @@ static void cpg_deliver_callback (cpg_handle_t handle,
|
|||||||
|
|
||||||
memcpy(&target_nodeid, msg, OPENAIS_CSID_LEN);
|
memcpy(&target_nodeid, msg, OPENAIS_CSID_LEN);
|
||||||
|
|
||||||
DEBUGLOG("Got message from nodeid %d for %d. len %d\n",
|
DEBUGLOG("%u got message from nodeid %d for %d. len %d\n",
|
||||||
nodeid, target_nodeid, msg_len-4);
|
our_nodeid, nodeid, target_nodeid, msg_len-4);
|
||||||
|
|
||||||
if (target_nodeid == our_nodeid)
|
if (nodeid != our_nodeid)
|
||||||
process_message(cluster_client, (char *)msg+OPENAIS_CSID_LEN,
|
if (target_nodeid == our_nodeid || target_nodeid == 0)
|
||||||
msg_len-OPENAIS_CSID_LEN, (char*)&nodeid);
|
process_message(cluster_client, (char *)msg+OPENAIS_CSID_LEN,
|
||||||
|
msg_len-OPENAIS_CSID_LEN, (char*)&nodeid);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cpg_confchg_callback(cpg_handle_t handle,
|
static void cpg_confchg_callback(cpg_handle_t handle,
|
||||||
@ -292,10 +293,29 @@ static void cpg_confchg_callback(cpg_handle_t handle,
|
|||||||
ninfo->state = NODE_DOWN;
|
ninfo->state = NODE_DOWN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (i=0; i<member_list_entries; i++) {
|
||||||
|
if (member_list[i].nodeid == 0) continue;
|
||||||
|
ninfo = dm_hash_lookup_binary(node_hash,
|
||||||
|
(char *)&member_list[i].nodeid,
|
||||||
|
OPENAIS_CSID_LEN);
|
||||||
|
if (!ninfo) {
|
||||||
|
ninfo = malloc(sizeof(struct node_info));
|
||||||
|
if (!ninfo) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ninfo->nodeid = member_list[i].nodeid;
|
||||||
|
dm_hash_insert_binary(node_hash,
|
||||||
|
(char *)&ninfo->nodeid,
|
||||||
|
OPENAIS_CSID_LEN, ninfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ninfo->state = NODE_CLVMD;
|
||||||
|
}
|
||||||
|
|
||||||
num_nodes = joined_list_entries;
|
num_nodes = joined_list_entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int lck_dispatch(struct local_client *client, char *buf, int len,
|
static int lck_dispatch(struct local_client *client, char *buf, int len,
|
||||||
const char *csid, struct local_client **new_client)
|
const char *csid, struct local_client **new_client)
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user