Hi AndersW,

I missed the other patches of the ticket.

Thanks,

Hung Nguyen - DEK Technologies


--------------------------------------------------------------------------------
From: Anders Widell anders.wid...@ericsson.com
Sent: Tuesday, March 01, 2016 4:08PM
To: Hung Nguyen, Neelakanta Reddy, Zoran Milinkovic
     hung.d.ngu...@dektech.com.au, reddy.neelaka...@oracle.com, 
zoran.milinko...@ericsson.com
Cc: Opensaf-devel
     opensaf-devel@lists.sourceforge.net
Subject: Re: [PATCH 1 of 2] imm: Support AMF configurations containing more 
than two OpenSAF 2N SUs [#79]


Have you applied all the patches for ticket [#79]? In particular, you 
need the patches for RDE - otherwise you can only get ACTIVE or STANDBY 
as you say.

regards,
Anders Widell

On 03/01/2016 10:04 AM, Hung Nguyen wrote:
> Hi AndersW,
>
> I checked the rda_get_role() function and saw that only 
> SA_AMF_HA_ACTIVE or SA_AMF_HA_STANDBY is returned.
> And that makes IMMD always initializes MBC/MDS, even in the spare 
> OpenSAF SU.
>
> Can you check the code again?
>
> BR,
>
> Hung Nguyen - DEK Technologies
>
>
> --------------------------------------------------------------------------------
>  
>
> From: Anders Widell anders.wid...@ericsson.com
> Sent: Tuesday, March 01, 2016 3:58PM
> To: Hung Nguyen, Neelakanta Reddy, Zoran Milinkovic
>     hung.d.ngu...@dektech.com.au, reddy.neelaka...@oracle.com, 
> zoran.milinko...@ericsson.com
> Cc: Opensaf-devel
>     opensaf-devel@lists.sourceforge.net
> Subject: Re: [PATCH 1 of 2] imm: Support AMF configurations containing 
> more than two OpenSAF 2N SUs [#79]
>
>
> It will return PCS_RDA_QUIESCED.
>
> regards,
> Anders Widell
>
> On 03/01/2016 09:56 AM, Hung Nguyen wrote:
>> Hi AndersW,
>>
>>
>> What ha-state that rda_get_role() will return when IMMD is on the 
>> node with the spare OpenSAF SU?
>>
>>
>> BR,
>>
>> Hung Nguyen - DEK Technologies
>>
>>
>> --------------------------------------------------------------------------------
>>  
>>
>> From: Anders Widell anders.wid...@ericsson.com
>> Sent: Monday, February 29, 2016 9:55PM
>> To: Hung Nguyen, Neelakanta Reddy, Zoran Milinkovic
>>     hung.d.ngu...@dektech.com.au, reddy.neelaka...@oracle.com, 
>> zoran.milinko...@ericsson.com
>> Cc: Opensaf-devel
>>     opensaf-devel@lists.sourceforge.net
>> Subject: [PATCH 1 of 2] imm: Support AMF configurations containing 
>> more than two OpenSAF 2N SUs [#79]
>>
>>
>>  osaf/services/saf/immsv/immd/immd.h       |   5 ++
>>  osaf/services/saf/immsv/immd/immd_amf.c   |   9 ++++-
>>  osaf/services/saf/immsv/immd/immd_cb.h    |   1 +
>>  osaf/services/saf/immsv/immd/immd_db.c    |   6 +++
>>  osaf/services/saf/immsv/immd/immd_evt.c   |  15 ++++++-
>>  osaf/services/saf/immsv/immd/immd_main.c  |  55 
>> ++++++++++++++++++++----------
>>  osaf/services/saf/immsv/immd/immd_mbcsv.c |   4 +-
>>  osaf/services/saf/immsv/immd/immd_mds.c   |   6 +-
>>  osaf/services/saf/immsv/immd/immd_mds.h   |   4 +-
>>  osaf/services/saf/immsv/immd/immd_proc.h  |   2 +-
>>  osaf/services/saf/immsv/immd/immd_sbedu.h |   2 +-
>>  11 files changed, 79 insertions(+), 30 deletions(-)
>>
>>
>> Add support for configuring the system with more than two OpenSAF 2N 
>> SUs. In
>> particular, this means that all OpenSAF directors must support 
>> starting up
>> and running without (initially) getting any assignment from AMF. 
>> Locking of
>> an OpenSAF 2N SU is currently not supported on a system configured 
>> with more
>> than two OpenSAF 2N SUs.
>>
>> diff --git a/osaf/services/saf/immsv/immd/immd.h 
>> b/osaf/services/saf/immsv/immd/immd.h
>> --- a/osaf/services/saf/immsv/immd/immd.h
>> +++ b/osaf/services/saf/immsv/immd/immd.h
>> @@ -30,6 +30,9 @@
>>  #ifndef IMMD_H
>>  #define IMMD_H
>>
>> +#include <stdint.h>
>> +#include "saAmf.h"
>> +
>>  #include "immsv.h"
>>  #include "mbcsv_papi.h"
>>  #include "immd_cb.h"
>> @@ -41,4 +44,6 @@
>>
>>  IMMD_CB *immd_cb;
>>
>> +extern uint32_t initialize_for_assignment(IMMD_CB *cb, SaAmfHAStateT 
>> ha_state);
>> +
>>  #endif   /* IMMD_H */
>> diff --git a/osaf/services/saf/immsv/immd/immd_amf.c 
>> b/osaf/services/saf/immsv/immd/immd_amf.c
>> --- a/osaf/services/saf/immsv/immd/immd_amf.c
>> +++ b/osaf/services/saf/immsv/immd/immd_amf.c
>> @@ -190,6 +190,13 @@ static void immd_saf_csi_set_cb(SaInvoca
>>
>>      prev_ha_state = cb->ha_state;
>>
>> +    if ((rc = initialize_for_assignment(cb, new_haState))
>> +        != NCSCC_RC_SUCCESS) {
>> +        TRACE("initialize_for_assignment FAILED %u", (unsigned) rc);
>> +        error = SA_AIS_ERR_FAILED_OPERATION;
>> +        goto response;
>> +    }
>> +
>>      /* Invoke the appropriate state handler routine */
>>      switch (new_haState) {
>>      case SA_AMF_HA_ACTIVE:
>> @@ -242,7 +249,7 @@ static void immd_saf_csi_set_cb(SaInvoca
>>          TRACE_5("Inform MBCSV of HA state change to %s",
>>              (new_haState == SA_AMF_HA_ACTIVE) ? "ACTIVE" : "STANDBY");
>>
>> -        if (immd_mbcsv_chgrole(cb) != NCSCC_RC_SUCCESS) {
>> +        if (immd_mbcsv_chgrole(cb, new_haState) != NCSCC_RC_SUCCESS) {
>>              LOG_WA("immd_mbcsv_chgrole FAILED");
>>              error = SA_AIS_ERR_FAILED_OPERATION;
>>              goto response;
>> diff --git a/osaf/services/saf/immsv/immd/immd_cb.h 
>> b/osaf/services/saf/immsv/immd/immd_cb.h
>> --- a/osaf/services/saf/immsv/immd/immd_cb.h
>> +++ b/osaf/services/saf/immsv/immd/immd_cb.h
>> @@ -92,6 +92,7 @@ typedef struct immd_cb_tag {
>>      bool is_loc_immnd_up;
>>      bool is_rem_immnd_up;
>>      bool is_quiesced_set;    /* ABT new csi_set */
>> +    bool fully_initialized;
>>      bool is_loading;  /* True when loading */
>>      MDS_DEST loc_immnd_dest;
>>      MDS_DEST rem_immnd_dest;    /*ABT used if local immnd crashes ? */
>> diff --git a/osaf/services/saf/immsv/immd/immd_db.c 
>> b/osaf/services/saf/immsv/immd/immd_db.c
>> --- a/osaf/services/saf/immsv/immd/immd_db.c
>> +++ b/osaf/services/saf/immsv/immd/immd_db.c
>> @@ -262,6 +262,12 @@ uint32_t immd_cb_db_init(IMMD_CB *cb)
>>          cb->is_loading = true;
>>      }
>>
>> +    cb->fully_initialized = false;
>> +    cb->mbcsv_sel_obj = -1;
>> +    cb->usr1_sel_obj.raise_obj = -1;
>> +    cb->usr1_sel_obj.rmv_obj = -1;
>> +    cb->amf_sel_obj = -1;
>> +
>>      return (NCSCC_RC_SUCCESS);
>>  }
>>
>> diff --git a/osaf/services/saf/immsv/immd/immd_evt.c 
>> b/osaf/services/saf/immsv/immd/immd_evt.c
>> --- a/osaf/services/saf/immsv/immd/immd_evt.c
>> +++ b/osaf/services/saf/immsv/immd/immd_evt.c
>> @@ -26,6 +26,7 @@
>>
>>  #include "immsv.h"
>>  #include "immsv_evt.h"
>> +#include <stdlib.h>
>>  #include "immd.h"
>>  #include "ncssysf_mem.h"
>>  #include "osaf_extended_name.h"
>> @@ -2376,7 +2377,15 @@ static uint32_t immd_evt_proc_rda_callba
>>  {
>>      uint32_t rc = NCSCC_RC_SUCCESS;
>>
>> -    TRACE_ENTER();
>> +    TRACE_ENTER2("%d", (int) evt->info.rda_info.io_role);
>> +
>> +    if ((rc = initialize_for_assignment(cb,
>> +        (SaAmfHAStateT) evt->info.rda_info.io_role))
>> +        != NCSCC_RC_SUCCESS) {
>> +        LOG_ER("initialize_for_assignment FAILED %u", (unsigned) rc);
>> +        exit(EXIT_FAILURE);
>> +    }
>> +
>>      if ((cb->ha_state != SA_AMF_HA_ACTIVE) &&
>>          (evt->info.rda_info.io_role == PCS_RDA_ACTIVE)) {
>>          cb->mds_role = V_DEST_RL_ACTIVE;
>> @@ -2389,7 +2398,7 @@ static uint32_t immd_evt_proc_rda_callba
>>              goto done;
>>          }
>>
>> -        if (immd_mbcsv_chgrole(cb) != NCSCC_RC_SUCCESS) {
>> +        if (immd_mbcsv_chgrole(cb, cb->ha_state) != NCSCC_RC_SUCCESS) {
>>              LOG_WA("immd_mbcsv_chgrole FAILED");
>>              goto done;
>>          }
>> @@ -2426,7 +2435,7 @@ static uint32_t immd_evt_mds_quiesced_ac
>>          cb->is_quiesced_set = false;
>>
>>          /* Inform mbcsv about the changed role */
>> -        if (immd_mbcsv_chgrole(cb) != NCSCC_RC_SUCCESS)
>> +        if (immd_mbcsv_chgrole(cb, cb->ha_state) != NCSCC_RC_SUCCESS)
>>              LOG_WA("mbcsv_chgrole to quiesced FAILED");
>>
>>          /* Finally respond to AMF */
>> diff --git a/osaf/services/saf/immsv/immd/immd_main.c 
>> b/osaf/services/saf/immsv/immd/immd_main.c
>> --- a/osaf/services/saf/immsv/immd/immd_main.c
>> +++ b/osaf/services/saf/immsv/immd/immd_main.c
>> @@ -149,22 +149,6 @@ static uint32_t immd_initialize(void)
>>          goto done;
>>      }
>>
>> -    if ((rc = immd_mds_register(immd_cb)) != NCSCC_RC_SUCCESS) {
>> -        LOG_ER("immd_mds_register FAILED %d", rc);
>> -        goto done;
>> -    }
>> -
>> -    /* Initialise with the MBCSV service  */
>> -    if ((rc = immd_mbcsv_register(immd_cb)) != NCSCC_RC_SUCCESS) {
>> -        LOG_ER("immd_mbcsv_register FAILED %d", rc);
>> -        goto done;
>> -    }
>> -
>> -    if ((rc = immd_mbcsv_chgrole(immd_cb)) != NCSCC_RC_SUCCESS) {
>> -        LOG_ER("immd_mbcsv_chgrole FAILED %d", rc);
>> -        goto done;
>> -    }
>> -
>>      /* Create a selection object */
>>      if (immd_cb->nid_started &&
>>          (rc = ncs_sel_obj_create(&immd_cb->usr1_sel_obj)) != 
>> NCSCC_RC_SUCCESS) {
>> @@ -189,6 +173,12 @@ static uint32_t immd_initialize(void)
>>          goto done;
>>      }
>>
>> +    if ((rc = initialize_for_assignment(immd_cb, immd_cb->ha_state)) !=
>> +        NCSCC_RC_SUCCESS) {
>> +        LOG_ER("initialize_for_assignment FAILED %u", (unsigned) rc);
>> +        goto done;
>> +    }
>> +
>>      syslog(LOG_INFO, "Initialization Success, role %s",
>>             (immd_cb->ha_state == SA_AMF_HA_ACTIVE) ? "ACTIVE" : 
>> "STANDBY");
>>
>> @@ -203,6 +193,34 @@ done:
>>      return rc;
>>  }
>>
>> +uint32_t initialize_for_assignment(IMMD_CB *cb, SaAmfHAStateT ha_state)
>> +{
>> +    TRACE_ENTER2("ha_state = %d", (int) ha_state);
>> +    uint32_t rc = NCSCC_RC_SUCCESS;
>> +    if (cb->fully_initialized || ha_state == SA_AMF_HA_QUIESCED) 
>> goto done;
>> +    cb->ha_state = ha_state;
>> +    if ((rc = immd_mds_register(cb, ha_state)) != NCSCC_RC_SUCCESS) {
>> +        LOG_ER("immd_mds_register FAILED %d", rc);
>> +        goto done;
>> +    }
>> +    if ((rc = immd_mbcsv_register(cb)) != NCSCC_RC_SUCCESS) {
>> +        LOG_ER("immd_mbcsv_register FAILED %d", rc);
>> +        immd_mds_unregister(cb);
>> +        goto done;
>> +    }
>> +    if ((rc = immd_mbcsv_chgrole(cb, ha_state)) != NCSCC_RC_SUCCESS) {
>> +        LOG_ER("immd_mbcsv_chgrole FAILED %d", rc);
>> +        immd_mbcsv_close(cb);
>> +        immd_mbcsv_finalize(cb);
>> +        immd_mds_unregister(cb);
>> +        goto done;
>> +    }
>> +    cb->fully_initialized = true;
>> +done:
>> +    TRACE_LEAVE2("rc = %u", rc);
>> +    return rc;
>> +}
>> +
>>  /**
>>   * The main routine for the IMM director daemon.
>>   * @param argc
>> @@ -260,12 +278,13 @@ int main(int argc, char *argv[])
>>      fds[FD_AMF].fd = immd_cb->nid_started ?
>>          immd_cb->usr1_sel_obj.rmv_obj : immd_cb->amf_sel_obj;
>>      fds[FD_AMF].events = POLLIN;
>> -    fds[FD_MBCSV].fd = immd_cb->mbcsv_sel_obj;
>> -    fds[FD_MBCSV].events = POLLIN;
>>      fds[FD_MBX].fd = mbx_fd.rmv_obj;
>>      fds[FD_MBX].events = POLLIN;
>>
>>      while (1) {
>> +        fds[FD_MBCSV].fd = immd_cb->mbcsv_sel_obj;
>> +        fds[FD_MBCSV].events = POLLIN;
>> +
>>          int ret = poll(fds, 4, timeout);
>>
>>          if (ret == -1) {
>> diff --git a/osaf/services/saf/immsv/immd/immd_mbcsv.c 
>> b/osaf/services/saf/immsv/immd/immd_mbcsv.c
>> --- a/osaf/services/saf/immsv/immd/immd_mbcsv.c
>> +++ b/osaf/services/saf/immsv/immd/immd_mbcsv.c
>> @@ -282,7 +282,7 @@ uint32_t immd_mbcsv_selobj_get(IMMD_CB *
>>   *                          Role Active - send ckpt data to multiple 
>> standby
>>   *                           peers
>>  
>> ******************************************************************************/
>>  
>>
>> -uint32_t immd_mbcsv_chgrole(IMMD_CB *cb)
>> +uint32_t immd_mbcsv_chgrole(IMMD_CB *cb, SaAmfHAStateT ha_state)
>>  {
>>      NCS_MBCSV_ARG arg;
>>      uint32_t rc = NCSCC_RC_SUCCESS;
>> @@ -292,7 +292,7 @@ uint32_t immd_mbcsv_chgrole(IMMD_CB *cb)
>>      arg.i_op = NCS_MBCSV_OP_CHG_ROLE;
>>      arg.i_mbcsv_hdl = cb->mbcsv_handle;
>>      arg.info.chg_role.i_ckpt_hdl = cb->o_ckpt_hdl;
>> -    arg.info.chg_role.i_ha_state = cb->ha_state;
>> +    arg.info.chg_role.i_ha_state = ha_state;
>>
>>      /*  ha_state is assigned at the time of amf_init where 
>> csi_set_callback
>>         will assign the state */
>> diff --git a/osaf/services/saf/immsv/immd/immd_mds.c 
>> b/osaf/services/saf/immsv/immd/immd_mds.c
>> --- a/osaf/services/saf/immsv/immd/immd_mds.c
>> +++ b/osaf/services/saf/immsv/immd/immd_mds.c
>> @@ -91,7 +91,7 @@ uint32_t immd_mds_vdest_create(IMMD_CB *
>>      Notes         : None.
>>  
>> ****************************************************************************/
>>  
>>
>> -uint32_t immd_mds_register(IMMD_CB *cb)
>> +uint32_t immd_mds_register(IMMD_CB *cb, SaAmfHAStateT ha_state)
>>  {
>>      uint32_t rc = NCSCC_RC_SUCCESS;
>>      NCSMDS_INFO svc_info;
>> @@ -106,10 +106,10 @@ uint32_t immd_mds_register(IMMD_CB *cb)
>>      }
>>
>>      /* Set the role of MDS  ABT added new code see lgs_mds.c 
>> lgs_mds_init */
>> -    if (cb->ha_state == SA_AMF_HA_ACTIVE) {
>> +    if (ha_state == SA_AMF_HA_ACTIVE) {
>>          TRACE_5("Set MDS role to ACTIVE");
>>          cb->mds_role = V_DEST_RL_ACTIVE;
>> -    } else if (cb->ha_state == SA_AMF_HA_STANDBY) {
>> +    } else if (ha_state == SA_AMF_HA_STANDBY) {
>>          TRACE_5("Set MDS role to STANDBY");
>>          cb->mds_role = V_DEST_RL_STANDBY;
>>      } else {
>> diff --git a/osaf/services/saf/immsv/immd/immd_mds.h 
>> b/osaf/services/saf/immsv/immd/immd_mds.h
>> --- a/osaf/services/saf/immsv/immd/immd_mds.h
>> +++ b/osaf/services/saf/immsv/immd/immd_mds.h
>> @@ -18,7 +18,9 @@
>>  #ifndef IMMD_MDS_H
>>  #define IMMD_MDS_H
>>
>> -uint32_t immd_mds_register(IMMD_CB *cb);
>> +#include "saAmf.h"
>> +
>> +uint32_t immd_mds_register(IMMD_CB *cb, SaAmfHAStateT ha_state);
>>  void immd_mds_unregister(IMMD_CB *cb);
>>  uint32_t immd_mds_msg_sync_send(IMMD_CB *cb, uint32_t to_svc, 
>> MDS_DEST to_dest,
>>                        IMMSV_EVT *i_evt, IMMSV_EVT **o_evt, uint32_t 
>> timeout);
>> diff --git a/osaf/services/saf/immsv/immd/immd_proc.h 
>> b/osaf/services/saf/immsv/immd/immd_proc.h
>> --- a/osaf/services/saf/immsv/immd/immd_proc.h
>> +++ b/osaf/services/saf/immsv/immd/immd_proc.h
>> @@ -38,7 +38,7 @@ void immd_pending_payload_discards(IMMD_
>>
>>  void immd_cb_dump(void);
>>
>> -uint32_t immd_mbcsv_chgrole(IMMD_CB *cb);
>> +uint32_t immd_mbcsv_chgrole(IMMD_CB *cb, SaAmfHAStateT ha_state);
>>
>>  uint32_t immd_mbcsv_encode_proc(NCS_MBCSV_CB_ARG *arg);
>>  uint32_t immd_get_slot_and_subslot_id_from_mds_dest(MDS_DEST dest);
>> diff --git a/osaf/services/saf/immsv/immd/immd_sbedu.h 
>> b/osaf/services/saf/immsv/immd/immd_sbedu.h
>> --- a/osaf/services/saf/immsv/immd/immd_sbedu.h
>> +++ b/osaf/services/saf/immsv/immd/immd_sbedu.h
>> @@ -28,7 +28,7 @@ uint32_t immd_mbcsv_async_update(IMMD_CB
>>  uint32_t immd_mbcsv_register(IMMD_CB *cb);
>>  uint32_t immd_mbcsv_callback(NCS_MBCSV_CB_ARG *arg);
>>  uint32_t immd_mbcsv_finalize(IMMD_CB *cb);
>> -uint32_t immd_mbcsv_chgrole(IMMD_CB *cb);
>> +uint32_t immd_mbcsv_chgrole(IMMD_CB *cb, SaAmfHAStateT ha_state);
>>  uint32_t immd_process_sb_fevs(IMMD_CB *cb, IMMSV_FEVS *fevs_msg);
>>  uint32_t immd_process_sb_count(IMMD_CB *cb, uint32_t count, uint32_t 
>> evt_type);
>>  uint32_t immd_process_node_accept(IMMD_CB *cb, IMMSV_D2ND_CONTROL 
>> *ctrl);
>>
>>
>
>



------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to