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