ack, review only/Thanks HansN On 10/24/18 14:26, Gary Lee wrote: > --- > src/amf/amfd/chkop.cc | 10 ++++++++++ > src/amf/amfd/ckpt.h | 3 ++- > src/amf/amfd/ckpt_dec.cc | 40 +++++++++++++++++++++++++++++++++++++++- > src/amf/amfd/ckpt_enc.cc | 26 ++++++++++++++++++++++++-- > src/amf/amfd/ckpt_msg.h | 1 + > 5 files changed, 76 insertions(+), 4 deletions(-) > > diff --git a/src/amf/amfd/chkop.cc b/src/amf/amfd/chkop.cc > index 1ba4140c7..e9a68f4cd 100644 > --- a/src/amf/amfd/chkop.cc > +++ b/src/amf/amfd/chkop.cc > @@ -1042,6 +1042,16 @@ uint32_t avsv_send_ckpt_data(AVD_CL_CB *cb, uint32_t > action, > return NCSCC_RC_SUCCESS; > } > break; > + case AVSV_CKPT_NODE_FAILOVER_STATE: > + if ((avd_cb->other_avd_adest != 0) && > + (avd_cb->avd_peer_ver < AVD_MBCSV_SUB_PART_VERSION_9)) { > + TRACE( > + "No ckpt for AVSV_CKPT_NODE_FAILOVER_STATE as peer AMFD has" > + " lower version:%d", > + avd_cb->avd_peer_ver); > + return NCSCC_RC_SUCCESS; > + } > + break; > default: > return NCSCC_RC_SUCCESS; > } > diff --git a/src/amf/amfd/ckpt.h b/src/amf/amfd/ckpt.h > index c006f9a69..875776a21 100644 > --- a/src/amf/amfd/ckpt.h > +++ b/src/amf/amfd/ckpt.h > @@ -35,9 +35,10 @@ > #define AMF_AMFD_CKPT_H_ > > // current version > -#define AVD_MBCSV_SUB_PART_VERSION 8 > +#define AVD_MBCSV_SUB_PART_VERSION 9 > > // supported versions > +#define AVD_MBCSV_SUB_PART_VERSION_9 9 > #define AVD_MBCSV_SUB_PART_VERSION_8 8 > #define AVD_MBCSV_SUB_PART_VERSION_7 7 > #define AVD_MBCSV_SUB_PART_VERSION_6 6 > diff --git a/src/amf/amfd/ckpt_dec.cc b/src/amf/amfd/ckpt_dec.cc > index 9f3949a15..022fa8f4b 100644 > --- a/src/amf/amfd/ckpt_dec.cc > +++ b/src/amf/amfd/ckpt_dec.cc > @@ -49,6 +49,7 @@ static uint32_t dec_oper_su(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC > *dec); > static uint32_t dec_node_up_info(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec); > static uint32_t dec_node_admin_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec); > static uint32_t dec_node_oper_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec); > +static uint32_t dec_node_failover_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC > *dec); > static uint32_t dec_node_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec); > static uint32_t dec_node_rcv_msg_id(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec); > static uint32_t dec_node_snd_msg_id(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC *dec); > @@ -160,7 +161,8 @@ const AVSV_DECODE_CKPT_DATA_FUNC_PTR > avd_dec_data_func_list[] = { > dec_comp_curr_num_csi_stby, dec_comp_oper_state, > dec_comp_readiness_state, > dec_comp_pres_state, dec_comp_restart_count, nullptr, /* > AVSV_SYNC_COMMIT */ > dec_su_restart_count, dec_si_dep_state, dec_ng_admin_state, > - dec_avd_to_avd_job_queue_status > + dec_avd_to_avd_job_queue_status, > + dec_node_failover_state > > }; > > @@ -2958,3 +2960,39 @@ static uint32_t > dec_avd_to_avd_job_queue_status(AVD_CL_CB *cb, > TRACE_LEAVE(); > return NCSCC_RC_SUCCESS; > } > + > +static uint32_t dec_node_failover_state(AVD_CL_CB *cb, NCS_MBCSV_CB_DEC > *dec) { > + TRACE_ENTER(); > + > + uint32_t state; > + SaNameT name; > + > + osaf_decode_sanamet(&dec->i_uba, &name); > + const std::string node_name(Amf::to_string(&name)); > + osaf_extended_name_free(&name); > + > + AVD_AVND* node; > + node = avd_node_get(node_name); > + > + if (node == nullptr) { > + LOG_ER("%s: node not found, nodeid=%s", __FUNCTION__, node_name.c_str()); > + return NCSCC_RC_FAILURE; > + } > + > + osaf_decode_uint32(&dec->i_uba, > + reinterpret_cast<uint32_t *>(&state)); > + > + auto failed_node = cb->failover_list.find(node->node_info.nodeId); > + if (failed_node != cb->failover_list.end()) { > + failed_node->second->SetState(state); > + } else { > + LOG_NO("Node '%s' not found in failover_list. Create new entry", > + node->node_name.c_str()); > + auto new_node = std::make_shared<NodeStateMachine>(cb, > + node->node_info.nodeId); > + new_node->SetState(state); > + cb->failover_list[node->node_info.nodeId] = new_node; > + } > + > + return NCSCC_RC_SUCCESS; > +} > \ No newline at end of file > diff --git a/src/amf/amfd/ckpt_enc.cc b/src/amf/amfd/ckpt_enc.cc > index 0a2d73698..0e675aed5 100644 > --- a/src/amf/amfd/ckpt_enc.cc > +++ b/src/amf/amfd/ckpt_enc.cc > @@ -48,6 +48,7 @@ static uint32_t enc_oper_su(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC > *enc); > static uint32_t enc_node_up_info(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc); > static uint32_t enc_node_admin_state(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc); > static uint32_t enc_node_oper_state(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc); > +static uint32_t enc_node_failover_state(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC > *enc); > static uint32_t enc_node_state(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc); > static uint32_t enc_node_rcv_msg_id(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc); > static uint32_t enc_node_snd_msg_id(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC *enc); > @@ -163,7 +164,8 @@ const AVSV_ENCODE_CKPT_DATA_FUNC_PTR > avd_enc_ckpt_data_func_list[] = { > enc_comp_curr_num_csi_stby, enc_comp_oper_state, > enc_comp_readiness_state, > enc_comp_pres_state, enc_comp_restart_count, nullptr, /* > AVSV_SYNC_COMMIT */ > enc_su_restart_count, enc_si_dep_state, enc_ng_admin_state, > - enc_avd_to_avd_job_queue_status}; > + enc_avd_to_avd_job_queue_status, > + enc_node_failover_state}; > > /* > * Function list for encoding the cold sync response data > @@ -851,8 +853,9 @@ static uint32_t enc_node_oper_state(AVD_CL_CB *cb, > NCS_MBCSV_CB_ENC *enc) { > if (NCS_MBCSV_ACT_UPDATE == enc->io_action) { > osaf_encode_sanamet_o2(&enc->io_uba, avnd->name.c_str()); > osaf_encode_uint32(&enc->io_uba, avnd->saAmfNodeOperState); > - } else > + } else { > osafassert(0); > + } > > TRACE_LEAVE(); > return NCSCC_RC_SUCCESS; > @@ -2411,3 +2414,22 @@ static uint32_t > enc_avd_to_avd_job_queue_status(AVD_CL_CB *cb, > TRACE_LEAVE(); > return NCSCC_RC_SUCCESS; > } > + > +static uint32_t enc_node_failover_state(AVD_CL_CB *cb, NCS_MBCSV_CB_ENC > *enc) { > + TRACE_ENTER(); > + > + const AVD_AVND *avnd = reinterpret_cast<AVD_AVND *>(enc->io_reo_hdl); > + > + if (NCS_MBCSV_ACT_UPDATE == enc->io_action) { > + auto failed_node = cb->failover_list.find(avnd->node_info.nodeId); > + if (failed_node != cb->failover_list.end()) { > + osaf_encode_sanamet_o2(&enc->io_uba, avnd->name.c_str()); > + TRACE_ENTER2("New state '%u'", failed_node->second->GetState()); > + osaf_encode_uint32(&enc->io_uba, failed_node->second->GetState()); > + } > + } else { > + osafassert(0); > + } > + > + return NCSCC_RC_SUCCESS; > +} > diff --git a/src/amf/amfd/ckpt_msg.h b/src/amf/amfd/ckpt_msg.h > index 7d8704297..c89ad9249 100644 > --- a/src/amf/amfd/ckpt_msg.h > +++ b/src/amf/amfd/ckpt_msg.h > @@ -113,6 +113,7 @@ typedef enum avsv_ckpt_msg_reo_type { > AVSV_CKPT_SI_DEP_STATE, > AVSV_CKPT_NG_ADMIN_STATE, > AVSV_CKPT_AVD_IMM_JOB_QUEUE_STATUS, > + AVSV_CKPT_NODE_FAILOVER_STATE, > AVSV_CKPT_MSG_MAX > } AVSV_CKPT_MSG_REO_TYPE; >
_______________________________________________ Opensaf-devel mailing list Opensaf-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/opensaf-devel