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

Reply via email to