Sun Cluster 数据服务开发者指南(适用于 Solaris OS)

实现回调方法

本节提供有关实现回调方法的一般信息。

访问资源和资源组属性信息

通常,回调方法需要访问资源属性。RMAPI 同时提供了可在回调方法中使用的 shell 命令和 C 函数,以访问系统定义的资源属性和扩展资源属性。请参见 scha_resource_get(1HA)scha_resource_get(3HA) 手册页。

DSDL 提供一组用于访问系统定义的属性的 C 函数(每种属性一个函数)和一个用于访问扩展属性的函数。请参见 scds_property_functions(3HA)scds_get_ext_property(3HA) 手册页。

您无法使用属性机制存储数据服务的动态状态信息,因为没有 API 函数可用于设置 StatusStatus_msg 以外的资源属性。您应该将动态状态信息存储在全局文件中。


注 –

群集管理员可以使用 scrgadm 命令或通过图形管理命令或界面来设置特定资源属性。但是,请勿从任何回调方法中调用 scrgadm,这是因为在群集重新配置期间(即 RGM 调用方法时)scrgadm 将失败。


方法的幂等性

通常情况下,RGM 不会使用相同的参数对同一资源连续多次调用某个方法。但是,如果 Start 方法失败,RGM 会对资源调用 Stop 方法,即使该资源从未启动过。同样,即使资源守护进程能够终止其自身,RGM 可能仍会对其运行 Stop 方法。相同的情况也适用于 Monitor_startMonitor_stop 方法。

由于这些原因,您必须在 StopMonitor_stop 方法中构建幂等性。使用相同参数对同一资源重复调用 StopMonitor_stop 的结果与调用一次的结果相同。

幂等性的一个含义是使 StopMonitor_stop 必须返回 0(成功),即使这时资源或监视器已经停止并且无工作要完成。


注 –

InitFiniBootUpdate 方法也必须具有幂等性。Start 方法无需具有幂等性。