|
From: <pra...@or...> - 2015-03-25 06:39:59
|
osaf/services/saf/amf/amfd/sgproc.cc | 10 +++++-----
1 files changed, 5 insertions(+), 5 deletions(-)
If lock/shutdown operation on a nodegroup is in progress and component faults with
sufailover recovery while handling quiesced/quiescing callback, then two problems
are obserbed in case of 2N application:
1)If both the active and standby assignments are part of nodegroup then lock
operation succeeds but unlock does not lead to assignment in any SU. Here
there is no problem in shutdown opreation.
2)If active assignment is in the nodegroup and standby assignment is outside
the nodegroup then nodegroup admin state sticks to SHUTTING_DOWN but operation
succeeds. Since ng admin state is not locked, unlock operation is rejected by
AMF. Here there is no problem with lock operation.
AMF is resetting nodegroup params before failover of SU.
In case 1, SG was not stable while AMF tries to reset the sg admin state.So
internally SG remained it locked state. When user tries to unlock the ng,
operation succeeds but no assignment occurs as SG is locked internally.
In case 2, AMF tries to mark the node and ng from SHUTTING_DOWN
to locked before sufailover. Before sufailover su still has SIs assigned to it in
quiescing state. Because of this node is not marked locked ans so also ng.
In sufailover, AMF deletes all the assignment and marks the node locked and sg
becomes stable. So after sufailover processing, if AMF performs ng related
activities it will set things in proper state. Patch ensures this.
diff --git a/osaf/services/saf/amf/amfd/sgproc.cc b/osaf/services/saf/amf/amfd/sgproc.cc
--- a/osaf/services/saf/amf/amfd/sgproc.cc
+++ b/osaf/services/saf/amf/amfd/sgproc.cc
@@ -399,6 +399,7 @@ done:
static uint32_t sg_su_failover_func(AVD_SU *su)
{
uint32_t rc = NCSCC_RC_FAILURE;
+ SaAisErrorT res = SA_AIS_OK;
TRACE_ENTER2("'%s', %u", su->name.value, su->sg_of_su->sg_fsm_state);
@@ -425,8 +426,6 @@ static uint32_t sg_su_failover_func(AVD_
In case of Node unlock this counter is incremented per susi. So decrement
should also be done per susi.
*/
-
- SaAisErrorT res = SA_AIS_OK;
if (su->su_on_node->saAmfNodeAdminState == SA_AMF_ADMIN_UNLOCKED) {
for (AVD_SU_SI_REL *susi = su->list_of_susi; susi; susi = susi->su_next) {
if (susi->fsm == AVD_SU_SI_STATE_ASGN)
@@ -441,9 +440,6 @@ static uint32_t sg_su_failover_func(AVD_
AVD_AVND *node = su->su_on_node;
node_complete_admin_op(node, res);
}
-
- /* If nodegroup level operation is finished on all the nodes, reply to imm.*/
- process_su_si_response_for_ng(su, res);
}
/*If the AvD is in AVD_APP_STATE then reassign all the SUSI assignments for this SU */
@@ -480,6 +476,10 @@ static uint32_t sg_su_failover_func(AVD_
su->delete_all_susis();
}
+ /* If nodegroup level operation is finished on all the nodes, reply to imm.*/
+ if (su->su_on_node->admin_ng != NULL)
+ process_su_si_response_for_ng(su, res);
+
rc = NCSCC_RC_SUCCESS;
done:
|