osaf/services/saf/amf/amfd/sg.cc |  39 +++++++++++++++++++++++++++++++++++++++
 1 files changed, 39 insertions(+), 0 deletions(-)


ccb_completed_modify_hdlr: Attribute 'saAmfSGNumPrefActiveSUs' cannot be 
modified when SG is unlocked

OpenSAF disallows changing saAmfSGNumPrefActiveSUs while the SG is UNLOCKED.
This prevents in-service capacity upgrade for N+M models, which is not
desirable.

This change allows saAmfSGNumPrefActiveSUs to be increased for N+M models, as
long as there are instantiated spare SUs equal to the amount of the increase.
These instantiated spare SUs will then be assigned ACTIVE, and their
corresponding CSIs will be assigned to the STANDBY.

diff --git a/osaf/services/saf/amf/amfd/sg.cc b/osaf/services/saf/amf/amfd/sg.cc
--- a/osaf/services/saf/amf/amfd/sg.cc
+++ b/osaf/services/saf/amf/amfd/sg.cc
@@ -675,6 +675,33 @@ static SaAisErrorT ccb_completed_modify_
                                        rc = SA_AIS_ERR_BAD_OPERATION;
                                        goto done;
                                }
+                       } else if (!strcmp(attribute->attrName, 
"saAmfSGNumPrefActiveSUs")) {
+                               uint32_t pref_active_su = 
*static_cast<SaUint32T *>(value);
+                       
+                               if (sg->sg_redundancy_model != 
SA_AMF_NPM_REDUNDANCY_MODEL) {
+                                       report_ccb_validation_error(opdata,
+                                               "%s: saAmfSGNumPrefActiveSUs 
for non-N+M model cannot"
+                                               " be modified when SG is 
unlocked", __FUNCTION__);
+                                       rc = SA_AIS_ERR_BAD_OPERATION;
+                                       goto done;
+                               } else if (pref_active_su < 
sg->saAmfSGNumPrefActiveSUs) {
+                                       report_ccb_validation_error(opdata,
+                                               "%s: Cannot decrease 
saAmfSGNumPrefActiveSUs while SG"
+                                               " is unlocked ", __FUNCTION__);
+                                       rc = SA_AIS_ERR_BAD_OPERATION;
+                                       goto done;
+                               } else {
+                                       uint32_t increase_amount = 
pref_active_su - sg->saAmfSGNumPrefActiveSUs;
+
+                                       if 
(sg->saAmfSGNumCurrInstantiatedSpareSUs < increase_amount) {
+                                               
report_ccb_validation_error(opdata,
+                                                       "%s: Not enough 
instantiated spare SUs to do"
+                                                       " in-service increase 
of saAmfSGNumPrefActiveSUs",
+                                                       __FUNCTION__);
+                                               rc = SA_AIS_ERR_BAD_OPERATION;
+                                               goto done; 
+                                       }
+                               } 
                        } else {
                                report_ccb_validation_error(opdata,
                                        "%s: Attribute '%s' cannot be modified 
when SG is unlocked",
@@ -1010,6 +1037,18 @@ static void ccb_apply_modify_hdlr(CcbUti
                                        sg->name.value, sg->saAmfSGAutoRepair);
                        } else if (!strcmp(attribute->attrName, 
"saAmfSGSuHostNodeGroup")) {
                                sg->saAmfSGSuHostNodeGroup = *((SaNameT 
*)value);
+                       } else if (!strcmp(attribute->attrName, 
"saAmfSGNumPrefActiveSUs")) {
+                               if (value_is_deleted)
+                                       sg->saAmfSGNumPrefActiveSUs = 
sg->saAmfSGNumPrefActiveSUs;
+                               else
+                                       sg->saAmfSGNumPrefActiveSUs = 
*static_cast<SaUint32T *>(value);
+                        
+                               if (avd_cb->avail_state_avd == 
SA_AMF_HA_ACTIVE)  {
+                                       /* find an instantiated spare SU */
+                                       if (sg->realign(avd_cb, sg) != 
NCSCC_RC_SUCCESS) {
+                                               osafassert(0);
+                                       }
+                               }
                        } else {
                                osafassert(0);
                        }


------------------------------------------------------------------------------
"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