Пример #1
0
/*****************************************************************************
  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();
}
Пример #2
0
/*****************************************************************************
  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);

}
Пример #3
0
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;
}
Пример #4
0
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();
}
Пример #5
0
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;
}