- Standby amfd may miss node delete apply callback by somehow.
Then it will crash when handling event in failover state due to:
Assertion 'avnd->list_of_ncs_su.empty() != true' failed
in function avd_node_down_mw_susi_failover().
---
src/amf/amfd/ndproc.cc | 6 ++++++
src/amf/amfd/node.cc | 18 ++++++++++++++----
src/amf/amfd/node.h | 1 +
3 files changed, 21 insertions(+), 4 deletions(-)
diff --git a/src/amf/amfd/ndproc.cc b/src/amf/amfd/ndproc.cc
index 853a68b..828600a 100644
--- a/src/amf/amfd/ndproc.cc
+++ b/src/amf/amfd/ndproc.cc
@@ -37,6 +37,7 @@
#include "amf/amfd/amfd.h"
#include "amf/amfd/imm.h"
#include "amf/amfd/cluster.h"
+#include "amf/amfd/node.h"
/**
* This function does a sanity check w.r.t the message received and returns the
@@ -1233,6 +1234,11 @@ done:
*/
void avd_node_failover(AVD_AVND *node, const bool mw_only) {
TRACE_ENTER2("'%s'", node->name.c_str());
+
+ if (avd_cleanup_node(node) == true) {
+ TRACE_LEAVE();
+ return;
+ }
if (mw_only == true) {
avd_node_down_mw_susi_failover(avd_cb, node);
} else {
diff --git a/src/amf/amfd/node.cc b/src/amf/amfd/node.cc
index e8f32bb..e28c25c 100644
--- a/src/amf/amfd/node.cc
+++ b/src/amf/amfd/node.cc
@@ -1652,11 +1652,21 @@ void avd_check_nodes_after_reinit_imm() {
AmfDb<std::string, AVD_AVND>::iterator it;
for (it = node_name_db->begin(); it != node_name_db->end(); it++)
{
- if (object_exist_in_imm(it->first) == false) {
- LOG_WA("Remove node %s after reinit IMM", it->first.c_str());
- node_ccb_apply_delete_hdlr(it->second);
- }
+ avd_cleanup_node(it->second);
}
TRACE_LEAVE();
}
+
+bool avd_cleanup_node(AVD_AVND *node)
+{
+ TRACE_ENTER();
+ if (object_exist_in_imm(node->name) == false) {
+ LOG_WA("Remove node %s not exist in IMM", node->name.c_str());
+ node_ccb_apply_delete_hdlr(node);
+ TRACE_LEAVE();
+ return true;
+ }
+ TRACE_LEAVE();
+ return false;
+}
\ No newline at end of file
diff --git a/src/amf/amfd/node.h b/src/amf/amfd/node.h
index 388a8bf..d966d7e 100644
--- a/src/amf/amfd/node.h
+++ b/src/amf/amfd/node.h
@@ -241,5 +241,6 @@ extern bool any_ng_in_locked_in_state(const AVD_AVND *node);
void avd_ng_restore_headless_states(AVD_CL_CB *cb,
struct avd_su_si_rel_tag *susi);
void avd_check_nodes_after_reinit_imm();
+bool avd_cleanup_node(AVD_AVND *node);
#endif // AMF_AMFD_NODE_H_
--
2.7.4
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel