예제 #1
0
/**
 * Initialize immd
 * 
 * @return uns32
 */
static uns32 immd_initialize(void)
{
	uns32 rc = NCSCC_RC_SUCCESS;

	TRACE_ENTER();

	if (ncs_agents_startup() != NCSCC_RC_SUCCESS) {
		LOG_ER("ncs_agents_startup FAILED");
		goto done;
	}

	if ((rc = rda_get_role(&immd_cb->ha_state)) != NCSCC_RC_SUCCESS) {
		LOG_ER("rda_get_role FAILED");
		goto done;
	}

	if ((rc = rda_register_callback(0, rda_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("rda_register_callback FAILED %u", rc);
		goto done;
	}

	/* Init the EDU Handle */
	m_NCS_EDU_HDL_INIT(&immd_cb->edu_hdl);

	if ((rc = immd_cb_db_init(immd_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("immd_cb_db_init FAILED");
		goto done;
	}

	/* Create a mail box */
	if ((rc = m_NCS_IPC_CREATE(&immd_cb->mbx)) != NCSCC_RC_SUCCESS) {
		LOG_ER("m_NCS_IPC_CREATE FAILED");
		goto done;
	}

	/* Attach the IPC to mail box */
	if ((rc = m_NCS_IPC_ATTACH(&immd_cb->mbx)) != NCSCC_RC_SUCCESS) {
		LOG_ER("m_NCS_IPC_ATTACH FAILED");
		goto done;
	}

	if ((rc = immd_mds_register(immd_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("immd_mds_register FAILED %d", rc);
		goto done;
	}

	/* Initialise with the MBCSV service  */
	if ((rc = immd_mbcsv_register(immd_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("immd_mbcsv_register FAILED %d", rc);
		goto done;
	}

	if ((rc = immd_mbcsv_chgrole(immd_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("immd_mbcsv_chgrole FAILED %d", rc);
		goto done;
	}

	/* Create a selection object */
	if ((rc = ncs_sel_obj_create(&immd_cb->usr1_sel_obj)) != NCSCC_RC_SUCCESS) {
		LOG_ER("ncs_sel_obj_create failed");
		goto done;
	}

	/*
	 * Initialize a signal handler that will use the selection object.
	 * The signal is sent from our script when AMF does instantiate.
	 */
	if ((signal(SIGUSR1, sigusr1_handler)) == SIG_ERR) {
		LOG_ER("signal USR1 failed: %s", strerror(errno));
		rc = NCSCC_RC_FAILURE;
		goto done;
	}

	syslog(LOG_INFO, "Initialization Success, role %s",
	       (immd_cb->ha_state == SA_AMF_HA_ACTIVE) ? "ACTIVE" : "STANDBY");

done:
	if (nid_notify("IMMD", rc, NULL) != NCSCC_RC_SUCCESS) {
		LOG_ER("nid_notify failed");
		rc = NCSCC_RC_FAILURE;
	}

	TRACE_LEAVE();
	return rc;
}
예제 #2
0
/**
 * Initialize clm
 * 
 * @return uns32
 */
static uint32_t clms_init(void)
{
	uint32_t rc = NCSCC_RC_FAILURE;

	TRACE_ENTER();

	/* Determine how this process was started, by NID or AMF */
	if (getenv("SA_AMF_COMPONENT_NAME") == NULL)
		clms_cb->nid_started = true;

	if (ncs_agents_startup() != NCSCC_RC_SUCCESS) {
		TRACE("ncs_core_agents_startup FAILED");
		goto done;
	}

	/* Initialize clms control block */
	if ((rc = clms_cb_init(clms_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("clms_cb_init FAILED");
		goto done;
	}

	if ((rc = rda_get_role(&clms_cb->ha_state)) != NCSCC_RC_SUCCESS) {
		LOG_ER("rda_get_role FAILED");
		goto done;
	}
	TRACE("Current RDA Role %d", clms_cb->ha_state);

	if ((rc = rda_register_callback(0, rda_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("rda_register_callback FAILED %u", rc);
		goto done;
	}

	/* Create the mailbox used for communication with CLMS */
	if ((rc = m_NCS_IPC_CREATE(&clms_cb->mbx)) != NCSCC_RC_SUCCESS) {
		LOG_ER("m_NCS_IPC_CREATE FAILED %d", rc);
		goto done;
	}

	/* Attach mailbox to this thread */
	if ((rc = m_NCS_IPC_ATTACH(&clms_cb->mbx) != NCSCC_RC_SUCCESS)) {
		LOG_ER("m_NCS_IPC_ATTACH FAILED %d", rc);
		goto done;
	}

	/*Initialize mds */
	if ((rc = clms_mds_init(clms_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("clms_mds_init FAILED %d", rc);
		goto done;
	}

	/* Initialize with MBCSV */
	if ((rc = clms_mbcsv_init(clms_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("clms_mbcsv_init FAILED");
		goto done;
	}

	/* Initialize with IMMSv */
	if ((rc = clms_imm_init(clms_cb)) != NCSCC_RC_SUCCESS) {
		LOG_ER("clms_imm_init FAILED");
		goto done;
	}

	/* Declare as implementer && Read configuration data from IMM */
	if ((rc = clms_imm_activate(clms_cb)) != SA_AIS_OK) {
		LOG_ER("clms_imm_activate FAILED");
		goto done;
	}

	if ((rc = clms_ntf_init(clms_cb)) != SA_AIS_OK) {
		LOG_ER("clms_ntf_init FAILED");
		goto done;
	}

#ifdef ENABLE_AIS_PLM
	if ((rc = clms_plm_init(clms_cb)) != SA_AIS_OK) {
		LOG_ER("clms_plm_init FAILED");
		goto done;
	}
#endif

	/*Self Node update */
	if ((rc = clms_self_node_info()) != NCSCC_RC_SUCCESS)
		goto done;

	/* Create a selection object */
	if (clms_cb->nid_started &&
		(rc = ncs_sel_obj_create(&usr1_sel_obj)) != NCSCC_RC_SUCCESS) {
		LOG_ER("ncs_sel_obj_create failed");
		goto done;
	}

	/*
	 ** Initialize a signal handler that will use the selection object.
	 ** The signal is sent from our script when AMF does instantiate.
	 */
	if (clms_cb->nid_started &&
		signal(SIGUSR1, sigusr1_handler) == SIG_ERR) {
		LOG_ER("signal USR1 failed: %s", strerror(errno));
		goto done;
	}

	if (!clms_cb->nid_started &&
		clms_amf_init(clms_cb) != NCSCC_RC_SUCCESS) {
		LOG_ER("AMF Initialization failed");
		goto done;
	}

	/* Initialize with saflog. This is necessary to avoid
	 *  getting blocked by LOG during role change (switchover/failover)
	 */
	saflog_init();

	rc = NCSCC_RC_SUCCESS;

 done:
	if (clms_cb->nid_started &&
		nid_notify("CLMD", rc, NULL) != NCSCC_RC_SUCCESS) {
		LOG_ER("nid_notify failed");
		rc = NCSCC_RC_FAILURE;
	}

	TRACE_LEAVE();
	return rc;
}