osaf/services/saf/clmsv/clms/clms_amf.c | 19 +++++++++++-------- osaf/services/saf/clmsv/clms/clms_evt.c | 16 ++++++++++------ 2 files changed, 21 insertions(+), 14 deletions(-)
I think it is best to first setup the mds and mbcsv role first before doing any functional processing during role change. diff --git a/osaf/services/saf/clmsv/clms/clms_amf.c b/osaf/services/saf/clmsv/clms/clms_amf.c --- a/osaf/services/saf/clmsv/clms/clms_amf.c +++ b/osaf/services/saf/clmsv/clms/clms_amf.c @@ -255,14 +255,9 @@ static void clms_amf_csi_set_callback(Sa role_change = false; if (role_change == true) { - if(clms_cb->ha_state == SA_AMF_HA_ACTIVE) { - clms_imm_impl_set(clms_cb); - proc_downs_during_rolechange(); - - /* Unconditionally refresh IMM for runtime attributes */ - clms_switchon_all_pending_rtupdates(); - } - + /* i.e Set up the infrastructure first. + * i.e. Declare yourself as ACTIVE first. + */ if ((rc = clms_mds_change_role(clms_cb)) != NCSCC_RC_SUCCESS) { LOG_ER("clms_mds_change_role FAILED"); error = SA_AIS_ERR_FAILED_OPERATION; @@ -272,6 +267,14 @@ static void clms_amf_csi_set_callback(Sa if (NCSCC_RC_SUCCESS != (error = clms_mbcsv_change_HA_state(clms_cb))) error = SA_AIS_ERR_FAILED_OPERATION; + if(clms_cb->ha_state == SA_AMF_HA_ACTIVE) { + clms_imm_impl_set(clms_cb); + proc_downs_during_rolechange(); + + /* Unconditionally refresh IMM for runtime attributes */ + clms_switchon_all_pending_rtupdates(); + } + /* Clear up any pending rtu updates, the active will take care of it */ if (clms_cb->ha_state == SA_AMF_HA_STANDBY) clms_switchoff_all_pending_rtupdates(); diff --git a/osaf/services/saf/clmsv/clms/clms_evt.c b/osaf/services/saf/clmsv/clms/clms_evt.c --- a/osaf/services/saf/clmsv/clms/clms_evt.c +++ b/osaf/services/saf/clmsv/clms/clms_evt.c @@ -525,12 +525,9 @@ static uint32_t proc_rda_evt(CLMSV_CLMS_ role_change = false; if (role_change == true){ - - /* fail over, become implementer */ - clms_imm_impl_set(clms_cb); - - proc_downs_during_rolechange(); - + /* i.e Set up the infrastructure first. + * i.e. Declare yourself as ACTIVE first. + */ if ((rc = clms_mds_change_role(clms_cb)) != NCSCC_RC_SUCCESS) { LOG_ER("clms_mds_change_role FAILED %u", rc); goto done; @@ -538,6 +535,13 @@ static uint32_t proc_rda_evt(CLMSV_CLMS_ if (NCSCC_RC_SUCCESS != clms_mbcsv_change_HA_state(clms_cb)) goto done; + + /* fail over, become implementer */ + clms_imm_impl_set(clms_cb); + + /* Process node downs during failover */ + proc_downs_during_rolechange(); + } } ------------------------------------------------------------------------------ "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE Instantly run your Selenium tests across 300+ browser/OS combos. Get unparalleled scalability from the best Selenium testing platform available. Simple to use. Nothing to install. Get started now for free." http://p.sf.net/sfu/SauceLabs _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel