When IMMND restarts (e.g: OUT OF ORDER detection), it may get message
from active IMMD which is originated from just-dead IMMND process.
In such case, we are in confused situation - messages come from
local IMMND, but not me (reply_dest != cb->immnd_mdest_id)!
This patch discards such messages, notify the case to syslog
instead of aborting the IMMND progress.
---
src/imm/immnd/immnd_evt.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/src/imm/immnd/immnd_evt.c b/src/imm/immnd/immnd_evt.c
index 228b7dd..43611a3 100644
--- a/src/imm/immnd/immnd_evt.c
+++ b/src/imm/immnd/immnd_evt.c
@@ -10766,6 +10766,18 @@ static uint32_t immnd_evt_proc_fevs_rcv(IMMND_CB *cb,
IMMND_EVT *evt,
(m_IMMSV_UNPACK_HANDLE_LOW(clnt_hdl) == cb->node_id);
if (originatedAtThisNd) {
+ /* Get the message comes from local IMMND but not me
+ (cb->immnd_mdest_id). Probably IMMND just restarts
+ (e.g: OUT OF ORDER detection), and this message belongs
+ to previous (dead) IMMND. So, discard this message.
+ */
+ if (reply_dest && reply_dest != cb->immnd_mdest_id) {
+ LOG_WA("DISCARD FEVS message sent by previous dead
IMMND");
+ dequeue_outgoing(cb);
+ TRACE_LEAVE();
+ return NCSCC_RC_SUCCESS;
+ }
+
osafassert(!reply_dest || (reply_dest == cb->immnd_mdest_id) ||
isObjSync);
if (cb->fevs_replies_pending) {
--
1.9.1
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel