static pid_t hb_receiver_pid[WD_MAX_IF_NUM];
static pid_t hb_sender_pid[WD_MAX_IF_NUM];
-pid_t wd_main(int fork_wait_time);
-void wd_kill_watchdog(int sig);
-int wd_reaper_watchdog(pid_t pid, int status);
-int wd_chk_setuid(void);
-
static pid_t fork_a_lifecheck(int fork_wait_time);
static void wd_exit(int exit_status);
static int wd_check_config(void);
#include "pool_config.h"
#include "wd_ext.h"
-pid_t wd_child(int fork_wait_time);
static void wd_child_exit(int exit_signo);
static int wd_send_response(int sock, WdPacket * recv_pack);
static void wd_node_request_signal(WD_PACKET_NO packet_no, WdNodeInfo *node);
#include "watchdog.h"
#include "wd_ext.h"
-int wd_IP_up(void);
-int wd_IP_down(void);
-int wd_get_cmd(char * buf, char * cmd);
static int exec_ifconfig(char * path,char * command);
int
#include "watchdog.h"
#include "wd_ext.h"
-int wd_init(void);
-
int
wd_init(void)
{
static volatile bool * WD_Locks;
-int wd_init_interlock(void);
-void wd_start_interlock(bool by_health_check);
-void wd_end_interlock(void);
-void wd_leave_interlock(void);
-void wd_wait_for_lock(WD_LOCK_ID lock_id);
-bool wd_am_I_lock_holder(void);
-bool wd_is_locked(WD_LOCK_ID lock_id);
-void wd_set_lock(WD_LOCK_ID lock_id, bool value);
-int wd_unlock(WD_LOCK_ID lock_id);
-
static void wd_update_lock_holder(void);
static int wd_assume_lock_holder(void);
static void wd_resign_lock_holder(void);
#include "libpq-fe.h"
-int is_wd_lifecheck_ready(void);
-int wd_lifecheck(void);
-int wd_ping_pgpool(WdInfo * pgpool);
static void * thread_ping_pgpool(void * arg);
static PGconn * create_conn(char * hostname, int port);
static int pgpool_down(WdInfo * pool);
#include "watchdog.h"
#include "wd_ext.h"
-int wd_add_wd_list(WdDesc * other_wd);
-int wd_set_wd_info(WdInfo * info);
-WdInfo * wd_is_exist_master(void);
-WdInfo * wd_get_lock_holder(void);
-WdInfo * wd_get_interlocking(void);
-bool wd_are_interlocking_all(void);
-void wd_set_lock_holder(WdInfo *info, bool value);
-void wd_set_interlocking(WdInfo *info, bool value);
-void wd_clear_interlocking_info(void);
-int wd_am_I_oldest(void);
-int wd_set_myself(struct timeval * tv, int status);
-WdInfo * wd_is_alive_master(void);
-bool wd_is_contactable_master(void);
-bool wd_are_contactable_all(void);
-
/* add or modify watchdog information list */
int
wd_set_wd_list(char * hostname, int pgpool_port, int wd_port, char * delegate_ip, struct timeval * tv, int status)
WD_SEND_ALL_NODES
} WD_SEND_TYPE;
-int wd_startup(void);
-int wd_declare(void);
-int wd_stand_for_master(void);
-int wd_notice_server_down(void);
-int wd_update_info(void);
-int wd_authentication_failed(int sock);
-int wd_create_send_socket(char * hostname, int port);
-int wd_create_recv_socket(int port);
-int wd_accept(int sock);
-int wd_send_packet(int sock, WdPacket * snd_pack);
-int wd_recv_packet(int sock, WdPacket * buf);
-int wd_escalation(void);
-int wd_start_recovery(void);
-int wd_end_recovery(void);
-int wd_send_failback_request(int node_id);
-int wd_degenerate_backend_set(int *node_id_set, int count);
-int wd_promote_backend(int node_id);
-int wd_set_node_mask (WD_PACKET_NO packet_no, int *node_id_set, int count);
-int wd_send_packet_no(WD_PACKET_NO packet_no );
-int wd_send_lock_packet(WD_PACKET_NO packet_no, WD_LOCK_ID lock_id);
-
static int wd_send_node_packet(WD_PACKET_NO packet_no, int *node_id_set, int count);
static int wd_chk_node_mask (WD_PACKET_NO packet_no, int *node_id_set, int count);
-void wd_calc_hash(const char *str, int len, char *buf);
-int wd_packet_to_string(WdPacket pkt, char *str, int maxlen);
-
static void * wd_thread_negotiation(void * arg);
static int send_packet_for_all(WdPacket *packet);
static int send_packet_4_nodes(WdPacket *packet, WD_SEND_TYPE type);
#include "pool.h"
#include "pool_config.h"
#include "watchdog.h"
-
-int wd_is_upper_ok(char * server_list);
-int wd_is_unused_ip(char * ip);
+#include "wd_ext.h"
static void * exec_ping(void * arg);
static double get_result (char * ping_data);