The sequence number of broadcast message is associated with a specific
destination not all destinations, therefore the loss indication shouldn't check
those broadcast messages.
The messages received before subscribing the service shouldn't be checked too,
because those messages wasn't tracked by mds.
---
src/mds/mds_c_sndrcv.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/src/mds/mds_c_sndrcv.c b/src/mds/mds_c_sndrcv.c
index c3002a5fd..ee9dd3569 100644
--- a/src/mds/mds_c_sndrcv.c
+++ b/src/mds/mds_c_sndrcv.c
@@ -4691,7 +4691,23 @@ uint32_t mds_mcm_ll_data_rcv(MDS_DATA_RECV *recv)
recv->dest_svc_hdl,
recv->src_svc_id, recv->src_vdest,
recv->src_adest, &lcl_subtn_res)) {
- if (recv->src_seq_num != lcl_subtn_res->msg_rcv_cnt) {
+ if (recv->snd_type == MDS_SENDTYPE_BCAST
+ || recv->snd_type ==
MDS_SENDTYPE_RBCAST) {
+ // The sequence number of broadcast message is
associated
+ // with a specific destination not all
destinations. Because
+ // it isn't reliable, this message is skipped
by resetting
+ // the message count.
+ lcl_subtn_res->msg_rcv_cnt = 0;
+ } else if (lcl_subtn_res->msg_rcv_cnt == 0) {
+ // This is the first message received after
subscribing
+ // the sender service or receiving a broadcast
message,
+ // therefore the message count is initialized
here.
+ // Note: all messages received before
subscribing the
+ // sender service was not tracked so skip
checking those
+ // messages.
+ lcl_subtn_res->msg_rcv_cnt = recv->src_seq_num;
+ lcl_subtn_res->msg_rcv_cnt++;
+ } else if (recv->src_seq_num !=
lcl_subtn_res->msg_rcv_cnt) {
m_MDS_LOG_ERR(
"MDS_SND_RCV: msg loss detected, Src svc_id
= %s(%d),"
" Src vdest id= %d, Src Adest = %" PRIu64
","
--
2.25.1
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel