osaf/services/saf/amf/amfd/include/util.h | 1 + osaf/services/saf/amf/amfd/siass.cc | 9 ++++++++- osaf/services/saf/amf/amfd/util.cc | 22 ++++++++++++++++++++++ osaf/services/saf/amf/amfnd/amfnd.cc | 3 ++- osaf/services/saf/amf/amfnd/mds.cc | 3 ++- 5 files changed, 35 insertions(+), 3 deletions(-)
Cluster is preferly configured with one payload without PBE. After two times of headless, IMM will reload from xml. That cause amfd lost all objects which were created before headless and the data inconsistency happens between amfnd and amfnd/IMM The patch broadcast reboot message to all nodes diff --git a/osaf/services/saf/amf/amfd/include/util.h b/osaf/services/saf/amf/amfd/include/util.h --- a/osaf/services/saf/amf/amfd/include/util.h +++ b/osaf/services/saf/amf/amfd/include/util.h @@ -74,6 +74,7 @@ uint32_t avd_snd_node_up_msg(struct cl_c uint32_t avd_snd_presence_msg(struct cl_cb_tag *cb, AVD_SU *su, bool term_state); uint32_t avd_snd_oper_state_msg(struct cl_cb_tag *cb, AVD_AVND *avnd, uint32_t msg_id_ack); uint32_t avd_snd_op_req_msg(struct cl_cb_tag *cb, AVD_AVND *avnd, AVSV_PARAM_INFO *param_info); +void avd_d2n_snd_reboot_req_msg(); uint32_t avd_snd_su_reg_msg(struct cl_cb_tag *cb, AVD_AVND *avnd, bool fail_over); uint32_t avd_snd_su_msg(struct cl_cb_tag *cb, AVD_SU *su); uint32_t avd_snd_susi_msg(struct cl_cb_tag *cb, AVD_SU *su, struct avd_su_si_rel_tag *susi, diff --git a/osaf/services/saf/amf/amfd/siass.cc b/osaf/services/saf/amf/amfd/siass.cc --- a/osaf/services/saf/amf/amfd/siass.cc +++ b/osaf/services/saf/amf/amfd/siass.cc @@ -839,7 +839,14 @@ SaAisErrorT avd_susi_recreate(AVSV_N2D_N su_state = su_state->next) { AVD_SU *su = su_db->find(Amf::to_string(&su_state->safSU)); - osafassert(su); + if (su == nullptr) { + LOG_ER("SU data inconsistency detected. Ordering cluster reboot"); + avd_d2n_snd_reboot_req_msg(); + for (;;) { + LOG_ER("Waiting for reboot"); + sleep(1); + } + } // present state su->set_pres_state(static_cast<SaAmfPresenceStateT>(su_state->su_pres_state)); diff --git a/osaf/services/saf/amf/amfd/util.cc b/osaf/services/saf/amf/amfd/util.cc --- a/osaf/services/saf/amf/amfd/util.cc +++ b/osaf/services/saf/amf/amfd/util.cc @@ -1916,3 +1916,25 @@ bool admin_op_is_valid(SaImmAdminOperati child_dn->length = i; return 0; } + + /** + * Broadcasts a reboot request to all amf node directors. + * Use broadcast as adests may not be available at the time of reboot + * request. + */ +void avd_d2n_snd_reboot_req_msg() { + TRACE_ENTER(); + + AVD_DND_MSG *reboot_req_msg = new AVSV_DND_MSG(); + + /* prepare the reboot request message. */ + reboot_req_msg->msg_type = AVSV_D2N_REBOOT_MSG; + reboot_req_msg->msg_info.d2n_reboot_info.msg_id = 0; + + /* Broadcast the operation request message to all the nodes. */ + avd_d2n_msg_bcast(avd_cb, reboot_req_msg); + + delete reboot_req_msg; + + TRACE_LEAVE(); +} \ No newline at end of file diff --git a/osaf/services/saf/amf/amfnd/amfnd.cc b/osaf/services/saf/amf/amfnd/amfnd.cc --- a/osaf/services/saf/amf/amfnd/amfnd.cc +++ b/osaf/services/saf/amf/amfnd/amfnd.cc @@ -386,7 +386,8 @@ uint32_t avnd_evt_avd_reboot_evh(AVND_CB osafassert(AVSV_D2N_REBOOT_MSG == evt->info.avd->msg_type); - avnd_msgid_assert(info->msg_id); + if (info->msg_id) + avnd_msgid_assert(info->msg_id); cb->rcv_msg_id = info->msg_id; /* Clear error report related alarms before reboot. diff --git a/osaf/services/saf/amf/amfnd/mds.cc b/osaf/services/saf/amf/amfnd/mds.cc --- a/osaf/services/saf/amf/amfnd/mds.cc +++ b/osaf/services/saf/amf/amfnd/mds.cc @@ -337,7 +337,8 @@ uint32_t avnd_mds_rcv(AVND_CB *cb, MDS_C * message, to the Anchor of the received message. */ if ((AVSV_D2N_NODE_UP_MSG == ((AVSV_DND_MSG *)(rcv_info->i_msg))->msg_type) || - (AVSV_D2N_DATA_VERIFY_MSG == ((AVSV_DND_MSG *)(rcv_info->i_msg))->msg_type)) { + (AVSV_D2N_DATA_VERIFY_MSG == ((AVSV_DND_MSG *)(rcv_info->i_msg))->msg_type) || + (AVSV_D2N_REBOOT_MSG == ((AVSV_DND_MSG *)(rcv_info->i_msg))->msg_type)) { cb->active_avd_adest = rcv_info->i_fr_dest; TRACE_1("Active AVD Adest = %" PRIu64 ,cb->active_avd_adest); } ------------------------------------------------------------------------------ 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