Sun Cluster 資料服務開發者指南 (適用於 Solaris 作業系統)

Validate 方法

資源類型實作的 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() 以下列模式處理這些情形:

假定實施資源屬性驗證的函式稱為 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() 系統呼叫便利地實施。