資源類型實作的 Validate 方法由 RGM 呼叫,分兩種情形: 1) 建立資源類型的新資源時;2) 更新資源或資源群組的屬性時。 可以由傳送至資源的 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 尚未建立資源 (就建立回呼而言),或尚未套用要更新屬性的更新值 (就更新回呼而言)。 資源類型實作之 Validate 回呼方法的目的是檢查所建議的資源設定值 (所建議的資源屬性設定指定) 對資源類型來說是可接受的。
如果您使用的是由 HAStoragePlus 管理的本機檔案系統,請使用 scds_hasp_check 來檢查 HAStoragePlus 資源的狀態。此資訊是使用為資源定義的 Resource_dependencies 或 Resource_dependencies_weak 系統屬性,從該資源所依賴之所有 SUNW.HAStoragePlus(5) 資源的狀態 (線上或其他狀態) 獲取 。請參閱 scds_hasp_check(3HA),以取得從 scds_hasp_check 呼叫傳回之狀態程式碼的完整清單。
DSDL 函式 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); } |
驗證函式也應該記錄資源驗證失敗的原因。 如果省略該詳細資訊 (請參閱下一章,以取得關於驗證函式的更實際的處理資訊),則 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() 系統呼叫便利地實施。