ack, code review only/Thanks HansN On 12/04/2015 06:44 AM, Gary Lee wrote: > osaf/services/saf/amf/amfd/ckpt_dec.cc | 68 +++++++--------- > osaf/services/saf/amf/amfd/ckpt_edu.cc | 59 -------------- > osaf/services/saf/amf/amfd/ckpt_enc.cc | 77 > +++++++----------- > osaf/services/saf/amf/amfd/include/ckpt.h | 3 + > osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc | 43 ++++++++++ > 5 files changed, 105 insertions(+), 145 deletions(-) > > > diff --git a/osaf/services/saf/amf/amfd/ckpt_dec.cc > b/osaf/services/saf/amf/amfd/ckpt_dec.cc > --- a/osaf/services/saf/amf/amfd/ckpt_dec.cc > +++ b/osaf/services/saf/amf/amfd/ckpt_dec.cc > @@ -605,6 +605,23 @@ > return status; > } > > +void decode_siass(NCS_UBAID *ub, > + AVSV_SU_SI_REL_CKPT_MSG *su_si_ckpt, > + const uint16_t peer_version) > +{ > + osaf_decode_sanamet(ub, &su_si_ckpt->su_name); > + osaf_decode_sanamet(ub, &su_si_ckpt->si_name); > + osaf_decode_uint32(ub, reinterpret_cast<uint32_t*>(&su_si_ckpt->state)); > + osaf_decode_uint32(ub, &su_si_ckpt->fsm); > + if (peer_version >= AVD_MBCSV_SUB_PART_VERSION_3) { > + bool csi_add_rem; > + osaf_decode_bool(ub, &csi_add_rem); > + su_si_ckpt->csi_add_rem = static_cast<SaBoolT>(csi_add_rem); > + osaf_decode_sanamet(ub, &su_si_ckpt->comp_name); > + osaf_decode_sanamet(ub, &su_si_ckpt->csi_name); > + }; > +} > + > > /****************************************************************************\ > * Function: dec_siass > * > @@ -621,14 +638,10 @@ > \**************************************************************************/ > static uint32_t dec_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec) > { > - uint32_t status = NCSCC_RC_SUCCESS; > - AVSV_SU_SI_REL_CKPT_MSG *su_si_ckpt; > - AVSV_SU_SI_REL_CKPT_MSG dec_su_si_ckpt; > - EDU_ERR ederror = static_cast<EDU_ERR>(0); > + AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt; > > TRACE_ENTER2("i_action '%u'", dec->i_action); > > - su_si_ckpt = &dec_su_si_ckpt; > /* > * Check for the action type (whether it is add, rmv or update) and act > * accordingly. If it is add then create new element, if it is update > @@ -638,34 +651,23 @@ > switch (dec->i_action) { > case NCS_MBCSV_ACT_ADD: > case NCS_MBCSV_ACT_UPDATE: > - status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, > avsv_edp_ckpt_msg_siass, > - &dec->i_uba, EDP_OP_TYPE_DEC, (AVSV_SU_SI_REL_CKPT_MSG > **)&su_si_ckpt, > - &ederror, dec->i_peer_version); > + decode_siass(&dec->i_uba, &su_si_ckpt, dec->i_peer_version); > break; > > case NCS_MBCSV_ACT_RMV: > - status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, > avsv_edp_ckpt_msg_siass, > - &dec->i_uba, EDP_OP_TYPE_DEC, > (AVSV_SU_SI_REL_CKPT_MSG **)&su_si_ckpt, > - &ederror, dec->i_peer_version); > + decode_siass(&dec->i_uba, &su_si_ckpt, dec->i_peer_version); > break; > > default: > osafassert(0); > } > > - if (status != NCSCC_RC_SUCCESS) { > - LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__, ederror); > - return status; > - } > - > - avd_ckpt_siass(cb, su_si_ckpt, dec); > - > - /* If update is successful, update async update count */ > - if (NCSCC_RC_SUCCESS == status) > - cb->async_updt_cnt.siass_updt++; > - > - TRACE_LEAVE2("status '%u'", status); > - return status; > + avd_ckpt_siass(cb, &su_si_ckpt, dec); > + > + cb->async_updt_cnt.siass_updt++; > + > + TRACE_LEAVE(); > + return NCSCC_RC_SUCCESS; > } > > > /****************************************************************************\ > @@ -2489,14 +2491,10 @@ > static uint32_t dec_cs_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec, uint32_t > num_of_obj) > { > uint32_t status = NCSCC_RC_SUCCESS; > - AVSV_SU_SI_REL_CKPT_MSG *su_si_ckpt; > - AVSV_SU_SI_REL_CKPT_MSG dec_su_si_ckpt; > - EDU_ERR ederror = static_cast<EDU_ERR>(0); > + AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt; > uint32_t count = 0; > > - TRACE_ENTER(); > - > - su_si_ckpt = &dec_su_si_ckpt; > + TRACE_ENTER2("i_action '%u'", dec->i_action); > > /* > * Walk through the entire list and send the entire list data. > @@ -2505,14 +2503,8 @@ > * in the same update. > */ > for (count = 0; count < num_of_obj; count++) { > - status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, > avsv_edp_ckpt_msg_siass, > - &dec->i_uba, EDP_OP_TYPE_DEC, > (AVSV_SU_SI_REL_CKPT_MSG **)&su_si_ckpt, > - &ederror, dec->i_peer_version); > - if (status != NCSCC_RC_SUCCESS) { > - LOG_ER("%s: decode failed, ederror=%u", __FUNCTION__, > ederror); > - } > - > - status = avd_ckpt_siass(cb, su_si_ckpt, dec); > + decode_siass(&dec->i_uba, &su_si_ckpt, dec->i_peer_version); > + status = avd_ckpt_siass(cb, &su_si_ckpt, dec); > > if (status != NCSCC_RC_SUCCESS) { > return NCSCC_RC_FAILURE; > diff --git a/osaf/services/saf/amf/amfd/ckpt_edu.cc > b/osaf/services/saf/amf/amfd/ckpt_edu.cc > --- a/osaf/services/saf/amf/amfd/ckpt_edu.cc > +++ b/osaf/services/saf/amf/amfd/ckpt_edu.cc > @@ -61,10 +61,6 @@ > if (rc != NCSCC_RC_SUCCESS) > goto error; > > - rc = m_NCS_EDU_COMPILE_EDP(&cb->edu_hdl, avsv_edp_ckpt_msg_siass, &err); > - if (rc != NCSCC_RC_SUCCESS) > - goto error; > - > rc = m_NCS_EDU_COMPILE_EDP(&cb->edu_hdl, > avsv_edp_ckpt_msg_async_updt_cnt, &err); > if (rc != NCSCC_RC_SUCCESS) > goto error; > @@ -243,61 +239,6 @@ > > > /***************************************************************************** > > - PROCEDURE NAME: avsv_edp_ckpt_msg_siass > - > - DESCRIPTION: EDU program handler for "AVD_SU_SI_REL" data. This > - function is invoked by EDU for performing encode/decode > - operation on "AVD_SU_SI_REL" data. > - > - RETURNS: NCSCC_RC_SUCCESS/NCSCC_RC_FAILURE > - > -*****************************************************************************/ > -uint32_t avsv_edp_ckpt_msg_siass(EDU_HDL *hdl, EDU_TKN *edu_tkn, > - NCSCONTEXT ptr, uint32_t *ptr_data_len, > - EDU_BUF_ENV *buf_env, EDP_OP_TYPE op, EDU_ERR > *o_err) > -{ > - uint32_t rc = NCSCC_RC_SUCCESS; > - AVSV_SU_SI_REL_CKPT_MSG *struct_ptr = nullptr, **d_ptr = nullptr; > - uint16_t base_ver = AVD_MBCSV_SUB_PART_VERSION_3; > - > - EDU_INST_SET avsv_ckpt_msg_su_si_rel_rules[] = { > - {EDU_START, avsv_edp_ckpt_msg_siass, 0, 0, 0, > - sizeof(AVSV_SU_SI_REL_CKPT_MSG), 0, nullptr}, > - > - {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0, > (long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->su_name, 0, nullptr}, > - {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0, > (long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->si_name, 0, nullptr}, > - {EDU_EXEC, m_NCS_EDP_SAAMFHASTATET, 0, 0, 0, > (long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->state, 0, nullptr}, > - {EDU_EXEC, ncs_edp_int, 0, 0, 0, > (long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->fsm, 0, nullptr}, > - {EDU_VER_GE, nullptr, 0, 0, 4, 0, 0, > (EDU_EXEC_RTINE)((uint16_t *)(&(base_ver)))}, > - {EDU_EXEC, ncs_edp_ncs_bool, 0, 0, 0, > (long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->csi_add_rem, 0, nullptr}, > - {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0, > (long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->comp_name, 0, nullptr}, > - {EDU_EXEC, ncs_edp_sanamet, 0, 0, 0, > (long)&((AVSV_SU_SI_REL_CKPT_MSG *)0)->csi_name, 0, nullptr}, > - > - {EDU_END, 0, 0, 0, 0, 0, 0, nullptr}, > - }; > - > - if (op == EDP_OP_TYPE_ENC) { > - struct_ptr = (AVSV_SU_SI_REL_CKPT_MSG *)ptr; > - } else if (op == EDP_OP_TYPE_DEC) { > - d_ptr = (AVSV_SU_SI_REL_CKPT_MSG **)ptr; > - if (*d_ptr == nullptr) { > - *o_err = EDU_ERR_MEM_FAIL; > - return NCSCC_RC_FAILURE; > - } > - memset(*d_ptr, '\0', sizeof(AVSV_SU_SI_REL_CKPT_MSG)); > - struct_ptr = *d_ptr; > - } else { > - struct_ptr = static_cast<AVSV_SU_SI_REL_CKPT_MSG*>(ptr); > - } > - > - rc = m_NCS_EDU_RUN_RULES(hdl, edu_tkn, avsv_ckpt_msg_su_si_rel_rules, > struct_ptr, > - ptr_data_len, buf_env, op, o_err); > - > - return rc; > -} > - > -/***************************************************************************** > - > PROCEDURE NAME: avsv_edp_ckpt_msg_async_updt_cnt > > DESCRIPTION: EDU program handler for "AVSV_ASYNC_UPDT_CNT" data. This > diff --git a/osaf/services/saf/amf/amfd/ckpt_enc.cc > b/osaf/services/saf/amf/amfd/ckpt_enc.cc > --- a/osaf/services/saf/amf/amfd/ckpt_enc.cc > +++ b/osaf/services/saf/amf/amfd/ckpt_enc.cc > @@ -638,6 +638,22 @@ > return status; > } > > +void encode_siass(NCS_UBAID *ub, > + const AVD_SU_SI_REL *susi, > + const uint16_t peer_version) > +{ > + osaf_encode_sanamet(ub, &susi->su->name); > + osaf_encode_sanamet(ub, &susi->si->name); > + osaf_encode_uint32(ub, susi->state); > + osaf_encode_uint32(ub, susi->fsm); > + if (peer_version >= AVD_MBCSV_SUB_PART_VERSION_3) { > + osaf_encode_bool(ub, static_cast<bool>(susi->csi_add_rem)); > + osaf_encode_sanamet(ub, &susi->comp_name); > + osaf_encode_sanamet(ub, &susi->csi_name); > + }; > +} > + > + > > /****************************************************************************\ > * Function: enc_siass > * > @@ -654,52 +670,31 @@ > \**************************************************************************/ > static uint32_t enc_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc) > { > - uint32_t status = NCSCC_RC_SUCCESS; > - AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt; > - EDU_ERR ederror = static_cast<EDU_ERR>(0); > TRACE_ENTER2("io_action '%u'", enc->io_action); > > - memset(&su_si_ckpt, 0, sizeof(su_si_ckpt)); > /* > * Check for the action type (whether it is add, rmv or update) and act > * accordingly. If it is update or add, encode entire data. If it is rmv > * send key information only. In this case key is SU and SI key. > */ > - su_si_ckpt.su_name = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->su->name; > - su_si_ckpt.si_name = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->si->name; > + const AVD_SU_SI_REL *susi = (AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)); > > switch (enc->io_action) { > case NCS_MBCSV_ACT_ADD: > case NCS_MBCSV_ACT_UPDATE: > - su_si_ckpt.fsm = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->fsm; > - su_si_ckpt.state = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->state; > - su_si_ckpt.csi_add_rem = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_add_rem; > - su_si_ckpt.comp_name = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->comp_name; > - su_si_ckpt.csi_name = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_name; > - > - status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, > avsv_edp_ckpt_msg_siass, > - &enc->io_uba, EDP_OP_TYPE_ENC, &su_si_ckpt, &ederror, > enc->i_peer_version); > + encode_siass(&enc->io_uba, susi, enc->i_peer_version); > break; > > case NCS_MBCSV_ACT_RMV: > - su_si_ckpt.csi_add_rem = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_add_rem; > - su_si_ckpt.comp_name = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->comp_name; > - su_si_ckpt.csi_name = ((AVD_SU_SI_REL > *)(NCS_INT64_TO_PTR_CAST(enc->io_reo_hdl)))->csi_name; > - > - status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, > avsv_edp_ckpt_msg_siass, > - &enc->io_uba, EDP_OP_TYPE_ENC, &su_si_ckpt, > &ederror, enc->i_peer_version); > + encode_siass(&enc->io_uba, susi, enc->i_peer_version); > break; > > default: > osafassert(0); > } > > - if (status != NCSCC_RC_SUCCESS) { > - LOG_ER("%s: encode failed, ederror=%u", __FUNCTION__, ederror); > - } > - > - TRACE_LEAVE2("status '%u'", status); > - return status; > + TRACE_LEAVE(); > + return NCSCC_RC_SUCCESS; > } > > > @@ -2263,11 +2258,9 @@ > > \**************************************************************************/ > static uint32_t enc_cs_siass(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc, uint32_t > *num_of_obj) > { > - uint32_t status = NCSCC_RC_SUCCESS; > - AVD_SU *su; > - AVSV_SU_SI_REL_CKPT_MSG su_si_ckpt; > - AVD_SU_SI_REL *rel; > - EDU_ERR ederror = static_cast<EDU_ERR>(0); > + const AVD_SU *su; > + const AVD_SU_SI_REL *rel; > + AVD_SU_SI_REL copy; > TRACE_ENTER(); > > /* > @@ -2276,31 +2269,19 @@ > * are sent.We will send the corresponding COMP_CSI relationship for > that SU_SI > * in the same update. > */ > - memset(&su_si_ckpt, 0, sizeof(su_si_ckpt)); > for (std::map<std::string, AVD_SU*>::const_iterator it = su_db->begin(); > it != su_db->end(); it++) { > su = it->second; > - su_si_ckpt.su_name = su->name; > > for (rel = su->list_of_susi; rel != nullptr; rel = > rel->su_next) { > - su_si_ckpt.si_name = rel->si->name; > - su_si_ckpt.fsm = rel->fsm; > - su_si_ckpt.state = rel->state; > - > - status = m_NCS_EDU_VER_EXEC(&cb->edu_hdl, > avsv_edp_ckpt_msg_siass, > - &enc->io_uba, > EDP_OP_TYPE_ENC, &su_si_ckpt, &ederror, > - enc->i_peer_version); > - > - if (status != NCSCC_RC_SUCCESS) { > - LOG_ER("%s: encode failed, ederror=%u", > __FUNCTION__, ederror); > - return status; > - } > - > + memcpy(©, rel, sizeof(AVD_SU_SI_REL)); > + copy.csi_add_rem = static_cast<SaBoolT>(false); > + encode_siass(&enc->io_uba, ©, enc->i_peer_version); > (*num_of_obj)++; > } > } > - TRACE_LEAVE2("status '%u'", status); > - return status; > + TRACE_LEAVE(); > + return NCSCC_RC_SUCCESS; > } > > > /****************************************************************************\ > diff --git a/osaf/services/saf/amf/amfd/include/ckpt.h > b/osaf/services/saf/amf/amfd/include/ckpt.h > --- a/osaf/services/saf/amf/amfd/include/ckpt.h > +++ b/osaf/services/saf/amf/amfd/include/ckpt.h > @@ -158,4 +158,7 @@ > void encode_comp(NCS_UBAID *ub, const AVD_COMP *comp); > void decode_comp(NCS_UBAID *ub, AVD_COMP *comp); > > +void encode_siass(NCS_UBAID *ub, const struct avd_su_si_rel_tag *susi, const > uint16_t peer_version); > +void decode_siass(NCS_UBAID *ub, struct avsv_su_si_rel_ckpt_msg *susi, const > uint16_t peer_version); > + > #endif > diff --git a/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc > b/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc > --- a/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc > +++ b/osaf/services/saf/amf/amfd/tests/test_ckpt_enc_dec.cc > @@ -18,6 +18,7 @@ > #include "mbcsv_papi.h" > #include "cb.h" > #include "app.h" > +#include "susi.h" > #include "gtest/gtest.h" > #include "ncssysf_mem.h" > > @@ -166,3 +167,45 @@ > ASSERT_EQ(comp.saAmfCompRestartCount, static_cast<uint32_t>(0x77665544)); > ASSERT_EQ(Amf::to_string(&comp.saAmfCompCurrProxyName), "CompProxyName"); > } > + > +TEST_F(CkptEncDecTest, testEncDecAvdSiAss) { > + int rc = 0; > + AVD_SU_SI_REL susi; > + AVSV_SU_SI_REL_CKPT_MSG susi_ckpt; > + AVD_SU su; > + AVD_SI si; > + std::string su_name("su_name"); > + std::string si_name("si_name"); > + std::string comp_name("comp_name"); > + std::string csi_name("csi_name"); > + > + rc = ncs_enc_init_space(&enc.io_uba); > + ASSERT_TRUE(rc == NCSCC_RC_SUCCESS); > + > + su.name = *(asSaNameT(su_name)); > + si.name = *(asSaNameT(si_name)); > + susi.su = &su; > + susi.si = &si; > + susi.state = SA_AMF_HA_ACTIVE; > + susi.fsm = AVD_SU_SI_STATE_ABSENT; > + susi.csi_add_rem = static_cast<SaBoolT>(0); > + susi.comp_name = *(asSaNameT(comp_name)); > + susi.csi_name = *(asSaNameT(csi_name)); > + > + enc.io_msg_type = NCS_MBCSV_MSG_ASYNC_UPDATE; > + enc.io_action = NCS_MBCSV_ACT_UPDATE; > + enc.io_reo_hdl = (MBCSV_REO_HDL)&susi; > + enc.io_reo_type = AVSV_CKPT_AVD_SI_ASS; > + enc.i_peer_version = AVD_MBCSV_SUB_PART_VERSION_4; > + > + encode_siass(&enc.io_uba, &susi, enc.i_peer_version); > + decode_siass(&enc.io_uba, &susi_ckpt, enc.i_peer_version); > + > + ASSERT_EQ(Amf::to_string(&susi_ckpt.su_name), "su_name"); > + ASSERT_EQ(Amf::to_string(&susi_ckpt.si_name), "si_name"); > + ASSERT_EQ(susi_ckpt.state, SA_AMF_HA_ACTIVE); > + ASSERT_EQ(susi_ckpt.fsm, AVD_SU_SI_STATE_ABSENT); > + ASSERT_EQ(susi_ckpt.csi_add_rem, static_cast<SaBoolT>(0)); > + ASSERT_EQ(Amf::to_string(&susi_ckpt.comp_name), "comp_name"); > + ASSERT_EQ(Amf::to_string(&susi_ckpt.csi_name), "csi_name"); > +} > \ No newline at end of file
------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel