- **status**: assigned --> review
---
** [tickets:#2933] imm: incorrect set isCoord both SCs when coordinator on
payload crash**
**Status:** review
**Milestone:** 5.18.12
**Created:** Tue Oct 02, 2018 01:13 AM UTC by Thuan
**Last Updated:** Tue Oct 02, 2018 01:13 AM UTC
**Owner:** Thuan
IMMND Coordinator is set incorrectly by following code
~~~
// Election priority:
// 1) Coordinator on active node
// 2) Coordinator on standby node
// 3) Coordinator on PL node if SC absence is allowed.
while (immnd_info_node) {
key = immnd_info_node->immnd_dest;
if ((immnd_info_node->isOnController) &&
(immnd_info_node->epoch == cb->mRulingEpoch)) {
candidate_coord_node = immnd_info_node;
immnd_info_node->isCoord = true;
if (immnd_info_node->immnd_key == cb->node_id) {
/* Found a new candidate on active SC */
break;
}
}
immd_immnd_info_node_getnext(&cb->immnd_tree, &key,
&immnd_info_node);
}
~~~
When current coordinator is on payload (after headless) crash with both SC-1
and SC-2 are ready and SC-2 is active, above loop can set isCoord true for both
SC-1 and SC-2 instead of only SC-2.
Proposal fix:
~~~
diff --git a/src/imm/immd/immd_proc.c b/src/imm/immd/immd_proc.c
index b28506ba5..c16232d2d 100644
--- a/src/imm/immd/immd_proc.c
+++ b/src/imm/immd/immd_proc.c
@@ -346,7 +346,6 @@ bool immd_proc_elect_coord(IMMD_CB *cb, bool new_active)
if ((immnd_info_node->isOnController) &&
(immnd_info_node->epoch == cb->mRulingEpoch)) {
candidate_coord_node = immnd_info_node;
- immnd_info_node->isCoord = true;
if (immnd_info_node->immnd_key == cb->node_id) {
/* Found a new candidate on active SC */
break;
@@ -358,7 +357,9 @@ bool immd_proc_elect_coord(IMMD_CB *cb, bool new_active)
}
immnd_info_node = candidate_coord_node;
- if (!immnd_info_node && cb->mScAbsenceAllowed) {
+ if (immnd_info_node != NULL) {
+ immnd_info_node->isCoord = true;
+ } else if (cb->mScAbsenceAllowed) {
/* If SC absence is allowed and no SC based IMMND is
available then elect an IMMND coord at a payload.
Note this means that an IMMND at a payload may be
~~~
---
Sent from sourceforge.net because [email protected] is
subscribed to https://sourceforge.net/p/opensaf/tickets/
To unsubscribe from further messages, a project admin can change settings at
https://sourceforge.net/p/opensaf/admin/tickets/options. Or, if this is a
mailing list, you can unsubscribe from the mailing list._______________________________________________
Opensaf-tickets mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-tickets