Hi Praveen What if the user reboots the cluster, after modifying saAmfSIPrefActiveAssignments?
Thanks -----Original Message----- From: praveen malviya <[email protected]> Organization: Oracle Corporation Date: Wednesday, 1 February 2017 at 5:31 pm To: gary <[email protected]>, <[email protected]>, <[email protected]>, <[email protected]> Cc: <[email protected]> Subject: Re: [PATCH 1 of 1] amfd: fix default value of saAmfSIPrefActiveAssignments [1190] On 01-Feb-17 11:20 AM, Gary Lee wrote: > Hi Praveen > > Ack – I think we should make it clear in the PR doc that the default will be 1 if they leave out ‘saAmfSIPrefActiveAssignments‘ when creating the SI. If they want it to default to saAmfSGNumPrefAssignedSUs, they must create the SI with ‘saAmfSIPrefActiveAssignments’ set to blank. > This ticket is to honour saAmfSGNumPrefAssignedSUs from now on-wards in both the cases when it was not configured while creating the SI or when it is set to blank. I think, I will have to document in this way: 1) If saAmfSIPrefActiveAssignments is not configured while creating an SI, then AMF will use saAmfSGNumPrefAssignedSUs as default value. 2) If SI is already configured then saAmfSIPrefActiveAssignments can be adjusted to default value saAmfSGNumPrefAssignedSUs by setting saAmfSIPrefActiveAssignments to blanck via CCB operation. In 1) immlist will still show value as 1, but AMF will adhere to saAmfSGNumPrefAssignedSUs. This cannot be corrected because imm.xml contains a default based on old schema definition: <attr> <name>saAmfSIPrefActiveAssignments</name> <type>SA_UINT32_T</type> <category>SA_CONFIG</category> <flag>SA_WRITABLE</flag> <default-value>1</default-value> </attr> So when AMFD reads it from IMM, it does not know whether user has configured it to 1 or it is IMM that is giving 1 as default value to AMFD. With this enhancement, on seeing 1 AMFD will consider that use has not configured it and will adhere to default value saAmfSGNumPrefAssignedSUs. A old user can still make everything consistent for its old application my the provision of making saAmfSIPrefActiveAssignments to 1 using CCB Modify operation. If user performs this CCB change then in function pref_active_assignments() flag saAmfSIPrefActiveAssignments_configured will take care of user's choice. Thanks, Praveen > Thanks > Gary > > On 1/2/17, 4:08 pm, "praveen malviya" <[email protected]> wrote: > > > On 01-Feb-17 9:45 AM, Gary Lee wrote: > > Hi Praveen > > > > saAmfSIPrefActiveAssignments defaults to 1 in the schema. I guess saAmfSGNumPrefAssignedSUs only becomes default, if the user deliberately sets saAmfSIPrefActiveAssignments to “”? > > > > In section 3.6.5, default value of saAmfSIPrefActiveAssignments is > mentioned as saAmfSGNumPrefAssignedSUs and same is mentioned in > SAI-IM-XMI-A.04.02.errata.xml. > > Yes, a user can make saAmfSGNumPrefAssignedSUs make default by above > mentioned way. Also while configuring SG if the attrbitue itself is > ignored then also AMFD will adjust to default value. > > Thanks > Praveen > > > > Thanks > > Gary > > > > On 16/1/17, 8:56 pm, "[email protected]" <[email protected]> wrote: > > > > src/amf/amfd/sg.cc | 4 ++++ > > src/amf/amfd/sg.h | 1 + > > src/amf/amfd/si.cc | 35 ++++++++++++++++++++++++++--------- > > src/amf/amfd/si.h | 5 +++++ > > 4 files changed, 36 insertions(+), 9 deletions(-) > > > > > > AMF spec specifies two different default values for saAmfSIPrefActiveAssignments in: > > 1)section 3.6.5: Default is preferred number of assigned service > > units i.e saAmfSGNumPrefAssignedSUs. > > 2)section 8.11: default value as 1. > > Currently if a user does not configure any value for this attribute, then > > IMM sets default value to 1. Because of this when SG is unlocked or lots > > of SUs are unlocked, AMF assigns SI to only one SU. For other SUs to get > > assignment for this SI, a CCB modification is needed. This causes problem > > in scaling up application as CCB modification needs to be performed each time > > a SU is added. > > > > This enhancement honours default value given in section 3.6.5. So the default > > value of saAmfSIPrefActiveAssignments will be saAmfSGNumPrefAssignedSUs. > > > > Note related to upgrade (AMF PR doc will be updated for this) : > > If any N-Way Active application is running with default value of > > saAmfSIPrefActiveAssignments=1 for a SI then SI is assigned to only > > one SU. After upgrade to this release, default value is now changed to > > saAmfSGNumPrefAssignedSUs. So application will see more assigned SUs for > > this SI. For such an application, old behaviour can still be achieved by > > modifying the default value of saAmfSIPrefActiveAssignments to 1 using CCB > > operation only once. This should be done as soon as the first system > > controller is upgraded to this release in standby role. In this way Standby > > controller will remember the user definition and it will honor it when it > > takes the active role. > > This upgrade provision is maintained for two releases only and it can be removed when 5.2 is no longer > > maintained. > > > > diff --git a/src/amf/amfd/sg.cc b/src/amf/amfd/sg.cc > > --- a/src/amf/amfd/sg.cc > > +++ b/src/amf/amfd/sg.cc > > @@ -2322,4 +2322,8 @@ bool AVD_SG::any_assignment_assigned() { > > return pending; > > } > > > > +uint32_t AVD_SG::pref_assigned_sus() const { > > + //If not configured, AMFD has already adjusted to default value in avd_sg_adjust_config(). > > + return saAmfSGNumPrefAssignedSUs; > > +} > > > > diff --git a/src/amf/amfd/sg.h b/src/amf/amfd/sg.h > > --- a/src/amf/amfd/sg.h > > +++ b/src/amf/amfd/sg.h > > @@ -428,6 +428,7 @@ public: > > //Runtime calculates value of saAmfSGNumCurrNonInstantiatedSpareSUs; > > uint32_t curr_non_instantiated_spare_sus() const; > > bool is_middleware() const {return sg_ncs_spec ? true : false;} > > + uint32_t pref_assigned_sus() const; > > > > private: > > // disallow copy and assign, TODO(hafe) add common macro for this > > diff --git a/src/amf/amfd/si.cc b/src/amf/amfd/si.cc > > --- a/src/amf/amfd/si.cc > > +++ b/src/amf/amfd/si.cc > > @@ -601,8 +601,9 @@ static AVD_SI *si_create(const std::stri > > if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIPrefActiveAssignments"), attributes, 0, > > &si->saAmfSIPrefActiveAssignments) != SA_AIS_OK) { > > > > - /* Empty, assign default value */ > > + /* Empty, assign default value. Check note in functoin pref_active_assignments() */ > > si->saAmfSIPrefActiveAssignments = 1; > > + si->saAmfSIPrefActiveAssignments_configured = false; > > } > > > > if (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIPrefStandbyAssignments"), attributes, 0, > > @@ -1094,8 +1095,9 @@ void AVD_SI::adjust_si_assignments(const > > } > > sisu = sisu->si_next; > > } > > - /* Change the SG FSM to AVD_SG_FSM_SG_REALIGN SG to Stable state */ > > - m_AVD_SET_SG_FSM(avd_cb, sg_of_si, AVD_SG_FSM_SG_REALIGN); > > + /* Change the SG FSM to AVD_SG_FSM_SG_REALIGN if assignment is sent.*/ > > + if (i > 0) > > + m_AVD_SET_SG_FSM(avd_cb, sg_of_si, AVD_SG_FSM_SG_REALIGN); > > } > > } > > if( sg_of_si->sg_redundancy_model == SA_AMF_N_WAY_REDUNDANCY_MODEL ) { > > @@ -1161,8 +1163,16 @@ static void si_ccb_apply_modify_hdlr(Ccb > > > > if (value_is_deleted) { > > mod_pref_assignments = 1; > > + si->saAmfSIPrefActiveAssignments_configured = false; > > } else { > > mod_pref_assignments = *((SaUint32T *)attr_mod->modAttr.attrValues[0]); > > + //A user is intentionally setting it to 1. Remember this choice. > > + if (mod_pref_assignments == 1) { > > + TRACE("saAmfSIPrefActiveAssignments is configured to 1."); > > + si->saAmfSIPrefActiveAssignments_configured = true; > > + } else { > > + si->saAmfSIPrefActiveAssignments_configured = false; > > + } > > } > > > > if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) { > > @@ -1172,7 +1182,11 @@ static void si_ccb_apply_modify_hdlr(Ccb > > > > /* Check if we need to readjust the SI assignments as PrefActiveAssignments > > got changed */ > > - if ( mod_pref_assignments == si->saAmfSINumCurrActiveAssignments ) { > > + if (value_is_deleted) { > > + TRACE("Assignments will be adjusted to default value saAmfSGNumPrefAssignedSUs"); > > + si->saAmfSIPrefActiveAssignments = mod_pref_assignments; > > + si->adjust_si_assignments(si->pref_active_assignments()); > > + } else if ( mod_pref_assignments == si->saAmfSINumCurrActiveAssignments ) { > > TRACE("Assignments are equal updating the SI status "); > > si->saAmfSIPrefActiveAssignments = mod_pref_assignments; > > } else if (mod_pref_assignments > si->saAmfSINumCurrActiveAssignments) { > > @@ -1296,8 +1310,7 @@ void AVD_SI::update_ass_state() > > newState = SA_AMF_ASSIGNMENT_UNASSIGNED; > > } else { > > osafassert(saAmfSINumCurrStandbyAssignments == 0); > > - osafassert(saAmfSINumCurrActiveAssignments <= saAmfSIPrefActiveAssignments); > > - if (saAmfSINumCurrActiveAssignments == saAmfSIPrefActiveAssignments) > > + if (saAmfSINumCurrActiveAssignments == pref_active_assignments()) > > newState = SA_AMF_ASSIGNMENT_FULLY_ASSIGNED; > > else > > newState = SA_AMF_ASSIGNMENT_PARTIALLY_ASSIGNED; > > @@ -1435,9 +1448,13 @@ void AVD_SI::set_si_switch(AVD_CL_CB *cb > > m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(cb, this, AVSV_CKPT_SI_SWITCH); > > } > > > > -uint32_t AVD_SI::pref_active_assignments() const > > -{ > > - return saAmfSIPrefActiveAssignments; > > +uint32_t AVD_SI::pref_active_assignments() const { > > + if ((saAmfSIPrefActiveAssignments == 1) && (saAmfSIPrefActiveAssignments_configured == false)) { > > + /* This means user has not configured any value not even 1. Return default value which is > > + preferred number of assigned SUs, saAmfSGNumPrefAssignedSUs.*/ > > + return sg_of_si->pref_assigned_sus(); > > + } else > > + return saAmfSIPrefActiveAssignments; > > } > > > > uint32_t AVD_SI::curr_active_assignments() const > > diff --git a/src/amf/amfd/si.h b/src/amf/amfd/si.h > > --- a/src/amf/amfd/si.h > > +++ b/src/amf/amfd/si.h > > @@ -107,6 +107,11 @@ public: > > SaInvocationT invocation; > > > > bool alarm_sent; /* SI unassigned alarm has been sent */ > > + bool saAmfSIPrefActiveAssignments_configured; /* To remember if user has configured as 1. > > + As of now this variable is maintained for > > + supporting upgrade path. It will be removed > > + when 5.2 longer is no maintained. > > + */ > > > > void inc_curr_act_ass(); > > void dec_curr_act_ass(); > > > > > > > > > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
