Hi!
Here is a re-based version of this patch that can be pushed on the
default branch after [#1621] was pushed. It also contain improved
handling of a couple of error codes (in particular: TIMEOUT) from
saClmInitialize(), to work better together with ticket [#1621]. Could
you please take a look before I push?
thanks,
Anders Widell
On 03/31/2016 07:28 AM, A V Mahesh wrote:
ACK tested
-AVM
On 3/18/2016 9:32 PM, Anders Widell wrote:
osaf/libs/common/cpsv/include/cpd_cb.h | 1 -
osaf/services/saf/cpsv/cpd/cpd_db.c | 15 ++-------------
osaf/services/saf/cpsv/cpnd/cpnd_db.c | 15 ++-------------
3 files changed, 4 insertions(+), 27 deletions(-)
Use the new support function GetSlotSubslotIdFromNodeId() to extract
a 32-bit
integer containing the slot ID and subslot ID from a Node ID.
diff --git a/osaf/libs/common/cpsv/include/cpd_cb.h
b/osaf/libs/common/cpsv/include/cpd_cb.h
--- a/osaf/libs/common/cpsv/include/cpd_cb.h
+++ b/osaf/libs/common/cpsv/include/cpd_cb.h
@@ -180,7 +180,6 @@ typedef struct cpd_cb_tag {
bool is_quiesced_set;
MDS_DEST loc_cpnd_dest;
MDS_DEST rem_cpnd_dest;
- /*MDS_DEST cpnd_dests[NCS_MAX_SLOTS]; */
NCS_PATRICIA_TREE cpnd_tree;
diff --git a/osaf/services/saf/cpsv/cpd/cpd_db.c
b/osaf/services/saf/cpsv/cpd/cpd_db.c
--- a/osaf/services/saf/cpsv/cpd/cpd_db.c
+++ b/osaf/services/saf/cpsv/cpd/cpd_db.c
@@ -1209,12 +1209,7 @@ uint32_t cpd_process_cpnd_del(CPD_CB *cb
uint32_t cpd_get_slot_sub_id_from_mds_dest(MDS_DEST dest)
{
- NCS_PHY_SLOT_ID phy_slot;
- NCS_SUB_SLOT_ID sub_slot;
-
- m_NCS_GET_PHYINFO_FROM_NODE_ID(m_NCS_NODE_ID_FROM_MDS_DEST(dest),
NULL, &phy_slot, &sub_slot);
-
- return ((sub_slot * NCS_SUB_SLOT_MAX) + (phy_slot));
+ return
GetSlotSubslotIdFromNodeId(m_NCS_NODE_ID_FROM_MDS_DEST(dest));
}
/********************************************************************************
@@ -1228,13 +1223,7 @@ uint32_t cpd_get_slot_sub_id_from_mds_de
uint32_t cpd_get_slot_sub_slot_id_from_node_id(NCS_NODE_ID
i_node_id)
{
- NCS_PHY_SLOT_ID phy_slot;
- NCS_SUB_SLOT_ID sub_slot;
-
- m_NCS_GET_PHYINFO_FROM_NODE_ID(i_node_id, NULL, &phy_slot,
&sub_slot);
-
- return ((sub_slot * NCS_SUB_SLOT_MAX) + (phy_slot));
-
+ return GetSlotSubslotIdFromNodeId(i_node_id);
}
/*******************************************************************************************
diff --git a/osaf/services/saf/cpsv/cpnd/cpnd_db.c
b/osaf/services/saf/cpsv/cpnd/cpnd_db.c
--- a/osaf/services/saf/cpsv/cpnd/cpnd_db.c
+++ b/osaf/services/saf/cpsv/cpnd/cpnd_db.c
@@ -756,12 +756,7 @@ void cpnd_allrepl_write_evt_node_tree_de
*********************************************************************************/
uint32_t cpnd_get_slot_sub_slot_id_from_mds_dest(MDS_DEST dest)
{
- NCS_PHY_SLOT_ID phy_slot;
- NCS_SUB_SLOT_ID sub_slot;
-
- m_NCS_GET_PHYINFO_FROM_NODE_ID(m_NCS_NODE_ID_FROM_MDS_DEST(dest),
NULL, &phy_slot, &sub_slot);
-
- return ((sub_slot * NCS_SUB_SLOT_MAX) + (phy_slot));
+ return
GetSlotSubslotIdFromNodeId(m_NCS_NODE_ID_FROM_MDS_DEST(dest));
}
/***********************************************************************************
@@ -772,13 +767,7 @@ uint32_t cpnd_get_slot_sub_slot_id_from_
*********************************************************************************/
uint32_t cpnd_get_slot_sub_slot_id_from_node_id(NCS_NODE_ID i_node_id)
{
- NCS_PHY_SLOT_ID phy_slot;
- NCS_SUB_SLOT_ID sub_slot;
-
- m_NCS_GET_PHYINFO_FROM_NODE_ID(i_node_id, NULL, &phy_slot,
&sub_slot);
-
- return ((sub_slot * NCS_SUB_SLOT_MAX) + (phy_slot));
-
+ return GetSlotSubslotIdFromNodeId(i_node_id);
}
/******************************************************************************************
# HG changeset patch
# Parent 406c07b84e52c76518cda0282b033e6db2d32175
ckpt: Support AMF configurations containing more than two OpenSAF 2N SUs [#79]
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. The directors on a
spare system controller (i.e. a controller that initially doesn't get an active
or standby assignment) will start up and register with AMF, but other than that
they will not do anything and just wait for a role change. When a role change
happens, they will continue with the rest of the start-up sequence and initalize
MDS so that they become visible on the network.
Locking of an OpenSAF 2N SU is currently not supported on a system configured
with more than two OpenSAF 2N SUs. This means that a controller node can start
up as a spare, but once it has received an active or standby assignment it
cannot go back to the spare role without a node reboot.
diff --git a/osaf/libs/common/cpsv/include/cpd_cb.h b/osaf/libs/common/cpsv/include/cpd_cb.h
--- a/osaf/libs/common/cpsv/include/cpd_cb.h
+++ b/osaf/libs/common/cpsv/include/cpd_cb.h
@@ -18,7 +18,9 @@
#ifndef CPD_CB_H
#define CPD_CB_H
+#include <stdbool.h>
#include <saClm.h>
+#include "cpd_tmr.h"
#define CPSV_CPD_MBCSV_VERSION 1
@@ -205,10 +207,12 @@ typedef struct cpd_cb_tag {
SaImmOiHandleT immOiHandle; /* IMM OI Handle */
SaSelectionObjectT imm_sel_obj; /*Selection object to wait for IMM events */
+ SaSelectionObjectT clm_sel_obj;
CPD_TMR ckpt_update_timer;
bool is_ckpt_updating;
bool scAbsenceAllowed;
+ bool fully_initialized;
} CPD_CB;
diff --git a/osaf/libs/common/cpsv/include/cpd_imm.h b/osaf/libs/common/cpsv/include/cpd_imm.h
--- a/osaf/libs/common/cpsv/include/cpd_imm.h
+++ b/osaf/libs/common/cpsv/include/cpd_imm.h
@@ -1,8 +1,8 @@
#include "cpd.h"
-extern SaAisErrorT cpd_imm_init(CPD_CB *cb);
+extern SaAisErrorT cpd_imm_init(SaImmOiHandleT* immOiHandle, SaSelectionObjectT* imm_sel_obj);
extern void cpd_imm_reinit_bg(CPD_CB * cb);
-extern void cpd_imm_declare_implementer(CPD_CB *cb);
+extern void cpd_imm_declare_implementer(SaImmOiHandleT* immOiHandle, SaSelectionObjectT* imm_sel_obj);
extern SaAisErrorT create_runtime_ckpt_object(CPD_CKPT_INFO_NODE *ckpt_node, SaImmOiHandleT immOiHandle);
extern SaAisErrorT create_runtime_replica_object(CPD_CKPT_REPLOC_INFO *ckpt_reploc_node, SaImmOiHandleT immOiHandle);
extern void cpd_create_association_class_dn(const SaNameT *child_dn, const SaNameT *parent_dn, const char *rdn_tag, SaNameT *dn);
diff --git a/osaf/libs/common/cpsv/include/cpd_init.h b/osaf/libs/common/cpsv/include/cpd_init.h
--- a/osaf/libs/common/cpsv/include/cpd_init.h
+++ b/osaf/libs/common/cpsv/include/cpd_init.h
@@ -26,6 +26,13 @@
This file consists of constats, enums and data structs used by cpd_init.c
******************************************************************************/
+#ifndef OPENSAF_OSAF_LIBS_COMMON_CPSV_INCLUDE_CPD_INIT_H_
+#define OPENSAF_OSAF_LIBS_COMMON_CPSV_INCLUDE_CPD_INIT_H_
+
+#include <stdint.h>
+#include "saAmf.h"
+#include "cpd_cb.h"
+
uint32_t gl_cpd_cb_hdl;
/* Macro to get the component name for the component type */
@@ -62,3 +69,8 @@ typedef struct cpd_create_info {
typedef struct cpd_destroy_info {
uint32_t dummy;
} CPD_DESTROY_INFO;
+
+extern uint32_t initialize_for_assignment(CPD_CB *cb,
+ SaAmfHAStateT ha_state);
+
+#endif /* OPENSAF_OSAF_LIBS_COMMON_CPSV_INCLUDE_CPD_INIT_H_ */
diff --git a/osaf/services/saf/cpsv/cpd/cpd_amf.c b/osaf/services/saf/cpsv/cpd/cpd_amf.c
--- a/osaf/services/saf/cpsv/cpd/cpd_amf.c
+++ b/osaf/services/saf/cpsv/cpd/cpd_amf.c
@@ -131,6 +131,16 @@ void cpd_saf_csi_set_cb(SaInvocationT in
TRACE_ENTER();
cb = ncshm_take_hdl(NCS_SERVICE_ID_CPD, gl_cpd_cb_hdl);
if (cb) {
+ if ((rc = initialize_for_assignment(cb, haState)) !=
+ NCSCC_RC_SUCCESS) {
+ LOG_ER("initialize_for_assignment FAILED %u", (unsigned) rc);
+ saErr = SA_AIS_ERR_FAILED_OPERATION;
+ saAmfResponse(cb->amf_hdl, invocation, saErr);
+ ncshm_give_hdl(cb->cpd_hdl);
+ m_CPSV_DBG_SINK(NCSCC_RC_FAILURE,
+ "cpd_saf_csi_set_cb: Initialization failed");
+ return;
+ }
if ((cb->ha_state == SA_AMF_HA_STANDBY) && (haState == SA_AMF_HA_ACTIVE)) {
if (cb->cold_or_warm_sync_on == true) {
@@ -163,11 +173,7 @@ void cpd_saf_csi_set_cb(SaInvocationT in
/* If this is the active server, become implementer again. */
/* If this is the active Director, become implementer */
- saErr = immutil_saImmOiImplementerSet(cb->immOiHandle, implementer_name);
- if (saErr != SA_AIS_OK){
- LOG_ER("cpd immOiImplmenterSet failed with err = %u",saErr);
- exit(EXIT_FAILURE);
- }
+ cpd_imm_declare_implementer(&cb->immOiHandle, &cb->imm_sel_obj);
/* anchor = cb->cpd_anc; */
} else if (SA_AMF_HA_QUIESCED == haState) {
mds_role = V_DEST_RL_QUIESCED;
diff --git a/osaf/services/saf/cpsv/cpd/cpd_db.c b/osaf/services/saf/cpsv/cpd/cpd_db.c
--- a/osaf/services/saf/cpsv/cpd/cpd_db.c
+++ b/osaf/services/saf/cpsv/cpd/cpd_db.c
@@ -922,6 +922,11 @@ uint32_t cpd_cb_db_init(CPD_CB *cb)
TRACE_ENTER();
cb->nxt_ckpt_id = 1;
+ cb->mbcsv_sel_obj = -1;
+ cb->ha_state = SA_AMF_HA_QUIESCED;
+ cb->imm_sel_obj = -1;
+ cb->clm_sel_obj = -1;
+ cb->fully_initialized = false;
rc = cpd_ckpt_tree_init(cb);
if (rc != NCSCC_RC_SUCCESS) {
diff --git a/osaf/services/saf/cpsv/cpd/cpd_imm.c b/osaf/services/saf/cpsv/cpd/cpd_imm.c
--- a/osaf/services/saf/cpsv/cpd/cpd_imm.c
+++ b/osaf/services/saf/cpsv/cpd/cpd_imm.c
@@ -467,13 +467,14 @@ SaAisErrorT create_runtime_ckpt_object(C
*
* Notes : None.
*****************************************************************************/
-SaAisErrorT cpd_imm_init(CPD_CB *cb)
+SaAisErrorT cpd_imm_init(SaImmOiHandleT* immOiHandle, SaSelectionObjectT* imm_sel_obj)
{
SaAisErrorT rc;
immutilWrapperProfile.errorsAreFatal = 0;
- rc = immutil_saImmOiInitialize_2(&cb->immOiHandle, &oi_cbks, &imm_version);
+
+ rc = immutil_saImmOiInitialize_2(immOiHandle, &oi_cbks, &imm_version);
if (rc == SA_AIS_OK) {
- rc = immutil_saImmOiSelectionObjectGet(cb->immOiHandle, &cb->imm_sel_obj);
+ rc = immutil_saImmOiSelectionObjectGet(*immOiHandle, imm_sel_obj);
}
return rc;
}
@@ -489,25 +490,46 @@ SaAisErrorT cpd_imm_init(CPD_CB *cb)
*
* Notes : None.
*****************************************************************************/
-static void *_cpd_imm_declare_implementer(void *cb)
+void cpd_imm_declare_implementer(SaImmOiHandleT* immOiHandle, SaSelectionObjectT* imm_sel_obj)
{
SaAisErrorT error = SA_AIS_OK;
- CPD_CB *cpd_cb = (CPD_CB *)cb;
TRACE_ENTER();
- error = saImmOiImplementerSet(cpd_cb->immOiHandle, implementer_name);
- unsigned int nTries = 1;
- while (error == SA_AIS_ERR_TRY_AGAIN && nTries < 25) {
- usleep(400 * 1000);
- error = saImmOiImplementerSet(cpd_cb->immOiHandle, implementer_name);
- nTries++;
- }
- if (error != SA_AIS_OK) {
- LOG_ER("saImmOiImplementerSet FAILED, rc = %u", error);
- exit(EXIT_FAILURE);
+ static const unsigned sleep_delay_ms = 400;
+ static const unsigned max_waiting_time_ms = 60 * 1000;
+ unsigned msecs_waited = 0;
+ for (;;) {
+ if (msecs_waited >= max_waiting_time_ms) {
+ LOG_ER("Timeout in cpd_imm_declare_implementer");
+ exit(EXIT_FAILURE);
+ }
+
+ error = saImmOiImplementerSet(*immOiHandle, implementer_name);
+ while (error == SA_AIS_ERR_TRY_AGAIN && msecs_waited < max_waiting_time_ms) {
+ usleep(sleep_delay_ms * 1000);
+ msecs_waited += sleep_delay_ms;
+ error = saImmOiImplementerSet(*immOiHandle, implementer_name);
+ }
+ if (error == SA_AIS_ERR_TIMEOUT || error == SA_AIS_ERR_BAD_HANDLE) {
+ LOG_WA("saImmOiImplementerSet returned %u", (unsigned) error);
+ usleep(sleep_delay_ms * 1000);
+ msecs_waited += sleep_delay_ms;
+ saImmOiFinalize(*immOiHandle);
+ *immOiHandle = 0;
+ *imm_sel_obj = -1;
+ if ((error = cpd_imm_init(immOiHandle, imm_sel_obj)) != SA_AIS_OK) {
+ LOG_ER("cpd_imm_init FAILED, rc = %u", (unsigned) error);
+ exit(EXIT_FAILURE);
+ }
+ continue;
+ }
+ if (error != SA_AIS_OK) {
+ LOG_ER("saImmOiImplementerSet FAILED, rc = %u", (unsigned) error);
+ exit(EXIT_FAILURE);
+ }
+ break;
}
TRACE_LEAVE();
- return NULL;
}
@@ -664,13 +686,17 @@ static void *cpd_imm_reinit_thread(void
{
SaAisErrorT error = SA_AIS_OK;
CPD_CB *cb = (CPD_CB *)_cb;
+ SaImmOiHandleT immOiHandle;
+ SaSelectionObjectT imm_sel_obj;
TRACE_ENTER();
/* Reinitiate IMM */
- error = cpd_imm_init(cb);
+ error = cpd_imm_init(&immOiHandle, &imm_sel_obj);
if (error == SA_AIS_OK) {
/* If this is the active server, become implementer again. */
if (cb->ha_state == SA_AMF_HA_ACTIVE)
- _cpd_imm_declare_implementer(cb);
+ cpd_imm_declare_implementer(&immOiHandle, &imm_sel_obj);
+ cb->imm_sel_obj = imm_sel_obj;
+ cb->immOiHandle = immOiHandle;
}
else
{
@@ -741,11 +767,7 @@ SaAisErrorT cpd_clean_checkpoint_objects
goto done;
}
- rc = immutil_saImmOiImplementerSet(cb->immOiHandle, implementer_name);
- if (rc != SA_AIS_OK){
- LOG_ER("cpd immOiImplmenterSet failed with err = %u", rc);
- goto done;
- }
+ cpd_imm_declare_implementer(&cb->immOiHandle, &cb->imm_sel_obj);
/* Initialize search for application checkpoint runtime objects
* Search for all objects of class 'SaCkptCheckpoint'
diff --git a/osaf/services/saf/cpsv/cpd/cpd_init.c b/osaf/services/saf/cpsv/cpd/cpd_init.c
--- a/osaf/services/saf/cpsv/cpd/cpd_init.c
+++ b/osaf/services/saf/cpsv/cpd/cpd_init.c
@@ -28,11 +28,13 @@
******************************************************************************/
#include <poll.h>
+#include <stdlib.h>
#include <daemon.h>
#include "cpd.h"
#include "cpd_imm.h"
#include <rda_papi.h>
+#include "osaf_time.h"
enum {
FD_TERM = 0,
@@ -171,10 +173,6 @@ static uint32_t cpd_lib_init(CPD_CREATE_
SaAisErrorT amf_error;
SaAmfHealthcheckKeyT healthy;
int8_t *health_key;
- SaVersionT clm_version;
-
- m_CPSV_GET_AMF_VER(clm_version);
- SaClmCallbacksT cpd_clm_cbk;
/* allocate a CB */
cb = m_MMGR_ALLOC_CPD_CB;
@@ -222,11 +220,6 @@ static uint32_t cpd_lib_init(CPD_CREATE_
goto cpd_ipc_att_fail;
}
- if ((rc = cpd_mds_register(cb)) != NCSCC_RC_SUCCESS) {
- LOG_ER("cpd mds register failed");
- goto cpd_mds_fail;
- }
-
/* Initialise with the AMF service */
if (cpd_amf_init(cb) != NCSCC_RC_SUCCESS) {
LOG_ER("cpd amf init failed");
@@ -241,26 +234,6 @@ static uint32_t cpd_lib_init(CPD_CREATE_
goto amf_reg_err;
}
- /* Initialise with the MBCSV service */
- if (cpd_mbcsv_register(cb) != NCSCC_RC_SUCCESS) {
- LOG_ER("cpd mbcsv register failed");
- goto mbcsv_reg_err;
- }
-
- cpd_clm_cbk.saClmClusterNodeGetCallback = NULL;
- cpd_clm_cbk.saClmClusterTrackCallback = cpd_clm_cluster_track_cb;
-
- if (saClmInitialize(&cb->clm_hdl, &cpd_clm_cbk, &clm_version) != SA_AIS_OK) {
- LOG_ER("cpd clm Initialize failed");
- goto cpd_clm_fail;
- }
-
- if (cpd_imm_init(cb) != SA_AIS_OK) {
- LOG_ER("cpd imm initialize failed ");
- goto cpd_imm_fail;
- }
-
-
/* Register with CLM */
memset(&healthy, 0, sizeof(healthy));
@@ -284,27 +257,23 @@ static uint32_t cpd_lib_init(CPD_CREATE_
if (amf_error != SA_AIS_OK) {
LOG_ER("cpd health check start failed");
}
+
+ if ((rc = initialize_for_assignment(cb, cb->ha_state)) !=
+ NCSCC_RC_SUCCESS) {
+ LOG_ER("initialize_for_assignment FAILED %u", (unsigned) rc);
+ exit(EXIT_FAILURE);
+ }
+
TRACE_LEAVE();
return NCSCC_RC_SUCCESS;
- cpd_imm_fail:
cpd_mab_fail:
- cpd_mds_unregister(cb);
- cpd_clm_fail:
- saClmFinalize(cb->clm_hdl);
-
- cpd_mbcsv_finalize(cb);
-
- mbcsv_reg_err:
cpd_amf_deregister(cb);
amf_reg_err:
cpd_amf_de_init(cb);
amf_init_err:
- cpd_mds_unregister(cb);
-
- cpd_mds_fail:
m_NCS_IPC_DETACH(&cb->cpd_mbx, cpd_clear_mbx, cb);
cpd_ipc_att_fail:
@@ -326,6 +295,83 @@ static uint32_t cpd_lib_init(CPD_CREATE_
return (rc);
}
+uint32_t initialize_for_assignment(CPD_CB *cb, SaAmfHAStateT ha_state)
+{
+ TRACE_ENTER2("ha_state = %d", (int) ha_state);
+ SaClmCallbacksT cpd_clm_cbk;
+ uint32_t rc = NCSCC_RC_SUCCESS;
+ SaAisErrorT error;
+ if (cb->fully_initialized || ha_state == SA_AMF_HA_QUIESCED) {
+ goto done;
+ }
+ cb->ha_state = ha_state;
+ if ((rc = cpd_mds_register(cb)) != NCSCC_RC_SUCCESS) {
+ LOG_ER("cpd mds register failed");
+ goto cpd_mds_fail;
+ }
+ /* Initialise with the MBCSV service */
+ if ((rc = cpd_mbcsv_register(cb)) != NCSCC_RC_SUCCESS) {
+ LOG_ER("cpd mbcsv register failed");
+ goto mbcsv_reg_err;
+ }
+
+ cpd_clm_cbk.saClmClusterNodeGetCallback = NULL;
+ cpd_clm_cbk.saClmClusterTrackCallback = cpd_clm_cluster_track_cb;
+
+ for (;;) {
+ SaVersionT clm_version;
+ m_CPSV_GET_AMF_VER(clm_version);
+ error = saClmInitialize(&cb->clm_hdl, &cpd_clm_cbk, &clm_version);
+ if (error == SA_AIS_ERR_TRY_AGAIN ||
+ error == SA_AIS_ERR_TIMEOUT ||
+ error == SA_AIS_ERR_UNAVAILABLE) {
+ if (error != SA_AIS_ERR_TRY_AGAIN) {
+ LOG_WA("saClmInitialize returned %u",
+ (unsigned) error);
+ }
+ osaf_nanosleep(&kHundredMilliseconds);
+ continue;
+ }
+ if (error == SA_AIS_OK) break;
+ LOG_ER("Failed to Initialize with CLM: %u", error);
+ rc = NCSCC_RC_FAILURE;
+ goto cpd_clm_fail;
+ }
+
+ error = saClmSelectionObjectGet(cb->clm_hdl, &cb->clm_sel_obj);
+ if (error != SA_AIS_OK) {
+ LOG_ER("cpd clm selectionobjget failed %u",error);
+ rc = NCSCC_RC_FAILURE;
+ goto cpd_imm_fail;
+ }
+
+ error = saClmClusterTrack(cb->clm_hdl, SA_TRACK_CHANGES_ONLY, NULL);
+ if (error != SA_AIS_OK) {
+ LOG_ER("cpd clm cluster track failed %u",error);
+ rc = NCSCC_RC_FAILURE;
+ goto cpd_imm_fail;
+ }
+
+ if (cpd_imm_init(&cb->immOiHandle, &cb->imm_sel_obj) != SA_AIS_OK) {
+ LOG_ER("cpd imm initialize failed ");
+ rc = NCSCC_RC_FAILURE;
+ goto cpd_imm_fail;
+ }
+ cb->fully_initialized = true;
+done:
+ TRACE_LEAVE();
+ return rc;
+cpd_imm_fail:
+ saClmFinalize(cb->clm_hdl);
+cpd_clm_fail:
+ cpd_mbcsv_finalize(cb);
+mbcsv_reg_err:
+ cpd_mds_unregister(cb);
+cpd_mds_fail:
+ TRACE_LEAVE2("rc = %u", rc);
+ return rc;
+}
+
/****************************************************************************
* Name : cpd_lib_destroy
*
@@ -434,7 +480,7 @@ void cpd_main_process(CPD_CB *cb)
NCS_SEL_OBJ mbx_fd;
SYSF_MBX mbx = cb->cpd_mbx;
NCS_MBCSV_ARG mbcsv_arg;
- SaSelectionObjectT amf_sel_obj, clm_sel_obj;
+ SaSelectionObjectT amf_sel_obj;
SaAisErrorT error = SA_AIS_OK;
int term_fd;
SaAmfHAStateT rda_role = SA_AMF_HA_STANDBY;
@@ -445,20 +491,9 @@ void cpd_main_process(CPD_CB *cb)
LOG_ER("cpd amf selectionobjget failed %u",error);
return;
}
- error = saClmSelectionObjectGet(cb->clm_hdl, &clm_sel_obj);
- if (error != SA_AIS_OK) {
- LOG_ER("cpd clm selectionobjget failed %u",error);
- return;
- }
daemon_sigterm_install(&term_fd);
- error = saClmClusterTrack(cb->clm_hdl, SA_TRACK_CHANGES_ONLY, NULL);
- if (error != SA_AIS_OK) {
- LOG_ER("cpd clm cluster track failed %u",error);
- return;
- }
-
/* Get the role. If role=SA_AMF_HA_ACTIVE, this is the first checkpoint director
* starting after both directors have been down.
* In this case delete old checkpoint runtime objects */
@@ -479,16 +514,16 @@ void cpd_main_process(CPD_CB *cb)
fds[FD_TERM].events = POLLIN;
fds[FD_AMF].fd = amf_sel_obj;
fds[FD_AMF].events = POLLIN;
- fds[FD_CLM].fd = clm_sel_obj;
- fds[FD_CLM].events = POLLIN;
- fds[FD_MBCSV].fd = 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 = cb->imm_sel_obj;
fds[FD_IMM].events = POLLIN;
while (1) {
+ fds[FD_CLM].fd = cb->clm_sel_obj;
+ fds[FD_CLM].events = POLLIN;
+ fds[FD_MBCSV].fd = cb->mbcsv_sel_obj;
+ fds[FD_MBCSV].events = POLLIN;
if (cb->immOiHandle != 0) {
fds[FD_IMM].fd = cb->imm_sel_obj;
@@ -574,6 +609,7 @@ void cpd_main_process(CPD_CB *cb)
*/
saImmOiFinalize(cb->immOiHandle);
cb->immOiHandle = 0;
+ cb->imm_sel_obj = -1;
cpd_imm_reinit_bg(cb);
} else if (error != SA_AIS_OK) {
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel