* add for watchdog
*/
pool_config->use_watchdog = 0;
+ pool_config->watchdog_mode = MODE_UDP;
pool_config->clear_memqcache_on_escalation = 1;
pool_config->wd_escalation_command = "";
pool_config->trusted_servers = "";
pool_config->wd_hostname = localhostname;
pool_config->wd_port = 9000;
pool_config->other_wd->num_wd = 0;
- pool_config->other_wd->num_udp_if = 0;
pool_config->wd_interval = 10;
+ pool_config->wd_authkey = "";
pool_config->ping_path = "/bin";
pool_config->ifconfig_path = "/sbin";
pool_config->if_up_cmd = "ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0";
pool_config->wd_lifecheck_dbname = "template1";
pool_config->wd_lifecheck_user = "nobody";
pool_config->wd_lifecheck_password = "";
-
- pool_config->watchdog_mode = "udp";
+ pool_config->wd_udp_port = 9694;
pool_config->wd_udp_keepalive = 2;
pool_config->wd_udp_deadtime = 30;
- pool_config->wd_udp_port = 9694;
- pool_config->wd_authkey = "";
+ pool_config->num_udp_if = 0;
pool_config->memory_cache_enabled = 0;
pool_config->memqcache_method = "shmem";
if (context == INIT_CONFIG || (context == RELOAD_CONFIG ))
{
strlcpy(WD_UDP_IF(slot).if_name, str, WD_MAX_IF_NAME_LEN);
- pool_config->other_wd->num_udp_if = slot + 1;
+ pool_config->num_udp_if = slot + 1;
}
}
int wd_udp_port; /* Port number for UDP heartbeat lifecheck */
int wd_udp_keepalive; /* Interval time of sending UDP heartbeat signal (sec) */
int wd_udp_deadtime; /* Deadtime interval for UDP heartbeat signal (sec) */
+ WdUdpIf udp_if[WD_MAX_IF_NUM]; /* interface devices */
+ int num_udp_if; /* number of interface devices */
} POOL_CONFIG;
+
typedef enum {
INIT_CONFIG = 1, /* 0x01 */
RELOAD_CONFIG = 2 /* 0x02 */
* add for watchdog
*/
pool_config->use_watchdog = 0;
+ pool_config->watchdog_mode = MODE_UDP;
pool_config->clear_memqcache_on_escalation = 1;
pool_config->wd_escalation_command = "";
pool_config->trusted_servers = "";
pool_config->wd_hostname = localhostname;
pool_config->wd_port = 9000;
pool_config->other_wd->num_wd = 0;
- pool_config->other_wd->num_udp_if = 0;
pool_config->wd_interval = 10;
+ pool_config->wd_authkey = "";
pool_config->ping_path = "/bin";
pool_config->ifconfig_path = "/sbin";
pool_config->if_up_cmd = "ifconfig eth0:0 inet $_IP_$ netmask 255.255.255.0";
pool_config->wd_lifecheck_dbname = "template1";
pool_config->wd_lifecheck_user = "nobody";
pool_config->wd_lifecheck_password = "";
-
- pool_config->watchdog_mode = "udp";
+ pool_config->wd_udp_port = 9694;
pool_config->wd_udp_keepalive = 2;
pool_config->wd_udp_deadtime = 30;
- pool_config->wd_udp_port = 9694;
- pool_config->wd_authkey = "";
+ pool_config->num_udp_if = 0;
pool_config->memory_cache_enabled = 0;
pool_config->memqcache_method = "shmem";
if (context == INIT_CONFIG || (context == RELOAD_CONFIG ))
{
strlcpy(WD_UDP_IF(slot).if_name, str, WD_MAX_IF_NAME_LEN);
- pool_config->other_wd->num_udp_if = slot + 1;
+ pool_config->num_udp_if = slot + 1;
}
}
strncpy(status[i].desc, "non 0 if operating in use_watchdog", POOLCONFIG_MAXDESCLEN);
i++;
+ strncpy(status[i].name, "watchdog_mode", POOLCONFIG_MAXNAMELEN);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%s", pool_config->watchdog_mode);
+ strncpy(status[i].desc, "mode of watchdog lifecheck", POOLCONFIG_MAXDESCLEN);
+ i++;
+
+ strncpy(status[i].name, "clear_memqcache_on_escalation", POOLCONFIG_MAXNAMELEN);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%d", pool_config->clear_memqcache_on_escalation);
+ strncpy(status[i].desc, "If true, clear all the query caches in shared memory when escalation occurs", POOLCONFIG_MAXDESCLEN);
+ i++;
+
+ strncpy(status[i].name, "wd_escalation_command", POOLCONFIG_MAXNAMELEN);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%s", pool_config->wd_escalation_command);
+ strncpy(status[i].desc, "command executed when escalation occurs", POOLCONFIG_MAXDESCLEN);
+ i++;
+
strncpy(status[i].name, "trusted_servers", POOLCONFIG_MAXNAMELEN);
snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%s", pool_config->trusted_servers);
strncpy(status[i].desc, "upper server list to observe connection", POOLCONFIG_MAXDESCLEN);
strncpy(status[i].desc, "send ARP REQUESTi to neighbour host", POOLCONFIG_MAXDESCLEN);
i++;
+ strncpy(status[i].name, "wd_udp_port", POOLCONFIG_MAXNAMELEN);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%d", pool_config->wd_udp_port);
+ strncpy(status[i].desc, "port number for UDP heartbeat lifecheck", POOLCONFIG_MAXDESCLEN);
+ i++;
+
+ strncpy(status[i].name, "wd_udp_keepalive", POOLCONFIG_MAXNAMELEN);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%d", pool_config->wd_udp_keepalive);
+ strncpy(status[i].desc, "interval time of sending UDP heartbeat siganl (sec)", POOLCONFIG_MAXDESCLEN);
+ i++;
+
+ strncpy(status[i].name, "wd_udp_deadtime", POOLCONFIG_MAXNAMELEN);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%d", pool_config->wd_udp_deadtime);
+ strncpy(status[i].desc, "deadtime interval for UDP heartbeat siganl (sec)", POOLCONFIG_MAXDESCLEN);
+ i++;
+
strncpy(status[i].name, "wd_life_point", POOLCONFIG_MAXNAMELEN);
snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%d", pool_config->wd_life_point);
strncpy(status[i].desc, "retry times of life check", POOLCONFIG_MAXDESCLEN);
}
+ for (j =0; j < pool_config->num_udp_if; j++)
+ {
+ snprintf(status[i].name, POOLCONFIG_MAXNAMELEN, "udp_device%d", j);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%s", WD_UDP_IF(j).if_name);
+ snprintf(status[i].desc, POOLCONFIG_MAXDESCLEN, "name of NIC device #%d for sending hearbeat", j);
+ i++;
+
+ snprintf(status[i].name, POOLCONFIG_MAXNAMELEN, "udp_destination%d", j);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%s", WD_UDP_IF(j).addr);
+ snprintf(status[i].desc, POOLCONFIG_MAXDESCLEN, "destination for sending heartbeat using NIC device %d", j);
+ i++;
+ }
+
*nrows = i;
return status;
}
kill (lifecheck_pid, sig);
kill (child_pid, sig);
- if (!strcmp(pool_config->watchdog_mode, "udp"))
+ if (!strcmp(pool_config->watchdog_mode, MODE_UDP))
{
- for (i = 0; i < pool_config->other_wd->num_udp_if; i++)
+ for (i = 0; i < pool_config->num_udp_if; i++)
{
kill (reader_pid[i], sig);
kill (writer_pid[i], sig);
return 0;
}
- if (!strcmp(pool_config->watchdog_mode, "udp"))
+ if (!strcmp(pool_config->watchdog_mode, MODE_UDP))
{
- for (i = 0; i < pool_config->other_wd->num_udp_if; i++)
+ for (i = 0; i < pool_config->num_udp_if; i++)
{
/* reader process */
- reader_pid[i] = wd_reader(1, pool_config->other_wd->udp_if[i]);
+ reader_pid[i] = wd_reader(1, pool_config->udp_if[i]);
if (reader_pid[i] < 0 )
{
pool_error("launch wd_reader failed");
}
/* writer process */
- writer_pid[i] = wd_writer(1, pool_config->other_wd->udp_if[i]);
+ writer_pid[i] = wd_writer(1, pool_config->udp_if[i]);
if (writer_pid[i] < 0 )
{
pool_error("launch wd_writer failed");
return 1;
}
- for (i = 0; i < pool_config->other_wd->num_udp_if; i++)
+ for (i = 0; i < pool_config->num_udp_if; i++)
{
if (pid == reader_pid[i] || pid == writer_pid[i])
{
/* exiting process was reader/writer process */
else
{
- for (i = 0; i < pool_config->other_wd->num_udp_if; i++)
+ for (i = 0; i < pool_config->num_udp_if; i++)
{
if (pid == reader_pid[i])
{
else
pool_debug("watchdog reader process %d exits with status %d", pid, status);
- reader_pid[i] = wd_reader(1, pool_config->other_wd->udp_if[i]);
+ reader_pid[i] = wd_reader(1, pool_config->udp_if[i]);
if (reader_pid[i] < 0)
{
else
pool_debug("watchdog writer process %d exits with status %d", pid, status);
- writer_pid[i] = wd_writer(1, pool_config->other_wd->udp_if[i]);
+ writer_pid[i] = wd_writer(1, pool_config->udp_if[i]);
if (writer_pid[i] < 0)
{
#define WD_MAX_IF_NAME_LEN (16)
#define WD_INFO(wd_id) (pool_config->other_wd->wd_info[(wd_id)])
-#define WD_UDP_IF(if_id) (pool_config->other_wd->udp_if[(if_id)])
+#define WD_UDP_IF(if_id) (pool_config->udp_if[(if_id)])
#define WD_MYSELF (WD_List)
typedef struct {
int num_wd; /* number of watchdogs */
WdInfo wd_info[MAX_WATCHDOG_NUM];
-
- int num_udp_if; /* number of interface devices */
- WdUdpIf udp_if[WD_MAX_IF_NUM];
} WdDesc;
/*
while (p->status != WD_END)
{
/* query mode */
- if (!strcmp(pool_config->watchdog_mode, "query"))
+ if (!strcmp(pool_config->watchdog_mode, MODE_QUERY))
{
if (wd_ping_pgpool(p) == WD_NG)
{
}
}
/* udp mode */
- else if (!strcmp(pool_config->watchdog_mode, "udp"))
+ else if (!strcmp(pool_config->watchdog_mode, MODE_UDP))
{
if (p == WD_List)
{
check_pgpool_status()
{
/* query mode */
- if (!strcmp(pool_config->watchdog_mode, "query"))
+ if (!strcmp(pool_config->watchdog_mode, MODE_QUERY))
{
check_pgpool_status_by_query();
}
/* udp heartbeat mode */
- else if (!strcmp(pool_config->watchdog_mode, "udp"))
+ else if (!strcmp(pool_config->watchdog_mode, MODE_UDP))
{
check_pgpool_status_by_udp();
}
master = wd_is_exist_master();
if (master != NULL)
{
- if (!strcmp(pool_config->watchdog_mode, "udp") ||
- (!strcmp(pool_config->watchdog_mode, "query") &&
+ if (!strcmp(pool_config->watchdog_mode, MODE_UDP) ||
+ (!strcmp(pool_config->watchdog_mode, MODE_QUERY) &&
wd_ping_pgpool(master) == WD_OK))
{
return master;