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);
------------------------------------------------------------------------------
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel