Hi Gary,

Ack code review only.
I have no further comments.
Please go ahead and push the patch with that correction at 2 places.


Thanks
Praveen



On 18-Aug-17 5:43 AM, Gary Lee wrote:
Hi Praveen

Yes, thanks for picking that up. I will send another patch.

Thanks
Gary

On 17/8/17, 6:24 pm, "praveen malviya" <[email protected]> wrote:

     Hi Gary,
Please find one comment inline with [Praveen]. Thanks
     Praveen
On 05-Jul-17 2:15 PM, Gary Lee wrote:
     > ---
     >   src/amf/amfnd/avnd_cb.h  |   3 +-
     >   src/amf/amfnd/avnd_di.h  |  36 ------
     >   src/amf/amfnd/avnd_mds.h |  11 +-
     >   src/amf/amfnd/di.cc      | 321 
+++++++++++++++++++++--------------------------
     >   src/amf/amfnd/proxy.cc   |  19 ++-
     >   src/amf/amfnd/verify.cc  |  14 +--
     >   6 files changed, 167 insertions(+), 237 deletions(-)
     >
     > diff --git a/src/amf/amfnd/avnd_cb.h b/src/amf/amfnd/avnd_cb.h
     > index 2d642c752..ff21e3108 100644
     > --- a/src/amf/amfnd/avnd_cb.h
     > +++ b/src/amf/amfnd/avnd_cb.h
     > @@ -33,6 +33,7 @@
     >   #ifndef AMF_AMFND_AVND_CB_H_
     >   #define AMF_AMFND_AVND_CB_H_
     >   #include <map>
     > +#include <vector>
     >
     >   typedef struct avnd_cb_tag {
     >     SYSF_MBX mbx; /* mailbox on which AvND waits */
     > @@ -99,7 +100,7 @@ typedef struct avnd_cb_tag {
     >      * Messages are removed when acked with the ACK message.
     >      * At director failover the list is scanned handling the
     >      * VERIFY message from the director and possibly resent again */
     > -  AVND_DND_LIST dnd_list;
     > +  std::vector<AVND_DND_MSG_LIST*> dnd_list;
     >
     >     AVND_TERM_STATE term_state;
     >     AVND_LED_STATE led_state;
     > diff --git a/src/amf/amfnd/avnd_di.h b/src/amf/amfnd/avnd_di.h
     > index d7ccd68fd..9870ad774 100644
     > --- a/src/amf/amfnd/avnd_di.h
     > +++ b/src/amf/amfnd/avnd_di.h
     > @@ -33,42 +33,6 @@
     >
     >   #include "amf/common/amf_si_assign.h"
     >
     > -/* macro to find the matching record (based on the msg-id) */
     > -/*
     > - * Caution!!! It is assumed that the msg-id is the 1st element in the 
message
     > - * structure. Ensure it. Else move the msg id to the common portion of 
the
     > - * message structure (outside the msg type specific contents).
     > - */
     > -#define m_AVND_DIQ_REC_FIND(cb, mid, o_rec)                             
  \
     > -  {                                                                     
  \
     > -    AVND_DND_LIST *list = &((cb)->dnd_list);                            
  \
     > -    for ((o_rec) = list->head;                                          
  \
     > -         (o_rec) &&                                                     
  \
     > -         !(*((uint32_t *)(&((o_rec)->msg.info.avd->msg_info))) == 
(mid)); \
     > -         (o_rec) = (o_rec)->next)                                       
  \
     > -      ;                                                                 
  \
     > -  }
     > -
     > -/* macro to find & pop a given record */
     > -#define m_AVND_DIQ_REC_FIND_POP(cb, rec)                 \
     > -  {                                                      \
     > -    AVND_DND_LIST *list = &((cb)->dnd_list);             \
     > -    AVND_DND_MSG_LIST *prv = list->head, *curr;          \
     > -    for (curr = list->head; curr && !(curr == (rec));    \
     > -         prv = curr, curr = curr->next)                  \
     > -      ;                                                  \
     > -    if (curr) {                                          \
     > -      if (curr == list->head) {                          \
     > -        list->head = curr->next;                         \
     > -        if (list->tail == curr) list->tail = list->head; \
     > -      } else {                                           \
     > -        prv->next = curr->next;                          \
     > -        if (list->tail == curr) list->tail = prv;        \
     > -      }                                                  \
     > -      curr->next = 0;                                    \
     > -    }                                                    \
     > -  }
     > -
     >   struct avnd_cb_tag;
     >
     >   uint32_t avnd_di_oper_send(struct avnd_cb_tag *, const AVND_SU *, 
uint32_t);
     > diff --git a/src/amf/amfnd/avnd_mds.h b/src/amf/amfnd/avnd_mds.h
     > index 70173acaa..8c81f7bb1 100644
     > --- a/src/amf/amfnd/avnd_mds.h
     > +++ b/src/amf/amfnd/avnd_mds.h
     > @@ -63,18 +63,13 @@ typedef struct avnd_msg {
     >     } info;
     >   } AVND_MSG;
     >
     > -typedef struct avnd_dnd_msg_list_tag {
     > +class AVND_DND_MSG_LIST {
     > +public:
     >     AVND_MSG msg;
     >     AVND_TMR resp_tmr;
     >     uint32_t opq_hdl;
     >     uint16_t no_retries;
     > -  struct avnd_dnd_msg_list_tag *next;
     > -} AVND_DND_MSG_LIST;
     > -
     > -typedef struct avnd_dnd_list_tag {
     > -  AVND_DND_MSG_LIST *head;
     > -  AVND_DND_MSG_LIST *tail;
     > -} AVND_DND_LIST;
     > +};
     >
     >   
/*****************************************************************************
     >                    Macros to fill the MDS message structure
     > diff --git a/src/amf/amfnd/di.cc b/src/amf/amfnd/di.cc
     > index 6f0a76cda..93350e62a 100644
     > --- a/src/amf/amfnd/di.cc
     > +++ b/src/amf/amfnd/di.cc
     > @@ -39,30 +39,7 @@
     >
     >   #include "base/logtrace.h"
     >   #include "amf/amfnd/avnd.h"
     > -
     > -/* macro to push the AvD msg parameters (to the end of the list) */
     > -#define m_AVND_DIQ_REC_PUSH(cb, rec)         \
     > -  {                                          \
     > -    AVND_DND_LIST *list = &((cb)->dnd_list); \
     > -    if (!(list->head))                       \
     > -      list->head = (rec);                    \
     > -    else                                     \
     > -      list->tail->next = (rec);              \
     > -    list->tail = (rec);                      \
     > -  }
     > -
     > -/* macro to pop the record (from the beginning of the list) */
     > -#define m_AVND_DIQ_REC_POP(cb, o_rec)            \
     > -  {                                              \
     > -    AVND_DND_LIST *list = &((cb)->dnd_list);     \
     > -    if (list->head) {                            \
     > -      (o_rec) = list->head;                      \
     > -      list->head = (o_rec)->next;                \
     > -      (o_rec)->next = 0;                         \
     > -      if (list->tail == (o_rec)) list->tail = 0; \
     > -    } else                                       \
     > -      (o_rec) = 0;                               \
     > -  }
     > +#include <algorithm>
     >
     >   static uint32_t avnd_node_oper_req(AVND_CB *cb, AVSV_PARAM_INFO 
*param) {
     >     uint32_t rc = NCSCC_RC_FAILURE;
     > @@ -460,7 +437,9 @@ uint32_t avnd_evt_tmr_rcv_msg_rsp_evh(AVND_CB *cb, 
AVND_EVT *evt) {
     >
     >     ncshm_give_hdl(tmr->opq_hdl);
     >     if (rec_tobe_deleted) {
     > -    m_AVND_DIQ_REC_FIND_POP(cb, rec);
     > +    auto position = std::find(cb->dnd_list.begin(), cb->dnd_list.end(), 
rec);
     > +    osafassert(position != cb->dnd_list.end());
     > +    cb->dnd_list.erase(position);
     >       avnd_diq_rec_del(cb, rec);
     >     }
     >   done:
     > @@ -471,7 +450,6 @@ done:
     >   void avnd_send_node_up_msg(void) {
     >     AVND_CB *cb = avnd_cb;
     >     AVND_MSG msg = {};
     > -  AVND_DND_MSG_LIST *pending_rec = 0;
     >     uint32_t rc;
     >
     >     TRACE_ENTER();
     > @@ -487,8 +465,7 @@ void avnd_send_node_up_msg(void) {
     >     }
     >
     >     // We don't send node_up if it has already been sent and waiting for 
ACK
     > -  for (pending_rec = cb->dnd_list.head; pending_rec != nullptr;
     > -       pending_rec = pending_rec->next) {
     > +  for (auto pending_rec : cb->dnd_list) {
     >       if (pending_rec->msg.info.avd->msg_type == AVSV_N2D_NODE_UP_MSG) {
     >         TRACE(
     >             "Don't send another node_up since it has been sent and waiting 
for ack");
     > @@ -677,12 +654,11 @@ uint32_t avnd_evt_mds_avd_dn_evh(AVND_CB *cb, 
AVND_EVT *evt) {
     >
     >     if (cb->scs_absence_max_duration == 0) {
     >       // check for pending messages TO director
     > -    if ((cb->dnd_list.head != nullptr)) {
     > +    if ((cb->dnd_list.empty() == false)) {
     >         uint32_t no_pending_msg = 0;
     > -      AVND_DND_MSG_LIST *rec = 0;
     > -      for (rec = cb->dnd_list.head; rec != nullptr;
     > -           rec = rec->next, no_pending_msg++) {
     > +      for (auto rec : cb->dnd_list) {
     >           osafassert(rec->msg.type == AVND_MSG_AVD);
     > +        no_pending_msg++;
     >         }
     >
     >         /* Don't issue reboot if it has been already issued.*/
     > @@ -1115,7 +1091,9 @@ uint32_t avnd_di_msg_send(AVND_CB *cb, AVND_MSG 
*msg) {
     >   done:
     >     if (NCSCC_RC_SUCCESS != rc && rec) {
     >       /* pop & delete */
     > -    m_AVND_DIQ_REC_FIND_POP(cb, rec);
     > +    auto position = std::find(cb->dnd_list.begin(), cb->dnd_list.end(), 
rec);
     > +    osafassert(position != cb->dnd_list.end());
     > +    cb->dnd_list.erase(position);
     >       avnd_diq_rec_del(cb, rec);
     >     }
     >     TRACE_LEAVE2("%u", rc);
     > @@ -1252,21 +1230,29 @@ uint32_t avnd_di_node_down_msg_send(AVND_CB *cb)
     >     Notes         : None.
     >   
******************************************************************************/
     >   void avnd_di_msg_ack_process(AVND_CB *cb, uint32_t mid) {
     > -  AVND_DND_MSG_LIST *rec = 0;
     > -
     > -  /* find & pop the matching record */
     > -  m_AVND_DIQ_REC_FIND(cb, mid, rec);
     > -  if (rec) {
     > -    if (rec->msg.info.avd->msg_type == AVSV_N2D_NODE_DOWN_MSG) {
     > -      // first to stop timer to avoid processing timeout event
     > -      // then perform last step clean up
     > -      avnd_stop_tmr(cb, &rec->resp_tmr);
     > -      avnd_last_step_clean(cb);
     > +  TRACE_ENTER2("%u", mid);
     > +
     > +  for (auto iter =  cb->dnd_list.begin(); iter != cb->dnd_list.end(); 
++iter) {
     > +    auto rec = *iter;
     > +    osafassert(rec->msg.type == AVND_MSG_AVD);
     > +    const uint32_t msg_id = 
*(reinterpret_cast<uint32_t*>(&(rec->msg.info.avd->msg_info)));
     > +
     > +    // matching record
     > +    if (msg_id == mid) {
     > +      if (rec->msg.info.avd->msg_type == AVSV_N2D_NODE_DOWN_MSG) {
     > +        // first to stop timer to avoid processing timeout event
     > +        // then perform last step clean up
     > +        avnd_stop_tmr(cb, &rec->resp_tmr);
     > +        avnd_last_step_clean(cb);
     > +      }
     > +      cb->dnd_list.erase(iter);
     > +      TRACE("remove msg %u from queue", msg_id);
     > +      avnd_diq_rec_del(cb, rec);
     > +      break;
     >       }
     > -    m_AVND_DIQ_REC_FIND_POP(cb, rec);
     > -    avnd_diq_rec_del(cb, rec);
     >     }
     >
     > +  TRACE_LEAVE2();
     >     return;
     >   }
     >
     > @@ -1288,62 +1274,55 @@ void avnd_di_msg_ack_process(AVND_CB *cb, 
uint32_t mid) {
     >     Notes         : None.
     >   
******************************************************************************/
     >   void avnd_diq_rec_check_buffered_msg(AVND_CB *cb) {
     > -  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;) {
     > -        osafassert(rec->msg.type == AVND_MSG_AVD);
     > -        m_AVND_DIQ_REC_POP(cb, rec);
     > -        // 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);
     > -          }
     > -          m_AVND_DIQ_REC_PUSH(cb, rec);
     > -          break;
     > -        } else if (rec->msg.info.avd->msg_type ==
     > -              AVSV_N2D_OPERATION_STATE_MSG) {
     > -          if (rec->msg.info.avd->msg_info.n2d_opr_state.msg_id != 0) {
     > -            rec->msg.info.avd->msg_info.n2d_opr_state.msg_id = 0;
     > -            found = true;
     > -            LOG_NO(
     > -                "Found not-ack oper_state msg for SU:'%s', "
     > -                "su_oper_state:'%u', node_oper_state:'%u', 
recovery:'%u'",
     > -                osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
     > -                                               .n2d_opr_state.su_name),
     > -                rec->msg.info.avd->msg_info.n2d_opr_state
     > -                    .su_oper_state,
     > -                rec->msg.info.avd->msg_info.n2d_opr_state
     > -                    .node_oper_state,
     > -                rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
     > -                    .raw);
     > -          }
     > -          m_AVND_DIQ_REC_PUSH(cb, rec);
     > -          break;
     > -        } else {
     > -          // delete other messages for now
     > -          avnd_diq_rec_del(cb, rec);
     > -          rec = cb->dnd_list.head;
     > -        }
     > +  for (auto iter = cb->dnd_list.begin(); iter != cb->dnd_list.end();) {
     > +    auto rec = *iter;
     > +    osafassert(rec->msg.type == AVND_MSG_AVD);
     > +    // 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;
     > +        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);
     >         }
     > +      // leave in dnd_list
     > +      ++rec;
     [Praveen] Should not it be ++iter?
     > +      continue;
     > +    } else if (rec->msg.info.avd->msg_type ==
     > +          AVSV_N2D_OPERATION_STATE_MSG) {
     > +      if (rec->msg.info.avd->msg_info.n2d_opr_state.msg_id != 0) {
     > +        rec->msg.info.avd->msg_info.n2d_opr_state.msg_id = 0;
     > +        LOG_NO(
     > +            "Found not-ack oper_state msg for SU:'%s', "
     > +            "su_oper_state:'%u', node_oper_state:'%u', recovery:'%u'",
     > +            osaf_extended_name_borrow(&rec->msg.info.avd->msg_info
     > +                                           .n2d_opr_state.su_name),
     > +            rec->msg.info.avd->msg_info.n2d_opr_state
     > +                .su_oper_state,
     > +            rec->msg.info.avd->msg_info.n2d_opr_state
     > +                .node_oper_state,
     > +            rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
     > +                .raw);
     > +      }
     > +      // leave in dnd_list
     > +      ++rec;
     > +      continue;
     > +    } else {
     > +      // delete other messages for now
     > +      iter = cb->dnd_list.erase(iter);
     > +      avnd_diq_rec_del(cb, rec);
     >       }
     >     }
     >     return;
     > @@ -1379,7 +1358,7 @@ AVND_DND_MSG_LIST *avnd_diq_rec_add(AVND_CB *cb, 
AVND_MSG *msg) {
     >     msg->info.avd = 0;
     >
     >     /* push the record to the AvD msg list */
     > -  m_AVND_DIQ_REC_PUSH(cb, rec);
     > +  cb->dnd_list.push_back(rec);
     >     TRACE_LEAVE();
     >     return rec;
     >
     > @@ -1437,87 +1416,69 @@ void avnd_diq_rec_send_buffered_msg(AVND_CB *cb) 
{
     >     TRACE_ENTER();
     >     // Resend msgs from queue because amfnd dropped during headless
     >     // or headless-synchronization
     > -  if ((cb->dnd_list.head != nullptr)) {
     > -    AVND_DND_MSG_LIST *pending_rec = 0;
     > -    TRACE("Attach msg_id of buffered msg");
     > -    bool found = true;
     > -    while (found) {
     > -      found = false;
     > -      for (pending_rec = cb->dnd_list.head; pending_rec != nullptr;
     > -           pending_rec = pending_rec->next) {
     > -        if (pending_rec->msg.type == AVND_MSG_AVD) {
     > -          // Check su_si_assign message
     > -          if (pending_rec->msg.info.avd->msg_type ==
     > -                  AVSV_N2D_INFO_SU_SI_ASSIGN_MSG &&
     > -              
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id ==
     > -                  0) {
     > -            found = true;
     > -            m_AVND_DIQ_REC_POP(cb, pending_rec);
     > -#if 1
     > -            // only resend if this SUSI does exist
     > -            AVND_SU *su = cb->sudb.find(Amf::to_string(
     > -                
&pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.su_name));
     > -            if (su != nullptr && su->si_list.n_nodes > 0) {
     > -#endif
     > -              
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id =
     > -                  ++(cb->snd_msg_id);
     > -              m_AVND_DIQ_REC_PUSH(cb, pending_rec);
     > -              LOG_NO(
     > -                  "Found and resend buffered 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(&pending_rec->msg.info.avd->msg_info
     > -                                                 
.n2d_su_si_assign.su_name),
     > -                  
osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
     > -                                                 
.n2d_su_si_assign.si_name),
     > -                  
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
     > -                  
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
     > -                  pending_rec->msg.info.avd->msg_info.n2d_su_si_assign
     > -                      .single_csi,
     > -                  
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.error,
     > -                  
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id);
     > -
     > -#if 1
     > -            } else {
     > -              avnd_msg_content_free(cb, &pending_rec->msg);
     > -              delete pending_rec;
     > -              break;
     > -            }
     > -#endif
     > -          }
     > -          // Check oper_state message
     > -          else if (pending_rec->msg.info.avd->msg_type ==
     > -                       AVSV_N2D_OPERATION_STATE_MSG &&
     > -                   
pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id ==
     > -                       0) {
     > -            found = true;
     > -            m_AVND_DIQ_REC_POP(cb, pending_rec);
     > -            if (pending_rec != nullptr) {
     > -              pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id =
     > -                  ++(cb->snd_msg_id);
     > -
     > -              m_AVND_DIQ_REC_PUSH(cb, pending_rec);
     > -              LOG_NO(
     > -                  "Found and resend buffered oper_state msg for SU:'%s', 
"
     > -                  "su_oper_state:'%u', node_oper_state:'%u', 
recovery:'%u'",
     > -                  
osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
     > -                                                 
.n2d_opr_state.su_name),
     > -                  pending_rec->msg.info.avd->msg_info.n2d_opr_state
     > -                      .su_oper_state,
     > -                  pending_rec->msg.info.avd->msg_info.n2d_opr_state
     > -                      .node_oper_state,
     > -                  
pending_rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
     > -                      .raw);
     > -            }
     > -          }
     > -        }
     > +
     > +  for (auto iter = cb->dnd_list.begin(); iter != cb->dnd_list.end();) {
     > +    auto pending_rec = *iter;
     > +    osafassert(pending_rec->msg.type == AVND_MSG_AVD);
     > +
     > +    // Check su_si_assign message
     > +    if (pending_rec->msg.info.avd->msg_type ==
     > +            AVSV_N2D_INFO_SU_SI_ASSIGN_MSG &&
     > +        pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id ==
     > +            0) {
     > +
     > +      // only resend if this SUSI does exist
     > +      AVND_SU *su = cb->sudb.find(Amf::to_string(
     > +          
&pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.su_name));
     > +      if (su != nullptr && su->si_list.n_nodes > 0) {
     > +        pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id =
     > +            ++(cb->snd_msg_id);
     > +        LOG_NO(
     > +            "Found and resend buffered 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(&pending_rec->msg.info.avd->msg_info
     > +                                           .n2d_su_si_assign.su_name),
     > +            
osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
     > +                                           .n2d_su_si_assign.si_name),
     > +            
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.ha_state,
     > +            
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_act,
     > +            pending_rec->msg.info.avd->msg_info.n2d_su_si_assign
     > +                .single_csi,
     > +            pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.error,
     > +            
pending_rec->msg.info.avd->msg_info.n2d_su_si_assign.msg_id);
     > +        ++iter;
     > +      } else {
     > +        iter = cb->dnd_list.erase(iter);
     > +        avnd_msg_content_free(cb, &pending_rec->msg);
     > +        delete pending_rec;
     >         }
     > +    } else if (pending_rec->msg.info.avd->msg_type == 
AVSV_N2D_OPERATION_STATE_MSG &&
     > +               pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id 
== 0) {
     > +        pending_rec->msg.info.avd->msg_info.n2d_opr_state.msg_id =
     > +            ++(cb->snd_msg_id);
     > +
     > +        LOG_NO(
     > +            "Found and resend buffered oper_state msg for SU:'%s', "
     > +            "su_oper_state:'%u', node_oper_state:'%u', recovery:'%u'",
     > +            
osaf_extended_name_borrow(&pending_rec->msg.info.avd->msg_info
     > +                                           .n2d_opr_state.su_name),
     > +            pending_rec->msg.info.avd->msg_info.n2d_opr_state
     > +                .su_oper_state,
     > +            pending_rec->msg.info.avd->msg_info.n2d_opr_state
     > +                .node_oper_state,
     > +            pending_rec->msg.info.avd->msg_info.n2d_opr_state.rec_rcvr
     > +                .raw);
     > +        ++iter;
     > +    } else {
     > +      // no other messages should be buffered
     > +      osafassert(false);
     >       }
     > -    TRACE("retransmit message to amfd");
     > -    for (pending_rec = cb->dnd_list.head; pending_rec != nullptr;
     > -         pending_rec = pending_rec->next) {
     > -      avnd_diq_rec_send(cb, pending_rec);
     > -    }
     > +  }
     > +
     > +  TRACE("retransmit message to amfd");
     > +  for (auto pending_rec : cb->dnd_list) {
     > +    avnd_diq_rec_send(cb, pending_rec);
     >     }
     >     TRACE_LEAVE();
     >     return;
     > diff --git a/src/amf/amfnd/proxy.cc b/src/amf/amfnd/proxy.cc
     > index c314c280d..95d74b677 100644
     > --- a/src/amf/amfnd/proxy.cc
     > +++ b/src/amf/amfnd/proxy.cc
     > @@ -25,6 +25,7 @@
     >
     >   
****************************************************************************/
     >   #include <cinttypes>
     > +#include <algorithm>
     >
     >   #include "amf/amfnd/avnd.h"
     >   #include "base/osaf_extended_name.h"
     > @@ -138,7 +139,9 @@ uint32_t avnd_evt_ava_comp_val_req(AVND_CB *cb, 
AVND_EVT *evt) {
     >         LOG_ER("avnd_diq_rec_send:failed:%s,Type:%u and Hdl%llx",
     >                comp_name.c_str(), api_info->type, reg->hdl);
     >         /* pop & delete */
     > -      m_AVND_DIQ_REC_FIND_POP(cb, rec);
     > +      auto position = std::find(cb->dnd_list.begin(), 
cb->dnd_list.end(), rec);
     > +      osafassert(position != cb->dnd_list.end());
     > +      cb->dnd_list.erase(position);
     >         avnd_diq_rec_del(cb, rec);
     >       }
     >     } else {
     > @@ -173,7 +176,7 @@ uint32_t avnd_evt_ava_comp_val_req(AVND_CB *cb, 
AVND_EVT *evt) {
     >   
******************************************************************************/
     >   uint32_t avnd_evt_avd_comp_validation_resp_evh(AVND_CB *cb, AVND_EVT 
*evt) {
     >     uint32_t rc = NCSCC_RC_SUCCESS;
     > -  AVND_DND_MSG_LIST *rec = 0;
     > +  AVND_DND_MSG_LIST *rec = nullptr;
     >     AVSV_D2N_COMP_VALIDATION_RESP_INFO *info = nullptr;
     >     SaAisErrorT amf_rc = SA_AIS_OK;
     >     AVND_COMP *comp = nullptr, *pxy_comp = nullptr;
     > @@ -192,7 +195,13 @@ uint32_t 
avnd_evt_avd_comp_validation_resp_evh(AVND_CB *cb, AVND_EVT *evt) {
     >     TRACE("%s:MsgId=%u,NodeId=%u,result:%u", info_comp_name.c_str(), 
info->msg_id,
     >           info->node_id, info->result);
     >
     > -  m_AVND_DIQ_REC_FIND(cb, info->msg_id, rec);
     > +  for (auto temp_rec : cb->dnd_list) {
     > +    osafassert(temp_rec->msg.type == AVND_MSG_AVD);
     > +    if 
(*(reinterpret_cast<uint32_t*>(&(temp_rec->msg.info.avd->msg_info))) == 
info->msg_id) {
     > +      rec = temp_rec;
     > +      break;
     > +    }
     > +  }
     >
     >     if ((nullptr == rec) ||
     >         (memcmp(osaf_extended_name_borrow(&info->comp_name),
     > @@ -301,7 +310,9 @@ send_resp:
     >
     >   done:
     >     if (rec) {
     > -    m_AVND_DIQ_REC_FIND_POP(cb, rec);
     > +    auto position = std::find(cb->dnd_list.begin(), cb->dnd_list.end(), 
rec);
     > +    osafassert(position != cb->dnd_list.end());
     > +    cb->dnd_list.erase(position);
     >       avnd_diq_rec_del(cb, rec);
     >     }
     >
     > diff --git a/src/amf/amfnd/verify.cc b/src/amf/amfnd/verify.cc
     > index d5ddcea7f..5726ad93f 100644
     > --- a/src/amf/amfnd/verify.cc
     > +++ b/src/amf/amfnd/verify.cc
     > @@ -33,6 +33,7 @@
     >   */
     >
     >   #include "amf/amfnd/avnd.h"
     > +#include <algorithm>
     >
     >   
/****************************************************************************
     >     Name          : avnd_evt_avd_verify_message
     > @@ -48,8 +49,6 @@
     >     Notes         : None.
     >   
******************************************************************************/
     >   uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, AVND_EVT *evt) {
     > -  AVND_DND_LIST *list = &((cb)->dnd_list);
     > -  AVND_DND_MSG_LIST *rec = 0, t_rec;
     >     AVSV_D2N_DATA_VERIFY_MSG_INFO *info;
     >     uint32_t rcv_id;
     >     bool msg_found = false;
     > @@ -100,9 +99,8 @@ uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, 
AVND_EVT *evt) {
     >      * Otherwise this exercise also helps us in cleaning all the messages
     >      * currently pending in the Queue and are not acked.
     >      */
     > -  for (rec = list->head; nullptr != rec;) {
     > -    t_rec = *rec;
     > -
     > +  for (auto iter = cb->dnd_list.begin(); iter != cb->dnd_list.end();) {
     > +    auto rec = *iter;
     >       /*
     >        * Since AVD is telling us that he has received till recv_id, we 
should
     >        * always find msg with ID (rcv_id + 1). Delete and remove all the
     > @@ -112,10 +110,11 @@ uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, 
AVND_EVT *evt) {
     >        */
     >       if ((rcv_id + 1) > (*((uint32_t 
*)(&rec->msg.info.avd->msg_info)))) {
     >         /* pop & delete */
     > -      m_AVND_DIQ_REC_FIND_POP(cb, rec);
     > +      iter = cb->dnd_list.erase(iter);
     >         TRACE_1("AVND record %u deleted, upon fail-over",
     >                 *((uint32_t *)(&rec->msg.info.avd->msg_info)));
     >         avnd_diq_rec_del(cb, rec);
     > +      continue;
     >       } else {
     >         avnd_diq_rec_send(cb, rec);
     >
     > @@ -124,8 +123,7 @@ uint32_t avnd_evt_avd_verify_evh(AVND_CB *cb, 
AVND_EVT *evt) {
     >
     >         msg_found = true;
     >       }
     > -
     > -    rec = t_rec.next;
     > +    ++iter;
     >     }
     >
     >     if ((cb->snd_msg_id != info->rcv_id_cnt) && (msg_found == false)) {
     >


------------------------------------------------------------------------------
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

Reply via email to