osaf/services/saf/logsv/lgs/lgs.h | 11 +- osaf/services/saf/logsv/lgs/lgs_amf.cc | 20 +- osaf/services/saf/logsv/lgs/lgs_cb.h | 2 +- osaf/services/saf/logsv/lgs/lgs_evt.cc | 27 +++- osaf/services/saf/logsv/lgs/lgs_imm.cc | 129 ++++++++++++++++-------- osaf/services/saf/logsv/lgs/lgs_main.cc | 159 ++++++++++++++++-------------- osaf/services/saf/logsv/lgs/lgs_mbcsv.cc | 12 +- osaf/services/saf/logsv/lgs/lgs_mbcsv.h | 7 +- osaf/services/saf/logsv/lgs/lgs_mds.cc | 6 +- 9 files changed, 223 insertions(+), 150 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/logsv/lgs/lgs.h b/osaf/services/saf/logsv/lgs/lgs.h --- a/osaf/services/saf/logsv/lgs/lgs.h +++ b/osaf/services/saf/logsv/lgs/lgs.h @@ -23,13 +23,15 @@ * ======================================================================== */ -#include <stdlib.h> +#include <cstdlib> +#include <stdint.h> #include <ncs_mda_pvt.h> #include <mbcsv_papi.h> #include <ncs_edu_pub.h> #include <ncs_util.h> #include <saAis.h> +#include "saAmf.h" /* LGS files */ #include "lgsv_defs.h" @@ -87,10 +89,12 @@ extern uint32_t mbox_low[NCS_IPC_PRIORIT extern pthread_mutex_t lgs_mbox_init_mutex; extern pthread_mutex_t lgs_OI_init_mutex; +extern uint32_t initialize_for_assignment(lgs_cb_t *cb, SaAmfHAStateT ha_state); + extern uint32_t lgs_configure_mailbox(); extern SaAisErrorT lgs_amf_init(lgs_cb_t *cb); -extern uint32_t lgs_mds_init(lgs_cb_t *cb); +extern uint32_t lgs_mds_init(lgs_cb_t *cb, SaAmfHAStateT ha_state); extern uint32_t lgs_mds_finalize(lgs_cb_t *cb); extern uint32_t lgs_mds_change_role(lgs_cb_t *cb); extern uint32_t lgs_mds_msg_send(lgs_cb_t *cb, @@ -110,7 +114,8 @@ extern void logDataGroupname_fileown(con extern void lgs_imm_impl_reinit_nonblocking(lgs_cb_t *cb); extern void lgs_imm_init_OI_handle(SaImmOiHandleT *immOiHandle, SaSelectionObjectT *immSelectionObject); -extern void lgs_imm_impl_set(SaImmOiHandleT immOiHandle); +extern void lgs_imm_impl_set(SaImmOiHandleT* immOiHandle, + SaSelectionObjectT* immSelectionObject); #endif /* ifndef __LGS_H */ diff --git a/osaf/services/saf/logsv/lgs/lgs_amf.cc b/osaf/services/saf/logsv/lgs/lgs_amf.cc --- a/osaf/services/saf/logsv/lgs/lgs_amf.cc +++ b/osaf/services/saf/logsv/lgs/lgs_amf.cc @@ -64,7 +64,7 @@ static SaAisErrorT amf_active_state_hand goto done; } - lgs_imm_impl_set(cb->immOiHandle); + lgs_imm_impl_set(&cb->immOiHandle, &cb->immSelectionObject); conf_runtime_obj_create(cb->immOiHandle); /* check existing streams */ @@ -246,6 +246,13 @@ static void amf_csi_set_callback(SaInvoc */ prev_haState = lgs_cb->ha_state; + if ((rc = initialize_for_assignment(lgs_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: @@ -279,15 +286,8 @@ static void amf_csi_set_callback(SaInvoc /* Update control block */ lgs_cb->ha_state = new_haState; - if (lgs_cb->csi_assigned == false) { - lgs_cb->csi_assigned = true; - /* We shall open checkpoint only once in our life time. currently doing at lib init */ - } else if ((new_haState == SA_AMF_HA_ACTIVE) || (new_haState == SA_AMF_HA_STANDBY)) { /* It is a switch over */ + if (new_haState == SA_AMF_HA_ACTIVE || new_haState == SA_AMF_HA_STANDBY) { lgs_cb->ckpt_state = COLD_SYNC_IDLE; - /* NOTE: This behaviour has to be checked later, when scxb redundancy is available - * Also, change role of mds, mbcsv during quiesced has to be done after mds - * supports the same. TBD - */ } /* Handle active to active role change. */ @@ -306,7 +306,7 @@ static void amf_csi_set_callback(SaInvoc } /* Inform MBCSV of HA state change */ - if (NCSCC_RC_SUCCESS != lgs_mbcsv_change_HA_state(lgs_cb)) + if (NCSCC_RC_SUCCESS != lgs_mbcsv_change_HA_state(lgs_cb, new_haState)) error = SA_AIS_ERR_FAILED_OPERATION; } diff --git a/osaf/services/saf/logsv/lgs/lgs_cb.h b/osaf/services/saf/logsv/lgs/lgs_cb.h --- a/osaf/services/saf/logsv/lgs/lgs_cb.h +++ b/osaf/services/saf/logsv/lgs/lgs_cb.h @@ -81,7 +81,7 @@ typedef struct lgs_cb { NCS_MBCSV_CKPT_HDL mbcsv_ckpt_hdl; /* MBCSv handle obtained during checkpoint open */ uint16_t mbcsv_peer_version; /* Checkpoint peer version */ EDU_HDL edu_hdl; /* Handle from EDU for encode/decode operations */ - bool csi_assigned; + bool fully_initialized; LGA_DOWN_LIST *lga_down_list_head; /* LGA down reccords - Fix for Failover missed down events Processing */ LGA_DOWN_LIST *lga_down_list_tail; diff --git a/osaf/services/saf/logsv/lgs/lgs_evt.cc b/osaf/services/saf/logsv/lgs/lgs_evt.cc --- a/osaf/services/saf/logsv/lgs/lgs_evt.cc +++ b/osaf/services/saf/logsv/lgs/lgs_evt.cc @@ -15,6 +15,7 @@ * */ +#include <stdlib.h> #include "immutil.h" #include "osaf_time.h" #include "saf_error.h" @@ -457,7 +458,8 @@ static uint32_t proc_mds_quiesced_ack_ms lgs_cb->ha_state = SA_AMF_HA_QUIESCED; /* Inform MBCSV of HA state change */ - if (lgs_mbcsv_change_HA_state(lgs_cb) != NCSCC_RC_SUCCESS) + if (lgs_mbcsv_change_HA_state(lgs_cb, lgs_cb->ha_state) != + NCSCC_RC_SUCCESS) TRACE("lgs_mbcsv_change_HA_state FAILED"); /* Finally respond to AMF */ @@ -505,9 +507,17 @@ static uint32_t proc_rda_cb_msg(lgsv_lgs log_stream_t *stream; uint32_t rc = NCSCC_RC_SUCCESS; - TRACE_ENTER2("%u", evt->info.rda_info.io_role); + TRACE_ENTER2("%d", (int) evt->info.rda_info.io_role); - if (evt->info.rda_info.io_role == PCS_RDA_ACTIVE) { + if ((rc = initialize_for_assignment(lgs_cb, + (SaAmfHAStateT) evt->info.rda_info.io_role)) + != NCSCC_RC_SUCCESS) { + LOG_ER("initialize_for_assignment FAILED %u", (unsigned) rc); + exit(EXIT_FAILURE); + } + + if (evt->info.rda_info.io_role == PCS_RDA_ACTIVE && + lgs_cb->ha_state != SA_AMF_HA_ACTIVE) { LOG_NO("ACTIVE request"); lgs_cb->mds_role = V_DEST_RL_ACTIVE; lgs_cb->ha_state = SA_AMF_HA_ACTIVE; @@ -517,13 +527,14 @@ static uint32_t proc_rda_cb_msg(lgsv_lgs exit(EXIT_FAILURE); } - if ((rc = lgs_mbcsv_change_HA_state(lgs_cb)) != NCSCC_RC_SUCCESS) { + if ((rc = lgs_mbcsv_change_HA_state(lgs_cb, lgs_cb->ha_state)) + != NCSCC_RC_SUCCESS) { LOG_ER("lgs_mbcsv_change_HA_state FAILED %u", rc); exit(EXIT_FAILURE); } /* fail over, become implementer */ - lgs_imm_impl_set(lgs_cb->immOiHandle); + lgs_imm_impl_set(&lgs_cb->immOiHandle, &lgs_cb->immSelectionObject); /* Agent down list has to be processed first */ lgs_process_lga_down_list(); @@ -566,8 +577,10 @@ uint32_t lgs_cb_init(lgs_cb_t *lgs_cb) reg_param.key_size = sizeof(uint32_t); - /* Assign Initial HA state */ - lgs_cb->csi_assigned = false; + lgs_cb->fully_initialized = false; + lgs_cb->amfSelectionObject = -1; + lgs_cb->immSelectionObject = -1; + lgs_cb->mbcsv_sel_obj = -1; /* Assign Version. Currently, hardcoded, This will change later */ lgs_cb->log_version.releaseCode = LOG_RELEASE_CODE; diff --git a/osaf/services/saf/logsv/lgs/lgs_imm.cc b/osaf/services/saf/logsv/lgs/lgs_imm.cc --- a/osaf/services/saf/logsv/lgs/lgs_imm.cc +++ b/osaf/services/saf/logsv/lgs/lgs_imm.cc @@ -2790,59 +2790,99 @@ void lgs_imm_init_OI_handle(SaImmOiHandl * @param immOiHandle[in] * @return SaAisErrorT */ -static SaAisErrorT imm_impl_set_sequence(SaImmOiHandleT immOiHandle) +static SaAisErrorT imm_impl_set_sequence(SaImmOiHandleT* immOiHandle, + SaSelectionObjectT* immSelectionObject) { SaAisErrorT rc = SA_AIS_OK; uint32_t msecs_waited = 0; TRACE_ENTER(); - /* Become object implementer - */ - rc = saImmOiImplementerSet(immOiHandle, implementerName); - while (((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_EXIST)) && - (msecs_waited < max_waiting_time_60s)) { - usleep(sleep_delay_ms * 1000); - msecs_waited += sleep_delay_ms; - rc = saImmOiImplementerSet(immOiHandle, implementerName); - } - if (rc != SA_AIS_OK) { - TRACE("saImmOiImplementerSet failed %s", saf_error(rc)); - goto done; - } - - /* - * Become class implementer for the OpenSafLogConfig class if it exists - * Become class implementer for the SaLogStreamConfig class - */ - if (true == *static_cast<const bool*>(lgs_cfg_get(LGS_IMM_LOG_OPENSAFLOGCONFIG_CLASS_EXIST))) { - msecs_waited = 0; - rc = saImmOiClassImplementerSet(immOiHandle, logConfig_str); - while (((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_EXIST)) - && (msecs_waited < max_waiting_time_60s)) { + for (;;) { + if (msecs_waited >= max_waiting_time_60s) { + TRACE("Timeout in imm_impl_set_sequence"); + goto done; + } + + /* Become object implementer + */ + rc = saImmOiImplementerSet(*immOiHandle, implementerName); + while (((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_EXIST)) && + (msecs_waited < max_waiting_time_60s)) { usleep(sleep_delay_ms * 1000); msecs_waited += sleep_delay_ms; - rc = saImmOiClassImplementerSet(immOiHandle, logConfig_str); + rc = saImmOiImplementerSet(*immOiHandle, implementerName); + } + if (rc == SA_AIS_ERR_BAD_HANDLE || rc == SA_AIS_ERR_TIMEOUT) { + LOG_WA("saImmOiImplementerSet returned %u", + static_cast<unsigned>(rc)); + usleep(sleep_delay_ms * 1000); + msecs_waited += sleep_delay_ms; + saImmOiFinalize(*immOiHandle); + *immOiHandle = 0; + *immSelectionObject = -1; + lgs_imm_init_OI_handle(immOiHandle, immSelectionObject); + continue; } if (rc != SA_AIS_OK) { - TRACE("saImmOiClassImplementerSet OpenSafLogConfig failed %s", saf_error(rc)); + TRACE("saImmOiImplementerSet failed %s", saf_error(rc)); goto done; } - } - - msecs_waited = 0; - rc = saImmOiClassImplementerSet(immOiHandle, streamConfig_str); - while (((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_EXIST)) - && (msecs_waited < max_waiting_time_60s)) { - usleep(sleep_delay_ms * 1000); - msecs_waited += sleep_delay_ms; - rc = saImmOiClassImplementerSet(immOiHandle, streamConfig_str); - } - if (rc != SA_AIS_OK) { - TRACE("saImmOiClassImplementerSet SaLogStreamConfig failed %u", rc); - goto done; - } - + + /* + * Become class implementer for the OpenSafLogConfig class if it exists + * Become class implementer for the SaLogStreamConfig class + */ + if (true == *static_cast<const bool*>(lgs_cfg_get(LGS_IMM_LOG_OPENSAFLOGCONFIG_CLASS_EXIST))) { + rc = saImmOiClassImplementerSet(*immOiHandle, logConfig_str); + while (((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_EXIST)) + && (msecs_waited < max_waiting_time_60s)) { + usleep(sleep_delay_ms * 1000); + msecs_waited += sleep_delay_ms; + rc = saImmOiClassImplementerSet(*immOiHandle, logConfig_str); + } + if (rc == SA_AIS_ERR_BAD_HANDLE || rc == SA_AIS_ERR_TIMEOUT) { + LOG_WA("saImmOiClassImplementerSet returned %u", + static_cast<unsigned>(rc)); + usleep(sleep_delay_ms * 1000); + msecs_waited += sleep_delay_ms; + saImmOiFinalize(*immOiHandle); + *immOiHandle = 0; + *immSelectionObject = -1; + lgs_imm_init_OI_handle(immOiHandle, immSelectionObject); + continue; + } + if (rc != SA_AIS_OK) { + TRACE("saImmOiClassImplementerSet OpenSafLogConfig failed %s", saf_error(rc)); + goto done; + } + } + + rc = saImmOiClassImplementerSet(*immOiHandle, streamConfig_str); + while (((rc == SA_AIS_ERR_TRY_AGAIN) || (rc == SA_AIS_ERR_EXIST)) + && (msecs_waited < max_waiting_time_60s)) { + usleep(sleep_delay_ms * 1000); + msecs_waited += sleep_delay_ms; + rc = saImmOiClassImplementerSet(*immOiHandle, streamConfig_str); + } + if (rc == SA_AIS_ERR_BAD_HANDLE || rc == SA_AIS_ERR_TIMEOUT) { + LOG_WA("saImmOiClassImplementerSet returned %u", + static_cast<unsigned>(rc)); + usleep(sleep_delay_ms * 1000); + msecs_waited += sleep_delay_ms; + saImmOiFinalize(*immOiHandle); + *immOiHandle = 0; + *immSelectionObject = -1; + lgs_imm_init_OI_handle(immOiHandle, immSelectionObject); + continue; + } + if (rc != SA_AIS_OK) { + TRACE("saImmOiClassImplementerSet SaLogStreamConfig failed %u", rc); + goto done; + } + break; + } + done: return rc; TRACE_LEAVE(); @@ -2854,13 +2894,14 @@ done: * * @param cb */ -void lgs_imm_impl_set(SaImmOiHandleT immOiHandle) +void lgs_imm_impl_set(SaImmOiHandleT* immOiHandle, + SaSelectionObjectT* immSelectionObject) { SaAisErrorT rc = SA_AIS_OK; TRACE_ENTER(); - rc = imm_impl_set_sequence(immOiHandle); + rc = imm_impl_set_sequence(immOiHandle, immSelectionObject); if (rc != SA_AIS_OK) { lgs_exit("Becoming OI implementer failed", SA_AMF_COMPONENT_RESTART); } @@ -2885,7 +2926,7 @@ static void *imm_impl_init_thread(void * /* Initialize handles and become implementer */ lgs_imm_init_OI_handle(&immOiHandle, &immSelectionObject); - rc = imm_impl_set_sequence(immOiHandle); + rc = imm_impl_set_sequence(&immOiHandle, &immSelectionObject); if (rc != SA_AIS_OK) { lgs_exit("Becoming OI implementer failed", SA_AMF_COMPONENT_RESTART); } diff --git a/osaf/services/saf/logsv/lgs/lgs_main.cc b/osaf/services/saf/logsv/lgs/lgs_main.cc --- a/osaf/services/saf/logsv/lgs/lgs_main.cc +++ b/osaf/services/saf/logsv/lgs/lgs_main.cc @@ -204,8 +204,6 @@ static uint32_t log_initialize(void) uint32_t rc = NCSCC_RC_FAILURE; TRACE_ENTER(); - const char *logsv_root_dir = NULL; - const char *logsv_data_groupname = NULL; /* Determine how this process was started, by NID or AMF */ if (getenv("SA_AMF_COMPONENT_NAME") == NULL) @@ -224,44 +222,11 @@ static uint32_t log_initialize(void) goto done; } - /* Initialize IMM OI handle and selection object */ - lgs_imm_init_OI_handle(&lgs_cb->immOiHandle, &lgs_cb->immSelectionObject); - - TRACE("IMM init done: lgs_cb->immOiHandle = %lld", lgs_cb->immOiHandle); - - /* Initialize log configuration - * Must be done after IMM OI is initialized - */ - lgs_cfg_init(lgs_cb->immOiHandle, lgs_cb->ha_state); - lgs_trace_config(); /* Show all configuration in TRACE */ - - /* Show some configurtion info in sysylog */ - logsv_root_dir = static_cast<const char *>(lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY)); - logsv_data_groupname = static_cast<const char *>(lgs_cfg_get(LGS_IMM_DATA_GROUPNAME)); - LOG_NO("LOG root directory is: \"%s\"", logsv_root_dir); - LOG_NO("LOG data group is: \"%s\"", logsv_data_groupname); - if ((rc = rda_register_callback(0, rda_cb)) != NCSCC_RC_SUCCESS) { LOG_ER("rda_register_callback FAILED %u", rc); goto done; } - /* Initialize file handling thread - * Configuration must have been initialized - */ - if (lgs_file_init() != NCSCC_RC_SUCCESS) { - LOG_ER("lgs_file_init FAILED"); - goto done; - } - - /* Initialize configuration stream class - * Configuration must have been initialized - */ - if (log_stream_init() != NCSCC_RC_SUCCESS) { - LOG_ER("log_stream_init FAILED"); - goto done; - } - m_NCS_EDU_HDL_INIT(&lgs_cb->edu_hdl); /* Create the mailbox used for communication with LGS */ @@ -276,28 +241,6 @@ static uint32_t log_initialize(void) goto done; } - /* Configuration must have been initialized */ - if (lgs_configure_mailbox() != NCSCC_RC_SUCCESS) { - LOG_ER("configure_mailbox FAILED"); - goto done; - } - - /* Initialize mailbox used for communication mds thread -> main thread - * Update mds_role is in lgs_cb - * Uses ha_state in lgs_cb - * - */ - if ((rc = lgs_mds_init(lgs_cb)) != NCSCC_RC_SUCCESS) { - LOG_ER("lgs_mds_init FAILED %d", rc); - goto done; - } - - /* Update mbcsv_hdl in lgs_cb */ - if ((rc = lgs_mbcsv_init(lgs_cb)) != NCSCC_RC_SUCCESS) { - LOG_ER("lgs_mbcsv_init FAILED"); - goto done; - } - /* Create a selection object */ if (lgs_cb->nid_started && (rc = ncs_sel_obj_create(&usr1_sel_obj)) != NCSCC_RC_SUCCESS) { @@ -316,27 +259,18 @@ static uint32_t log_initialize(void) goto done; } - if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) { - /* Become OI. We will be blocked here until done */ - lgs_imm_impl_set(lgs_cb->immOiHandle); - conf_runtime_obj_create(lgs_cb->immOiHandle); - - /* Create streams that has configuration objects and become - * class implementer for the SaLogStreamConfig class - */ - if (lgs_imm_create_configStream(lgs_cb) != SA_AIS_OK) { - LOG_ER("lgs_imm_create_configStream FAILED"); - rc = NCSCC_RC_FAILURE; - goto done; - } - } - /* If AMF started register immediately */ if (!lgs_cb->nid_started && lgs_amf_init(lgs_cb) != SA_AIS_OK) { rc = NCSCC_RC_FAILURE; goto done; } + if ((rc = initialize_for_assignment(lgs_cb, lgs_cb->ha_state)) != + NCSCC_RC_SUCCESS) { + LOG_ER("initialize_for_assignment FAILED %u", (unsigned) rc); + goto done; + } + done: if (lgs_cb->nid_started && nid_notify(const_cast<char *>("LOGD"), rc, NULL) != NCSCC_RC_SUCCESS) { @@ -348,6 +282,82 @@ done: return (rc); } +uint32_t initialize_for_assignment(lgs_cb_t *cb, SaAmfHAStateT ha_state) +{ + const char *logsv_root_dir = NULL; + const char *logsv_data_groupname = NULL; + 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; + /* Initialize IMM OI handle and selection object */ + lgs_imm_init_OI_handle(&cb->immOiHandle, &cb->immSelectionObject); + + TRACE("IMM init done: cb->immOiHandle = %lld", cb->immOiHandle); + + /* Initialize log configuration + * Must be done after IMM OI is initialized + */ + lgs_cfg_init(cb->immOiHandle, cb->ha_state); + lgs_trace_config(); /* Show all configuration in TRACE */ + + /* Show some configurtion info in sysylog */ + logsv_root_dir = static_cast<const char *>(lgs_cfg_get(LGS_IMM_LOG_ROOT_DIRECTORY)); + logsv_data_groupname = static_cast<const char *>(lgs_cfg_get(LGS_IMM_DATA_GROUPNAME)); + LOG_NO("LOG root directory is: \"%s\"", logsv_root_dir); + LOG_NO("LOG data group is: \"%s\"", logsv_data_groupname); + + /* Initialize file handling thread + * Configuration must have been initialized + */ + if (lgs_file_init() != NCSCC_RC_SUCCESS) { + LOG_ER("lgs_file_init FAILED"); + goto done; + } + + /* Initialize configuration stream class + * Configuration must have been initialized + */ + if (log_stream_init() != NCSCC_RC_SUCCESS) { + LOG_ER("log_stream_init FAILED"); + goto done; + } + + /* Configuration must have been initialized */ + if (lgs_configure_mailbox() != NCSCC_RC_SUCCESS) { + LOG_ER("configure_mailbox FAILED"); + goto done; + } + + if ((rc = lgs_mds_init(cb, ha_state)) != NCSCC_RC_SUCCESS) { + LOG_ER("lgs_mds_init FAILED %d", rc); + goto done; + } + if ((rc = lgs_mbcsv_init(cb, ha_state)) != NCSCC_RC_SUCCESS) { + LOG_ER("lgs_mbcsv_init FAILED"); + lgs_mds_finalize(cb); + goto done; + } + if (lgs_cb->ha_state == SA_AMF_HA_ACTIVE) { + /* Become OI. We will be blocked here until done */ + lgs_imm_impl_set(&lgs_cb->immOiHandle, &lgs_cb->immSelectionObject); + conf_runtime_obj_create(lgs_cb->immOiHandle); + + /* Create streams that has configuration objects and become + * class implementer for the SaLogStreamConfig class + */ + if (lgs_imm_create_configStream(lgs_cb) != SA_AIS_OK) { + LOG_ER("lgs_imm_create_configStream FAILED"); + rc = NCSCC_RC_FAILURE; + goto done; + } + } + cb->fully_initialized = true; +done: + TRACE_LEAVE2("rc = %u", rc); + return rc; +} + /** * The main routine for the lgs daemon. * @param argc @@ -378,14 +388,14 @@ int main(int argc, char *argv[]) fds[FD_AMF].fd = lgs_cb->nid_started ? usr1_sel_obj.rmv_obj : lgs_cb->amfSelectionObject; fds[FD_AMF].events = POLLIN; - fds[FD_MBCSV].fd = lgs_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 = lgs_cb->immSelectionObject; fds[FD_IMM].events = POLLIN; while (1) { + fds[FD_MBCSV].fd = lgs_cb->mbcsv_sel_obj; + fds[FD_MBCSV].events = POLLIN; /* Protect since the reinit thread may be in the process of * changing the values @@ -471,6 +481,7 @@ int main(int argc, char *argv[]) */ saImmOiFinalize(lgs_cb->immOiHandle); lgs_cb->immOiHandle = 0; + lgs_cb->immSelectionObject = -1; /* Initiate IMM reinitializtion in the background */ lgs_imm_impl_reinit_nonblocking(lgs_cb); diff --git a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc --- a/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc +++ b/osaf/services/saf/logsv/lgs/lgs_mbcsv.cc @@ -185,7 +185,7 @@ void lgs_free_edu_mem(char *ptr) * * Notes : None. *****************************************************************************/ -uint32_t lgs_mbcsv_init(lgs_cb_t *cb) +uint32_t lgs_mbcsv_init(lgs_cb_t *cb, SaAmfHAStateT ha_state) { uint32_t rc; NCS_MBCSV_ARG arg; @@ -241,7 +241,7 @@ uint32_t lgs_mbcsv_init(lgs_cb_t *cb) goto done; } - rc = lgs_mbcsv_change_HA_state(cb); + rc = lgs_mbcsv_change_HA_state(cb, ha_state); done: TRACE_LEAVE(); @@ -263,7 +263,7 @@ done: * during the first CSI assignment from AVSv . *****************************************************************************/ -uint32_t lgs_mbcsv_change_HA_state(lgs_cb_t *cb) +uint32_t lgs_mbcsv_change_HA_state(lgs_cb_t *cb, SaAmfHAStateT ha_state) { TRACE_ENTER(); NCS_MBCSV_ARG mbcsv_arg; @@ -273,7 +273,7 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c mbcsv_arg.i_op = NCS_MBCSV_OP_CHG_ROLE; mbcsv_arg.i_mbcsv_hdl = cb->mbcsv_hdl; mbcsv_arg.info.chg_role.i_ckpt_hdl = cb->mbcsv_ckpt_hdl; - mbcsv_arg.info.chg_role.i_ha_state = cb->ha_state; + mbcsv_arg.info.chg_role.i_ha_state = ha_state; if (ncs_mbcsv_svc(&mbcsv_arg) != NCSCC_RC_SUCCESS) { LOG_ER("ncs_mbcsv_svc NCS_MBCSV_OP_CHG_ROLE FAILED"); @@ -290,11 +290,11 @@ uint32_t lgs_mbcsv_change_HA_state(lgs_c if (lgs_is_split_file_system()) { stream = log_stream_getnext_by_name(NULL); while (stream != NULL) { /* Iterate over all streams */ - if (cb->ha_state == SA_AMF_HA_ACTIVE) { + if (ha_state == SA_AMF_HA_ACTIVE) { stream->logFileCurrent = stream->stb_logFileCurrent; stream->curFileSize = stream->stb_curFileSize; *stream->p_fd = -1; /* Reopen files */ - } else if (cb->ha_state == SA_AMF_HA_QUIESCED) { + } else if (ha_state == SA_AMF_HA_QUIESCED) { stream->stb_logFileCurrent = stream->logFileCurrent; stream->stb_prev_actlogFileCurrent = stream->stb_logFileCurrent; stream->stb_curFileSize = stream->curFileSize; diff --git a/osaf/services/saf/logsv/lgs/lgs_mbcsv.h b/osaf/services/saf/logsv/lgs/lgs_mbcsv.h --- a/osaf/services/saf/logsv/lgs/lgs_mbcsv.h +++ b/osaf/services/saf/logsv/lgs/lgs_mbcsv.h @@ -20,6 +20,9 @@ #ifndef LGS_MBCSV_H #define LGS_MBCSV_H +#include <stdint.h> +#include "saAmf.h" + /* Version 1: Logservice check-point version older versions than OpenSAF 4.4. * Cannot be configured for split filesystem. * Version 2: Check-pointing version used in OpenSAF version 4.4 after @@ -96,8 +99,8 @@ typedef struct { uint32_t logRecordId; /* log record identifier increased for each record */ } lgs_ckpt_stream_open_t; -uint32_t lgs_mbcsv_init(lgs_cb_t *lgs_cb); -uint32_t lgs_mbcsv_change_HA_state(lgs_cb_t *cb); +uint32_t lgs_mbcsv_init(lgs_cb_t *lgs_cb, SaAmfHAStateT ha_state); +uint32_t lgs_mbcsv_change_HA_state(lgs_cb_t *cb, SaAmfHAStateT ha_state); bool lgs_is_peer_v2(); bool lgs_is_peer_v3(); bool lgs_is_peer_v4(); diff --git a/osaf/services/saf/logsv/lgs/lgs_mds.cc b/osaf/services/saf/logsv/lgs/lgs_mds.cc --- a/osaf/services/saf/logsv/lgs/lgs_mds.cc +++ b/osaf/services/saf/logsv/lgs/lgs_mds.cc @@ -1273,7 +1273,7 @@ static uint32_t mds_vdest_create(lgs_cb_ * * Notes : None. *****************************************************************************/ -uint32_t lgs_mds_init(lgs_cb_t *cb) +uint32_t lgs_mds_init(lgs_cb_t *cb, SaAmfHAStateT ha_state) { NCSMDS_INFO mds_info; uint32_t rc; @@ -1288,10 +1288,10 @@ uint32_t lgs_mds_init(lgs_cb_t *cb) } /* Set the role of MDS */ - if (cb->ha_state == SA_AMF_HA_ACTIVE) + if (ha_state == SA_AMF_HA_ACTIVE) cb->mds_role = V_DEST_RL_ACTIVE; - if (cb->ha_state == SA_AMF_HA_STANDBY) + if (ha_state == SA_AMF_HA_STANDBY) cb->mds_role = V_DEST_RL_STANDBY; if (NCSCC_RC_SUCCESS != (rc = lgs_mds_change_role(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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel