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; }
/**************************************************************************** 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); }