|
From: Anders B. <and...@er...> - 2014-11-06 11:24:24
|
osaf/services/saf/immsv/immnd/ImmModel.cc | 18 +++++++++++-------
osaf/services/saf/immsv/immnd/ImmModel.hh | 2 +-
2 files changed, 12 insertions(+), 8 deletions(-)
The case of an object-applier (note *not* class-applier) re-attaching
idempotently (it already has existed as an object applier for that
object on the local IMMND) was not handled correctly. This caused
the function to return OK when it should have returned the special
return code SA_AIS_ERR_NO_BINDINGS which here has the internal
meaning of idempotent OK.
In addition the name of the function 'ImmModel::setImplementer()' is
changed to 'ImmModel::setOneObjectImplementer()' to make its role clearer
and avoiding confusion with the function 'ImmModel::implementerSet()'.
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.cc b/osaf/services/saf/immsv/immnd/ImmModel.cc
--- a/osaf/services/saf/immsv/immnd/ImmModel.cc
+++ b/osaf/services/saf/immsv/immnd/ImmModel.cc
@@ -11988,7 +11988,7 @@ SaAisErrorT ImmModel::objectImplementerS
rootObj = i1->second;
for(int doIt=0; doIt<2 && err == SA_AIS_OK; ++doIt) {
//ObjectInfo* objectInfo = i1->second;
- err = setImplementer(objectName, rootObj, info, doIt, ccbId);
+ err = setOneObjectImplementer(objectName, rootObj, info, doIt, ccbId);
if(err == SA_AIS_ERR_NO_BINDINGS) {
err = SA_AIS_OK;
} else {
@@ -12008,7 +12008,7 @@ SaAisErrorT ImmModel::objectImplementerS
if(scope==SA_IMM_SUBTREE || checkSubLevel(subObjName, pos)) {
--childCount;
ObjectInfo* subObj = i1->second;
- err = setImplementer(subObjName, subObj, info, doIt, ccbId);
+ err = setOneObjectImplementer(subObjName, subObj, info, doIt, ccbId);
if(err == SA_AIS_ERR_NO_BINDINGS) {
err = SA_AIS_OK;
} else {
@@ -12133,7 +12133,7 @@ SaAisErrorT ImmModel::objectImplementerR
/**
* Helper function to set object implementer.
*/
-SaAisErrorT ImmModel::setImplementer(std::string objectName,
+SaAisErrorT ImmModel::setOneObjectImplementer(std::string objectName,
ObjectInfo* obj,
ImplementerInfo* info,
bool doIt, SaUint32T* ccbId)
@@ -12220,10 +12220,14 @@ SaAisErrorT ImmModel::setImplementer(std
goto done;
} else if(immNotWritable()) {
/* Sync ongoing => Only idempotent object-applier set allowed */
- if(implSet == NULL || implSet->find(info) == implSet->end()) {
+ if(implSet != NULL && implSet->find(info) != implSet->end()) {
+ TRACE_5("Idempotent object-implset for applier '%s' during sync",
+ info->mImplementerName.c_str());
+ err = SA_AIS_ERR_NO_BINDINGS;
+ } else {
err = SA_AIS_ERR_TRY_AGAIN;;
- goto done;
- }
+ }
+ goto done;
}
}
} else { /* regular OI */
@@ -12266,8 +12270,8 @@ SaAisErrorT ImmModel::setImplementer(std
}
}
+ done:
/*TRACE_LEAVE();*/
- done:
return err;
}
diff --git a/osaf/services/saf/immsv/immnd/ImmModel.hh b/osaf/services/saf/immsv/immnd/ImmModel.hh
--- a/osaf/services/saf/immsv/immnd/ImmModel.hh
+++ b/osaf/services/saf/immsv/immnd/ImmModel.hh
@@ -587,7 +587,7 @@ public:
SaUint32T fetchSearchReqContinuation(SaInvocationT& inv);
- SaAisErrorT setImplementer(
+ SaAisErrorT setOneObjectImplementer(
std::string objectName,
ObjectInfo* obj,
ImplementerInfo* info,
|