osaf/services/saf/amf/amfd/include/su.h | 22 +++-----
osaf/services/saf/amf/amfd/su.cc | 80 +++++++++++++++-----------------
2 files changed, 46 insertions(+), 56 deletions(-)
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
@@ -92,6 +92,9 @@ class AVD_SU {
struct avd_sutype *su_type;
AVD_SU *su_list_su_type_next;
+ AVD_SU() {};
+ AVD_SU(const SaNameT *dn);
+ ~AVD_SU() {};
void set_su_failover(bool value);
void dec_curr_stdby_si();
void inc_curr_stdby_si();
@@ -111,9 +114,14 @@ class AVD_SU {
void set_all_susis_assigned_quiesced(void);
void set_all_susis_assigned(void);
void set_term_state(bool state);
+ void remove_from_model();
private:
void send_attribute_update(AVSV_AMF_SU_ATTR_ID attrib_id);
+
+ // disallow copy and assign, TODO add common macro for this
+ AVD_SU(const AVD_SU&);
+ void operator=(const AVD_SU&);
};
extern AmfDb<AVD_SU> *su_db;
@@ -146,20 +154,6 @@ m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(cb, su,
else su_node_ptr = i_su->su_on_node;
/**
- * Allocate SU memory and initialize attributes to defaults
- * @param dn
- *
- * @return AVD_SU*
- */
-extern AVD_SU *avd_su_new(const SaNameT *dn);
-
-/**
- * Free SU memory
- * @param su
- */
-extern void avd_su_delete(AVD_SU *su);
-
-/**
* Get SUs from IMM and create internal objects
*
* @return SaAisErrorT
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
@@ -31,51 +31,46 @@
AmfDb<AVD_SU> *su_db = NULL;
-AVD_SU *avd_su_new(const SaNameT *dn)
-{
- SaNameT sg_name;
- AVD_SU *su;
-
- su = new AVD_SU();
-
- memcpy(su->name.value, dn->value, dn->length);
- su->name.length = dn->length;
- avsv_sanamet_init(dn, &sg_name, "safSg");
- su->saAmfSUFailover = false;
- su->term_state = false;
- su->su_switch = AVSV_SI_TOGGLE_STABLE;
- su->saAmfSUPreInstantiable = static_cast<SaBoolT>(false);
- /* saAmfSUOperState is set when the SU is added to model depending on
- * node state. Initialized to invalid due to filtering in
avd_su_oper_state_set. */
- su->saAmfSUOperState = static_cast<SaAmfOperationalStateT>(0);
- su->saAmfSUPresenceState = SA_AMF_PRESENCE_UNINSTANTIATED;
- su->saAmfSuReadinessState = SA_AMF_READINESS_OUT_OF_SERVICE;
- su->su_is_external = false;
-
- return su;
+AVD_SU::AVD_SU(const SaNameT *dn) {
+ memcpy(name.value, dn->value, sizeof(name.value));
+ name.length = dn->length;
+ saAmfSUFailover = false;
+ term_state = false;
+ su_switch = AVSV_SI_TOGGLE_STABLE;
+ saAmfSUPreInstantiable = static_cast<SaBoolT>(false);
+ saAmfSUOperState = SA_AMF_OPERATIONAL_DISABLED;
+ saAmfSUPresenceState = SA_AMF_PRESENCE_UNINSTANTIATED;
+ saAmfSuReadinessState = SA_AMF_READINESS_OUT_OF_SERVICE;
+ su_is_external = false;
+ sg_of_su = NULL;
+ su_on_node = NULL;
+ list_of_susi = NULL;
+ list_of_comp = NULL;
+ sg_list_su_next = NULL;
+ avnd_list_su_next = NULL;
+ su_type = NULL;
+ su_list_su_type_next = NULL;
+ saAmfSUHostedByNode.length = 0;
}
/**
* Delete the SU from the model. Check point with peer. Send delete order
- * to node director. Delete all contained components.
- *
- * @param i_su
+ * to node director.
*/
-void avd_su_delete(AVD_SU *su)
-{
- TRACE_ENTER2("'%s'", su->name.value);
-
+void AVD_SU::remove_from_model() {
+ TRACE_ENTER2("'%s'", name.value);
+
/* All the components under this SU should have been deleted
* by now, just do the sanity check to confirm it is done
*/
- osafassert(su->list_of_comp == NULL);
+ osafassert(list_of_comp == NULL);
+ osafassert(list_of_susi == NULL);
- m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, su, AVSV_CKPT_AVD_SU_CONFIG);
- avd_node_remove_su(su);
- avd_sutype_remove_su(su);
- su_db->erase(su);
- avd_sg_remove_su(su);
- delete su;
+ m_AVSV_SEND_CKPT_UPDT_ASYNC_RMV(avd_cb, this, AVSV_CKPT_AVD_SU_CONFIG);
+ avd_node_remove_su(this);
+ avd_sutype_remove_su(this);
+ su_db->erase(this);
+ avd_sg_remove_su(this);
TRACE_LEAVE();
}
@@ -93,8 +88,7 @@ AVD_SU *avd_su_get_or_create(const SaNam
if (su == NULL) {
TRACE("'%s' does not exist, creating it", dn->value);
- su = avd_su_new(dn);
- osafassert(su != NULL);
+ su = new AVD_SU(dn);
unsigned int rc = su_db->insert(su);
osafassert(rc == NCSCC_RC_SUCCESS);
}
@@ -420,8 +414,7 @@ static AVD_SU *su_create(const SaNameT *
** but needs to get configuration attributes initialized.
*/
if ((su = su_db->find(dn)) == NULL) {
- if ((su = avd_su_new(dn)) == NULL)
- goto done;
+ su = new AVD_SU(dn);
} else
TRACE("already created, refreshing config...");
@@ -1489,7 +1482,8 @@ static void su_ccb_apply_delete_hdlr(str
TRACE_ENTER2("'%s'", su->name.value);
if (avd_cb->avail_state_avd != SA_AMF_HA_ACTIVE) {
- avd_su_delete(su);
+ su->remove_from_model();
+ delete su;
goto done;
}
@@ -1505,7 +1499,9 @@ static void su_ccb_apply_delete_hdlr(str
avd_snd_op_req_msg(avd_cb, su_node_ptr, ¶m);
}
- avd_su_delete(su);
+ su->remove_from_model();
+ delete su;
+
if (AVD_SG_FSM_STABLE == sg->sg_fsm_state) {
/*if su of uneqal rank has been delete and all SUs are of same
rank then do screening
for SI Distribution. */
------------------------------------------------------------------------------
"Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
Instantly run your Selenium tests across 300+ browser/OS combos. Get
unparalleled scalability from the best Selenium testing platform available.
Simple to use. Nothing to install. Get started now for free."
http://p.sf.net/sfu/SauceLabs
_______________________________________________
Opensaf-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel