/***************************************************************************** Name : clms_node_admin_state_change_ntf Description : This function generate a node exit ntf Arguments : clms_cb - Pointer to the CLMS_CB structure node - Pointer to the CLMS_CLUSTER_NODE structure Return Values : NCSCC_RC_SUCCESS / NCSCC_RC_FAILURE Notes : *****************************************************************************/ void clms_node_admin_state_change_ntf(CLMS_CB * clms_cb, CLMS_CLUSTER_NODE * node, SaUint32T newState) { uint32_t status = NCSCC_RC_FAILURE; SaNameT dn; SaUint8T add_text[SA_MAX_NAME_LENGTH]; TRACE_ENTER2("admin state change for node name %s", node->node_name.value); saflog(LOG_NOTICE, clmSvcUsrName, "%s Admin State Changed, new state=%s", node->node_name.value, clm_adm_state_name[newState]); memset(dn.value, '\0', SA_MAX_NAME_LENGTH); dn.length = node->node_name.length; (void)memcpy(dn.value, node->node_name.value, dn.length); memset(&add_text, '\0', sizeof(add_text)); sprintf((SaInt8T *)add_text, "CLM node %s Admin State Change", dn.value); status = sendStateChangeNotificationClms(clms_cb, dn, add_text, SA_SVC_CLM, SA_CLM_NTFID_NODE_ADMIN_STATE, SA_NTF_MANAGEMENT_OPERATION, SA_CLM_ADMIN_STATE, newState); if (status == NCSCC_RC_FAILURE) LOG_ER("clms_node_admin_state_change_ntf failed %u",status); TRACE_LEAVE(); }
/***************************************************************************** Name : clms_node_reconfigured_ntf Description : This function generate a node exit ntf Arguments : clms_cb - Pointer to the CLMS_CB structure node - Pointer to the CLMS_CLUSTER_NODE structure Return Values : NCSCC_RC_SUCCESS / NCSCC_RC_FAILURE Notes : *****************************************************************************/ void clms_node_reconfigured_ntf(CLMS_CB * clms_cb, CLMS_CLUSTER_NODE * node) { uint32_t status = NCSCC_RC_FAILURE; SaNameT dn; SaUint8T add_text[SA_MAX_NAME_LENGTH]; memset(dn.value, '\0', SA_MAX_NAME_LENGTH); saflog(LOG_NOTICE, clmSvcUsrName, "%s RECONFIGURED, init view=%llu, cluster view=%llu", node->node_name.value, node->init_view, clms_cb->cluster_view_num); dn.length = node->node_name.length; (void)memcpy(dn.value, node->node_name.value, dn.length); memset(&add_text, '\0', sizeof(add_text)); sprintf((SaInt8T *)add_text, "CLM node %s Reconfigured", dn.value); status = sendStateChangeNotificationClms(clms_cb, dn, add_text, SA_SVC_CLM, SA_CLM_NTFID_NODE_RECONFIG, SA_NTF_OBJECT_OPERATION, SA_CLM_CLUSTER_CHANGE_STATUS, SA_CLM_NODE_RECONFIGURED); if(status == NCSCC_RC_FAILURE) LOG_ER("clms_node_reconfigured_ntf failed %u",status); }
uns32 amfd_switch_qsd_stdby(AVD_CL_CB *cb) { AVD_AVND *avnd = NULL; uns32 node_id = 0; uns32 status = NCSCC_RC_SUCCESS; TRACE_ENTER(); LOG_NO("Switching Quiesced --> StandBy"); cb->swap_switch = SA_FALSE; if (NCSCC_RC_SUCCESS != (status = avd_mds_set_vdest_role(cb, SA_AMF_HA_STANDBY))) { LOG_ER("Switch Quiesced --> StandBy, Vdest set role failed"); return NCSCC_RC_FAILURE; } /* Change MBCSv role to Standby */ if (NCSCC_RC_SUCCESS != (status = avsv_set_ckpt_role(cb, SA_AMF_HA_STANDBY))) { LOG_ER("Switch Quiesced --> StandBy, MBCSv set role failed"); return NCSCC_RC_FAILURE; } /* Now Dispatch all the messages from the MBCSv mail-box */ if (NCSCC_RC_SUCCESS != (status = avsv_mbcsv_dispatch(cb, SA_DISPATCH_ALL))) { LOG_ER("Switch Quiesced --> StandBy, MBCSv dispatch failed"); return NCSCC_RC_FAILURE; } if (NCSCC_RC_SUCCESS != avd_rde_set_role(SA_AMF_HA_STANDBY)) { LOG_ER("rde role change failed from qsd -> stdby"); } node_id = 0; /* Walk through all the nodes and free PG records. */ while (NULL != (avnd = avd_node_getnext_nodeid(node_id))) { node_id = avnd->node_info.nodeId; avd_pg_node_csi_del_all(cb, avnd); } cb->avail_state_avd = SA_AMF_HA_STANDBY; LOG_NO("Controller switch over done"); saflog(LOG_NOTICE, amfSvcUsrName, "Controller switch over done at %x", cb->node_id_avd); TRACE_LEAVE(); return NCSCC_RC_SUCCESS; }
void avd_cluster_tmr_init_evh(AVD_CL_CB *cb, AVD_EVT *evt) { SaNameT lsg_name; AVD_SG *i_sg; TRACE_ENTER(); saflog(LOG_NOTICE, amfSvcUsrName, "Cluster startup timeout, assigning SIs to SUs"); assert(evt->info.tmr.type == AVD_TMR_CL_INIT); if (avd_cluster->saAmfClusterAdminState != SA_AMF_ADMIN_UNLOCKED) { LOG_WA("Admin state of cluster is locked"); goto done; } if (cb->init_state != AVD_INIT_DONE) { LOG_ER("wrong state %u", cb->init_state); goto done; } /* change state to application state. */ cb->init_state = AVD_APP_STATE; m_AVSV_SEND_CKPT_UPDT_ASYNC_UPDT(cb, cb, AVSV_CKPT_AVD_CB_CONFIG); /* call the realignment routine for each of the SGs in the * system that are not NCS specific. */ lsg_name.length = 0; for (i_sg = avd_sg_getnext(&lsg_name); i_sg != NULL; i_sg = avd_sg_getnext(&lsg_name)) { lsg_name = i_sg->name; if ((i_sg->list_of_su == NULL) || (i_sg->sg_ncs_spec == SA_TRUE)) { continue; } switch (i_sg->sg_redundancy_model) { case SA_AMF_2N_REDUNDANCY_MODEL: avd_sg_2n_realign_func(cb, i_sg); break; case SA_AMF_N_WAY_REDUNDANCY_MODEL: avd_sg_nway_realign_func(cb, i_sg); break; case SA_AMF_N_WAY_ACTIVE_REDUNDANCY_MODEL: avd_sg_nacvred_realign_func(cb, i_sg); break; case SA_AMF_NPM_REDUNDANCY_MODEL: avd_sg_npm_realign_func(cb, i_sg); break; case SA_AMF_NO_REDUNDANCY_MODEL: default: avd_sg_nored_realign_func(cb, i_sg); break; } } done: TRACE_LEAVE(); }
uns32 amfd_switch_stdby_actv(AVD_CL_CB *cb) { uns32 status = NCSCC_RC_SUCCESS; TRACE_ENTER(); LOG_NO("Switching StandBy --> Active State"); /* * Check whether Standby is in sync with Active. If yes then * proceed further. Else return failure. */ if (AVD_STBY_OUT_OF_SYNC == cb->stby_sync_state) { LOG_ER("AMFD: Switch Standby --> Active FAILED, Standby OUT OF SYNC"); cb->swap_switch = SA_FALSE; avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE); return NCSCC_RC_FAILURE; } if (NCSCC_RC_SUCCESS != (status = avsv_set_ckpt_role(cb, SA_AMF_HA_ACTIVE))) { LOG_ER("AMFD: Switch Standby --> Active FAILED, CKPT role set failed"); cb->swap_switch = SA_FALSE; avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE); return NCSCC_RC_FAILURE; } /* Now Dispatch all the messages from the MBCSv mail-box */ if (NCSCC_RC_SUCCESS != (status = avsv_mbcsv_dispatch(cb, SA_DISPATCH_ALL))) { LOG_ER("AMFD: Switch Standby --> Active FAILED, Mbcsv Dispatch failed"); cb->swap_switch = SA_FALSE; avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE); return NCSCC_RC_FAILURE; } /* * We might be having some async update messages in the * Queue to be processed, now drop all of them. */ avsv_dequeue_async_update_msgs(cb, FALSE); cb->avail_state_avd = SA_AMF_HA_ACTIVE; /* Declare this standby as Active. Set Vdest role role */ if (NCSCC_RC_SUCCESS != (status = avd_mds_set_vdest_role(cb, SA_AMF_HA_ACTIVE))) { LOG_ER("AMFD: Switch Standby --> Active FAILED, MDS role set failed"); cb->swap_switch = SA_FALSE; avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE); return NCSCC_RC_FAILURE; } /* Time to send fail-over messages to all the AVND's */ avd_fail_over_event(cb); /* We need to send the role to AvND. */ status = avd_avnd_send_role_change(cb, cb->node_id_avd, cb->avail_state_avd); if (NCSCC_RC_SUCCESS != status) { LOG_ER("%s: avd_avnd_send_role_change failed", __FUNCTION__); } else { avd_d2n_msg_dequeue(cb); } cb->swap_switch = SA_FALSE; if (avd_imm_config_get() != NCSCC_RC_SUCCESS) { LOG_ER("AMFD: Switch Standby --> Active, imm Config failed"); avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE); return NCSCC_RC_FAILURE; } if (avd_imm_impl_set() != SA_AIS_OK) { LOG_ER("AMFD: Switch Standby --> Active, imm implement failed"); avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE); return NCSCC_RC_FAILURE; } if (NCSCC_RC_SUCCESS != avd_rde_set_role(SA_AMF_HA_ACTIVE)) { LOG_ER("rde role change failed from stdy -> Active"); } if(avd_clm_track_start() != SA_AIS_OK) { LOG_ER("AMFD: Switch Standby --> Active, clm track start failed"); avd_d2d_chg_role_rsp(cb, NCSCC_RC_FAILURE, SA_AMF_HA_ACTIVE); return NCSCC_RC_FAILURE; } /* Send the message to other avd for role change rsp as success */ avd_d2d_chg_role_rsp(cb, NCSCC_RC_SUCCESS, SA_AMF_HA_ACTIVE); LOG_NO("Controller switch over done"); saflog(LOG_NOTICE, amfSvcUsrName, "Controller switch over done at %x", cb->node_id_avd); TRACE_LEAVE(); return NCSCC_RC_SUCCESS; }