[Pgpool-hackers] listen address for pcp port
Yoshiyuki Asaba
y-asaba at sraoss.co.jp
Fri May 30 07:23:25 UTC 2008
Hi,
pcp process always listen on all interfaces. But I think this is not
correct.
So I'm planning to add a new directive "pcp_listen_addresses". Do we
need the new feature into pgpool-II 2.1? pgpool-II 2.1 is in feature
freeze now...
Here is a patch to add the new directive.
% echo "pcp_listen_addresses = 'localhost'" >> pgpool.conf
% pgpool -f pgpool.conf
% netstat -nl | grep 9898
tcp 0 0 127.0.0.1:9898 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 2176517 /tmp/.s.PGSQL.9898
% psql -p 9999 -c 'show pool_status' postgres | grep pcp_listen_addresses | cut -d '|' -f 1,2
pcp_listen_addresses | localhost
Regards,
--
Yoshiyuki Asaba
y-asaba at sraoss.co.jp
-------------- next part --------------
Index: main.c
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/main.c,v
retrieving revision 1.37
diff -c -r1.37 main.c
*** main.c 22 May 2008 14:36:38 -0000 1.37
--- main.c 30 May 2008 07:20:59 -0000
***************
*** 453,460 ****
pool_config->pcp_socket_dir,
pool_config->pcp_port);
pcp_unix_fd = create_unix_domain_socket(pcp_un_addr);
! /* maybe change "*" to pool_config->pcp_listen_addresses */
! pcp_inet_fd = create_inet_domain_socket("*", pool_config->pcp_port);
pcp_pid = pcp_fork_a_child(pcp_unix_fd, pcp_inet_fd, pcp_conf_file);
retrycnt = 0; /* reset health check retry counter */
--- 453,459 ----
pool_config->pcp_socket_dir,
pool_config->pcp_port);
pcp_unix_fd = create_unix_domain_socket(pcp_un_addr);
! pcp_inet_fd = create_inet_domain_socket(pool_config->pcp_listen_addresses, pool_config->pcp_port);
pcp_pid = pcp_fork_a_child(pcp_unix_fd, pcp_inet_fd, pcp_conf_file);
retrycnt = 0; /* reset health check retry counter */
Index: pool.h
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/pool.h,v
retrieving revision 1.29
diff -c -r1.29 pool.h
*** pool.h 12 Feb 2008 11:16:09 -0000 1.29
--- pool.h 30 May 2008 07:20:59 -0000
***************
*** 121,126 ****
--- 121,127 ----
char *listen_addresses; /* hostnames/IP addresses to listen on */
int port; /* port # to bind */
int pcp_port; /* PCP port # to bind */
+ char *pcp_listen_addresses; /* hostname/IP addresses to listen on for PCP */
char *socket_dir; /* pgpool socket directory */
char *pcp_socket_dir; /* PCP socket directory */
int pcp_timeout; /* PCP timeout for an idle client */
Index: pool_config.l
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/pool_config.l,v
retrieving revision 1.21
diff -c -r1.21 pool_config.l
*** pool_config.l 12 Feb 2008 11:16:10 -0000 1.21
--- pool_config.l 30 May 2008 07:21:00 -0000
***************
*** 124,129 ****
--- 124,130 ----
pool_config->listen_addresses = "localhost";
pool_config->port = 9999;
pool_config->pcp_port = 9898;
+ pool_config->pcp_listen_addresses = "localhost";
pool_config->socket_dir = DEFAULT_SOCKET_DIR;
pool_config->pcp_socket_dir = DEFAULT_SOCKET_DIR;
pool_config->backend_socket_dir = DEFAULT_SOCKET_DIR;
***************
*** 298,303 ****
--- 299,322 ----
}
pool_config->pcp_port = v;
}
+ else if (!strcmp(key, "pcp_listen_addresses") && CHECK_CONTEXT(INIT_CONFIG, context))
+ {
+ char *str;
+
+ if (token != POOL_STRING && token != POOL_UNQUOTED_STRING && token != POOL_KEY)
+ {
+ PARSE_ERROR();
+ fclose(fd);
+ return(-1);
+ }
+ str = extract_string(yytext, token);
+ if (str == NULL)
+ {
+ fclose(fd);
+ return(-1);
+ }
+ pool_config->pcp_listen_addresses = str;
+ }
else if (!strcmp(key, "socket_dir") && CHECK_CONTEXT(INIT_CONFIG, context))
{
char *str;
Index: pool_process_query.c
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/pool_process_query.c,v
retrieving revision 1.108
diff -c -r1.108 pool_process_query.c
*** pool_process_query.c 30 May 2008 07:18:44 -0000 1.108
--- pool_process_query.c 30 May 2008 07:21:05 -0000
***************
*** 3311,3316 ****
--- 3311,3321 ----
strncpy(status[i].desc, "number of queries in reset_query_list", POOLCONFIG_MAXDESCLEN);
i++;
+ strncpy(status[i].name, "pcp_listen_addresses", POOLCONFIG_MAXNAMELEN);
+ snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%s", pool_config->pcp_listen_addresses);
+ strncpy(status[i].desc, "host name(s) or IP address(es) to listen on for PCP", POOLCONFIG_MAXDESCLEN);
+ i++;
+
strncpy(status[i].name, "pcp_port", POOLCONFIG_MAXNAMELEN);
snprintf(status[i].value, POOLCONFIG_MAXVALLEN, "%d", pool_config->pcp_port);
strncpy(status[i].desc, "PCP port # to bind", POOLCONFIG_MAXDESCLEN);
Index: doc/pgpool-en.html
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/doc/pgpool-en.html,v
retrieving revision 1.30
diff -c -r1.30 pgpool-en.html
*** doc/pgpool-en.html 27 Mar 2008 07:54:18 -0000 1.30
--- doc/pgpool-en.html 30 May 2008 07:21:07 -0000
***************
*** 338,343 ****
--- 338,353 ----
This parameter can only be set at server start.</p>
</dd>
+ <dl>
+ <dt>pcp_listen_addresses</dt>
+ <dd>
+ <p>Specifies the address in hostname or IP address, which will
+ be accepted by PCP daemon via TCP/IP network. <code>'*'</code> accepts
+ all incoming connections. <code>''</code> disables TCP/IP
+ connections. Default is <code>'localhost'</code>. Connections via UNIX
+ domain socket are always accepted. This parameter can only be set at server start.</p>
+ </dd>
+
<dt>pcp_port</dt>
<dd>
<p>The port number where PCP process accepts
Index: doc/pgpool-ja.html
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/doc/pgpool-ja.html,v
retrieving revision 1.49
diff -c -r1.49 pgpool-ja.html
*** doc/pgpool-ja.html 4 Apr 2008 04:32:53 -0000 1.49
--- doc/pgpool-ja.html 30 May 2008 07:21:09 -0000
***************
*** 344,349 ****
--- 344,360 ----
??????????????? pgpool-II ???????????
</p>
+ <dt>pcp_listen_addresses
+ <dd>
+ <p>
+ pgpool-II? PCP ?????TCP/IP????????????????????????IP?????
+ ???????*???????????IP???????????????
+ ??????????''???????TCP/IP????????????
+ ???????????localhost????
+ UNIX?????????????????????????????????
+ ????????? pgpool-II ???????????
+ </p>
+
<dt>pcp_port
<dd>
<p>
More information about the Pgpool-hackers
mailing list