int main(int argc, char *argv[]) { int rtn; rtn = wd_is_upper_ok(argv[1]); if (rtn == WD_OK) { printf("%s is ok", argv[1]); } else { printf("%s is ng", argv[1]); } return 0; }
/* * Check if pgpool is living */ int wd_lifecheck(void) { struct timeval tv; /* I'm in down.... */ if (WD_MYSELF->status == WD_DOWN) { ereport(NOTICE, (errmsg("watchdog lifecheck, watchdog status is DOWN. You need to restart pgpool"))); return WD_NG; } /* set startup time */ gettimeofday(&tv, NULL); /* check upper connection */ if (strlen(pool_config->trusted_servers)) { if(wd_is_upper_ok(pool_config->trusted_servers) != WD_OK) { ereport(WARNING, (errmsg("watchdog lifecheck, failed to connect to any trusted servers"))); if (WD_MYSELF->status == WD_MASTER && strlen(pool_config->delegate_IP) != 0) { wd_IP_down(); } wd_set_myself(&tv, WD_DOWN); wd_notice_server_down(); return WD_NG; } } /* skip lifecheck during recovery execution */ if (*InRecovery != RECOVERY_INIT) { return WD_OK; } /* check and update pgpool status */ check_pgpool_status(); return WD_OK; }
int wd_init(void) { struct timeval tv; WdInfo * p; /* set startup time */ gettimeofday(&tv, NULL); /* allocate watchdog list */ if (WD_List == NULL) { WD_List = pool_shared_memory_create(sizeof(WdInfo) * MAX_WATCHDOG_NUM); if (WD_List == NULL) { pool_error("wd_init: failed to allocate watchdog list"); return WD_NG; } memset(WD_List, 0, sizeof(WdInfo) * MAX_WATCHDOG_NUM); } /* allocate node list */ if (WD_Node_List == NULL) { WD_Node_List = pool_shared_memory_create(sizeof(unsigned char) * MAX_NUM_BACKENDS); if (WD_Node_List == NULL) { pool_error("wd_init: failed to allocate node list"); return WD_NG; } memset(WD_Node_List, 0, sizeof(unsigned char) * MAX_NUM_BACKENDS); } /* initialize interlock */ if (wd_init_interlock() != WD_OK) { pool_error("wd_init: wd_init_interlock failed"); return WD_NG; } /* set myself to watchdog list */ wd_set_wd_list(pool_config->wd_hostname, pool_config->port, pool_config->wd_port, pool_config->delegate_IP, &tv, WD_NORMAL); /* set other pgpools to watchdog list */ wd_add_wd_list(pool_config->other_wd); /* reset time value */ p = WD_List; while (p->status != WD_END) { WD_TIME_INIT(p->hb_send_time); WD_TIME_INIT(p->hb_last_recv_time); p++; } /* check upper connection */ if (strlen(pool_config->trusted_servers) && wd_is_upper_ok(pool_config->trusted_servers) != WD_OK) { pool_error("wd_init: failed to connect trusted server"); return WD_NG; } /* send startup packet */ if (wd_startup() == WD_NG) { pool_error("wd_init: failed to start watchdog"); return WD_NG; } /* check existence of master pgpool */ if (wd_is_exist_master() == NULL) { if (strlen(pool_config->delegate_IP) != 0 && !wd_is_unused_ip(pool_config->delegate_IP)) { pool_error("wd_init: delegate_IP %s already exists", pool_config->delegate_IP); return WD_NG; } /* escalate to delegate_IP holder */ wd_escalation(); } pool_log("wd_init: start watchdog"); return WD_OK; }
void wd_init(void) { struct timeval tv; WdInfo * p; /* set startup time */ gettimeofday(&tv, NULL); /* allocate watchdog list */ if (WD_List == NULL) { WD_List = pool_shared_memory_create(sizeof(WdInfo) * MAX_WATCHDOG_NUM); memset(WD_List, 0, sizeof(WdInfo) * MAX_WATCHDOG_NUM); ereport(DEBUG1, (errmsg("WD_List: sizeof(WdInfo) (%zu) * MAX_WATCHDOG_NUM (%d) = %zu bytes requested for shared memory", sizeof(WdInfo), MAX_WATCHDOG_NUM, sizeof(WdInfo) * MAX_WATCHDOG_NUM))); } /* allocate node list */ if (WD_Node_List == NULL) { WD_Node_List = pool_shared_memory_create(sizeof(unsigned char) * MAX_NUM_BACKENDS); memset(WD_Node_List, 0, sizeof(unsigned char) * MAX_NUM_BACKENDS); ereport(DEBUG1, (errmsg("WD_Node_List: sizeof(unsigned char) (%zu) * MAX_NUM_BACKENDS (%d) = %zu bytes requested for shared memory", sizeof(unsigned char), MAX_WATCHDOG_NUM, sizeof(unsigned char) * MAX_NUM_BACKENDS))); } /* initialize interlock */ wd_init_interlock(); /* set myself to watchdog list */ wd_set_wd_list(pool_config->wd_hostname, pool_config->port, pool_config->wd_port, pool_config->delegate_IP, &tv, WD_NORMAL); /* set other pgpools to watchdog list */ wd_add_wd_list(pool_config->other_wd); /* reset time value */ p = WD_List; while (p->status != WD_END) { WD_TIME_INIT(p->hb_send_time); WD_TIME_INIT(p->hb_last_recv_time); p++; } /* check upper connection */ if (strlen(pool_config->trusted_servers) && wd_is_upper_ok(pool_config->trusted_servers) != WD_OK) { ereport(ERROR, (errmsg("failed to initialize watchdog, failed to connect to trusted server"))); } /* send startup packet */ if (wd_startup() == WD_NG) { ereport(ERROR, (errmsg("failed to initialize watchdog, startup failed"))); } /* check existence of master pgpool */ if (wd_is_exist_master() == NULL) { if (strlen(pool_config->delegate_IP) != 0 && !wd_is_unused_ip(pool_config->delegate_IP)) { ereport(ERROR, (errmsg("failed to initialize watchdog, delegate_IP \"%s\" already exists", pool_config->delegate_IP))); } /* escalate to delegate_IP holder */ wd_escalation(); } ereport(LOG, (errmsg("watchdog started"))); }