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

Reply via email to