Ack
/Hans
On 03/27/2014 12:50 PM, Hans Nordeback wrote:
> osaf/services/saf/amf/amfd/app.cc | 77
> +++++++++----------------------
> osaf/services/saf/amf/amfd/ckpt_enc.cc | 13 ++---
> osaf/services/saf/amf/amfd/ckpt_updt.cc | 7 +-
> osaf/services/saf/amf/amfd/include/app.h | 11 ++--
> osaf/services/saf/amf/amfd/sg.cc | 2 +-
> osaf/services/saf/amf/amfd/si.cc | 2 +-
> osaf/services/saf/amf/amfd/util.cc | 18 ++++---
> 7 files changed, 49 insertions(+), 81 deletions(-)
>
>
> diff --git a/osaf/services/saf/amf/amfd/app.cc
> b/osaf/services/saf/amf/amfd/app.cc
> --- a/osaf/services/saf/amf/amfd/app.cc
> +++ b/osaf/services/saf/amf/amfd/app.cc
> @@ -24,60 +24,26 @@
> #include <imm.h>
> #include <si.h>
>
> -static NCS_PATRICIA_TREE app_db;
> +AmfDb<AVD_APP> *app_db = 0;
>
> -void avd_app_db_add(AVD_APP *app)
> +// TODO(hafe) change this to a constructor
> +static AVD_APP *avd_app_new(const SaNameT *dn)
> {
> - unsigned int rc;
> -
> - if (avd_app_get(&app->name) == NULL) {
> - rc = ncs_patricia_tree_add(&app_db, &app->tree_node);
> - osafassert(rc == NCSCC_RC_SUCCESS);
> - }
> -}
> -
> -AVD_APP *avd_app_new(const SaNameT *dn)
> -{
> - AVD_APP *app;
> -
> - app = new AVD_APP();
> -
> + AVD_APP *app = new AVD_APP();
> memcpy(app->name.value, dn->value, dn->length);
> app->name.length = dn->length;
> - app->tree_node.key_info = (uint8_t *)&(app->name);
> -
> return app;
> }
>
> -void avd_app_delete(AVD_APP *app)
> +// TODO(hafe) change this to a destructor
> +static void avd_app_delete(AVD_APP *app)
> {
> - unsigned int rc = ncs_patricia_tree_del(&app_db, &app->tree_node);
> - osafassert(rc == NCSCC_RC_SUCCESS);
> + app_db->erase(app);
> m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, app, AVSV_CKPT_AVD_APP_CONFIG);
> avd_apptype_remove_app(app);
> delete app;
> }
>
> -AVD_APP *avd_app_get(const SaNameT *dn)
> -{
> - SaNameT tmp = {0};
> -
> - tmp.length = dn->length;
> - memcpy(tmp.value, dn->value, tmp.length);
> -
> - return (AVD_APP *)ncs_patricia_tree_get(&app_db, (uint8_t *)&tmp);
> -}
> -
> -AVD_APP *avd_app_getnext(const SaNameT *dn)
> -{
> - SaNameT tmp = {0};
> -
> - tmp.length = dn->length;
> - memcpy(tmp.value, dn->value, tmp.length);
> -
> - return (AVD_APP *)ncs_patricia_tree_getnext(&app_db, (uint8_t *)&tmp);
> -}
> -
> static void app_add_to_model(AVD_APP *app)
> {
> TRACE_ENTER2("%s", app->name.value);
> @@ -88,7 +54,10 @@ static void app_add_to_model(AVD_APP *ap
> goto done;
> }
>
> - avd_app_db_add(app);
> + if (app_db->find(&app->name) == NULL) {
> + app_db->insert(app);
> + }
> +
> /* Find application type and make a link with app type */
> app->app_type = avd_apptype_get(&app->saAmfAppType);
> osafassert(app->app_type);
> @@ -229,7 +198,8 @@ AVD_APP *avd_app_create(const SaNameT *d
> ** If called at new active at failover, the object is found in the DB
> ** but needs to get configuration attributes initialized.
> */
> - if (NULL == (app = avd_app_get(dn))) {
> + app = app_db->find(dn);
> + if (app == NULL) {
> if ((app = avd_app_new(dn)) == NULL)
> goto done;
> } else
> @@ -314,7 +284,7 @@ static void app_ccb_apply_cb(CcbUtilOper
> break;
> case CCBUTIL_MODIFY: {
> const SaImmAttrModificationT_2 *attr_mod;
> - app = avd_app_get(&opdata->objectName);
> + app = app_db->find(&opdata->objectName);
>
> while ((attr_mod = opdata->param.modify.attrMods[i++]) != NULL)
> {
> const SaImmAttrValuesT_2 *attribute =
> &attr_mod->modAttr;
> @@ -334,7 +304,7 @@ static void app_ccb_apply_cb(CcbUtilOper
> break;
> }
> case CCBUTIL_DELETE:
> - app = avd_app_get(&opdata->objectName);
> + app = app_db->find(&opdata->objectName);
> /* by this time all the SGs and SIs under this
> * app object should have been *DELETED* just
> * do a sanity check here
> @@ -359,7 +329,7 @@ static void app_admin_op_cb(SaImmOiHandl
> TRACE_ENTER2("%s", object_name->value);
>
> /* Find the app name. */
> - app = avd_app_get(object_name);
> + app = app_db->find(object_name);
> osafassert(app != NULL);
>
> if (op_id == SA_AMF_ADMIN_UNLOCK) {
> @@ -416,7 +386,7 @@ done:
> static SaAisErrorT app_rt_attr_cb(SaImmOiHandleT immOiHandle,
> const SaNameT *objectName, const SaImmAttrNameT *attributeNames)
> {
> - AVD_APP *app = avd_app_get(objectName);
> + AVD_APP *app = app_db->find(objectName);
> SaImmAttrNameT attributeName;
> int i = 0;
>
> @@ -493,12 +463,11 @@ SaAisErrorT avd_app_config_get(void)
>
> void avd_app_constructor(void)
> {
> - NCS_PATRICIA_PARAMS patricia_params;
> + app_db = new AmfDb<AVD_APP>;
>
> - patricia_params.key_size = sizeof(SaNameT);
> - osafassert(ncs_patricia_tree_init(&app_db, &patricia_params) ==
> NCSCC_RC_SUCCESS);
> -
> - avd_class_impl_set(const_cast<SaImmClassNameT>("SaAmfApplication"),
> app_rt_attr_cb, app_admin_op_cb,
> - app_ccb_completed_cb, app_ccb_apply_cb);
> + avd_class_impl_set(const_cast<SaImmClassNameT>("SaAmfApplication"),
> + app_rt_attr_cb,
> + app_admin_op_cb,
> + app_ccb_completed_cb,
> + app_ccb_apply_cb);
> }
> -
> diff --git a/osaf/services/saf/amf/amfd/ckpt_enc.cc
> b/osaf/services/saf/amf/amfd/ckpt_enc.cc
> --- a/osaf/services/saf/amf/amfd/ckpt_enc.cc
> +++ b/osaf/services/saf/amf/amfd/ckpt_enc.cc
> @@ -2243,16 +2243,14 @@ static uint32_t enc_cs_node_config(AVD_C
> static uint32_t enc_cs_app_config(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc,
> uint32_t *num_of_obj)
> {
> uint32_t status = NCSCC_RC_SUCCESS;
> - SaNameT app_name;
> - AVD_APP *app;
> EDU_ERR ederror = static_cast<EDU_ERR>(0);
> TRACE_ENTER();
>
> - /*
> - * Walk through the entire list and send the entire list data.
> - */
> - app_name.length = 0;
> - for (app = avd_app_getnext(&app_name); app != NULL; app =
> avd_app_getnext(&app_name)) {
> + /* Walk through all application instances and encode. */
> + // If use std=c++11 in Makefile.common the following syntax can be used
> instead:
> + // for (auto it = app_db->begin()
> + for (std::map<std::string, AVD_APP*>::const_iterator it =
> app_db->begin(); it != app_db->end(); it++) {
> + AVD_APP *app = it->second;
> status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl,
> avsv_edp_ckpt_msg_app, &enc->io_uba,
> EDP_OP_TYPE_ENC, app, &ederror,
> enc->i_peer_version);
>
> @@ -2261,7 +2259,6 @@ static uint32_t enc_cs_app_config(AVD_CL
> return NCSCC_RC_FAILURE;
> }
>
> - app_name = app->name;
> (*num_of_obj)++;
> }
>
> diff --git a/osaf/services/saf/amf/amfd/ckpt_updt.cc
> b/osaf/services/saf/amf/amfd/ckpt_updt.cc
> --- a/osaf/services/saf/amf/amfd/ckpt_updt.cc
> +++ b/osaf/services/saf/amf/amfd/ckpt_updt.cc
> @@ -18,6 +18,7 @@
> #include <logtrace.h>
> #include <amfd.h>
> #include <csi.h>
> +#include <app.h>
>
> static char *action_name[] = {
> const_cast<char*>("invalid"),
> @@ -95,14 +96,14 @@ done:
> uint32_t avd_ckpt_app(AVD_CL_CB *cb, AVD_APP *ckpt_app, NCS_MBCSV_ACT_TYPE
> action)
> {
> uint32_t rc = NCSCC_RC_SUCCESS;
> - AVD_APP *app;
>
> TRACE_ENTER2("%s - '%s'", action_name[action], ckpt_app->name.value);
>
> osafassert (action == NCS_MBCSV_ACT_UPDATE);
>
> - if (NULL == (app = avd_app_get(&ckpt_app->name))) {
> - LOG_ER("avd_app_get FAILED for '%s'", ckpt_app->name.value);
> + AVD_APP *app = app_db->find(&ckpt_app->name);
> + if (app == NULL) {
> + LOG_ER("%s failed to find '%s'", __FUNCTION__,
> ckpt_app->name.value);
> rc = NCSCC_RC_FAILURE;
> goto done;
> }
> diff --git a/osaf/services/saf/amf/amfd/include/app.h
> b/osaf/services/saf/amf/amfd/include/app.h
> --- a/osaf/services/saf/amf/amfd/include/app.h
> +++ b/osaf/services/saf/amf/amfd/include/app.h
> @@ -26,9 +26,12 @@
>
> #include <saAmf.h>
> #include <saImm.h>
> +
> +// TODO(hafe) remove include below when apptype is using map
> #include <ncspatricia.h>
> #include <sg.h>
> #include <si.h>
> +#include "db_template.h"
>
> struct avd_sg_tag;
> struct avd_si_tag;
> @@ -42,8 +45,8 @@ typedef struct avd_app_type_tag {
> struct avd_app_tag *list_of_app;
> } AVD_APP_TYPE;
>
> +// TODO (hafe) change to class AmfApp
> typedef struct avd_app_tag {
> - NCS_PATRICIA_NODE tree_node; /* key is name */
> SaNameT name;
> SaNameT saAmfAppType;
> SaAmfAdminStateT saAmfApplicationAdminState;
> @@ -54,11 +57,7 @@ typedef struct avd_app_tag {
> struct avd_app_type_tag *app_type;
> } AVD_APP;
>
> -extern void avd_app_db_add(AVD_APP *app);
> -extern AVD_APP *avd_app_new(const SaNameT *dn);
> -extern void avd_app_delete(AVD_APP *app);
> -extern AVD_APP *avd_app_get(const SaNameT *app_name);
> -extern AVD_APP *avd_app_getnext(const SaNameT *app_name);
> +extern AmfDb<AVD_APP> *app_db;
>
> extern void avd_app_add_si(AVD_APP *app, struct avd_si_tag *si);
> extern void avd_app_remove_si(AVD_APP *app, struct avd_si_tag *si);
> diff --git a/osaf/services/saf/amf/amfd/sg.cc
> b/osaf/services/saf/amf/amfd/sg.cc
> --- a/osaf/services/saf/amf/amfd/sg.cc
> +++ b/osaf/services/saf/amf/amfd/sg.cc
> @@ -66,7 +66,7 @@ static void sg_add_to_model(AVD_SG *sg)
> }
>
> avsv_sanamet_init(&sg->name, &dn, "safApp");
> - sg->app = avd_app_get(&dn);
> + sg->app = app_db->find(&dn);
>
> avd_sg_db_add(sg);
> sg->sg_type = avd_sgtype_get(&sg->saAmfSGType);
> diff --git a/osaf/services/saf/amf/amfd/si.cc
> b/osaf/services/saf/amf/amfd/si.cc
> --- a/osaf/services/saf/amf/amfd/si.cc
> +++ b/osaf/services/saf/amf/amfd/si.cc
> @@ -479,7 +479,7 @@ static void si_add_to_model(AVD_SI *si)
> }
>
> avsv_sanamet_init(&si->name, &dn, "safApp");
> - si->app = avd_app_get(&dn);
> + si->app = app_db->find(&dn);
>
> avd_si_db_add(si);
>
> diff --git a/osaf/services/saf/amf/amfd/util.cc
> b/osaf/services/saf/amf/amfd/util.cc
> --- a/osaf/services/saf/amf/amfd/util.cc
> +++ b/osaf/services/saf/amf/amfd/util.cc
> @@ -1391,13 +1391,14 @@ void avsv_sanamet_init_from_association_
> }
>
> /**
> - * Call this function from GDB to dump the AVD state. Example
> - * below.
> + * Dumps the director state to file
> + * This can be done using GDB:
> + * $ gdb --pid=`pgrep osafamfd` -ex 'call
> amfd_file_dump("/tmp/osafamfd.dump")' \
> + * /usr/local/lib/opensaf/osafamfd
> *
> * @param path
> */
> -/* gdb --pid=`pgrep ncs_scap` -ex 'call avd_file_dump("/tmp/avd.dump")'
> /usr/local/lib/opensaf/ncs_scap */
> -void avd_file_dump(const char *path)
> +void amfd_file_dump(const char *path)
> {
> SaNameT dn = {0};
> FILE *f = fopen(path, "w");
> @@ -1422,13 +1423,14 @@ void avd_file_dump(const char *path)
> node_id = node->node_info.nodeId;
> }
>
> - AVD_APP *app;
> - dn.length = 0;
> - for (app = avd_app_getnext(&dn); app != NULL; app =
> avd_app_getnext(&dn)) {
> + // If use std=c++11 in Makefile.common the following syntax can be used
> instead:
> + // for (auto it = app_db->begin()
> + for (std::map<std::string, AVD_APP*>::const_iterator it =
> app_db->begin();
> + it != app_db->end(); it++) {
> + const AVD_APP *app = it->second;
> fprintf(f, "%s\n", app->name.value);
> fprintf(f, "\tsaAmfApplicationAdminState=%u\n",
> app->saAmfApplicationAdminState);
> fprintf(f, "\tsaAmfApplicationCurrNumSGs=%u\n",
> app->saAmfApplicationCurrNumSGs);
> - dn = app->name;
> }
>
> AVD_SG *sg;
>
>
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel