Hi Nagu,

It does not work, just do a quick test and get a coredump at another 
place. It's because we force to create si but si does not have csi, 
which all of those should be created in ccb.
Then the new assignment susi will fail.

Thanks/ Minh

Sep 23 18:16:13.706053 osafamfd [481:sgproc.cc:0106] >> 
avd_new_assgn_susi: 'safSu=SU1,safSg=AmfDemo1,safApp=AmfDemo2' 
'safSi=AmfDemo1C,safApp=AmfDemo2' state=1
Sep 23 18:16:13.706056 osafamfd [481:siass.cc:0148] >> avd_susi_create: 
safSu=SU1,safSg=AmfDemo1,safApp=AmfDemo2 safSi=AmfDemo1C,safApp=AmfDemo2 
state=1
Sep 23 18:16:13.706059 osafamfd [481:siass.cc:0251] << avd_susi_create
Sep 23 18:16:13.706061 osafamfd [481:sgproc.cc:0168] TR Now assiging 
more than one csi per comp
Sep 23 18:16:13.706064 osafamfd [481:sgproc.cc:0237] TR Couldn't add any 
compcsi to Si'safSi=AmfDemo1C,safApp=AmfDemo2'
Sep 23 18:16:13.706066 osafamfd [481:siass.cc:0592] >> 
avd_susi_update_assignment_counters: 
SI:'safSi=AmfDemo1C,safApp=AmfDemo2', 
SU:'safSu=SU1,safSg=AmfDemo1,safApp=AmfDemo2' action:4 
current_ha_state:0 new_ha_state:0
Sep 23 18:16:13.706069 osafamfd [481:su.cc:1836] TR 
safSu=SU1,safSg=AmfDemo1,safApp=AmfDemo2 saAmfSUNumCurrActiveSIs=2
*Sep 23 18:16:13.706072 osafamfd [481:si.cc:1358] TR 
safSi=AmfDemo1C,safApp=AmfDemo2 saAmfSINumCurrActiveAssignments=0*
Sep 23 18:17:12.798010 osafamfd [481:main.cc:0491] >> initialize
Sep 23 18:17:12.798043 osafamfd [481:ncs_main_pub.c:0223] TR


On 9/23/2015 4:49 PM, Nagendra Kumar wrote:
> Hi Minh,
>               Will something like below already working in dec_si_dep_state() 
> work for you if si is not found in the case mentioned in the ticket?
>
> static uint32_t dec_si_dep_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec)
> {
>          SaNameT name;
>          uint32_t si_dep_state;
>
>          TRACE_ENTER();
>
>          osaf_decode_sanamet(&dec->i_uba, &name);
>          AVD_SI *si = si_db->find(Amf::to_string(&name));
>          if (si == NULL) {
>                  si = avd_si_new(&name);
>                  osafassert(si != NULL);
>                  avd_si_db_add(si);
>          }
>
>          osaf_decode_uint32(&dec->i_uba, &si_dep_state);
>
>          /* Update the fields received in this checkpoint message */
>          avd_sidep_si_dep_state_set(si, (AVD_SI_DEP_STATE)si_dep_state);
>
>
> Thanks
> -Nagu
>
>> -----Original Message-----
>> From: Minh Hon Chau [mailto:[email protected]]
>> Sent: 26 August 2015 10:30
>> To: [email protected]; Nagendra Kumar; Praveen Malviya
>> Cc: [email protected]
>> Subject: [PATCH 1 of 1] amfd: Standby controller reboots if adding additional
>> SI in N+M model [#1457]
>>
>>   osaf/services/saf/amf/amfd/si.cc |  89
>> +++++++++++++++++++++++++++++++++++++++-
>>   1 files changed, 88 insertions(+), 1 deletions(-)
>>
>>
>> As N+M SU(s) are unlocked and having assignment, if dynamically adding an
>> SI
>> (without specified saAmfSIAdminState) that causes the standby controller
>> reboots
>>
>> If additional SI is added without specified saAmfSIAdminState, the admin
>> state
>> will be set as UNLOCKED as default. And if the configuration has enough
>> capability
>> to establish new assignment for additional SI, the active amfd will 
>> checkpoint
>> the current active assignment with standby amfd in the flow of CCB.
>> Sometimes,
>> this checkpoint comes to standby amfd before standby amfd creates
>> additional SI
>> by CCB apply. Therfore, standby amfd can't find the SI in checkpoint, then
>> node
>> reboots by a false assert.
>>
>> In AMF PR, 7.1.3 Add an SI in an SG without locking SG, the additonal SI
>> should
>> be in admin LOCKED state while it's being added. The patch adds validation
>> for
>> admin state of additional SI.
>>
>> diff --git a/osaf/services/saf/amf/amfd/si.cc
>> b/osaf/services/saf/amf/amfd/si.cc
>> --- a/osaf/services/saf/amf/amfd/si.cc
>> +++ b/osaf/services/saf/amf/amfd/si.cc
>> @@ -538,6 +538,89 @@ static int is_config_valid(const SaNameT
>>      return 1;
>>   }
>>
>> +/**
>> + * Validates if a SG's admin state is valid for creating a SI
>> + * Should only be called if the SI admin state is UNLOCKED
>> + * @param si_dn
>> + * @param attributes
>> + * @param opdata
>> + * @return true if so
>> + */
>> +static bool sg_admin_state_is_valid_for_si_create(const SaNameT *si_dn,
>> +        const SaImmAttrValuesT_2 **attributes,
>> +        const CcbUtilOperationData_t *opdata)
>> +{
>> +    SaNameT sg_name = {0};
>> +
>> +    if
>> (immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSIProtectedbySG"),
>> +                    attributes, 0, &sg_name) != SA_AIS_OK) {
>> +            TRACE("saAmfSIProtectedbySG is not specified for '%s'",
>> si_dn->value);
>> +            return false;
>> +    }
>> +
>> +    const AVD_SG *sg = sg_db->find(Amf::to_string(&sg_name));
>> +    if (sg != NULL) {
>> +            // SG had been created
>> +            // create SI is accepted under LOCKED SG, LOCKED-IN SG is
>> fine either
>> +            if (sg->saAmfSGAdminState != SA_AMF_ADMIN_LOCKED ||
>> +                    sg->saAmfSGAdminState !=
>> SA_AMF_ADMIN_LOCKED_INSTANTIATION) {
>> +                    TRACE("'%s' created UNLOCKED but '%s' is not
>> locked",
>> +                            si_dn->value, sg_name.value);
>> +                    return false;
>> +            }
>> +    } else {
>> +            // SG does not exist in current model
>> +            // the check of sg existence should be already done in
>> is_config_valid
>> +            osafassert(ccbutil_getCcbOpDataByDN(opdata->ccbId,
>> &sg_name));
>> +    }
>> +
>> +    return true;
>> +}
>> +
>> +/**
>> + * Validation performed when a SI is dynamically created with a CCB.
>> + * @param dn
>> + * @param attributes
>> + * @param opdata
>> + *
>> + * @return bool
>> + */
>> +static bool is_ccb_create_config_valid(const SaNameT *dn,
>> +                                       const SaImmAttrValuesT_2 
>> **attributes,
>> +                                       const CcbUtilOperationData_t *opdata)
>> +{
>> +    SaAmfAdminStateT admstate;
>> +    SaAisErrorT rc;
>> +
>> +    osafassert(opdata != NULL);  // must be called in CCB context
>> +
>> +    rc = immutil_getAttr("saAmfSIAdminState", attributes, 0,
>> &admstate);
>> +    // Default value is UNLOCKED if created without a value
>> +    if (rc != SA_AIS_OK)
>> +            admstate = SA_AMF_ADMIN_UNLOCKED;
>> +
>> +    // locked state is fine
>> +    if (admstate == SA_AMF_ADMIN_LOCKED)
>> +            return true;
>> +
>> +    if (admstate != SA_AMF_ADMIN_UNLOCKED) {
>> +            report_ccb_validation_error(opdata,
>> +                    "'%s' created with invalid saAmfSIAdminState (%u)",
>> +                    dn->value, admstate);
>> +            return false;
>> +    }
>> +
>> +    if (sg_admin_state_is_valid_for_si_create(dn, attributes, opdata))
>> +            return true;
>> +
>> +    amflog(SA_LOG_SEV_NOTICE, "CCB %d creation of '%s' failed",
>> +            opdata->ccbId, dn->value);
>> +    report_ccb_validation_error(opdata,
>> +            "SG is not configured properly to allow creation of
>> UNLOCKED SI");
>> +
>> +    return false;
>> +}
>> +
>>   static AVD_SI *si_create(SaNameT *si_name, const SaImmAttrValuesT_2
>> **attributes)
>>   {
>>      unsigned int i;
>> @@ -1002,8 +1085,12 @@ static SaAisErrorT si_ccb_completed_cb(C
>>
>>      switch (opdata->operationType) {
>>           case CCBUTIL_CREATE:
>> -                if (is_config_valid(&opdata->objectName, opdata-
>>> param.create.attrValues, opdata))
>> +                if (is_config_valid(&opdata->objectName,
>> +                            opdata->param.create.attrValues, opdata) &&
>> +                    is_ccb_create_config_valid(&opdata->objectName,
>> +                                    opdata->param.create.attrValues, 
>> opdata)) {
>>                           rc = SA_AIS_OK;
>> +                }
>>                   break;
>>      case CCBUTIL_MODIFY:
>>              rc = si_ccb_completed_modify_hdlr(opdata);

------------------------------------------------------------------------------
Monitor Your Dynamic Infrastructure at Any Scale With Datadog!
Get real-time metrics from all of your servers, apps and tools
in one place.
SourceForge users - Click here to start your Free Trial of Datadog now!
http://pubads.g.doubleclick.net/gampad/clk?id=241902991&iu=/4140
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to