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

Reply via email to