Hi Minh Ack (review only)
On 15/5/17, 5:36 pm, "Minh Chau" <minh.c...@dektech.com.au> wrote: When amfnd-payload responds susi assignment response just before both SC go down, and that response message does not come to director. Therefore, the status of that assignment could be seen as "modifying" in IMM. When SC comes back, active amfd will be waiting for that response forever. Patch checks if a susi assignment response is sent but not-ack just before both SC come down, amfnd-payload will buffer it in a way as a susi get assigned during SC absence --- src/amf/amfnd/di.cc | 53 +++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 8 deletions(-) diff --git a/src/amf/amfnd/di.cc b/src/amf/amfnd/di.cc index e06b9260d..3776a09dc 100644 --- a/src/amf/amfnd/di.cc +++ b/src/amf/amfnd/di.cc @@ -1282,16 +1282,53 @@ void avnd_di_msg_ack_process(AVND_CB *cb, uint32_t mid) { Notes : None. ******************************************************************************/ void avnd_diq_del(AVND_CB *cb) { - AVND_DND_MSG_LIST *rec = 0; - do { - /* pop the record */ - m_AVND_DIQ_REC_POP(cb, rec); - if (!rec) break; + if ((cb->dnd_list.head != nullptr)) { + AVND_DND_MSG_LIST *rec = 0; + bool found = true; + while (found) { + found = false; + for (rec = cb->dnd_list.head; rec != nullptr; + rec = rec->next) { + osafassert(rec->msg.type == AVND_MSG_AVD); + // delete all pending messages that haven't been sent out + if (rec->no_retries == 0) { + m_AVND_DIQ_REC_POP(cb, rec); + avnd_diq_rec_del(cb, rec); + break; + } else { + // Assignment response had been sent, but not ack because last + // controller go down, reset msg_id and will be resent later + if (rec->msg.info.avd->msg_type == AVSV_N2D_INFO_SU_SI_ASSIGN_MSG) { + if (rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id != 0) { + rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id = 0; + found = true; + LOG_NO( + "Found not-ack su_si_assign msg for SU:'%s', " + "SI:'%s', ha_state:'%u', msg_act:'%u', single_csi:'%u', " + "error:'%u', msg_id:'%u'", + osaf_extended_name_borrow(&rec->msg.info.avd->msg_info + .n2d_su_si_assign.su_name), + osaf_extended_name_borrow(&rec->msg.info.avd->msg_info + .n2d_su_si_assign.si_name), + rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state, + rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act, + rec->msg.info.avd->msg_info.n2d_su_si_assign + .single_csi, + rec->msg.info.avd->msg_info.n2d_su_si_assign.error, + rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id); + } + } else { + // delete other messages for now + m_AVND_DIQ_REC_POP(cb, rec); + avnd_diq_rec_del(cb, rec); + break; + } + } - /* delete the record */ - avnd_diq_rec_del(cb, rec); - } while (1); + } + } + } return; } -- 2.11.0 ------------------------------------------------------------------------------ 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 Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel