[pgpool-general-jp: 1640] pgpool-II 3.5.26 のリグレッションテストが失敗するケースについて
中村憲一
nakamura.kenichi @ ntt-tx.co.jp
2020年 9月 14日 (月) 15:45:32 JST
いつもお世話になっております。中村と申します。
早速ですが、
pgpool-II 3.5.26 のリグレッションテストを実施したところ、
2つ問題が発生しましたので、ご報告致します。
※pgpool-II 4.1.3 など、同時期にリリースされたその他のバージョンでは問題はありませんでした。
お忙しい中恐れ入りますが、ご確認のほど、よろしくお願い致します。
●環境
RHEL 8.1
PostgreSQL 12.4
JDBC Driver 42.2.14
pgpool-II:
pgpool-II-pg12-3.5.26-1pgdg.rhel8.x86_64.rpm
pgpool-II-pg12-devel-3.5.26-1pgdg.rhel8.x86_64.rpm
pgpool-II-pg12-extensions-3.5.26-1pgdg.rhel8.x86_64.rpm
●発生した問題
■(1)pgpool-II-3.5.26/src/test/pgpool_setup スクリプトの
PGVERSIONチェック方法が統一されていませんでした
3.5.26 のリグレッションテストでは、PostgreSQLのメジャーバージョンを変数 PGVERSIONに2桁で格納していますが、
(例えば、PostgreSQL12.4の場合、12が入る)バージョンチェックしている箇所では3桁(120)で比較している箇所が
存在しており、PostgreSQL12系でのリグレッションテストが正常に動作しませんでした。
91行目:(PostgreSQLのメジャーバージョンを格納する箇所)
----
PGVERSION=`$INITDB -V|awk '{print $3}'|sed 's/\..*//'|sed 's/\([0-9]*\)[a-zA-Z].*/\1/'`
----
286行目、415行目、451行目
----
if [ $PGVERSION -ge 120 ];then
----
こちらは、120⇒12に書き換えることで PostgreSQL12.4 で正常に動作しました。
■(2)069.memory_leak_extended のテストが failed となる
069.memory_leak_extended はメモリリークが発生しないことを確認するテストですが、
raw mode のテストで 92KB のメモリ増加により、テストが failed になりました。
mode:s, mode:r では問題は発生しませんでした。
----
initial process size: 72368 after size: 72460 delta: 92
memory leak in 92 KB in mode:n
----
pmap で確認したところ、
---
00005558d6269000 92K rw--- [ anon ]
----
が差分として発生していました。
なお、pgpool-II 3.5.25 のRPMに置き換えた場合、および、pgpool-II 3.5.26 のソースビルドしたものを
使用した場合は、069.memory_leak_extended は OKになりました。
以下に、該当箇所のリグレッションテストのログを記載致します。
----
[postgres @ db20196 regression]$ rpm -qa | grep postgresql
postgresql12-server-12.4-1PGDG.rhel8.x86_64
postgresql12-libs-12.4-1PGDG.rhel8.x86_64
postgresql12-contrib-12.4-1PGDG.rhel8.x86_64
postgresql12-12.4-1PGDG.rhel8.x86_64
postgresql12-devel-12.4-1PGDG.rhel8.x86_64
[postgres @ db20196 regression]$ rpm -qa | grep pgpool
pgpool-II-pg12-extensions-3.5.26-1pgdg.rhel8.x86_64
pgpool-II-pg12-3.5.26-1pgdg.rhel8.x86_64
pgpool-II-pg12-devel-3.5.26-1pgdg.rhel8.x86_64
[postgres @ db20196 regression]$ pwd
/var/lib/pgsql/pgpool-II-3.5.26/src/test/regression
[postgres @ db20196 regression]$ ./regress.sh -p /usr/pgsql-12/bin -i /usr -m noinstall -j /tmp/postgresql-42.2.14.jar -s /var/run/postgresql
not installing pgpool for the tests ...
using pgpool-II at /usr
*************************
REGRESSION MODE : noinstall
PGPOOL-II : /usr
PostgreSQL bin : /usr/pgsql-12/bin
pgbench : /usr/pgsql-12/bin/pgbench
PostgreSQL jdbc : /tmp/postgresql-42.2.14.jar
*************************
testing 069.memory_leak_extended...failed.
out of 1 ok:0 failed:1 timeout:0
[postgres @ db20196 regression]$ cat log/069.memory_leak_extended
creating test environment...PostgreSQL major version: 12
Satrting set up in raw mode
creating startall and shutdownall
creating failover script
creating database cluster /var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/data0...done.
update postgresql.conf
creating pgpool_remote_start
creating basebackup.sh
creating database cluster /var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/data1...done.
update postgresql.conf
creating pgpool_remote_start
creating basebackup.sh
start all
waiting for pgpool-II coming up...done.
create extensions
node_id | hostname | port | status | lb_weight | role | select_cnt
---------+---------------------+-------+--------+-----------+--------+------------
0 | /var/run/postgresql | 11002 | 2 | 0.500000 | master | 0
1 | /var/run/postgresql | 11003 | 1 | 0.500000 | slave | 0
(2 rows)
shutdown all
pgpool-II setting for raw mode is done.
To start the whole system, use /var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/startall.
To shutdown the whole system, use /var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/shutdownall.
pcp command user name is "postgres", password is "postgres".
Each PostgreSQL, pgpool-II and pcp port is as follows:
#1 port is 11002
#2 port is 11003
pgpool port is 11000
pcp port is 11001
The info above is in README.port.
done.
waiting for server to start....2020-09-14 05:20:56.876 GMT [14879] LOG: skipping missing configuration file "/var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/data0/myrecovery.conf"
2020-09-14 05:20:56.876 GMT [14879] LOG: skipping missing configuration file "/var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/data0/myrecovery.conf"
14879 2020-09-14 14:20:56 JST LOG: starting PostgreSQL 12.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5), 64-bit
14879 2020-09-14 14:20:56 JST LOG: listening on IPv4 address "0.0.0.0", port 11002
14879 2020-09-14 14:20:56 JST LOG: could not create IPv6 socket for address "::": Address family not supported by protocol
14879 2020-09-14 14:20:56 JST LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.11002"
14879 2020-09-14 14:20:56 JST LOG: redirecting log output to logging collector process
14879 2020-09-14 14:20:56 JST HINT: Future log output will appear in directory "log".
done
server started
waiting for server to start....2020-09-14 05:20:56.988 GMT [14893] LOG: skipping missing configuration file "/var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/data1/myrecovery.conf"
2020-09-14 05:20:56.988 GMT [14893] LOG: skipping missing configuration file "/var/lib/pgsql/pgpool-II-3.5.26/src/test/regression/tests/069.memory_leak_extended/testdir/data1/myrecovery.conf"
14893 2020-09-14 14:20:56 JST LOG: starting PostgreSQL 12.4 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 8.3.1 20191121 (Red Hat 8.3.1-5), 64-bit
14893 2020-09-14 14:20:56 JST LOG: listening on IPv4 address "0.0.0.0", port 11003
14893 2020-09-14 14:20:56 JST LOG: could not create IPv6 socket for address "::": Address family not supported by protocol
14893 2020-09-14 14:20:56 JST LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.11003"
14893 2020-09-14 14:20:56 JST LOG: redirecting log output to logging collector process
14893 2020-09-14 14:20:56 JST HINT: Future log output will appear in directory "log".
done
server started
dropping old tables...
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
creating tables...
generating data...
100000 of 100000 tuples (100%) done (elapsed 0.13 s, remaining 0.00 s)
vacuuming...
creating primary keys...
done.
starting vacuum...end.
transaction type: <builtin: select only>
scaling factor: 1
query mode: simple
number of clients: 1
number of threads: 1
duration: 10 s
number of transactions actually processed: 91717
latency average = 0.109 ms
tps = 9171.615366 (including connections establishing)
tps = 9171.772689 (excluding connections establishing)
init_size: 72368
starting vacuum...end.
transaction type: <builtin: select only>
scaling factor: 1
query mode: extended
number of clients: 1
number of threads: 1
duration: 30 s
number of transactions actually processed: 137724
latency average = 0.218 ms
tps = 4590.791101 (including connections establishing)
tps = 4590.820128 (excluding connections establishing)
initial process size: 72368 after size: 72460 delta: 92
memory leak in 92 KB in mode:n
2020-09-14 14:21:38: pid 14947: LOG: stop request sent to pgpool. waiting for termination...
.done.
waiting for server to shut down.... done
server stopped
waiting for server to shut down.... done
server stopped
[postgres @ db20196 regression]$
pgpool-general-jp メーリングリストの案内