mco_HA_replica_params_init
有关概述,请参阅高可用性应用页面。
此函数由副本调用,以将副本的高可用性运行时参数初始化为默认值。然后根据应用程序的需求设置这些参数,并将其传递给 mco_HA_attach_master() 函数。
void mco_HA_replica_params_init(
mco_HA_replica_params_t* params
)
参数
params
在结构体 mco_HA_replica_params_t 中定义的 HA 复制参数
返回
无返回值。
结构定义
mco_HA_replica_params_t 结构定义如下:
typedef struct
{
uint4 mode_flags;
timer_unit initial_timeout;
timer_unit commit_timeout;
timer_unit wait_data_timeout;
mco_ha_notifying notifying_callback;
void* notifying_context;
uint2 repeat_counter;
uint2 mcast_port;
const char *mcast_addr;
const char* cancelpoint_addr;
} mco_HA_replica_params_t;
- mode_flags:一个位标志,具有以下描述的一个或多个值:
- MCO_HAMODE_ALLOW_CANCEL:允许取消功能(请参阅 mco_HA_cancel()。注意,取消功能仅针对 TCP 和 UDP 传输实现。)
- MCO_HAMODE_FORCE_MASTER:使副本在同步完成后与主副本同步,意图成为主副本。
MCO_HAMODE_REPLICA_NOTIFICATION:启用副本通知(请参阅参数 notifying_callback 和 notifying_context)。 - MCO_HAMODE_SEND_RESTLIST
- MCO_HAMODE_EXPLICIT_WRITE_ACCESS:使用此标志意味着在从 mco_HA_attach_master() API 返回后,副本数据库的 WRITE 访问权限不会自动恢复。要启用写操作,应用程序必须显式调用 mco_HA_set_master_params()。使用此标志可禁止在副本切换模式下执行写/DDL 操作,即使副本当前未连接到主副本。将切换模式更改为 master、auto 或 standalone(使用 xsql_ha_set_switch_mode() UDF)将启用对数据库的写访问权限。
- initial_timeout:初始与主节点同步必须完成的时间窗口。
- commit_timeout:副本必须从主节点接收事务数据的时间窗口。
- wait_data_timeout:两个连续事务之间的最大时间间隔。如果主节点上的事务率较低,主节点应定期调用 mco_HA_keep_alive() 以防止超时错误。
- notifying_callback:指向用户定义的回调函数的指针。这可用于接收有关副本状态的通知。要启用此功能,请使用标志 MCO_HAMODE_REPLICA_NOTIFICATION。
- notifying_context:用户定义的通知回调函数的参数 pcontext(见下文)。
- repeat_counter:可靠多播模式(MCO_HAMODE_MCAST_RELIABLE)下重复提交的最大尝试次数。
- mcast_port:用于多播。
- mcast_addr:用于多播。
- cancelpoint_addr:包含 IP 地址(可选)和创建取消套接字的进程的端口号的连接字符串,例如 "127.0.0.1:9999" 或仅 "9999"。如果在标志中设置了 MCO_HAMODE_ALLOW_CANCEL 标志,则会使用此功能。如果应用程序未使用 mco_HA_create_cancel_socket() 和 mco_HA_destroy_cancel_socket() 调用,那么 mco_HA_attach_master() 在连接到主服务器之前会隐式创建取消套接字,并在退出前关闭它。换句话说,mco_HA_attach_master() 会“管理”取消套接字。
回调通知
通知回调原型如下:
typedef void(*mco_ha_notifying)
(uint2 notification_code, uint4 param1, void *param2, void *pcontext);
其中参数 param1 和 param2 是发送给回调函数的可选参数(用于指示错误代码、副本通道等),参数 pcontext 是通过 notifying_context 字段传递的用户自定义参数,而参数 notification_code 可以具有以下值之一:
- MCO_REPL_NOTIFY_CONNECTED:副本已成功连接到主服务器。
- MCO_REPL_NOTIFY_CONNECT_FAILED:副本无法连接到主服务器。
- MCO_REPL_NOTIFY_DB_EQUAL:主服务器和副本上的数据库相等,因此无需初始同步。
- MCO_REPL_NOTIFY_DB_LOAD_BEGIN:初始同步已开始。
- MCO_REPL_NOTIFY_DB_LOAD_FAILED:初始同步期间发生错误。通知回调函数的 param1 参数包含 MCO_RET 代码。
- MCO_REPL_NOTIFY_DB_LOAD_OK:初始同步已成功完成。通知回调函数的 param1 参数包含 MCO_E_HA_REPLICA_STOP_REASON 代码。
- MCO_REPL_NOTIFY_COMMIT_FAILED:复制期间发生错误(事务数据错误或连接中断)。通知回调函数的 param1 参数包含 MCO_RET 代码。
- MCO_REPL_NOTIFY_REPLICA_STOPPED:副本因主服务器或本地请求而停止。
- MCO_REPL_NOTIFY_DB_CREATION_FAILED:“数据库创建失败”通知。通知回调的 param1 参数包含 MCO_RET 代码。
- MCO_REPL_NOTIFY_HOTSYNC:“热”同步已开始。
- MCO_REPL_NOTIFY_EOHOTSYNC:“热”同步已成功完成。
- MCO_REPL_NOTIFY_STATEFUL_SYNC:“有状态”同步已开始。
- MCO_REPL_NOTIFY_STATEFUL_SYNC_END:“有状态”同步已成功完成。