자원 유형 구현의 Validate 콜백 메소드의 목적은 제안된 자원 설정(자원의 제안된 등록 정보 설정에 지정된 대로)이 자원 유형에 허용되는지 확인하는 것입니다.
자원 유형 구현의 Validate 메소드는 다음 두 조건 중 하나에서 RGM에 의해 호출됩니다.
자원 유형의 새 자원을 만들 때
자원 또는 자원 그룹의 등록 정보를 업데이트할 때
이러한 두 시나리오는 자원의 Validate 메소드에 전달되는 -c(작성) 또는 -u(업데이트) 명령줄 옵션이 있는지에 따라 구별할 수 있습니다.
Validate 메소드는 자원 유형 등록 정보 Init_nodes의 값으로 정의되는 노드 집합의 각 노드에서 호출됩니다. Init_nodes가 RG_PRIMARIES 로 설정된 경우 Validate는 자원을 포함하는 자원 그룹을 호스팅할 수 있는(즉, 이러한 그룹의 기본이 될 수 있는) 각 노드에서 호출됩니다. Init_nodes가 RT_INSTALLED_NODES로 설정된 경우에는 자원 유 형 소프트웨어가 설치된 각 노드(일반적으로 클러스터의 모든 노드)에서 Validate가 호출됩니다.
Init_nodes의 기본값은 RG_PRIMARIES입니다(rt_reg(4) 설명서 페이지 참조). Validate 메소드가 호출되는 시점에 RGM은 아직 자원을 만들지 않았거나(작성 콜백의 경우) 업데이트 중인 등록 정보의 업데이트된 값을 아직 적용하지 않았습니다(업데이트 콜백의 경우).
HAStoragePlus 자원 유형에서 관리하는 로컬 파일 시스템을 사용 중이면 scds_hasp_check() 함수를 사용하여 해당 자원 유형의 상태를 확인합니다. 자원에 대해 정의된 Resource_dependencies 또는 Resource_dependencies_weak 시스템 등록 정보를 사용하여 자원이 의존하는 모든 SUNW.HAStoragePlus 자원의 상태(온라인 또는 기타)에서 이 정보를 가져옵니다. scds_hasp_check () 함수에서 반환된 전체 상태 코드 목록은 scds_hasp_check(3HA) 설명서 페이지를 참조하십시오.
DSDL 함수 scds_initialize()는 다음과 같은 방법으로 이러한 상황을 처리합니다.
자원 작성의 경우 scds_initialize()는 명령줄에서 전달된 대로 제안된 자원 등록 정보의 구문을 분석합니다. 따라서 자원이 이미 시스템에서 생성된 것처럼 자원 등록 정보의 제안된 값을 사용할 수 있습니다.
자원 또는 자원 그룹 업데이트의 경우 클러스터 관리자가 업데이트 중인 등록 정보의 제안된 값은 명령줄에서 읽어오고 값이 업데이트되지 않는 나머지 등록 정보는 자원 관리 API를 사용하여 Sun Cluster에서 읽어옵니다. DSDL을 사용 중이면 이러한 작업에 신경 쓸 필요가 없습니다. 자원의 모든 등록 정보를 사용할 수 있는 것처럼 자원을 검증할 수 있습니다.
자원 등록 정보의 검증을 구현하는 함수를 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); }
검증 함수는 또한 자원 검증이 실패한 이유를 기록해야 합니다. 이에 대한 세부 정보는 제외하고(8 장, 샘플 DSDL 자원 유형 구현에서 Validation 함수에 대한 실제적인 처리 방법 설명) 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() 함수의 구현만 신경 쓰면 됩니다.