osaf/services/saf/amf/amfd/include/su.h | 2 +-
osaf/services/saf/amf/amfd/sg.cc | 2 +-
osaf/services/saf/amf/amfd/su.cc | 24 +++++++++++++++++++++---
3 files changed, 23 insertions(+), 5 deletions(-)
during standby cold sync, there may be a chance that
SU creation was missed in between config read
and being applier, so re-read config again.
diff --git a/osaf/services/saf/amf/amfd/include/su.h
b/osaf/services/saf/amf/amfd/include/su.h
--- a/osaf/services/saf/amf/amfd/include/su.h
+++ b/osaf/services/saf/amf/amfd/include/su.h
@@ -166,7 +166,7 @@ extern AmfDb<std::string, AVD_SU> *su_db
*
* @return SaAisErrorT
*/
-extern SaAisErrorT avd_su_config_get(const std::string& sg_name, AVD_SG *sg);
+extern SaAisErrorT avd_su_config_get(const std::string& sg_name);
/**
* Class constructor, must be called before any other function
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
@@ -455,7 +455,7 @@ SaAisErrorT avd_sg_config_get(const std:
sg_add_to_model(sg);
- if (avd_su_config_get(Amf::to_string(&dn), sg) != SA_AIS_OK) {
+ if (avd_su_config_get(Amf::to_string(&dn)) != SA_AIS_OK) {
error = SA_AIS_ERR_FAILED_OPERATION;
goto done2;
}
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
@@ -663,7 +663,7 @@ done:
TRACE_LEAVE();
}
-SaAisErrorT avd_su_config_get(const std::string& sg_name, AVD_SG *sg)
+SaAisErrorT avd_su_config_get(const std::string& sg_name)
{
SaAisErrorT error, rc;
SaImmSearchHandleT searchHandle;
@@ -1813,10 +1813,28 @@ static void su_ccb_apply_modify_hdlr(str
int i = 0;
AVD_SU *su;
bool value_is_deleted;
+ const std::string
object_name(osaf_extended_name_borrow(&opdata->objectName));
- TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId,
osaf_extended_name_borrow(&opdata->objectName));
+ TRACE_ENTER2("CCB ID %llu, '%s'", opdata->ccbId, object_name.c_str());
- su = su_db->find(Amf::to_string(&opdata->objectName));
+ su = su_db->find(object_name);
+ if (su == nullptr) {
+ // during standby cold sync, there may be a chance that
+ // SU creation was missed in between config read
+ // and being applier, so re-read config again.
+ LOG_WA("CCB ID %llu, cannot find '%s'", opdata->ccbId,
object_name.c_str());
+
+ // get the SG
+ std::string::size_type pos;
+ pos = object_name.find(',');
+ osafassert(pos != std::string::npos);
+
+ // re-read config
+ avd_su_config_get(object_name.substr(pos + 1));
+
+ su = su_db->find(object_name);
+ osafassert(su != nullptr);
+ }
while ((attr_mod = opdata->param.modify.attrMods[i++]) != nullptr) {
/* Attribute value removed */
------------------------------------------------------------------------------
Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today. http://sdm.link/xeonphi
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel