osaf/services/saf/amf/amfd/include/sg.h | 3 +-
osaf/services/saf/amf/amfd/include/sgtype.h | 39 ++++++++-----
osaf/services/saf/amf/amfd/sg.cc | 1 -
osaf/services/saf/amf/amfd/sgtype.cc | 84 +++++++++++-----------------
4 files changed, 59 insertions(+), 68 deletions(-)
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
@@ -192,8 +192,7 @@ public:
SaInvocationT adminOp_invocationId;
SaAmfAdminOperationIdT adminOp;
- AVD_SG *sg_list_sg_type_next;
- struct avd_amf_sg_type_tag *sg_type;
+ AVD_AMF_SG_TYPE *sg_type;
AVD_SG *sg_list_app_next;
AVD_APP *app;
bool equal_ranked_su; /* This flag is set when ranks of all SU is the
same.
diff --git a/osaf/services/saf/amf/amfd/include/sgtype.h
b/osaf/services/saf/amf/amfd/include/sgtype.h
--- a/osaf/services/saf/amf/amfd/include/sgtype.h
+++ b/osaf/services/saf/amf/amfd/include/sgtype.h
@@ -27,28 +27,37 @@
#include <saAmf.h>
#include <include/db_template.h>
+#include <vector>
class AVD_SG;
-typedef struct avd_amf_sg_type_tag {
- SaNameT name;
- bool saAmfSgtDefAutoRepair_configured; /* True when user configures
saAmfSGDefAutoRepair else false */
+class AVD_AMF_SG_TYPE {
+ public:
+ explicit AVD_AMF_SG_TYPE(const SaNameT *dn);
+ SaNameT name {};
+ bool saAmfSgtDefAutoRepair_configured {}; /* True when user configures
saAmfSGDefAutoRepair else false */
/******************** B.04 model
*************************************************/
- SaNameT *saAmfSGtValidSuTypes; /* array of DNs, size in number_su_type
*/
- SaAmfRedundancyModelT saAmfSgtRedundancyModel;
- SaBoolT saAmfSgtDefAutoRepair;
- SaBoolT saAmfSgtDefAutoAdjust;
- SaTimeT saAmfSgtDefAutoAdjustProb;
- SaTimeT saAmfSgtDefCompRestartProb;
- SaUint32T saAmfSgtDefCompRestartMax;
- SaTimeT saAmfSgtDefSuRestartProb;
- SaUint32T saAmfSgtDefSuRestartMax;
+ SaNameT *saAmfSGtValidSuTypes {}; /* array of DNs, size in number_su_type
*/
+ SaAmfRedundancyModelT saAmfSgtRedundancyModel {};
+ SaBoolT saAmfSgtDefAutoRepair {};
+ SaBoolT saAmfSgtDefAutoAdjust {};
+ SaTimeT saAmfSgtDefAutoAdjustProb {};
+ SaTimeT saAmfSgtDefCompRestartProb {};
+ SaUint32T saAmfSgtDefCompRestartMax {};
+ SaTimeT saAmfSgtDefSuRestartProb {};
+ SaUint32T saAmfSgtDefSuRestartMax {};
/******************** B.04 model
*************************************************/
- uint32_t number_su_type; /* size of array saAmfSGtValidSuTypes */
- AVD_SG *list_of_sg;
+ uint32_t number_su_type {}; /* size of array saAmfSGtValidSuTypes */
+ std::vector<AVD_SG*> list_of_sg {};
+ private:
+ AVD_AMF_SG_TYPE();
+ void initialize();
+ // disallow copy and assign
+ AVD_AMF_SG_TYPE(const AVD_AMF_SG_TYPE&);
+ void operator=(const AVD_AMF_SG_TYPE&);
-} AVD_AMF_SG_TYPE;
+};
extern AmfDb<std::string, AVD_AMF_SG_TYPE> *sgtype_db;
SaAisErrorT avd_sgtype_config_get(void);
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
@@ -119,7 +119,6 @@ AVD_SG::AVD_SG():
sg_redundancy_model(SA_AMF_NO_REDUNDANCY_MODEL),
list_of_su(NULL),
list_of_si(NULL),
- sg_list_sg_type_next(NULL),
sg_type(NULL),
sg_list_app_next(NULL),
app(NULL),
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
@@ -26,42 +26,27 @@
#include <ntf.h>
#include <sgtype.h>
#include <proc.h>
+#include <algorithm>
AmfDb<std::string, AVD_AMF_SG_TYPE> *sgtype_db = NULL;
void avd_sgtype_add_sg(AVD_SG *sg)
{
- sg->sg_list_sg_type_next = sg->sg_type->list_of_sg;
- sg->sg_type->list_of_sg = sg;
+ sg->sg_type->list_of_sg.push_back(sg);
}
-void avd_sgtype_remove_sg(AVD_SG *sg)
-{
- AVD_SG *i_sg = NULL;
- AVD_SG *prev_sg = NULL;
+void avd_sgtype_remove_sg(AVD_SG *sg) {
+ AVD_AMF_SG_TYPE *sg_type = sg->sg_type;
- if (sg->sg_type != NULL) {
- i_sg = sg->sg_type->list_of_sg;
-
- while ((i_sg != NULL) && (i_sg != sg)) {
- prev_sg = i_sg;
- i_sg = i_sg->sg_list_sg_type_next;
- }
-
- if (i_sg != sg) {
- /* Log a fatal error */
- osafassert(0);
- } else {
- if (prev_sg == NULL) {
- sg->sg_type->list_of_sg =
sg->sg_list_sg_type_next;
- } else {
- prev_sg->sg_list_sg_type_next =
sg->sg_list_sg_type_next;
- }
- }
-
- sg->sg_list_sg_type_next = NULL;
- sg->sg_type = NULL;
- }
+ if (sg_type != nullptr) {
+ auto pos = std::find(sg_type->list_of_sg.begin(),
sg_type->list_of_sg.end(), sg);
+ if(pos != sg_type->list_of_sg.end()) {
+ sg_type->list_of_sg.erase(pos);
+ } else {
+ /* Log a fatal error */
+ osafassert(0);
+ }
+ }
}
static void sgtype_delete(AVD_AMF_SG_TYPE *sg_type)
@@ -167,6 +152,12 @@ static int is_config_valid(const SaNameT
return 1;
}
+//
+AVD_AMF_SG_TYPE::AVD_AMF_SG_TYPE(const SaNameT *dn) {
+ memcpy(&name.value, dn->value, dn->length);
+ name.length = dn->length;
+}
+
/**
* Create a new SG type object and initialize its attributes from the
attribute list.
* @param dn
@@ -184,10 +175,7 @@ static AVD_AMF_SG_TYPE *sgtype_create(Sa
TRACE_ENTER2("'%s'", dn->value);
- sgt = new AVD_AMF_SG_TYPE();
-
- memcpy(sgt->name.value, dn->value, dn->length);
- sgt->name.length = dn->length;
+ sgt = new AVD_AMF_SG_TYPE(dn);
error =
immutil_getAttr(const_cast<SaImmAttrNameT>("saAmfSgtRedundancyModel"),
attributes, 0, &sgt->saAmfSgtRedundancyModel);
osafassert(error == SA_AIS_OK);
@@ -354,7 +342,7 @@ static SaAisErrorT sgtype_ccb_completed_
{
SaAisErrorT rc = SA_AIS_ERR_BAD_OPERATION;
AVD_AMF_SG_TYPE *sgt;
- AVD_SG *sg;
+
bool sg_exist = false;
CcbUtilOperationData_t *t_opData;
@@ -370,23 +358,18 @@ static SaAisErrorT sgtype_ccb_completed_
break;
case CCBUTIL_DELETE:
sgt = sgtype_db->find(Amf::to_string(&opdata->objectName));
- if (sgt->list_of_sg != NULL) {
- /* check whether there exists a delete operation for
- * each of the SG in the sg_type list in the current
CCB
- */
- sg = sgt->list_of_sg;
- while (sg != NULL) {
- t_opData =
ccbutil_getCcbOpDataByDN(opdata->ccbId, &sg->name);
- if ((t_opData == NULL) ||
(t_opData->operationType != CCBUTIL_DELETE)) {
- sg_exist = true;
- break;
- }
- sg = sg->sg_list_sg_type_next;
- }
- if (sg_exist == true) {
- report_ccb_validation_error(opdata, "SGs exist
of this SG type '%s'",sgt->name.value);
+
+ for (const auto& sg : sgt->list_of_sg) {
+ t_opData = ccbutil_getCcbOpDataByDN(opdata->ccbId,
&sg->name);
+ if ((t_opData == NULL) || (t_opData->operationType !=
CCBUTIL_DELETE)) {
+ sg_exist = true;
+ break;
+ }
+ }
+
+ if (sg_exist == true) {
+ report_ccb_validation_error(opdata, "SGs exist of this
SG type '%s'",sgt->name.value);
goto done;
- }
}
opdata->userData = sgt; /* Save for later use in apply */
rc = SA_AIS_OK;
@@ -438,7 +421,8 @@ static void sgtype_ccb_apply_modify_hdlr
/* 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) {
+
+ for (const auto& sg : sgt->list_of_sg) {
if (!sg->saAmfSGAutoRepair_configured) {
sg->saAmfSGAutoRepair =
static_cast<SaBoolT>(sgt->saAmfSgtDefAutoRepair);
TRACE("Modified
saAmfSGAutoRepair is '%u'", sg->saAmfSGAutoRepair);
------------------------------------------------------------------------------
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel