ack, code review, built and run amf demo pgm/Regards HansN

On 06/13/14 06:40, nagendr...@oracle.com wrote:
>   osaf/services/saf/amf/amfd/include/susi.h    |    7 +-
>   osaf/services/saf/amf/amfd/sg_nway_fsm.cc    |   49 ++++++---
>   osaf/services/saf/amf/amfd/sg_nwayact_fsm.cc |   30 +++---
>   osaf/services/saf/amf/amfd/siass.cc          |   24 ++---
>   osaf/services/saf/amf/amfd/sirankedsu.cc     |  125 
> +++-----------------------
>   5 files changed, 74 insertions(+), 161 deletions(-)
>
>
> diff --git a/osaf/services/saf/amf/amfd/include/susi.h 
> b/osaf/services/saf/amf/amfd/include/susi.h
> --- a/osaf/services/saf/amf/amfd/include/susi.h
> +++ b/osaf/services/saf/amf/amfd/include/susi.h
> @@ -84,8 +84,6 @@ typedef struct avd_sus_per_si_rank_index
>    * from the AVD Control Block.
>    */
>   typedef struct avd_sus_per_si_rank_tag {
> -
> -     NCS_PATRICIA_NODE tree_node;    /* key will be the SI name and Rank */
>       AVD_SUS_PER_SI_RANK_INDX indx;  /* Table index */
>       SaNameT su_name;        /* name of the SU as SaNameT */
>       struct avd_si_tag *sus_per_si_rank_on_si;
> @@ -93,6 +91,8 @@ typedef struct avd_sus_per_si_rank_tag {
>   
>   } AVD_SUS_PER_SI_RANK;
>   
> +extern AmfDb<std::pair<std::string, uint32_t>, AVD_SUS_PER_SI_RANK> 
> *sirankedsu_db;
> +
>   #define   AVD_SU_PER_SI_RANK_NULL   ((AVD_SUS_PER_SI_RANK *)0)
>   
>   #define AVD_SU_SI_REL_NULL ((AVD_SU_SI_REL *)0)
> @@ -143,9 +143,6 @@ extern void avd_susi_update(AVD_SU_SI_RE
>   
>   AVD_SU_SI_REL *avd_su_susi_find(AVD_CL_CB *cb, AVD_SU *su, const SaNameT 
> *si_name);
>   uint32_t avd_susi_delete(AVD_CL_CB *cb, AVD_SU_SI_REL *susi, bool ckpt);
> -extern AVD_SUS_PER_SI_RANK *avd_sirankedsu_getnext_valid(AVD_CL_CB *cb,
> -     AVD_SUS_PER_SI_RANK_INDX indx, AVD_SU **o_su);
> -extern AVD_SUS_PER_SI_RANK *avd_sirankedsu_getnext(AVD_CL_CB *cb, 
> AVD_SUS_PER_SI_RANK_INDX indx);
>   extern SaAisErrorT avd_sirankedsu_config_get(SaNameT *si_name, AVD_SI *si);
>   extern void avd_sirankedsu_constructor(void);
>   extern void avd_susi_ha_state_set(AVD_SU_SI_REL *susi, SaAmfHAStateT 
> ha_state);
> diff --git a/osaf/services/saf/amf/amfd/sg_nway_fsm.cc 
> b/osaf/services/saf/amf/amfd/sg_nway_fsm.cc
> --- a/osaf/services/saf/amf/amfd/sg_nway_fsm.cc
> +++ b/osaf/services/saf/amf/amfd/sg_nway_fsm.cc
> @@ -1438,8 +1438,6 @@ uint32_t avd_sg_nway_si_assign(AVD_CL_CB
>       AVD_SI *curr_si = 0;
>       AVD_SU *curr_su = NULL;
>       AVD_SU *pref_su = NULL;
> -     AVD_SUS_PER_SI_RANK_INDX i_idx;
> -     AVD_SUS_PER_SI_RANK *su_rank_rec = 0;
>       bool is_act_ass_sent = false, is_all_su_oos = true, is_all_si_ok = 
> false, su_found = true;
>       uint32_t rc = NCSCC_RC_SUCCESS;
>       AVD_SU_SI_REL *tmp_susi;
> @@ -1492,17 +1490,22 @@ uint32_t avd_sg_nway_si_assign(AVD_CL_CB
>                       continue;
>               }
>               /* we've an unassigned si.. find su for active assignment */
> -
>               /* first, scan based on su rank for this si */
> -             memset((uint8_t *)&i_idx, '\0', sizeof(i_idx));
> -             i_idx.si_name = curr_si->name;
> -             i_idx.su_rank = 0;
> -             curr_su = NULL;
> -             for (su_rank_rec = avd_sirankedsu_getnext_valid(cb, i_idx, 
> &curr_su);
> -                  su_rank_rec; su_rank_rec = 
> avd_sirankedsu_getnext_valid(cb, su_rank_rec->indx, &curr_su)) {
> -                     if (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, 
> curr_si->name) != 0) {
> -                             curr_su = 0;
> -                             break;
> +             for (std::map<std::pair<std::string, uint32_t>, 
> AVD_SUS_PER_SI_RANK*>::const_iterator
> +                             it = sirankedsu_db->begin(); it != 
> sirankedsu_db->end(); it++) {
> +                     AVD_SUS_PER_SI_RANK *su_rank_rec = it->second;
> +                     {
> +                             if 
> (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, curr_si->name) != 0) {
> +                                     continue;
> +                             }
> +
> +                             /* get the su & si */
> +                             curr_su = 
> su_db->find(Amf::to_string(&su_rank_rec->su_name));
> +                             AVD_SI *si = 
> avd_si_get(&su_rank_rec->indx.si_name);
> +
> +                             /* validate this entry */
> +                             if ((si == NULL) || (curr_su == NULL) || 
> (si->sg_of_si != curr_su->sg_of_su))
> +                                     continue;
>                       }
>   
>                       if (!curr_su)
> @@ -1602,12 +1605,22 @@ uint32_t avd_sg_nway_si_assign(AVD_CL_CB
>               /* we've a not-so-fully-assigned si.. find sus for standby 
> assignment */
>   
>               /* first, scan based on su rank for this si */
> -             memset((uint8_t *)&i_idx, '\0', sizeof(i_idx));
> -             i_idx.si_name = curr_si->name;
> -             i_idx.su_rank = 0;
> -             for (su_rank_rec = avd_sirankedsu_getnext_valid(cb, i_idx, 
> &curr_su);
> -                  su_rank_rec && 
> (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, curr_si->name) == 0);
> -                  su_rank_rec = avd_sirankedsu_getnext_valid(cb, 
> su_rank_rec->indx, &curr_su)) {
> +             for (std::map<std::pair<std::string, uint32_t>, 
> AVD_SUS_PER_SI_RANK*>::const_iterator
> +                             it = sirankedsu_db->begin(); it != 
> sirankedsu_db->end(); it++) {
> +                     AVD_SUS_PER_SI_RANK *su_rank_rec = it->second;
> +                     {
> +                             if 
> (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, curr_si->name) != 0)
> +                                     continue;
> +
> +                             /* get the su & si */
> +                             curr_su = 
> su_db->find(Amf::to_string(&su_rank_rec->su_name));
> +                             AVD_SI *si = 
> avd_si_get(&su_rank_rec->indx.si_name);
> +
> +                             /* validate this entry */
> +                             if ((si == NULL) || (curr_su == NULL) || 
> (si->sg_of_si != curr_su->sg_of_su))
> +                                     continue;
> +                     }
> +
>                       /* verify if this su can take the standby assignment */
>                       if (!curr_su || (curr_su->saAmfSuReadinessState != 
> SA_AMF_READINESS_IN_SERVICE) ||
>                           ((curr_su->sg_of_su->saAmfSGMaxStandbySIsperSU != 
> 0) &&
> diff --git a/osaf/services/saf/amf/amfd/sg_nwayact_fsm.cc 
> b/osaf/services/saf/amf/amfd/sg_nwayact_fsm.cc
> --- a/osaf/services/saf/amf/amfd/sg_nwayact_fsm.cc
> +++ b/osaf/services/saf/amf/amfd/sg_nwayact_fsm.cc
> @@ -58,8 +58,6 @@ AVD_SU *avd_sg_nacvred_su_chose_asgn(AVD
>       AVD_SU *i_su, *qualified_su;
>       AVD_SI *i_si;
>       bool l_flag, next_si_tobe_assigned = true;
> -     AVD_SUS_PER_SI_RANK_INDX i_idx;
> -     AVD_SUS_PER_SI_RANK *su_rank_rec;
>       AVD_SU_SI_REL *tmp_rel;
>   
>       TRACE_ENTER2("'%s'", sg->name.value);
> @@ -88,15 +86,21 @@ AVD_SU *avd_sg_nacvred_su_chose_asgn(AVD
>               /* identify a in-service SU which is not assigned to this SI 
> and can
>                * take more assignments so that the SI can be assigned.
>                */
> -             memset((uint8_t *)&i_idx, '\0', sizeof(i_idx));
> -             i_idx.si_name = i_si->name;
> -             i_idx.su_rank = 0;
> -             for (su_rank_rec = avd_sirankedsu_getnext_valid(cb, i_idx, 
> &i_su);
> -                  (su_rank_rec != AVD_SU_PER_SI_RANK_NULL)
> -                  && (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, 
> i_si->name) == 0);
> -                  su_rank_rec = avd_sirankedsu_getnext_valid(cb, 
> su_rank_rec->indx, &i_su)) {
> -                     if (i_su == NULL)
> -                             continue;
> +             for (std::map<std::pair<std::string, uint32_t>, 
> AVD_SUS_PER_SI_RANK*>::const_iterator
> +                             it = sirankedsu_db->begin(); it != 
> sirankedsu_db->end(); it++) {
> +                     AVD_SUS_PER_SI_RANK *su_rank_rec = it->second;
> +                     {
> +                             if 
> (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, i_si->name) != 0)
> +                                     continue;
> +
> +                             /* get the su & si */
> +                             i_su = 
> su_db->find(Amf::to_string(&su_rank_rec->su_name));
> +                             AVD_SI *si = 
> avd_si_get(&su_rank_rec->indx.si_name);
> +
> +                             /* validate this entry */
> +                             if ((si == NULL) || (i_su == NULL) || 
> (si->sg_of_si != i_su->sg_of_su))
> +                                     continue;
> +                     }
>   
>                       if ((i_su->saAmfSuReadinessState != 
> SA_AMF_READINESS_IN_SERVICE) ||
>                           ((i_su->sg_of_su->saAmfSGMaxActiveSIsperSU != 0)
> @@ -128,9 +132,7 @@ AVD_SU *avd_sg_nacvred_su_chose_asgn(AVD
>                               LOG_ER("%s:%u: %s (%u)", __FILE__, __LINE__, 
> i_su->name.value, i_su->name.length);
>                       }
>   
> -             }               /* for (su_rank_rec = 
> avd_sus_per_si_rank_struc_find_valid_next(cb,i_idx, &i_su);
> -                                (su_rank_rec != AVD_SU_PER_SI_RANK_NULL) && 
> (m_CMP_NORDER_SANAMET(su_rank_rec->si_name,i_si->name) == 0);
> -                                su_rank_rec = 
> avd_sus_per_si_rank_struc_find_valid_next(cb,su_rank_rec->indx, &i_su) ) */
> +             }
>   
>               /* identify a in-service SU which is not assigned to this SI 
> and can
>                * take more assignments so that the SI can be assigned.
> diff --git a/osaf/services/saf/amf/amfd/siass.cc 
> b/osaf/services/saf/amf/amfd/siass.cc
> --- a/osaf/services/saf/amf/amfd/siass.cc
> +++ b/osaf/services/saf/amf/amfd/siass.cc
> @@ -151,7 +151,6 @@ AVD_SU_SI_REL *avd_susi_create(AVD_CL_CB
>   {
>       AVD_SU_SI_REL *su_si, *p_su_si, *i_su_si;
>       AVD_SU *curr_su = 0;
> -     AVD_SUS_PER_SI_RANK_INDX i_idx;
>       AVD_SUS_PER_SI_RANK *su_rank_rec = 0, *i_su_rank_rec = 0;
>       uint32_t rank1, rank2;
>   
> @@ -172,12 +171,11 @@ AVD_SU_SI_REL *avd_susi_create(AVD_CL_CB
>        */
>   
>       /* determine if the su is ranked per si */
> -     memset((uint8_t *)&i_idx, '\0', sizeof(i_idx));
> -     i_idx.si_name = si->name;
> -     i_idx.su_rank = 0;
> -     for (su_rank_rec = avd_sirankedsu_getnext(cb, i_idx);
> -          su_rank_rec && (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, 
> si->name) == 0);
> -          su_rank_rec = avd_sirankedsu_getnext(cb, su_rank_rec->indx)) {
> +     for (std::map<std::pair<std::string, uint32_t>, 
> AVD_SUS_PER_SI_RANK*>::const_iterator
> +                     it = sirankedsu_db->begin(); it != 
> sirankedsu_db->end(); it++) {
> +             AVD_SUS_PER_SI_RANK *su_rank_rec = it->second;
> +             if (m_CMP_HORDER_SANAMET(su_rank_rec->indx.si_name, si->name) 
> != 0)
> +                     continue;
>               curr_su = su_db->find(Amf::to_string(&su_rank_rec->su_name));
>               if (curr_su == su)
>                       break;
> @@ -194,13 +192,11 @@ AVD_SU_SI_REL *avd_susi_create(AVD_CL_CB
>                               continue;
>   
>                       /* determine the su_rank rec for this rec */
> -                     memset((uint8_t *)&i_idx, '\0', sizeof(i_idx));
> -                     i_idx.si_name = si->name;
> -                     i_idx.su_rank = 0;
> -                     for (i_su_rank_rec = avd_sirankedsu_getnext(cb, i_idx);
> -                          i_su_rank_rec
> -                          && 
> (m_CMP_HORDER_SANAMET(i_su_rank_rec->indx.si_name, si->name) == 0);
> -                          i_su_rank_rec = avd_sirankedsu_getnext(cb, 
> i_su_rank_rec->indx)) {
> +                     for (std::map<std::pair<std::string, uint32_t>, 
> AVD_SUS_PER_SI_RANK*>::const_iterator
> +                                     it = sirankedsu_db->begin(); it != 
> sirankedsu_db->end(); it++) {
> +                             AVD_SUS_PER_SI_RANK *i_su_rank_rec = it->second;
> +                             if 
> (m_CMP_HORDER_SANAMET(i_su_rank_rec->indx.si_name, si->name) != 0)
> +                                     continue;
>                               curr_su = 
> su_db->find(Amf::to_string(&i_su_rank_rec->su_name));
>                               if (curr_su == i_su_si->su)
>                                       break;
> diff --git a/osaf/services/saf/amf/amfd/sirankedsu.cc 
> b/osaf/services/saf/amf/amfd/sirankedsu.cc
> --- a/osaf/services/saf/amf/amfd/sirankedsu.cc
> +++ b/osaf/services/saf/amf/amfd/sirankedsu.cc
> @@ -35,13 +35,14 @@
>   #include <csi.h>
>   #include <logtrace.h>
>   
> -static NCS_PATRICIA_TREE sirankedsu_db;
> +AmfDb<std::pair<std::string, uint32_t>, AVD_SUS_PER_SI_RANK> *sirankedsu_db= 
> NULL;
>   static void avd_susi_namet_init(const SaNameT *object_name, SaNameT 
> *su_name, SaNameT *si_name);
>   
>   static void avd_sirankedsu_db_add(AVD_SUS_PER_SI_RANK *sirankedsu)
>   {
>           AVD_SI *avd_si = NULL;
> -        unsigned int rc = ncs_patricia_tree_add(&sirankedsu_db, 
> &sirankedsu->tree_node);
> +     unsigned int rc = 
> sirankedsu_db->insert(make_pair(Amf::to_string(&(sirankedsu->indx.si_name)),
> +                             sirankedsu->indx.su_rank), sirankedsu);
>           osafassert(rc == NCSCC_RC_SUCCESS);
>   
>           /* Find the si name. */
> @@ -83,11 +84,6 @@ static AVD_SUS_PER_SI_RANK *avd_siranked
>   
>       ranked_su_per_si->indx.su_rank = indx.su_rank;
>   
> -     ranked_su_per_si->tree_node.key_info = (uint8_t 
> *)(&ranked_su_per_si->indx);
> -     ranked_su_per_si->tree_node.bit = 0;
> -     ranked_su_per_si->tree_node.left = NULL;
> -     ranked_su_per_si->tree_node.right = NULL;
> -
>       return ranked_su_per_si;
>   }
>   
> @@ -117,95 +113,13 @@ static AVD_SUS_PER_SI_RANK *avd_siranked
>       memcpy(rank_indx.si_name.value, indx.si_name.value, 
> indx.si_name.length);
>       rank_indx.su_rank = indx.su_rank;
>   
> -     ranked_su_per_si = (AVD_SUS_PER_SI_RANK 
> *)ncs_patricia_tree_get(&sirankedsu_db, (uint8_t *)&rank_indx);
> +     ranked_su_per_si = 
> sirankedsu_db->find(make_pair(Amf::to_string(&(rank_indx.si_name)),
> +                             rank_indx.su_rank));
>   
>       return ranked_su_per_si;
>   }
>   
>   
> /*****************************************************************************
> - * Function: avd_sirankedsu_getnext
> - *
> - * Purpose:  This function will find the next AVD_SUS_PER_SI_RANK structure 
> in the
> - * tree whose key value is next of the given key value.
> - *
> - * Input: cb - the AVD control block
> - *        indx - The key value.
> - *
> - * Returns: The pointer to AVD_SUS_PER_SI_RANK structure found in the tree.
> - *
> - * NOTES:
> - *
> - *
> - **************************************************************************/
> -
> -AVD_SUS_PER_SI_RANK *avd_sirankedsu_getnext(AVD_CL_CB *cb, 
> AVD_SUS_PER_SI_RANK_INDX indx)
> -{
> -     AVD_SUS_PER_SI_RANK *ranked_su_per_si = NULL;
> -     AVD_SUS_PER_SI_RANK_INDX rank_indx;
> -
> -     memset(&rank_indx, '\0', sizeof(AVD_SUS_PER_SI_RANK_INDX));
> -     rank_indx.si_name.length = indx.si_name.length;
> -     memcpy(rank_indx.si_name.value, indx.si_name.value, 
> indx.si_name.length);
> -     rank_indx.su_rank = indx.su_rank;
> -
> -     ranked_su_per_si = (AVD_SUS_PER_SI_RANK 
> *)ncs_patricia_tree_getnext(&sirankedsu_db, (uint8_t *)&rank_indx);
> -
> -     return ranked_su_per_si;
> -}
> -
> -/*****************************************************************************
> - * Function: avd_sirankedsu_getnext_valid
> - *
> - * Purpose:  This function will find the next AVD_SUS_PER_SI_RANK structure 
> in the
> - * tree whose key value is next of the given key value. It also verifies if 
> the
> - * the si & su belong to the same sg.
> - *
> - * Input: cb - the AVD control block
> - *        indx - The key value.
> - *       o_su - output field indicating the pointer to the pointer of
> - *                the SU in the SISU rank list. Filled when return value is 
> not
> - *              NULL.
> - *
> - * Returns: The pointer to AVD_SUS_PER_SI_RANK structure found in the tree.
> - *
> - * NOTES:
> - *
> - *
> - **************************************************************************/
> -
> -AVD_SUS_PER_SI_RANK *avd_sirankedsu_getnext_valid(AVD_CL_CB *cb,
> -     AVD_SUS_PER_SI_RANK_INDX indx, AVD_SU **o_su)
> -{
> -     AVD_SUS_PER_SI_RANK *ranked_su_per_si = NULL;
> -     AVD_SUS_PER_SI_RANK_INDX rank_indx;
> -     AVD_SI *si = NULL;
> -     AVD_SU *su = NULL;
> -
> -     memset(&rank_indx, '\0', sizeof(AVD_SUS_PER_SI_RANK_INDX));
> -     rank_indx.si_name.length = indx.si_name.length;
> -     memcpy(rank_indx.si_name.value, indx.si_name.value, 
> indx.si_name.length);
> -     rank_indx.su_rank = indx.su_rank;
> -
> -     ranked_su_per_si = (AVD_SUS_PER_SI_RANK 
> *)ncs_patricia_tree_getnext(&sirankedsu_db, (uint8_t *)&rank_indx);
> -
> -     if (ranked_su_per_si == NULL) {
> -             /*  return NULL */
> -             return ranked_su_per_si;
> -     }
> -
> -     /* get the su & si */
> -     su = su_db->find(Amf::to_string(&ranked_su_per_si->su_name));
> -     si = avd_si_get(&indx.si_name);
> -
> -     /* validate this entry */
> -     if ((si == NULL) || (su == NULL) || (si->sg_of_si != su->sg_of_su))
> -             return avd_sirankedsu_getnext_valid(cb, ranked_su_per_si->indx, 
> o_su);
> -
> -     *o_su = su;
> -     return ranked_su_per_si;
> -}
> -
> -/*****************************************************************************
>    * Function: avd_sirankedsu_delete
>    *
>    * Purpose:  This function will delete and free AVD_SUS_PER_SI_RANK 
> structure from
> @@ -225,12 +139,8 @@ static uint32_t avd_sirankedsu_delete(AV
>       if (ranked_su_per_si == NULL)
>               return NCSCC_RC_FAILURE;
>   
> -     if (ncs_patricia_tree_del(&sirankedsu_db, &ranked_su_per_si->tree_node)
> -         != NCSCC_RC_SUCCESS) {
> -             /* log error */
> -             return NCSCC_RC_FAILURE;
> -     }
> -
> +     
> sirankedsu_db->erase(make_pair(Amf::to_string(&(ranked_su_per_si->indx.si_name)),
> +                             ranked_su_per_si->indx.su_rank));
>       delete ranked_su_per_si;
>       return NCSCC_RC_SUCCESS;
>   }
> @@ -443,7 +353,6 @@ static int avd_sirankedsu_ccb_complete_d
>       AVD_SI *si = NULL;
>       SaNameT su_name;
>       SaNameT si_name;
> -     AVD_SUS_PER_SI_RANK_INDX indx;
>       AVD_SUS_PER_SI_RANK *su_rank_rec = 0;
>       bool found = false;
>   
> @@ -454,14 +363,13 @@ static int avd_sirankedsu_ccb_complete_d
>       avd_susi_namet_init(opdata->param.deleteOp.objectName, &su_name, 
> &si_name);
>   
>       /* determine if the su is ranked per si */
> -     memset((uint8_t *)&indx, '\0', sizeof(indx));
> -     indx.si_name = si_name;
> -     indx.su_rank = 0;
> -     for (su_rank_rec = avd_sirankedsu_getnext(avd_cb, indx);
> -                     su_rank_rec && (memcmp(&(su_rank_rec->indx.si_name), 
> &si_name, sizeof(SaNameT))
> -                             == 0);
> -                     su_rank_rec = avd_sirankedsu_getnext(avd_cb, 
> su_rank_rec->indx)) {
> -             if (memcmp(&su_rank_rec->su_name.value, &su_name.value, 
> su_name.length) == 0) {
> +     for (std::map<std::pair<std::string, uint32_t>, 
> AVD_SUS_PER_SI_RANK*>::const_iterator
> +                     it = sirankedsu_db->begin(); it != 
> sirankedsu_db->end(); it++) {
> +             AVD_SUS_PER_SI_RANK *su_rank_rec = it->second;
> +             if ((memcmp(&(su_rank_rec->indx.si_name), &si_name, 
> sizeof(SaNameT))
> +                                     == 0) &&
> +                             (memcmp(&su_rank_rec->su_name.value,
> +                                     &su_name.value, su_name.length) == 0)) {
>                       found = true;
>                       break;
>               }
> @@ -583,10 +491,7 @@ SaAisErrorT avd_sirankedsu_config_get(Sa
>   
>   void avd_sirankedsu_constructor(void)
>   {
> -     NCS_PATRICIA_PARAMS patricia_params;
> -
> -     patricia_params.key_size = sizeof(AVD_SUS_PER_SI_RANK_INDX);
> -     osafassert(ncs_patricia_tree_init(&sirankedsu_db, &patricia_params) == 
> NCSCC_RC_SUCCESS);
> +     sirankedsu_db = new AmfDb<std::pair<std::string, uint32_t>, 
> AVD_SUS_PER_SI_RANK>;
>       avd_class_impl_set("SaAmfSIRankedSU", NULL, NULL,
>               sirankedsu_ccb_completed_cb, sirankedsu_ccb_apply_cb);
>   }


------------------------------------------------------------------------------
HPCC Systems Open Source Big Data Platform from LexisNexis Risk Solutions
Find What Matters Most in Your Big Data with HPCC Systems
Open Source. Fast. Scalable. Simple. Ideal for Dirty Data.
Leverages Graph Analysis for Fast Processing & Easy Data Exploration
http://p.sf.net/sfu/hpccsystems
_______________________________________________
Opensaf-devel mailing list
Opensaf-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensaf-devel

Reply via email to