[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