자원 유형 구현의 Stop 콜백 메소드는 응용 프로그램을 중지하기 위해 클러스터 노드에서 RGM에 의해 호출됩니다. Stop 메소드의 콜백 의미는 다음을 요구합니다.
Start 메소드가 노드에서 성공적으로 완료되지 않은 경우에도 RGM에 의해 Stop 메소드가 호출될 수 있으므로 Stop 메소드는 멱등원이어야 합니다. 따라서 Stop 메소드는 응용 프로그램이 클러스터 노드에서 실행 중이 아니며 이에 대해 수행할 작업이 없는 경우에도 성공(0을 반환하고 종료)해야 합니다.
자원 유형의 Stop 메소드가 클러스터 노드에서 실패(0이 아닌 값으로 종료)할 경우 중지하려는 자원은 STO_FAILED 상태가 됩니다. 자원의 Failover_mode 설정에 따라 이것은 RGM에 의해 클러스터 노드의 하드 재부트가 발생하는 결과를 가져올 수 있습니다. 따라서 응용 프로그램을 종료하는 데 실패할 경우 강제 중단 및 돌발적 중단(예: SIGKILL 사용)을 통해서라도 응용 프로그램을 실제로 중지하는 것을 강력하게 시도하도록 Stop 메소드를 디자인하는 것이 중요합니다. 또한 프레임워크에서 Stop_timeout의 만료를 중지 실패로 간주하고 자원을 STOP_FAILED 상태로 두기 때문에 이러한 작업이 시기 적절하게 수행되도록 해야 합니다.
DSDL 유틸리티 scds_pmf_stop()은 먼저 SIGKILL을 프로세스에 전달한 다음 SIGTERM을 통해 응용 프로그램을 무리없이 중지시키기 때문에 대부분의 응용 프로그램에 충분합니다. 이 유틸리티는 scds_pmf_start()를 통해 PMF에서 시작된 것으로 가정합니다. 이 유틸리티에 대한 자세한 내용은 PMF 함수를 참조하십시오.
지금까지 사용했던 코드 모델에 따라 응용 프로그램을 중지하기 위한 응용 프로그램 특정 함수를 svc_stop()이라고 가정하면 Stop 메소드를 다음과 같이 구현할 수 있습니다. 여기에서 svc_stop() 구현이 scds_pmf_stop()을 사용하는지 여부는 논외로 하며 응용 프로그램을 Start 메소드를 통해 PMF에서 시작했는지 여부에 따라 달라질 것입니다.
if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) { return (1); /* Initialization Error */ } return (svc_stop(handle));
svc_validate() 메소드는 Stop 메소드의 구현에 사용되지 않습니다. 이는 시스템에 현재 문제가 있어도 Stop 메소드에서 이 노드의 응용 프로그램 중지를 시도하기 때문입니다.