scha_err_tscha_get_fullname(const char *zonename, char **fullname)
scha_get_fullname() 函数返回本地节点上区域上下文的逻辑节点名称。输出参数 fullname 设置为包含群集节点名称的字符串。该字符串需要由调用方释放。
如果 zonename 为 NULL,则区域上下文取决于执行该调用的位置。
如果在全局区域中执行,则返回本地节点名称。
如果在区域群集中执行,则返回区域群集节点名称,而不是全局群集节点名称。
如果 zonename 为非 NULL 值,则意味着要在全局区域中代表 zonename 指定的非全局区域中配置的资源调用该函数。如果 zonename 是区域群集的名称,同时也是底层非全局区域的名称,将返回区域群集节点名称。
如果该函数通过资源回调方法调用,并且 zonename 参数设置为 scds_get_zone_name() 函数的输出,则在所有情况下,生成的 fullname 都将与资源组节点列表中当前的条目匹配:
全局群集或区域群集
global_zone 资源类型或常规资源类型
此函数会返回以下值:
该函数成功。
该函数失败。
该函数成功。
有关其他错误代码的描述,请参见 scha_calls(3HA)。
以下示例使用 scha_get_fullname() 获取表示执行当前程序的 nodename 上下文的 fullname 字符串,并在资源组的节点列表中搜索该名称:
#include <scha.h> #include <libdsdev.h> main(int argc, char *argv[]) { scha_err_t err; scds_handle_t handle; char *myzonename; char *fullname; const scha_str_array_t *rgnodelist; uint_t ix; if (scds_initialize(&handle) != SCHA_ERR_NOERR) { /* handle the error */ ... } myzonename = scds_get_zone_name(handle); rgnodelist = scds_get_rg_nodelist(handle); err = scha_get_fullname(myzonename, &fullname); ... for (ix = 0; ix < rgnodelist->array_cnt; ix++) { if (strcmp(fullname, rgnodelist->str_array[ix]) == 0) { /* found this node in the node list */ ... } } ... }
有关下列属性的说明,请参见 attributes(5):
|
scds_calls(3HA)、scds_initialize(3HA)、scha_cluster_getnodename(3HA)、attributes(5)