[pgsql-jp: 37955] pgpoolの接続状態につきまして

TAKATSUKA Haruka harukat @ sraoss.co.jp
2007年 1月 19日 (金) 15:31:55 JST


高塚と申します。

pgpoolプロセスの接続状態の確認に利用可能なパッチを作成しました。
プロセス名最初の3文字を上書きして、下記のように I (idle)、B (busy) 
が表示されます。

$ ps x
 ・・・中略
 5112 ?        S      0:00 [I]gpool
 5113 ?        S      0:00 [I]gpool
 5114 ?        S      0:00 [B]gpool
 5116 pts/1    T      0:00 -bash
 5117 pts/1    T      0:00 psql -p 9999 -h localhost -U postgres hoge
 5118 ?        S      0:00 postgres: postgres hoge 192.168.16.74(32892) idle
 5175 pts/1    R+     0:00 ps ax

当面の調査目的のためなのでごく簡単にしか書いていません。
(Linux以外では動かないと考えられます)

よろしければお使いください。



((パッチファイル pgpool-3.1.1_h1.diff この下から))
diff -ur pgpool-3.1.1/child.c pgpool-3.1.1-IB/child.c
--- pgpool-3.1.1/child.c	2006-06-26 17:25:17.000000000 +0900
+++ pgpool-3.1.1-IB/child.c	2007-01-17 12:58:06.082999664 +0900
@@ -110,6 +110,9 @@
 	gettimeofday(&now, &tz);
 	srandom((unsigned int) now.tv_usec);
 
+	/* show [i] (initial state) */
+	strncpy(argv_ex[0], "[i]", 3);
+
 	/* initialize connection pool */
 	if (pool_init_cp())
 	{
@@ -138,6 +141,9 @@
 
 		idle = 1;
 
+	    /* show [I] */
+	    strncpy(argv_ex[0], "[I]", 3);
+
 		/* perform accept() */
 		frontend = do_accept(unix_fd, inet_fd, &timeout);
 
@@ -161,10 +167,14 @@
 		set_nonblock(frontend->fd);
 #endif
 
+
 		/* set busy flag and clear child idle timer */
 		idle = 0;
 		child_idle_sec = 0;
 
+	    /* show [B] */
+	    strncpy(argv_ex[0], "[B]", 3);
+
 		/* disable timeout */
 		pool_disable_timeout();
 
diff -ur pgpool-3.1.1/main.c pgpool-3.1.1-IB/main.c
--- pgpool-3.1.1/main.c	2006-05-12 12:46:15.000000000 +0900
+++ pgpool-3.1.1-IB/main.c	2007-01-17 12:50:27.993639832 +0900
@@ -87,6 +87,10 @@
 
 static int health_check_timer_expired;		/* non 0 if health check timer expired */
 
+/* argc,argv as global */
+int argc_ex;
+char** argv_ex;
+
 /*
 * pgpool main program
 */
@@ -97,6 +101,9 @@
 	int i;
 	int pid;
 
+	argv_ex = argv;
+	argc_ex = argc;
+
 	snprintf(conf_file, sizeof(conf_file), "%s/%s", DEFAULT_CONFIGDIR, POOL_CONF_FILE_NAME);
 
 	while ((opt = getopt(argc, argv, "df:hm:ns:")) != -1)
diff -ur pgpool-3.1.1/pool.h pgpool-3.1.1-IB/pool.h
--- pgpool-3.1.1/pool.h	2006-06-04 19:03:30.000000000 +0900
+++ pgpool-3.1.1-IB/pool.h	2007-01-17 12:40:01.316909176 +0900
@@ -256,6 +256,10 @@
 extern POOL_CONNECTION_POOL *pool_connection_pool;	/* connection pool */
 extern long int weight_master;	/* normalized weight of master (0-RAND_MAX range) */
 
+/* argc, argv as global */
+extern int argc_ex;
+extern char** argv_ex;
+
 /*
  * public functions
  *
((パッチファイル pgpool-3.1.1_h1.diff この上まで))


______________________________________________________________________
 高塚 遙  harukat @ sraoss.co.jp  SRA OSS, Inc  http://www.sraoss.co.jp
 〒170-0005 東京都豊島区南大塚3-46-3 大塚セントコアビル5F
 TEL: 03-5951-1191   FAX: 03-5951-1192   CellPhone: 090-3812-9652






pgsql-jp メーリングリストの案内