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

Reply via email to