Ack, Mathi.
>-----Original Message----- >From: Anders Widell [mailto:[email protected]] >Sent: Monday, February 29, 2016 8:07 PM >To: Mathivanan Naickan Palanivelu >Cc: [email protected] >Subject: [PATCH 1 of 1] evt: Support AMF configurations containing more than >two OpenSAF 2N SUs [#79] > > osaf/libs/common/edsv/include/eds_cb.h | 5 +- > osaf/libs/common/edsv/include/eds_dl_api.h | 5 ++ > osaf/services/saf/edsv/eds/eds_amf.c | 11 +++++ > osaf/services/saf/edsv/eds/eds_api.c | 64 ++++++++++++++++++--------- >-- > osaf/services/saf/edsv/eds/eds_cb.c | 14 ++++- > 5 files changed, 70 insertions(+), 29 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/libs/common/edsv/include/eds_cb.h >b/osaf/libs/common/edsv/include/eds_cb.h >--- a/osaf/libs/common/edsv/include/eds_cb.h >+++ b/osaf/libs/common/edsv/include/eds_cb.h >@@ -32,8 +32,10 @@ > #ifndef EDS_CB_H > #define EDS_CB_H > >+#include <stdbool.h> > #include <saClm.h> > #include <saImmOi.h> >+#include "saAmf.h" > > #include "ncssysf_tmr.h" > >@@ -56,7 +58,7 @@ struct eda_reg_list_tag; > #define UNLINKED_CHANNEL 0x08 > > /* Default HA state assigned locally during eds initialization */ -#define >EDS_HA_INIT_STATE 0 >+#define EDS_HA_INIT_STATE SA_AMF_HA_QUIESCED > /* Local limitations on patterns, filters &data */ #define >EDS_MAX_NUM_PATTERNS 20 #define EDS_MAX_PATTERN_SIZE 256 @@ - >262,6 +264,7 @@ typedef struct eds_cb_tag { > SaImmOiHandleT immOiHandle; /* IMM OI Handle */ > SaSelectionObjectT imm_sel_obj; /* Selection object to wait for >IMM events */ > bool is_impl_set; >+ bool fully_initialized; > } EDS_CB; > > >diff --git a/osaf/libs/common/edsv/include/eds_dl_api.h >b/osaf/libs/common/edsv/include/eds_dl_api.h >--- a/osaf/libs/common/edsv/include/eds_dl_api.h >+++ b/osaf/libs/common/edsv/include/eds_dl_api.h >@@ -32,6 +32,11 @@ > #ifndef _EDS_DL_API_H > #define _EDS_DL_API_H > >+#include <stdint.h> >+#include "saAmf.h" >+#include "eds_cb.h" >+ >+uint32_t initialize_for_assignment(EDS_CB *cb, SaAmfHAStateT ha_state); > uint32_t ncs_edsv_eds_lib_req(NCS_LIB_REQ_INFO *); > > #endif /* _EDS_DL_API_H */ >diff --git a/osaf/services/saf/edsv/eds/eds_amf.c >b/osaf/services/saf/edsv/eds/eds_amf.c >--- a/osaf/services/saf/edsv/eds/eds_amf.c >+++ b/osaf/services/saf/edsv/eds/eds_amf.c >@@ -27,6 +27,7 @@ This include file contains AMF interacti stuff. > >*********************************************************** >********************/ > #include "eds.h" >+#include "eds_dl_api.h" > > /* HA AMF statemachine & State handler definitions */ > >@@ -217,6 +218,16 @@ eds_amf_CSI_set_callback(SaInvocationT i > TRACE_LEAVE(); > return; > } else { >+ if ((rc = initialize_for_assignment(eds_cb, new_haState)) != >+ NCSCC_RC_SUCCESS) { >+ LOG_ER("initialize_for_assignment FAILED %u", >(unsigned) rc); >+ error = SA_AIS_ERR_FAILED_OPERATION; >+ saAmfResponse(eds_cb->amf_hdl, invocation, error); >+ ncshm_give_hdl(gl_eds_hdl); >+ TRACE_LEAVE(); >+ return; >+ } >+ > /* > * Handle Active to Active role change. > */ >diff --git a/osaf/services/saf/edsv/eds/eds_api.c >b/osaf/services/saf/edsv/eds/eds_api.c >--- a/osaf/services/saf/edsv/eds/eds_api.c >+++ b/osaf/services/saf/edsv/eds/eds_api.c >@@ -27,6 +27,7 @@ This include file contains SE api instru > > >*********************************************************** >********************/ > #include <configmake.h> >+#include <stdlib.h> > #include "eds.h" > #include "logtrace.h" > >@@ -105,26 +106,6 @@ static uint32_t eds_se_lib_init(NCS_LIB_ > /* Attach the IPC to the created thread */ > m_NCS_IPC_ATTACH(&eds_cb->mbx); > >- /* Bind to MDS */ >- if (NCSCC_RC_SUCCESS != (rc = eds_mds_init(eds_cb))) { >- TRACE_4("eds mds init failed"); >- m_NCS_IPC_RELEASE(&eds_cb->mbx, NULL); >- /* Release EDU handle */ >- m_NCS_EDU_HDL_FLUSH(&eds_cb->edu_hdl); >- ncshm_destroy_hdl(NCS_SERVICE_ID_EDS, gl_eds_hdl); >- gl_eds_hdl = 0; >- m_MMGR_FREE_EDS_CB(eds_cb); >- TRACE_LEAVE(); >- return rc; >- } >- >- /* Initialize and Register with CLM */ >- rc = eds_clm_init(eds_cb); >- if (rc != SA_AIS_OK) { >- TRACE_4("CLM Init failed. Exiting"); >- exit(EXIT_FAILURE); >- } >- > /* Initialize and Register with AMF */ > rc = eds_amf_register(eds_cb); > if (rc != NCSCC_RC_SUCCESS) { >@@ -132,10 +113,10 @@ static uint32_t eds_se_lib_init(NCS_LIB_ > exit(EXIT_FAILURE); > } > >- /* Initialize mbcsv interface */ >- if (NCSCC_RC_SUCCESS != (rc = eds_mbcsv_init(eds_cb))) { >- LOG_ER("eds mbcsv init failed"); >- /* Log it */ >+ if ((rc = initialize_for_assignment(eds_cb, eds_cb->ha_state)) != >+ NCSCC_RC_SUCCESS) { >+ LOG_ER("initialize_for_assignment FAILED %u", (unsigned) >rc); >+ exit(EXIT_FAILURE); > } > > TRACE("eds init done."); >@@ -143,6 +124,41 @@ static uint32_t eds_se_lib_init(NCS_LIB_ > return (rc); > } > >+uint32_t initialize_for_assignment(EDS_CB *cb, SaAmfHAStateT ha_state) >+{ >+ TRACE_ENTER2("ha_state = %d", (int) ha_state); >+ uint32_t rc = NCSCC_RC_SUCCESS; >+ SaAisErrorT error; >+ if (cb->fully_initialized || ha_state == SA_AMF_HA_QUIESCED) { >+ goto done; >+ } >+ >+ /* Bind to MDS */ >+ if (NCSCC_RC_SUCCESS != (rc = eds_mds_init(cb))) { >+ LOG_ER("eds mds init failed"); >+ goto done; >+ } >+ >+ /* Initialize and Register with CLM */ >+ error = eds_clm_init(cb); >+ if (error != SA_AIS_OK) { >+ LOG_ER("CLM Init failed: %u", (unsigned) error); >+ rc = NCSCC_RC_FAILURE; >+ goto done; >+ } >+ >+ /* Initialize mbcsv interface */ >+ if (NCSCC_RC_SUCCESS != (rc = eds_mbcsv_init(cb))) { >+ LOG_ER("eds mbcsv init failed"); >+ goto done; >+ } >+ >+ cb->fully_initialized = true; >+done: >+ TRACE_LEAVE2("rc = %u", rc); >+ return rc; >+} >+ > >/********************************************************** >****************** > * Name : eds_clear_mbx > * >diff --git a/osaf/services/saf/edsv/eds/eds_cb.c >b/osaf/services/saf/edsv/eds/eds_cb.c >--- a/osaf/services/saf/edsv/eds/eds_cb.c >+++ b/osaf/services/saf/edsv/eds/eds_cb.c >@@ -76,6 +76,11 @@ uint32_t eds_cb_init(EDS_CB *eds_cb) > eds_cb->ha_state = EDS_HA_INIT_STATE; > eds_cb->csi_assigned = false; > eds_cb->is_impl_set = false; >+ eds_cb->amfSelectionObject = -1; >+ eds_cb->mbcsv_sel_obj = -1; >+ eds_cb->clm_sel_obj = -1; >+ eds_cb->imm_sel_obj = -1; >+ eds_cb->fully_initialized = false; > > /* Assign Version. Currently, hardcoded, This will change later */ > m_GET_MY_VERSION(eds_cb->eds_version); >@@ -207,10 +212,6 @@ void eds_main_process(SYSF_MBX *mbx) > fds[FD_TERM].events = POLLIN; > fds[FD_AMF].fd = eds_cb->amfSelectionObject; > fds[FD_AMF].events = POLLIN; >- fds[FD_CLM].fd = eds_cb->clm_sel_obj; >- fds[FD_CLM].events = POLLIN; >- fds[FD_MBCSV].fd = eds_cb->mbcsv_sel_obj; >- fds[FD_MBCSV].events = POLLIN; > fds[FD_MBX].fd = mbx_fd.rmv_obj; > fds[FD_MBX].events = POLLIN; > fds[FD_IMM].fd = eds_cb->imm_sel_obj; >@@ -219,6 +220,10 @@ void eds_main_process(SYSF_MBX *mbx) > TRACE("Entering the forever loop"); > > while (1) { >+ fds[FD_CLM].fd = eds_cb->clm_sel_obj; >+ fds[FD_CLM].events = POLLIN; >+ fds[FD_MBCSV].fd = eds_cb->mbcsv_sel_obj; >+ fds[FD_MBCSV].events = POLLIN; > > if ((eds_cb->immOiHandle != 0) && (eds_cb->is_impl_set == >true)){ > fds[FD_IMM].fd = eds_cb->imm_sel_obj; @@ -294,6 >+299,7 @@ void eds_main_process(SYSF_MBX *mbx) > /* Invalidate the IMM OI handle. */ > saImmOiFinalize(eds_cb->immOiHandle); > eds_cb->immOiHandle = 0; >+ eds_cb->imm_sel_obj = -1; > eds_cb->is_impl_set = false; > eds_imm_reinit_bg(eds_cb); > ------------------------------------------------------------------------------ Transform Data into Opportunity. Accelerate data analysis in your applications with Intel Data Analytics Acceleration Library. Click to learn more. http://pubads.g.doubleclick.net/gampad/clk?id=278785471&iu=/4140 _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
