|
From: <pra...@or...> - 2015-11-09 09:41:50
|
osaf/services/saf/amf/amfd/include/sg.h | 7 +++++++
osaf/services/saf/amf/amfd/sg.cc | 21 +++++++++++++++++++++
2 files changed, 28 insertions(+), 0 deletions(-)
After SG lock, immlist <sg> does not show correct value of saAmfSGNumCurrAssignedSUs.
AMFD is not calculcating dynamically the values of following runtime
attributes:
saAmfSGNumCurrNonInstantiatedSpareSUs,
saAmfSGNumCurrInstantiatedSpareSUs and
saAmfSGNumCurrAssignedSUs
in sg_rt_attr_cb().
Patch fixes the problem by providing updated values in IMM callback.
diff --git a/osaf/services/saf/amf/amfd/include/sg.h b/osaf/services/saf/amf/amfd/include/sg.h
--- a/osaf/services/saf/amf/amfd/include/sg.h
+++ b/osaf/services/saf/amf/amfd/include/sg.h
@@ -417,6 +417,13 @@ public:
bool ng_using_saAmfSGAdminState;
uint32_t term_su_list_in_reverse();
+ //Runtime calculates value of saAmfSGNumCurrAssignedSUs;
+ uint32_t curr_assigned_sus();
+ //Runtime calculates value of saAmfSGNumCurrInstantiatedSpareSUs;
+ uint32_t curr_instantiated_spare_sus();
+ //Runtime calculates value of saAmfSGNumCurrNonInstantiatedSpareSUs;
+ uint32_t curr_non_instantiated_spare_sus();
+
private:
// disallow copy and assign, TODO(hafe) add common macro for this
AVD_SG(const AVD_SG&);
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
@@ -1428,12 +1428,15 @@ static SaAisErrorT sg_rt_attr_cb(SaImmOi
while ((attributeName = attributeNames[i++]) != NULL) {
if (!strcmp("saAmfSGNumCurrAssignedSUs", attributeName)) {
+ sg->saAmfSGNumCurrAssignedSUs = sg->curr_assigned_sus();
avd_saImmOiRtObjectUpdate_sync(objectName, attributeName,
SA_IMM_ATTR_SAUINT32T, &sg->saAmfSGNumCurrAssignedSUs);
} else if (!strcmp("saAmfSGNumCurrNonInstantiatedSpareSUs", attributeName)) {
+ sg->saAmfSGNumCurrNonInstantiatedSpareSUs = sg->curr_non_instantiated_spare_sus();
avd_saImmOiRtObjectUpdate_sync(objectName, attributeName,
SA_IMM_ATTR_SAUINT32T, &sg->saAmfSGNumCurrNonInstantiatedSpareSUs);
} else if (!strcmp("saAmfSGNumCurrInstantiatedSpareSUs", attributeName)) {
+ sg->saAmfSGNumCurrInstantiatedSpareSUs = sg->curr_instantiated_spare_sus();
avd_saImmOiRtObjectUpdate_sync(objectName, attributeName,
SA_IMM_ATTR_SAUINT32T, &sg->saAmfSGNumCurrInstantiatedSpareSUs);
} else {
@@ -1987,3 +1990,21 @@ AVD_SU* AVD_SG::first_su()
return NULL;
}
}
+
+uint32_t AVD_SG::curr_assigned_sus()
+{
+ return (std::count_if (list_of_su.begin(), list_of_su.end(),
+ [](AVD_SU *su) -> bool { return (su->list_of_susi != nullptr);}));
+}
+uint32_t AVD_SG::curr_instantiated_spare_sus()
+{
+ return (std::count_if (list_of_su.begin(), list_of_su.end(),
+ [](AVD_SU *su) -> bool { return ((su->list_of_susi == nullptr) &&
+ (su->saAmfSUPresenceState == SA_AMF_PRESENCE_INSTANTIATED));}));
+}
+uint32_t AVD_SG::curr_non_instantiated_spare_sus()
+{
+ return (std::count_if (list_of_su.begin(), list_of_su.end(),
+ [](AVD_SU *su) -> bool { return ((su->list_of_susi == nullptr) &&
+ (su->saAmfSUPresenceState == SA_AMF_PRESENCE_UNINSTANTIATED));}));
+}
|