osaf/services/saf/amf/amfd/app.cc | 4 +-
osaf/services/saf/amf/amfd/cluster.cc | 2 +
osaf/services/saf/amf/amfd/comp.cc | 55 +++++++++++++++++++++++++++++++-
osaf/services/saf/amf/amfd/comptype.cc | 23 +++++++++++--
osaf/services/saf/amf/amfd/csi.cc | 2 +
osaf/services/saf/amf/amfd/hlt.cc | 4 ++
osaf/services/saf/amf/amfd/node.cc | 5 ++-
osaf/services/saf/amf/amfd/sg.cc | 24 ++++++++++++++
osaf/services/saf/amf/amfd/sgtype.cc | 5 ++-
osaf/services/saf/amf/amfd/si.cc | 2 +
osaf/services/saf/amf/amfd/si_dep.cc | 2 +
osaf/services/saf/amf/amfd/su.cc | 2 +
osaf/services/saf/amf/amfd/sutype.cc | 4 ++
osaf/services/saf/amf/amfnd/avnd_chc.c | 9 ++++-
osaf/services/saf/amf/amfnd/avnd_comp.c | 2 +
osaf/services/saf/amf/amfnd/avnd_di.c | 3 +-
osaf/services/saf/amf/amfnd/avnd_hcdb.c | 2 +
osaf/services/saf/amf/amfnd/avnd_pg.c | 5 +-
osaf/services/saf/amf/amfnd/avnd_pgdb.c | 4 +-
19 files changed, 142 insertions(+), 17 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
@@ -323,12 +323,12 @@ static void app_ccb_apply_cb(CcbUtilOper
const SaImmAttrValuesT_2 *attribute =
&attr_mod->modAttr;
if (!strcmp(attribute->attrName, "saAmfAppType")) {
+ LOG_NO("Modified saAmfAppType from '%s' to '%s'
for '%s'", app->saAmfAppType.value,
+
(*((SaNameT*)attribute->attrValues[0])).value, app->name.value);
avd_apptype_remove_app(app);
app->saAmfAppType =
*((SaNameT*)attribute->attrValues[0]);
app->app_type =
avd_apptype_get(&app->saAmfAppType);
avd_apptype_add_app(app);
- LOG_NO("Changed saAmfAppType to '%s' for '%s'",
- app->saAmfAppType.value,
app->name.value);
break;
}
else
diff --git a/osaf/services/saf/amf/amfd/cluster.cc
b/osaf/services/saf/amf/amfd/cluster.cc
--- a/osaf/services/saf/amf/amfd/cluster.cc
+++ b/osaf/services/saf/amf/amfd/cluster.cc
@@ -100,6 +100,8 @@ static void ccb_apply_modify_hdlr(struct
while ((attr_mod = opdata->param.modify.attrMods[i++]) != NULL) {
if (!strcmp(attr_mod->modAttr.attrName,
"saAmfClusterStartupTimeout")) {
SaTimeT cluster_startup_timeout = *((SaTimeT
*)attr_mod->modAttr.attrValues[0]);
+ TRACE("saAmfClusterStartupTimeout modified from '%llu'
to '%llu'",
+
avd_cluster->saAmfClusterStartupTimeout, cluster_startup_timeout);
avd_cluster->saAmfClusterStartupTimeout =
cluster_startup_timeout;
}
}
diff --git a/osaf/services/saf/amf/amfd/comp.cc
b/osaf/services/saf/amf/amfd/comp.cc
--- a/osaf/services/saf/amf/amfd/comp.cc
+++ b/osaf/services/saf/amf/amfd/comp.cc
@@ -1097,18 +1097,20 @@ static void comp_ccb_apply_modify_hdlr(s
SaNameT *dn = (SaNameT*) value;
+ TRACE("saAmfCompType modified from '%s' to '%s' for
'%s'", comp->saAmfCompType.value, dn->value,
+ opdata->objectName.value);
avd_comptype_remove_comp(comp);
comp->saAmfCompType = *dn;
comp->comp_type = avd_comptype_get(dn);
avd_comptype_add_comp(comp);
param.attr_id = saAmfCompType_ID;
param.name_sec = *dn;
- TRACE("saAmfCompType changed to '%s' for '%s'",
dn->value, opdata->objectName.value);
} else if (!strcmp(attribute->attrName,
"saAmfCompInstantiateCmdArgv")) {
/* Node director will reread configuration from IMM */
param.attr_id = saAmfCompInstantiateCmd_ID;
+ TRACE("saAmfCompInstantiateCmdArgv modified.");
} else if (!strcmp(attribute->attrName,
"saAmfCompInstantiateTimeout")) {
@@ -1124,6 +1126,8 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompInstantiateTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompInstantiationLevel modified from '%llu'
to '%llu' for '%s'",
+ comp->comp_info.init_time, *((SaTimeT
*)value), comp->comp_info.name.value);
comp->comp_info.init_time = *((SaTimeT *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompInstantiationLevel")) {
@@ -1136,6 +1140,8 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompInstantiationLevel_ID;
param.value_len = sizeof(uint32_t);
memcpy(¶m.value[0],(SaUint32T *)value ,
param.value_len);
+ TRACE("saAmfCompInstantiationLevel modified from '%u'
to '%u' for '%s'",
+ comp->comp_info.inst_level,
*((SaUint32T *)value), comp->comp_info.name.value);
comp->comp_info.inst_level = *((SaUint32T *)value);
avd_su_remove_comp(comp);
@@ -1154,6 +1160,9 @@ static void comp_ccb_apply_modify_hdlr(s
param.value_len = sizeof(uint32_t);
num_inst = htonl(num_inst);
memcpy(¶m.value[0], &num_inst, param.value_len);
+ TRACE("saAmfCompNumMaxInstantiateWithoutDelay modified
from '%u' to '%u' for '%s'",
+ comp->comp_info.max_num_inst,
*((SaUint32T *)value),
+ comp->comp_info.name.value);
comp->comp_info.max_num_inst = *((SaUint32T *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompNumMaxInstantiateWithDelay")) {
@@ -1168,6 +1177,8 @@ static void comp_ccb_apply_modify_hdlr(s
param.value_len = sizeof(uint32_t);
num_inst = htonl(num_inst);
memcpy(¶m.value[0], &num_inst, param.value_len);
+ TRACE("saAmfCompNumMaxInstantiateWithDelay modified
from '%u' to '%u' for '%s'",
+ comp->max_num_inst_delay, *((SaUint32T
*)value), comp->comp_info.name.value);
comp->max_num_inst_delay = *((SaUint32T *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompDelayBetweenInstantiateAttempts")) {
@@ -1184,12 +1195,15 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id =
saAmfCompDelayBetweenInstantiateAttempts_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompDelayBetweenInstantiateAttempts
modified from '%llu' to '%llu' for '%s'",
+ comp->inst_retry_delay, *((SaTimeT
*)value), comp->comp_info.name.value);
comp->inst_retry_delay = *((SaTimeT *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompTerminateCmdArgv")) {
/* Node director will refresh from IMM */
param.attr_id = saAmfCompTerminateCmd_ID;
+ TRACE("saAmfCompTerminateCmdArgv modified.");
} else if (!strcmp(attribute->attrName,
"saAmfCompTerminateTimeout")) {
@@ -1205,12 +1219,15 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompTerminateTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompTerminateTimeout modified from '%llu'
to '%llu' for '%s'",
+ comp->comp_info.term_time, *((SaTimeT
*)value), comp->comp_info.name.value);
comp->comp_info.term_time = *((SaTimeT *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompCleanupCmdArgv")) {
/* Node director will reread configuration from IMM */
param.attr_id = saAmfCompCleanupCmd_ID;
+ TRACE("saAmfCompCleanupCmdArgv modified.");
} else if (!strcmp(attribute->attrName,
"saAmfCompCleanupTimeout")) {
SaTimeT timeout;
@@ -1225,12 +1242,15 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompCleanupTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompCleanupTimeout modified from '%llu' to
'%llu' for '%s'",
+ comp->comp_info.clean_time, *((SaTimeT
*)value), comp->comp_info.name.value);
comp->comp_info.clean_time = *((SaTimeT *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompAmStartCmdArgv")) {
/* Node director will reread configuration from IMM */
param.attr_id = saAmfCompAmStartCmd_ID;
+ TRACE("saAmfCompAmStartCmdArgv modified.");
} else if (!strcmp(attribute->attrName,
"saAmfCompAmStartTimeout")) {
@@ -1246,6 +1266,8 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompAmStartTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompAmStartTimeout modified from '%llu' to
'%llu' for '%s'",
+ comp->comp_info.amstart_time,
*((SaTimeT *)value), comp->comp_info.name.value);
comp->comp_info.amstart_time = *((SaTimeT *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompNumMaxAmStartAttempt")) {
@@ -1260,12 +1282,16 @@ static void comp_ccb_apply_modify_hdlr(s
param.value_len = sizeof(uint32_t);
num_am_start = htonl(num_am_start);
memcpy(¶m.value[0], &num_am_start, param.value_len);
+ TRACE("saAmfCompNumMaxAmStartAttempt modified from '%u'
to '%u' for '%s'",
+ comp->comp_info.max_num_amstart,
*((SaUint32T *)value),
+ comp->comp_info.name.value);
comp->comp_info.max_num_amstart = *((SaUint32T *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompAmStopCmdArgv")) {
/* Node director will reread configuration from IMM */
param.attr_id = saAmfCompAmStopCmd_ID;
+ TRACE("saAmfCompAmStopCmdArgv modified.");
} else if (!strcmp(attribute->attrName,
"saAmfCompAmStopTimeout")) {
@@ -1281,6 +1307,8 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompAmStopTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompAmStopTimeout modified from '%llu' to
'%llu' for '%s'",
+ comp->comp_info.amstop_time, *((SaTimeT
*)value), comp->comp_info.name.value);
comp->comp_info.amstop_time = *((SaTimeT *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompNumMaxAmStopAttempt")) {
@@ -1295,6 +1323,9 @@ static void comp_ccb_apply_modify_hdlr(s
param.value_len = sizeof(uint32_t);
num_am_stop = htonl(num_am_stop);
memcpy(¶m.value[0], &num_am_stop, param.value_len);
+ TRACE("saAmfCompNumMaxAmStopAttempt modified from '%u'
to '%u' for '%s'",
+ comp->comp_info.max_num_amstop,
*((SaUint32T *)value),
+ comp->comp_info.name.value);
comp->comp_info.max_num_amstop = *((SaUint32T *)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompCSISetCallbackTimeout")) {
@@ -1311,6 +1342,9 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompCSISetCallbackTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompCSISetCallbackTimeout modified from
'%llu' to '%llu' for '%s'",
+
comp->comp_info.csi_set_callback_timeout, *((SaTimeT *)value),
+ comp->comp_info.name.value);
comp->comp_info.csi_set_callback_timeout = *((SaTimeT
*)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompCSIRmvCallbackTimeout")) {
@@ -1327,6 +1361,9 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompCSIRmvCallbackTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompCSIRmvCallbackTimeout modified from
'%llu' to '%llu' for '%s'",
+
comp->comp_info.csi_rmv_callback_timeout, *((SaTimeT *)value),
+ comp->comp_info.name.value);
comp->comp_info.csi_rmv_callback_timeout = *((SaTimeT
*)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompQuiescingCompleteTimeout")) {
@@ -1343,6 +1380,9 @@ static void comp_ccb_apply_modify_hdlr(s
param.attr_id = saAmfCompQuiescingCompleteTimeout_ID;
param.value_len = sizeof(SaTimeT);
memcpy(¶m.value[0], &temp_timeout, param.value_len);
+ TRACE("saAmfCompQuiescingCompleteTimeout modified from
'%llu' to '%llu' for '%s'",
+
comp->comp_info.quiescing_complete_timeout, *((SaTimeT *)value),
+ comp->comp_info.name.value);
comp->comp_info.quiescing_complete_timeout = *((SaTimeT
*)value);
} else if (!strcmp(attribute->attrName,
"saAmfCompRecoveryOnError")) {
uint32_t recovery;
@@ -1357,6 +1397,8 @@ static void comp_ccb_apply_modify_hdlr(s
param.value_len = sizeof(uint32_t);
recovery = htonl(recovery);
memcpy(¶m.value[0], &recovery, param.value_len);
+ TRACE("saAmfCompRecoveryOnError modified from '%u' to
'%u' for '%s'",
+ comp->comp_info.def_recvr, *((SaUint32T
*)value), comp->comp_info.name.value);
comp->comp_info.def_recvr =
static_cast<SaAmfRecommendedRecoveryT>(*((SaUint32T *)value));
if (comp->comp_info.def_recvr ==
SA_AMF_NO_RECOMMENDATION) {
comp->comp_info.def_recvr =
SA_AMF_COMPONENT_FAILOVER;
@@ -1364,10 +1406,17 @@ static void comp_ccb_apply_modify_hdlr(s
SA_AMF_COMPONENT_FAILOVER,
SA_AMF_NO_RECOMMENDATION, comp->comp_info.name.value);
}
} else if (!strcmp(attribute->attrName,
"saAmfCompDisableRestart")) {
- if (value_is_deleted)
+ if (value_is_deleted) {
+ TRACE("saAmfCompDisableRestart modified from
'%u' to '%u' for '%s'",
+ comp->comp_info.comp_restart,
comp_type->saAmfCtDefDisableRestart,
+ comp->comp_info.name.value);
comp->comp_info.comp_restart =
comp_type->saAmfCtDefDisableRestart;
- else
+ } else {
+ TRACE("saAmfCompDisableRestart modified from
'%u' to '%u' for '%s'",
+ comp->comp_info.comp_restart,
*((SaUint32T *)value),
+ comp->comp_info.name.value);
comp->comp_info.comp_restart = *((SaUint32T
*)value);
+ }
param.attr_id = saAmfCompDisableRestart_ID;
param.value_len = sizeof(uint32_t);
diff --git a/osaf/services/saf/amf/amfd/comptype.cc
b/osaf/services/saf/amf/amfd/comptype.cc
--- a/osaf/services/saf/amf/amfd/comptype.cc
+++ b/osaf/services/saf/amf/amfd/comptype.cc
@@ -492,24 +492,39 @@ static void avd_compglobalattrs_ccb_appl
case CCBUTIL_MODIFY:
while ((attrMod = opdata->param.modify.attrMods[i++]) != NULL) {
if (!strcmp("saAmfNumMaxInstantiateWithoutDelay",
attrMod->modAttr.attrName)) {
+ TRACE("saAmfNumMaxInstantiateWithoutDelay
modified from '%u' to '%u'",
+
avd_comp_global_attrs.saAmfNumMaxInstantiateWithoutDelay,
+ *((SaUint32T
*)attrMod->modAttr.attrValues[0]));
avd_comp_global_attrs.saAmfNumMaxInstantiateWithoutDelay =
- *((SaUint32T
*)attrMod->modAttr.attrValues[0]);
+ *((SaUint32T
*)attrMod->modAttr.attrValues[0]);
}
if (!strcmp("saAmfNumMaxInstantiateWithDelay",
attrMod->modAttr.attrName)) {
+ TRACE("saAmfNumMaxInstantiateWithDelay modified
from '%u' to '%u'",
+
avd_comp_global_attrs.saAmfNumMaxInstantiateWithDelay,
+ *((SaUint32T
*)attrMod->modAttr.attrValues[0]));
avd_comp_global_attrs.saAmfNumMaxInstantiateWithDelay =
- *((SaUint32T
*)attrMod->modAttr.attrValues[0]);
+ *((SaUint32T
*)attrMod->modAttr.attrValues[0]);
}
if (!strcmp("saAmfNumMaxAmStartAttempts",
attrMod->modAttr.attrName)) {
+ TRACE("saAmfNumMaxAmStartAttempts modified from
'%u' to '%u'",
+
avd_comp_global_attrs.saAmfNumMaxAmStartAttempts,
+ *((SaUint32T
*)attrMod->modAttr.attrValues[0]));
avd_comp_global_attrs.saAmfNumMaxAmStartAttempts =
*((SaUint32T
*)attrMod->modAttr.attrValues[0]);
}
if (!strcmp("saAmfNumMaxAmStopAttempts",
attrMod->modAttr.attrName)) {
+ TRACE("saAmfNumMaxAmStopAttempts modified from
'%u' to '%u'",
+
avd_comp_global_attrs.saAmfNumMaxAmStopAttempts,
+ *((SaUint32T
*)attrMod->modAttr.attrValues[0]));
avd_comp_global_attrs.saAmfNumMaxAmStopAttempts
=
- *((SaUint32T
*)attrMod->modAttr.attrValues[0]);
+ *((SaUint32T
*)attrMod->modAttr.attrValues[0]);
}
if (!strcmp("saAmfDelayBetweenInstantiateAttempts",
attrMod->modAttr.attrName)) {
+ TRACE("saAmfDelayBetweenInstantiateAttempts
modified from '%llu' to '%llu'",
+
avd_comp_global_attrs.saAmfDelayBetweenInstantiateAttempts,
+ *((SaTimeT
*)attrMod->modAttr.attrValues[0]));
avd_comp_global_attrs.saAmfDelayBetweenInstantiateAttempts =
- *((SaTimeT
*)attrMod->modAttr.attrValues[0]);
+ *((SaTimeT
*)attrMod->modAttr.attrValues[0]);
}
}
break;
diff --git a/osaf/services/saf/amf/amfd/csi.cc
b/osaf/services/saf/amf/amfd/csi.cc
--- a/osaf/services/saf/amf/amfd/csi.cc
+++ b/osaf/services/saf/amf/amfd/csi.cc
@@ -760,6 +760,8 @@ static void csi_ccb_apply_modify_hdlr(st
if (!strcmp(attr_mod->modAttr.attrName, "saAmfCSType")) {
struct avd_cstype *csi_type;
SaNameT cstype_name = *(SaNameT*)
attr_mod->modAttr.attrValues[0];
+ TRACE("saAmfCSType modified from '%s' to '%s' for
Csi'%s'", csi->saAmfCSType.value,
+ cstype_name.value, csi->name.value);
csi_type = avd_cstype_get(&cstype_name);
avd_cstype_remove_csi(csi);
csi->saAmfCSType = cstype_name;
diff --git a/osaf/services/saf/amf/amfd/hlt.cc
b/osaf/services/saf/amf/amfd/hlt.cc
--- a/osaf/services/saf/amf/amfd/hlt.cc
+++ b/osaf/services/saf/amf/amfd/hlt.cc
@@ -132,8 +132,12 @@ static void ccb_apply_modify_hdlr(CcbUti
memcpy(param.value, param_val, param.value_len);
if (!strcmp(attribute->attrName, "saAmfHealthcheckPeriod")) {
+ TRACE("saAmfHealthcheckPeriod modified to '%llu' for
Comp'%s'", *param_val,
+ comp->comp_info.name.value);
param.attr_id = saAmfHealthcheckPeriod_ID;
} else if (!strcmp(attribute->attrName,
"saAmfHealthcheckMaxDuration")) {
+ TRACE("saAmfHealthcheckMaxDuration modified to '%llu'
for Comp'%s'", *param_val,
+ comp->comp_info.name.value);
param.attr_id = saAmfHealthcheckMaxDuration_ID;
} else
osafassert(0);
diff --git a/osaf/services/saf/amf/amfd/node.cc
b/osaf/services/saf/amf/amfd/node.cc
--- a/osaf/services/saf/amf/amfd/node.cc
+++ b/osaf/services/saf/amf/amfd/node.cc
@@ -571,7 +571,7 @@ static void node_ccb_apply_modify_hdlr(C
param.attr_id = saAmfNodeSuFailoverProb_ID;
param.act = AVSV_OBJ_OPR_MOD;
param.name = node->name;
-
+ TRACE("Old saAmfNodeSuFailOverProb is '%llu'",
node->saAmfNodeSuFailOverProb);
if (node->node_state != AVD_AVND_STATE_ABSENT) {
param.value_len = sizeof(SaTimeT);
memcpy((char *)¶m.value[0], (char
*)&su_failover_prob, param.value_len);
@@ -582,6 +582,7 @@ static void node_ccb_apply_modify_hdlr(C
} else {
node->saAmfNodeSuFailOverProb =
m_NCS_OS_NTOHLL_P(&su_failover_prob);
}
+ TRACE("Modified saAmfNodeSuFailOverProb is '%llu'",
node->saAmfNodeSuFailOverProb);
} else if (!strcmp(attribute->attrName,
"saAmfNodeSuFailoverMax")) {
@@ -594,6 +595,7 @@ static void node_ccb_apply_modify_hdlr(C
param.attr_id = saAmfNodeSuFailoverMax_ID;
param.act = AVSV_OBJ_OPR_MOD;
param.name = node->name;
+ TRACE("Old saAmfNodeSuFailoverMax is '%u'",
node->saAmfNodeSuFailoverMax);
if (node->node_state != AVD_AVND_STATE_ABSENT) {
param.value_len = sizeof(uint32_t);
@@ -604,6 +606,7 @@ static void node_ccb_apply_modify_hdlr(C
} else {
node->saAmfNodeSuFailoverMax = failover_val;
}
+ TRACE("Modified saAmfNodeSuFailoverMax is '%u'",
node->saAmfNodeSuFailoverMax);
} else {
osafassert(0);
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
@@ -731,6 +731,8 @@ static void ccb_apply_modify_hdlr(CcbUti
if (!strcmp(attribute->attrName, "saAmfSGType")) {
SaNameT sg_type_name = *((SaNameT *)value);
+ TRACE("saAmfSGType modified from '%s' to '%s'
of Sg'%s'", sg->saAmfSGType.value,
+ sg_type_name.value,
sg->name.value);
sg_type = avd_sgtype_get(&sg_type_name);
osafassert(NULL != sg_type);
@@ -760,6 +762,7 @@ static void ccb_apply_modify_hdlr(CcbUti
sg_nd_attribute_update(sg,
saAmfSGCompRestartProb_ID);
sg_nd_attribute_update(sg,
saAmfSGCompRestartMax_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGAutoRepair")) {
+ TRACE("Old saAmfSGAutoRepair is '%u'",
sg->saAmfSGAutoRepair);
if (value_is_deleted) {
sg->saAmfSGAutoRepair =
sg_type->saAmfSgtDefAutoRepair;
sg->saAmfSGAutoRepair_configured =
false;
@@ -767,69 +770,84 @@ static void ccb_apply_modify_hdlr(CcbUti
sg->saAmfSGAutoRepair =
static_cast<SaBoolT>(*((SaUint32T *)value));
sg->saAmfSGAutoRepair_configured =
true;
}
+ TRACE("Modified saAmfSGAutoRepair is '%u'",
sg->saAmfSGAutoRepair);
} else if (!strcmp(attribute->attrName,
"saAmfSGAutoAdjust")) {
+ TRACE("Old saAmfSGAutoAdjust is '%u'",
sg->saAmfSGAutoAdjust);
if (value_is_deleted)
sg->saAmfSGAutoAdjust =
sg_type->saAmfSgtDefAutoAdjust;
else
sg->saAmfSGAutoAdjust =
static_cast<SaBoolT>(*((SaUint32T *)value));
+ TRACE("Modified saAmfSGAutoAdjust is '%u'",
sg->saAmfSGAutoAdjust);
+ } else if (!strcmp(attribute->attrName,
"saAmfSGAutoAdjust")) {
} else if (!strcmp(attribute->attrName,
"saAmfSGNumPrefActiveSUs")) {
if (value_is_deleted)
sg->saAmfSGNumPrefActiveSUs = 1;
else
sg->saAmfSGNumPrefActiveSUs =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGNumPrefActiveSUs is
'%u'", sg->saAmfSGNumPrefActiveSUs);
} else if (!strcmp(attribute->attrName,
"saAmfSGNumPrefStandbySUs")) {
if (value_is_deleted)
sg->saAmfSGNumPrefStandbySUs = 1;
else
sg->saAmfSGNumPrefStandbySUs =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGNumPrefStandbySUs is
'%u'", sg->saAmfSGNumPrefStandbySUs);
} else if (!strcmp(attribute->attrName,
"saAmfSGNumPrefInserviceSUs")) {
if (value_is_deleted)
sg->saAmfSGNumPrefInserviceSUs =
sg_su_cnt(sg);
else
sg->saAmfSGNumPrefInserviceSUs =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGNumPrefInserviceSUs is
'%u'", sg->saAmfSGNumPrefInserviceSUs);
} else if (!strcmp(attribute->attrName,
"saAmfSGNumPrefAssignedSUs")) {
if (value_is_deleted)
sg->saAmfSGNumPrefAssignedSUs =
sg->saAmfSGNumPrefInserviceSUs;
else
sg->saAmfSGNumPrefAssignedSUs =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGNumPrefAssignedSUs is
'%u'", sg->saAmfSGNumPrefAssignedSUs);
} else if (!strcmp(attribute->attrName,
"saAmfSGMaxActiveSIsperSU")) {
if (value_is_deleted)
sg->saAmfSGMaxActiveSIsperSU = -1;
else
sg->saAmfSGMaxActiveSIsperSU =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGMaxActiveSIsperSU is
'%u'", sg->saAmfSGMaxActiveSIsperSU);
} else if (!strcmp(attribute->attrName,
"saAmfSGMaxStandbySIsperSU")) {
if (value_is_deleted)
sg->saAmfSGMaxStandbySIsperSU = -1;
else
sg->saAmfSGMaxStandbySIsperSU =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGMaxStandbySIsperSU is
'%u'", sg->saAmfSGMaxStandbySIsperSU);
} else if (!strcmp(attribute->attrName,
"saAmfSGAutoAdjustProb")) {
if (value_is_deleted)
sg->saAmfSGAutoAdjustProb =
sg_type->saAmfSgtDefAutoAdjustProb;
else
sg->saAmfSGAutoAdjustProb = *((SaTimeT
*)value);
+ TRACE("Modified saAmfSGAutoAdjustProb is
'%llu'", sg->saAmfSGAutoAdjustProb);
} else if (!strcmp(attribute->attrName,
"saAmfSGCompRestartProb")) {
if (value_is_deleted)
sg->saAmfSGCompRestartProb =
sg_type->saAmfSgtDefCompRestartProb;
else
sg->saAmfSGCompRestartProb = *((SaTimeT
*)value);
+ TRACE("Modified saAmfSGCompRestartProb is
'%llu'", sg->saAmfSGCompRestartProb);
sg_nd_attribute_update(sg,
saAmfSGCompRestartProb_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGCompRestartMax")) {
if (value_is_deleted)
sg->saAmfSGCompRestartMax =
sg_type->saAmfSgtDefCompRestartMax;
else
sg->saAmfSGCompRestartMax =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGCompRestartMax is '%u'",
sg->saAmfSGCompRestartMax);
sg_nd_attribute_update(sg,
saAmfSGCompRestartMax_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGSuRestartProb")) {
if (value_is_deleted)
sg->saAmfSGSuRestartProb =
sg_type->saAmfSgtDefSuRestartProb;
else
sg->saAmfSGSuRestartProb = *((SaTimeT
*)value);
+ TRACE("Modified saAmfSGSuRestartProb is
'%llu'", sg->saAmfSGSuRestartProb);
sg_nd_attribute_update(sg,
saAmfSGSuRestartProb_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGSuRestartMax")) {
if (value_is_deleted)
sg->saAmfSGSuRestartMax =
sg_type->saAmfSgtDefSuRestartMax;
else
sg->saAmfSGSuRestartMax = *((SaUint32T
*)value);
+ TRACE("Modified saAmfSGSuRestartMax is '%u'",
sg->saAmfSGSuRestartMax);
sg_nd_attribute_update(sg,
saAmfSGSuRestartMax_ID);
} else {
osafassert(0);
@@ -858,6 +876,7 @@ static void ccb_apply_modify_hdlr(CcbUti
sg->saAmfSGNumPrefInserviceSUs =
sg_su_cnt(sg);
else
sg->saAmfSGNumPrefInserviceSUs =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGNumPrefInserviceSUs is
'%u'", sg->saAmfSGNumPrefInserviceSUs);
if (avd_cb->avail_state_avd ==
SA_AMF_HA_ACTIVE) {
if (avd_sg_app_su_inst_func(avd_cb, sg)
!= NCSCC_RC_SUCCESS) {
@@ -869,6 +888,7 @@ static void ccb_apply_modify_hdlr(CcbUti
sg->saAmfSGCompRestartProb =
sg_type->saAmfSgtDefCompRestartProb;
else
sg->saAmfSGCompRestartProb = *((SaTimeT
*)value);
+ TRACE("Modified saAmfSGCompRestartProb is
'%llu'", sg->saAmfSGCompRestartProb);
sg_nd_attribute_update(sg,
saAmfSGCompRestartProb_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGCompRestartMax")) {
@@ -876,6 +896,7 @@ static void ccb_apply_modify_hdlr(CcbUti
sg->saAmfSGCompRestartMax =
sg_type->saAmfSgtDefCompRestartMax;
else
sg->saAmfSGCompRestartMax =
*((SaUint32T *)value);
+ TRACE("Modified saAmfSGCompRestartMax is '%u'",
sg->saAmfSGCompRestartMax);
sg_nd_attribute_update(sg,
saAmfSGCompRestartMax_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGSuRestartProb")) {
@@ -883,6 +904,7 @@ static void ccb_apply_modify_hdlr(CcbUti
sg->saAmfSGSuRestartProb =
sg_type->saAmfSgtDefSuRestartProb;
else
sg->saAmfSGSuRestartProb = *((SaTimeT
*)value);
+ TRACE("Modified saAmfSGSuRestartProb is
'%llu'", sg->saAmfSGSuRestartProb);
sg_nd_attribute_update(sg,
saAmfSGSuRestartProb_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGSuRestartMax")) {
@@ -890,6 +912,7 @@ static void ccb_apply_modify_hdlr(CcbUti
sg->saAmfSGSuRestartMax =
sg_type->saAmfSgtDefSuRestartMax;
else
sg->saAmfSGSuRestartMax = *((SaUint32T
*)value);
+ TRACE("Modified saAmfSGSuRestartMax is '%u'",
sg->saAmfSGSuRestartMax);
sg_nd_attribute_update(sg,
saAmfSGSuRestartMax_ID);
} else if (!strcmp(attribute->attrName,
"saAmfSGAutoRepair")) {
if (value_is_deleted) {
@@ -899,6 +922,7 @@ static void ccb_apply_modify_hdlr(CcbUti
sg->saAmfSGAutoRepair =
static_cast<SaBoolT>(*((SaUint32T *)value));
sg->saAmfSGAutoRepair_configured =
true;
}
+ TRACE("Modified saAmfSGAutoRepair is '%u'",
sg->saAmfSGAutoRepair);
} else {
osafassert(0);
}
diff --git a/osaf/services/saf/amf/amfd/sgtype.cc
b/osaf/services/saf/amf/amfd/sgtype.cc
--- a/osaf/services/saf/amf/amfd/sgtype.cc
+++ b/osaf/services/saf/amf/amfd/sgtype.cc
@@ -443,11 +443,14 @@ static void sgtype_ccb_apply_modify_hdlr
sgt->saAmfSgtDefAutoRepair =
static_cast<SaBoolT>(*((SaUint32T *)attr_mod->modAttr.attrValues[0]));
sgt->saAmfSgtDefAutoRepair_configured = true;
}
+ TRACE("Modified saAmfSgtDefAutoRepair is '%u'",
sgt->saAmfSgtDefAutoRepair);
/* Modify saAmfSGAutoRepair for SGs which had inherited
saAmfSgtDefAutoRepair.*/
if (old_value != sgt->saAmfSgtDefAutoRepair) {
for (AVD_SG *sg = sgt->list_of_sg; sg; sg =
sg->sg_list_sg_type_next) {
- if (!sg->saAmfSGAutoRepair_configured)
+ if (!sg->saAmfSGAutoRepair_configured) {
sg->saAmfSGAutoRepair =
static_cast<SaBoolT>(sgt->saAmfSgtDefAutoRepair);
+ TRACE("Modified
saAmfSGAutoRepair is '%u'", sg->saAmfSGAutoRepair);
+ }
}
}
}
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
@@ -1106,6 +1106,7 @@ static void si_ccb_apply_modify_hdlr(Ccb
avd_si_adjust_si_assignments(si,
mod_pref_assignments);
si->saAmfSIPrefActiveAssignments =
mod_pref_assignments;
}
+ TRACE("Modified saAmfSIPrefActiveAssignments is '%u'",
si->saAmfSIPrefActiveAssignments);
si_update_ass_state(si);
} else if (!strcmp(attribute->attrName,
"saAmfSIPrefStandbyAssignments")) {
if (value_is_deleted)
@@ -1131,6 +1132,7 @@ static void si_ccb_apply_modify_hdlr(Ccb
avd_si_adjust_si_assignments(si,
mod_pref_assignments);
si->saAmfSIPrefStandbyAssignments =
mod_pref_assignments;
}
+ TRACE("Modified saAmfSINumCurrStandbyAssignments is
'%u'", si->saAmfSINumCurrStandbyAssignments);
si_update_ass_state(si);
} else {
osafassert(0);
diff --git a/osaf/services/saf/amf/amfd/si_dep.cc
b/osaf/services/saf/amf/amfd/si_dep.cc
--- a/osaf/services/saf/amf/amfd/si_dep.cc
+++ b/osaf/services/saf/amf/amfd/si_dep.cc
@@ -1576,6 +1576,8 @@ static void sidep_ccb_apply_cb(CcbUtilOp
sidep = avd_sidep_find(avd_cb, &indx, true);
while ((attr_mod = opdata->param.modify.attrMods[i++]) != NULL)
{
if (!strcmp(attr_mod->modAttr.attrName,
"saAmfToleranceTime")) {
+ TRACE("saAmfToleranceTime modified from '%llu'
to '%llu'", sidep->saAmfToleranceTime,
+ *((SaTimeT
*)attr_mod->modAttr.attrValues[0]));
sidep->saAmfToleranceTime = *((SaTimeT
*)attr_mod->modAttr.attrValues[0]);
}
}
diff --git a/osaf/services/saf/amf/amfd/su.cc b/osaf/services/saf/amf/amfd/su.cc
--- a/osaf/services/saf/amf/amfd/su.cc
+++ b/osaf/services/saf/amf/amfd/su.cc
@@ -1435,6 +1435,7 @@ static void su_ccb_apply_modify_hdlr(str
su->saAmfSUFailover =
static_cast<bool>(*((SaUint32T *)attr_mod->modAttr.attrValues[0]));
su->saAmfSUFailover_configured = true;
}
+ TRACE("Modified saAmfSUFailover is '%u'",
su->saAmfSUFailover);
if (!su->saAmfSUPreInstantiable) {
su->saAmfSUFailover = true;
su->saAmfSUFailover_configured = true;
@@ -1453,6 +1454,7 @@ static void su_ccb_apply_modify_hdlr(str
} else if (!strcmp(attr_mod->modAttr.attrName, "saAmfSUType")) {
struct avd_sutype *sut;
SaNameT sutype_name = *(SaNameT*)
attr_mod->modAttr.attrValues[0];
+ TRACE("Modified saAmfSUType from '%s' to '%s'",
su->saAmfSUType.value, sutype_name.value);
sut = avd_sutype_get(&sutype_name);
avd_sutype_remove_su(su);
su->saAmfSUType = sutype_name;
diff --git a/osaf/services/saf/amf/amfd/sutype.cc
b/osaf/services/saf/amf/amfd/sutype.cc
--- a/osaf/services/saf/amf/amfd/sutype.cc
+++ b/osaf/services/saf/amf/amfd/sutype.cc
@@ -253,12 +253,16 @@ static void sutype_ccb_apply_modify_hdlr
if (!strcmp(attr_mod->modAttr.attrName,
"saAmfSutDefSUFailover")) {
uint32_t old_value = sut->saAmfSutDefSUFailover;
sut->saAmfSutDefSUFailover = *((SaUint32T
*)attr_mod->modAttr.attrValues[0]);
+ TRACE("Modified saAmfSutDefSUFailover from '%u' to
'%u'", old_value,
+ sut->saAmfSutDefSUFailover);
/* Modify saAmfSUFailover for SUs which had inherited
saAmfSutDefSUFailover.
Modification will not be done for the NPI SU */
if (old_value != sut->saAmfSutDefSUFailover) {
for (AVD_SU *su = sut->list_of_su; su; su =
su->su_list_su_type_next) {
if ((!su->saAmfSUFailover_configured)
&& (su->saAmfSUPreInstantiable)) {
su->saAmfSUFailover =
static_cast<bool>(sut->saAmfSutDefSUFailover);
+ TRACE("Modified
saAmfSutDefSUFailover to '%u' for Su'%s'",
+
su->saAmfSUFailover, su->name.value);
su_nd_attribute_update(su,
saAmfSUFailOver_ID);
}
}
diff --git a/osaf/services/saf/amf/amfnd/avnd_chc.c
b/osaf/services/saf/amf/amfnd/avnd_chc.c
--- a/osaf/services/saf/amf/amfnd/avnd_chc.c
+++ b/osaf/services/saf/amf/amfnd/avnd_chc.c
@@ -491,6 +491,7 @@ AVND_COMP_HC_REC *avnd_comp_hc_rec_add(A
AVND_HC *hc = 0;
AVSV_HLT_KEY hlt_chk;
uint32_t l_num;
+ TRACE_ENTER2();
if ((0 == (rec = calloc(1, sizeof(AVND_COMP_HC_REC)))))
goto err;
@@ -539,12 +540,13 @@ AVND_COMP_HC_REC *avnd_comp_hc_rec_add(A
/* add the record to the healthcheck list */
m_AVND_COMPDB_REC_HC_ADD(*comp, *rec);
+ TRACE_LEAVE();
return rec;
err:
if (rec)
avnd_comp_hc_rec_del(cb, comp, rec);
-
+ TRACE_LEAVE();
return 0;
}
@@ -675,6 +677,7 @@ uint32_t avnd_comp_hc_rec_process(AVND_C
uint32_t avnd_comp_hc_rec_start(AVND_CB *cb, AVND_COMP *comp, AVND_COMP_HC_REC
*rec)
{
uint32_t rc = NCSCC_RC_SUCCESS;
+ TRACE_ENTER();
/* Invoke the hc callbk for AMF initiated healthcheck */
if (m_AVND_COMP_HC_REC_IS_AMF_INITIATED(rec)) {
@@ -822,6 +825,7 @@ uint32_t avnd_comp_hc_rec_stop(AVND_CB *
{
AVND_COMP_CBK *cbk_rec = 0;
uint32_t rc = NCSCC_RC_SUCCESS;
+ TRACE_ENTER();
/*
* It may so happen that the callbk record is added to the callbk list
@@ -863,6 +867,7 @@ uint32_t avnd_comp_hc_rec_confirm(AVND_C
{
AVND_ERR_INFO err_info;
uint32_t rc = NCSCC_RC_SUCCESS;
+ TRACE_ENTER();
/* it has to be comp-initiated healthcheck */
osafassert(m_AVND_COMP_HC_REC_IS_COMP_INITIATED(rec));
@@ -878,7 +883,7 @@ uint32_t avnd_comp_hc_rec_confirm(AVND_C
err_info.rec_rcvr.raw = rec->rec_rcvr.raw;
rc = avnd_err_process(cb, comp, &err_info);
}
-
+ TRACE_LEAVE2("%u", rc);
return rc;
}
diff --git a/osaf/services/saf/amf/amfnd/avnd_comp.c
b/osaf/services/saf/amf/amfnd/avnd_comp.c
--- a/osaf/services/saf/amf/amfnd/avnd_comp.c
+++ b/osaf/services/saf/amf/amfnd/avnd_comp.c
@@ -2064,6 +2064,7 @@ uint32_t avnd_amf_resp_send(AVND_CB *cb,
AVSV_NDA_AVA_MSG *temp_ptr = NULL;
NODE_ID node_id = 0;
MDS_SYNC_SND_CTXT temp_ctxt;
+ TRACE_ENTER();
/* Check if the response has to be sent or not. */
memset(&temp_ctxt, 0, sizeof(MDS_SYNC_SND_CTXT));
@@ -2115,6 +2116,7 @@ uint32_t avnd_amf_resp_send(AVND_CB *cb,
done:
/* free the contents of avnd message */
avnd_msg_content_free(cb, &msg);
+ TRACE_LEAVE();
return rc;
}
diff --git a/osaf/services/saf/amf/amfnd/avnd_di.c
b/osaf/services/saf/amf/amfnd/avnd_di.c
--- a/osaf/services/saf/amf/amfnd/avnd_di.c
+++ b/osaf/services/saf/amf/amfnd/avnd_di.c
@@ -689,6 +689,7 @@ uint32_t avnd_di_pg_act_send(AVND_CB *cb
{
AVND_MSG msg;
uint32_t rc = NCSCC_RC_SUCCESS;
+ TRACE_ENTER2("Csi '%s'", csi_name->value);
memset(&msg, 0, sizeof(AVND_MSG));
@@ -711,7 +712,7 @@ uint32_t avnd_di_pg_act_send(AVND_CB *cb
/* free the contents of avnd message */
avnd_msg_content_free(cb, &msg);
-
+ TRACE_LEAVE2("rc, '%u'", rc);
return rc;
}
diff --git a/osaf/services/saf/amf/amfnd/avnd_hcdb.c
b/osaf/services/saf/amf/amfnd/avnd_hcdb.c
--- a/osaf/services/saf/amf/amfnd/avnd_hcdb.c
+++ b/osaf/services/saf/amf/amfnd/avnd_hcdb.c
@@ -143,6 +143,7 @@ AVND_HCTYPE *avnd_hctypedb_rec_get(const
AVND_HC *avnd_hcdb_rec_add(AVND_CB *cb, AVND_HC_PARAM *info, uint32_t *rc)
{
AVND_HC *hc = 0;
+ TRACE_ENTER();
*rc = NCSCC_RC_SUCCESS;
@@ -202,6 +203,7 @@ uint32_t avnd_hcdb_rec_del(AVND_CB *cb,
{
AVND_HC *hc = 0;
uint32_t rc = NCSCC_RC_SUCCESS;
+ TRACE_ENTER2();
/* get the healthcheck record */
hc = avnd_hcdb_rec_get(cb, hc_key);
diff --git a/osaf/services/saf/amf/amfnd/avnd_pg.c
b/osaf/services/saf/amf/amfnd/avnd_pg.c
--- a/osaf/services/saf/amf/amfnd/avnd_pg.c
+++ b/osaf/services/saf/amf/amfnd/avnd_pg.c
@@ -396,7 +396,7 @@ uint32_t avnd_evt_avd_pg_track_act_rsp_e
/* get the pg rec */
pg = m_AVND_PGDB_REC_GET(cb->pgdb, info->csi_name);
-
+ TRACE("pg '%p', msg_on_fover '%u'", pg,
info->msg_on_fover);
if (true == info->msg_on_fover) {
if (NULL != pg) {
if (false == pg->is_exist)
@@ -467,7 +467,7 @@ uint32_t avnd_evt_avd_pg_upd_evh(AVND_CB
return NCSCC_RC_FAILURE;
osafassert(true == pg->is_exist);
-
+ TRACE("is_csi_del '%u'", info->is_csi_del);
if (true == info->is_csi_del) {
/* => this update is for csi deletion */
@@ -487,6 +487,7 @@ uint32_t avnd_evt_avd_pg_upd_evh(AVND_CB
/* => this update is for csi updation */
/* update the pg mem-list */
+ TRACE("info->mem.change '%u'", info->mem.change);
switch (info->mem.change) {
case SA_AMF_PROTECTION_GROUP_ADDED:
case SA_AMF_PROTECTION_GROUP_STATE_CHANGE:
diff --git a/osaf/services/saf/amf/amfnd/avnd_pgdb.c
b/osaf/services/saf/amf/amfnd/avnd_pgdb.c
--- a/osaf/services/saf/amf/amfnd/avnd_pgdb.c
+++ b/osaf/services/saf/amf/amfnd/avnd_pgdb.c
@@ -115,10 +115,11 @@ uint32_t avnd_pgdb_destroy(AVND_CB *cb)
0, otherwise
Notes : None.
-******************************************************************************/
+
******************************************************************************/
AVND_PG *avnd_pgdb_rec_add(AVND_CB *cb, SaNameT *csi_name, uint32_t *rc)
{
AVND_PG *pg = 0;
+ TRACE_ENTER2("Csi '%s'", csi_name->value);
/* verify if this pg is already present in the db */
if (0 != m_AVND_PGDB_REC_GET(cb->pgdb, *csi_name)) {
@@ -185,6 +186,7 @@ uint32_t avnd_pgdb_rec_del(AVND_CB *cb,
{
AVND_PG *pg = 0;
uint32_t rc = NCSCC_RC_SUCCESS;
+ TRACE_ENTER();
/* get the pg record */
pg = m_AVND_PGDB_REC_GET(cb->pgdb, *csi_name);
------------------------------------------------------------------------------
LIMITED TIME SALE - Full Year of Microsoft Training For Just $49.99!
1,500+ hours of tutorials including VisualStudio 2012, Windows 8, SharePoint
2013, SQL 2012, MVC 4, more. BEST VALUE: New Multi-Library Power Pack includes
Mobile, Cloud, Java, and UX Design. Lowest price ever! Ends 9/20/13.
http://pubads.g.doubleclick.net/gampad/clk?id=58041151&iu=/4140/ostg.clktrk
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel