示例#1
0
static SaAisErrorT service_stop(void)
{
	SaAisErrorT rc;
	int status;

	if (pidfile) {
		SaAmfPmErrorsT pmErr = SA_AMF_PM_ZERO_EXIT | SA_AMF_PM_NON_ZERO_EXIT;

		rc = saAmfPmStop(my_amf_hdl, &my_comp_name, SA_AMF_PM_PROC, pid, pmErr);
		if ((SA_AIS_OK != rc) && (SA_AIS_ERR_NOT_EXIST != rc)) {
			syslog(LOG_ERR, "saAmfPmStop FAILED (%u)", rc);
		}
	}

	rc = saAmfHealthcheckStop(my_amf_hdl, &my_comp_name, &my_healthcheck_key);
	if ((rc != SA_AIS_OK) && (rc != SA_AIS_ERR_NOT_EXIST)) {
		syslog(LOG_ERR, "saAmfHealthcheckStop FAILED (%u)", rc);
	}

	status = exec_command(stop_script);
	if (status == 0)
		return SA_AIS_OK;
	else
		return SA_AIS_ERR_FAILED_OPERATION;
}
示例#2
0
/****************************************************************************
  Name          : avsv_amf_protection_group_callback

  Description   : This routine is a callback to notify the application of any
		  changes in the protection group. It demonstrates the use of
		  following AMF APIs:
		  a) saAmfProtectionGroupTrackStop()
		  b) saAmfPmStart()
		  c) saAmfPmStop()

  Arguments     : csi_name - ptr to the csi-name
		  not_buf  - ptr to the notification buffer
		  mem_num  - number of components that belong to this
			     protection group
		  err      - error code

  Return Values : None.

  Notes         : None.
******************************************************************************/
void avsv_amf_protection_group_callback(const SaNameT *csi_name,
                                        SaAmfProtectionGroupNotificationBufferT *not_buf,
                                        SaUint32T mem_num,
                                        SaAisErrorT err)
{
    unsigned int  item_count;
    pid_t  pid;
    SaAmfPmErrorsT   pm_err;
    SaAmfRecommendedRecoveryT rec_rcvr;
    SaAmfPmStopQualifierT     stop_qual;
    SaAisErrorT  rc;

    syslog(LOG_INFO, "\n Dispatched 'Protection Group' Callback \n CSI: %s \n No. of Members: %d ",
           csi_name->value, mem_num);

    if ( SA_AIS_OK != err )
        return;

    /* Print the Protection Group members */
    for (item_count= 0; item_count < not_buf->numberOfItems; item_count++) {
        syslog(LOG_INFO, " CompName[%d]: %s ",
               item_count, not_buf->notification[item_count].member.compName.value);
        syslog(LOG_INFO, " Rank[%d]    : %d ",
               item_count, not_buf->notification[item_count].member.rank);
        syslog(LOG_INFO, " HAState[%d] : %s ",
               item_count, ha_state_str[not_buf->notification[item_count].member.haState]);
        syslog(LOG_INFO, " Change[%d]  : %s ",
               item_count, pg_change_str[not_buf->notification[item_count].change]);
    }


    /*######################################################################
    	Demonstrating the use of saAmfProtectionGroupTrackStop()
    ######################################################################*/

    rc = saAmfProtectionGroupTrackStop(gl_amf_hdl, csi_name);
    if ( SA_AIS_OK != rc ) {
        syslog(LOG_ERR, "saAmfProtectionGroupTrackStop FAILED - %u", rc);
        saAmfComponentUnregister(gl_amf_hdl, &gl_comp_name, 0);
        saAmfFinalize(gl_amf_hdl);
        return;
    }

    syslog(LOG_INFO, "\n Stopped Protection Group Tracking for CSI: %s ",
           csi_name->value);


    /*######################################################################
    	       Demonstrating the use of saAmfPmStart()
    ######################################################################*/

    /* Fill the `Passive Monitoring Start' parameters */
    pid = getpid();
    pm_err = SA_AMF_PM_NON_ZERO_EXIT;
    rec_rcvr = SA_AMF_COMPONENT_RESTART;

    /* Start Passive Monitoring */
    rc = saAmfPmStart(gl_amf_hdl, &gl_comp_name, pid, 0, pm_err, rec_rcvr);
    if ( SA_AIS_OK != rc ) {
        syslog(LOG_ERR, "saAmfPmStart FAILED - %u", rc);
        saAmfComponentUnregister(gl_amf_hdl, &gl_comp_name, 0);
        saAmfFinalize(gl_amf_hdl);
        return;
    }

    syslog(LOG_INFO, "\n Started Passive Monitoring for Comp: %s ",
           gl_comp_name.value);


    /*######################################################################
    	       Demonstrating the use of saAmfPmStop()
    ######################################################################*/

    /* Fill the `Passive Monitoring Stop' parameters */
    pid = getpid();
    pm_err = SA_AMF_PM_NON_ZERO_EXIT;
    stop_qual = SA_AMF_PM_PROC;

    /* Start Passive Monitoring */
    rc = saAmfPmStop(gl_amf_hdl, &gl_comp_name, stop_qual, pid, pm_err);
    if ( SA_AIS_OK != rc ) {
        syslog(LOG_ERR, "saAmfPmStop FAILED - %u", rc);
        saAmfComponentUnregister(gl_amf_hdl, &gl_comp_name, 0);
        saAmfFinalize(gl_amf_hdl);
        return;
    }

    syslog(LOG_INFO, "\n Stopped Passive Monitoring for Comp: %s ",
           gl_comp_name.value);
}