Solaris OS용 Sun Cluster 데이터 서비스 개발 안내서

Validate 메소드

다음 두 시나리오에서는 RGM에 의해 자원 유형 구현의 Validate 메소드가 호출됩니다. 즉 1) 자원 유형의 새 자원을 만들 때와 2) 자원 또는 자원 그룹의 등록 정보를 업데이트할 때 RGM에 의해 호출됩니다. 이러한 두 시나리오는 자원의 Validate 메소드에 전달되는 -c (작성) 또는 -u (업데이트) 명령줄 옵션의 존재로 구별할 수 있습니다.

Validate 메소드는 자원 유형 등록 정보 INIT_NODES의 값으로 정의되는 노드 집합의 각 노드에서 호출됩니다. INIT_NODESRG_PRIMARIES로 설정된 경우 Validate는 자원을 포함하는 자원 그룹을 호스팅할 수 있는(즉, 이러한 그룹의 기본이 될 수 있는) 각 노드에서 호출됩니다. INIT_NODESRT_INSTALLED_NODES로 설정된 경우 자원 유형 소프트웨어가 설치되는 각 노드(일반적으로 클러스터의 모든 노드)에서 Validate가 호출됩니다. INIT_NODES의 기본값은 RG_PRIMARIES입니다(rt_reg(4) 참조). Validate 메소드가 호출되는 시점에 RGM은 아직 자원을 만들지 않았거나(작성 콜백의 경우) 업데이트 중인 등록 정보의 업데이트된 값을 아직 적용하지 않았습니다(업데이트 콜백의 경우). 자원 유형 구현의 Validate 콜백 메소드의 목적은 제안된 자원 설정(자원의 제안된 등록 정보 설정에 지정된 대로)이 자원 유형에 허용되는지 확인하는 것입니다.


주 –

HAStoragePlus에서 관리하는 로컬 파일 시스템을 사용할 경우 scds_hasp_check를 사용하여 HAStoragePlus 자원의 상태를 확인합니다. 자원에 대해 정의된 Resource_dependencies 또는 Resource_dependencies_weak 시스템 등록 정보를 사용하여 자원이 의존하는 모든 SUNW.HAStoragePlus(5) 자원의 상태(온라인 또는 기타)에서 이 정보를 가져옵니다. .scds_hasp_check 호출에서 반환된 전체 상태 코드 목록은 scds_hasp_check(3HA)를 참조하십시오.


DSDL 함수 scds_initialize()는 다음과 같은 방법으로 이러한 상황을 처리합니다.

자원 등록 정보의 검증을 구현하는 함수를 svc_validate()라고 하고 이 함수가 scds_get_name() 계열의 함수를 사용하여 검증할 등록 정보를 찾는다고 가정합니다. 허용되는 자원 설정이 이 함수의 반환 코드 0으로 표시된다고 가정하면 자원 유형의 Validate 메소드는 다음 코드 단편과 같이 나타날 수 있습니다.


int
main(int argc, char *argv[])
{
   scds_handle_t handle;
   int rc;

   if (scds_initialize(&handle, argc, argv)!= SCHA_ERR_NOERR) {
   return (1);   /* Initialization Error */
   }
   rc = svc_validate(handle);
   scds_close(&handle);
   return (rc);
}

검증 함수는 또한 자원 검증이 실패한 이유를 기록해야 합니다. 이에 대한 실제적인 처리 방법은 다음 장에서 자세히 설명하기로 하고, 간단한 예 svc_validate() 함수를 다음과 같이 구현할 수 있습니다.


int
svc_validate(scds_handle_t handle)
{
   scha_str_array_t *confdirs;
   struct stat    statbuf;
   confdirs = scds_get_confdir_list(handle);
   if (stat(confdirs->str_array[0], &statbuf) == -1) {
   return (1);   /* Invalid resource property setting */
   }
   return (0);   /* Acceptable setting */
}

따라서 자원 유형 개발자는 svc_validate() 함수의 구현만 신경 쓰면 됩니다. 자원 유형 구현의 일반적인 예로 app.conf라는 응용 프로그램 구성 파일이 Confdir_list 등록 정보에 존재하도록 설정하는 것을 들 수 있습니다. 이것은 Confdir_list 등록 정보에서 파생된 해당 경로 이름에 대한 stat() 시스템 호출을 통해 편리하게 구현할 수 있습니다.