Fix to show new watchdog parameters by SHOW pool_status command.
authorYugo Nagata <nagata@sraoss.co.jp>
Sun, 12 May 2013 22:29:51 +0000 (07:29 +0900)
committerYugo Nagata <nagata@sraoss.co.jp>
Sun, 12 May 2013 22:29:51 +0000 (07:29 +0900)
pool_config.c
pool_config.h
pool_config.l
pool_process_reporting.c
watchdog/watchdog.c
watchdog/watchdog.h
watchdog/wd_lifecheck.c
watchdog/wd_list.c

index 36ef481ece5fccf0117122f3433300e9ee1be65c..40bd2159b5c23f9c0e0652c42e661cef43f480cb 100644 (file)
@@ -1780,6 +1780,7 @@ int pool_init_config(void)
         * 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 = "";
@@ -1792,8 +1793,8 @@ int pool_init_config(void)
        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";
@@ -1805,12 +1806,10 @@ int pool_init_config(void)
        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";
@@ -3932,7 +3931,7 @@ int pool_get_config(char *confpath, POOL_CONFIG_CONTEXT context)
                        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;
                        }
 
                }
index 1145f1ef49b3d716f0e250dd98fb6208ae81d7e7..4829b8b2a830c7d1f9b4104fca8fc371cf2d07aa 100644 (file)
@@ -247,7 +247,10 @@ typedef struct {
        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 */
index 970e1125c84056cd5c05c1b8ac7e6ad8f444525c..84ed59370d7dedd4537bfc5ab60edc0733d1379d 100644 (file)
@@ -233,6 +233,7 @@ int pool_init_config(void)
         * 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 = "";
@@ -245,8 +246,8 @@ int pool_init_config(void)
        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";
@@ -258,12 +259,10 @@ int pool_init_config(void)
        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";
@@ -2385,7 +2384,7 @@ int pool_get_config(char *confpath, POOL_CONFIG_CONTEXT context)
                        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;
                        }
 
                }
index 420c30ec8a2732362c033fd037f851e8239ff5cb..358759e7e636948774098e678db74b576daa69e5 100644 (file)
@@ -630,6 +630,21 @@ POOL_REPORT_CONFIG* get_config(int *nrows)
        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);
@@ -685,6 +700,21 @@ POOL_REPORT_CONFIG* get_config(int *nrows)
        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);
@@ -875,6 +905,19 @@ POOL_REPORT_CONFIG* get_config(int *nrows)
 
        }
 
+       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;
 }
index 1a14b0c4fd770339684b8e66b0e9ea57ef8192c6..9f31362c016fe61e4d320d217ba44e5a31633138 100644 (file)
@@ -82,9 +82,9 @@ wd_kill_watchdog(int sig)
        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);
@@ -154,12 +154,12 @@ wd_main(int fork_wait_time)
                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");
@@ -167,7 +167,7 @@ wd_main(int fork_wait_time)
                        }
 
                        /* 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");
@@ -251,7 +251,7 @@ wd_is_watchdog_pid(pid_t pid)
                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])
                {
@@ -310,7 +310,7 @@ wd_reaper_watchdog(pid_t pid, int status)
        /* 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])
                        {
@@ -320,7 +320,7 @@ wd_reaper_watchdog(pid_t pid, int status)
                                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)
                                {
@@ -340,7 +340,7 @@ wd_reaper_watchdog(pid_t pid, int status)
                                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)
                                {
index 2379667bd1349c1082f951d6f1f2c111bd1b1baf..982fe8332f282aa67f2c446b5ca3ae09152d5b21 100644 (file)
@@ -39,7 +39,7 @@
 #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)
 
@@ -160,9 +160,6 @@ typedef struct {
 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;
 
 /*
index 04dc744bb3321cec2931b6cf82ca89b508fde307..623ee182b1164a181988eb602cc794af19315d20 100644 (file)
@@ -60,7 +60,7 @@ is_wd_lifecheck_ready(void)
        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)
                        {
@@ -70,7 +70,7 @@ is_wd_lifecheck_ready(void)
                        }
                }
                /* udp mode */
-               else if (!strcmp(pool_config->watchdog_mode, "udp"))
+               else if (!strcmp(pool_config->watchdog_mode, MODE_UDP))
                {
                        if (p == WD_List)
                        {
@@ -154,12 +154,12 @@ static void
 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();
        }
index cd9c806cc076ccbd4ba67fc0a1124cfafc140083..5f93254a35e86bd74bec88f44414bad4b7444772 100644 (file)
@@ -308,8 +308,8 @@ wd_is_alive_master(void)
        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;