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
[email protected]
https://lists.sourceforge.net/lists/listinfo/opensaf-devel