WdInfo * wd_is_alive_master(void) { WdInfo * master = NULL; master = wd_is_exist_master(); if (master != NULL) { if (wd_ping_pgpool(master) != WD_OK) { master = NULL; } } return master; }
WdInfo * wd_is_alive_master(void) { WdInfo * master = NULL; master = wd_is_exist_master(); if (master != NULL) { if (!strcmp(pool_config->wd_lifecheck_method, MODE_HEARTBEAT) || (!strcmp(pool_config->wd_lifecheck_method, MODE_QUERY) && wd_ping_pgpool(master) == WD_OK)) { return master; } } return NULL; }
/* * if master exists and it is contactable return true, * otherwise return false */ bool wd_is_contactable_master(void) { WdInfo * master = NULL; if (WD_MYSELF->status == WD_MASTER) return true; /* for updating contactable flag */ wd_update_info(); master = wd_is_exist_master(); if (master != NULL) { return master->is_contactable; } return false; }
/* * if master exists and it is alive actually return the master, * otherwise return NULL */ WdInfo * wd_is_alive_master(void) { WdInfo * master = NULL; if (WD_MYSELF->status == WD_MASTER) return WD_MYSELF; master = wd_is_exist_master(); if (master != NULL) { if ((!strcmp(pool_config->wd_lifecheck_method, MODE_HEARTBEAT)) || (!strcmp(pool_config->wd_lifecheck_method, MODE_QUERY) && wd_ping_pgpool(master) == WD_OK)) { return master; } } pool_debug("wd_is_alive_master: alive master not found"); return NULL; }
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"))); }