資源類型實作的 Validate 回呼方法用於檢查資源類型是否接受建議的資源設定 (由資源上的建議特性設定指定)。
在以下兩種情況,Resource Group Manager (RGM) 會呼叫資源類型實作的 Validate 方法︰
資源類型的新資源正在建立中
資源或資源群組的特性正在更新中
這兩種情況可由傳送至 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() 函數以檢查該資源類型的狀態。此項資訊是從所有 SUNW.HAStoragePlus 資源的狀態 (線上或其他狀態) 取得,其中資源視所採用為其定義的 Resource_dependencies 或 Resource_dependencies_weak 系統特性而定。請參閱 scds_hasp_check(3HA) 線上手冊,以取得由 scds_hasp_check() 函數傳回的狀態程式碼之完整清單。
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 資源類型實施範例包含驗證函數更實際可行的處理),您可以實作一個較簡單的範例 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() 函數的實作。