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