[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 メーリングリストの案内