pgsql: Add tests for reinit.c

Started by Peter Eisentrautover 8 years ago8 messagescomitters
Jump to latest
#1Peter Eisentraut
peter_e@gmx.net

Add tests for reinit.c

This tests how the different forks of unlogged tables behave in crash
recovery.

Author: David Steele <david@pgmasters.net>

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/df411e7c664ee9a2395eb8c7a74ceddea818d489

Modified Files
--------------
src/test/recovery/t/014_unlogged_reinit.pl | 82 ++++++++++++++++++++++++++++++
1 file changed, 82 insertions(+)

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#1)
Re: pgsql: Add tests for reinit.c

Peter Eisentraut <peter_e@gmx.net> writes:

Add tests for reinit.c

BTW, buildfarm member jacana hasn't succeeded at this test once.
The failures look like

ok 1 - init fork in base exists
ok 2 - main fork in base exists
error running SQL: 'psql:<stdin>:1: ERROR: directory "/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG" does not exist'
while running 'psql -XAtq -d port=50531 host=127.0.0.1 dbname='postgres' -f - -v ON_ERROR_STOP=1' with sql 'CREATE TABLESPACE ts1 LOCATION '/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG'' at /home/pgrunner/bf/root/HEAD/pgsql.build/../pgsql/src/test/perl//PostgresNode.pm line 1246.

so I hypothesize that there's something wrong with TestLib::tempdir on
Windows, but no idea what.

regards, tom lane

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#2)
Re: pgsql: Add tests for reinit.c

I wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

Add tests for reinit.c

BTW, buildfarm member jacana hasn't succeeded at this test once.
The failures look like

ok 1 - init fork in base exists
ok 2 - main fork in base exists
error running SQL: 'psql:<stdin>:1: ERROR: directory "/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG" does not exist'
while running 'psql -XAtq -d port=50531 host=127.0.0.1 dbname='postgres' -f - -v ON_ERROR_STOP=1' with sql 'CREATE TABLESPACE ts1 LOCATION '/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG'' at /home/pgrunner/bf/root/HEAD/pgsql.build/../pgsql/src/test/perl//PostgresNode.pm line 1246.

so I hypothesize that there's something wrong with TestLib::tempdir on
Windows, but no idea what.

After further staring at that, I think it's some sort of mingw path
weirdness. I notice that the initdb output refers to the PGDATA
directory as

c:/mingw/msys/1.0/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/t_014_unlogged_reinit_main_data/pgdata

and then after that we see "pg_ctl start" succeeding with just

/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/t_014_unlogged_reinit_main_data/pgdata

but this isn't working:

/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_esA3

perhaps because it lacks the "c:/mingw/msys/1.0" prefix.

Still no opinion about how to fix it.

regards, tom lane

#4David Steele
david@pgmasters.net
In reply to: Tom Lane (#3)
Re: pgsql: Add tests for reinit.c

On 3/15/18 11:51 PM, Tom Lane wrote:

I wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

Add tests for reinit.c

BTW, buildfarm member jacana hasn't succeeded at this test once.
The failures look like

ok 1 - init fork in base exists
ok 2 - main fork in base exists
error running SQL: 'psql:<stdin>:1: ERROR: directory "/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG" does not exist'
while running 'psql -XAtq -d port=50531 host=127.0.0.1 dbname='postgres' -f - -v ON_ERROR_STOP=1' with sql 'CREATE TABLESPACE ts1 LOCATION '/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG'' at /home/pgrunner/bf/root/HEAD/pgsql.build/../pgsql/src/test/perl//PostgresNode.pm line 1246.

so I hypothesize that there's something wrong with TestLib::tempdir on
Windows, but no idea what.

After further staring at that, I think it's some sort of mingw path
weirdness. I notice that the initdb output refers to the PGDATA
directory as

c:/mingw/msys/1.0/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/t_014_unlogged_reinit_main_data/pgdata

and then after that we see "pg_ctl start" succeeding with just

/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/t_014_unlogged_reinit_main_data/pgdata

but this isn't working:

/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_esA3

perhaps because it lacks the "c:/mingw/msys/1.0" prefix.

Still no opinion about how to fix it.

I looked around for other examples but the only ones I could find are in
the pg_basebackup tests (010_pg_basebackup.pl), which exclude these
calls for Windows. I don't have a Windows machine to experiment on.

Michael, any thoughts?

--
-David
david@pgmasters.net

#5Andrew Dunstan
andrew@dunslane.net
In reply to: David Steele (#4)
Re: pgsql: Add tests for reinit.c

On Sat, Mar 17, 2018 at 12:06 AM, David Steele <david@pgmasters.net> wrote:

On 3/15/18 11:51 PM, Tom Lane wrote:

I wrote:

Peter Eisentraut <peter_e@gmx.net> writes:

Add tests for reinit.c

BTW, buildfarm member jacana hasn't succeeded at this test once.
The failures look like

ok 1 - init fork in base exists
ok 2 - main fork in base exists
error running SQL: 'psql:<stdin>:1: ERROR: directory

"/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG"
does not exist'

while running 'psql -XAtq -d port=50531 host=127.0.0.1

dbname='postgres' -f - -v ON_ERROR_STOP=1' with sql 'CREATE TABLESPACE ts1
LOCATION '/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/tmp_check/tmp_test_wBGG''
at /home/pgrunner/bf/root/HEAD/pgsql.build/../pgsql/src/test/perl//PostgresNode.pm
line 1246.

so I hypothesize that there's something wrong with TestLib::tempdir on
Windows, but no idea what.

After further staring at that, I think it's some sort of mingw path
weirdness. I notice that the initdb output refers to the PGDATA
directory as

c:/mingw/msys/1.0/home/pgrunner/bf/root/HEAD/pgsql.

build/src/test/recovery/tmp_check/t_014_unlogged_reinit_main_data/pgdata

and then after that we see "pg_ctl start" succeeding with just

/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/

tmp_check/t_014_unlogged_reinit_main_data/pgdata

but this isn't working:

/home/pgrunner/bf/root/HEAD/pgsql.build/src/test/recovery/

tmp_check/tmp_test_esA3

perhaps because it lacks the "c:/mingw/msys/1.0" prefix.

Still no opinion about how to fix it.

I looked around for other examples but the only ones I could find are in
the pg_basebackup tests (010_pg_basebackup.pl), which exclude these
calls for Windows. I don't have a Windows machine to experiment on.

Michael, any thoughts?

The attached fixes it. We should probably put the function or something
like it in TestLib.pm, though. The call to pwd is quite tricky - it needs
to be done pretty much exactly like this, not quite sure why, but direct
calls to "pwd -W" via system() or backticks don't work, only this indirect
call works on jacana.

cheers

andrew

Attachments:

tap-test-fix.patchapplication/octet-stream; name=tap-test-fix.patchDownload+18-1
#6David Steele
david@pgmasters.net
In reply to: Andrew Dunstan (#5)
Re: pgsql: Add tests for reinit.c

On 3/19/18 4:15 AM, Andrew Dunstan wrote:

The attached fixes it. We should probably put the function or something
like it in TestLib.pm, though. The call to pwd is quite tricky - it
needs to be done pretty much exactly like this, not quite sure why, but
direct calls to "pwd -W" via system() or backticks don't work, only this
indirect call works on jacana.

Thanks for the patch, Andrew!

Peter, would you like me to provide a patch that moves this function to
TestLib.pm? Happy to do it, just don't want patches crossing in the
night, as it were.

Thanks,
--
-David
david@pgmasters.net

#7Andrew Dunstan
andrew@dunslane.net
In reply to: David Steele (#6)
Re: pgsql: Add tests for reinit.c

On Mon, Mar 19, 2018 at 11:33 PM, David Steele <david@pgmasters.net> wrote:

On 3/19/18 4:15 AM, Andrew Dunstan wrote:

The attached fixes it. We should probably put the function or something
like it in TestLib.pm, though. The call to pwd is quite tricky - it
needs to be done pretty much exactly like this, not quite sure why, but
direct calls to "pwd -W" via system() or backticks don't work, only this
indirect call works on jacana.

Thanks for the patch, Andrew!

Peter, would you like me to provide a patch that moves this function to
TestLib.pm? Happy to do it, just don't want patches crossing in the
night, as it were.

I've reworked it and pushed the fix.

cheers

andrew

--
Andrew Dunstan https://www.2ndQuadrant.com
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

#8David Steele
david@pgmasters.net
In reply to: Andrew Dunstan (#7)
Re: pgsql: Add tests for reinit.c

On 3/19/18 5:58 PM, Andrew Dunstan wrote:

On Mon, Mar 19, 2018 at 11:33 PM, David Steele <david@pgmasters.net> wrote:

On 3/19/18 4:15 AM, Andrew Dunstan wrote:

The attached fixes it. We should probably put the function or something
like it in TestLib.pm, though. The call to pwd is quite tricky - it
needs to be done pretty much exactly like this, not quite sure why, but
direct calls to "pwd -W" via system() or backticks don't work, only this
indirect call works on jacana.

Thanks for the patch, Andrew!

Peter, would you like me to provide a patch that moves this function to
TestLib.pm? Happy to do it, just don't want patches crossing in the
night, as it were.

I've reworked it and pushed the fix.

Thanks, Andrew!

--
-David
david@pgmasters.net