Thread: Question about 001_stream_rep.pl recovery test

Question about 001_stream_rep.pl recovery test

From
David Zhang
Date:
Hi Hackers,

Inside the test script `src/test/recovery/t/001_stream_rep.pl`, a 
comment at line 30 says `my_backup` is "not mandatory",

  30 # Take backup of standby 1 (not mandatory, but useful to check if
  31 # pg_basebackup works on a standby).
  32 $node_standby_1->backup($backup_name);

however if remove the backup folder "my_backup" after line 32, something 
like below,

  33 system_or_bail('rm', '-rf', 
'/home/user/postgres/src/test/recovery/tmp_check/t_001_stream_rep_standby_1_data/backup/my_backup');

then the test failed with message like,

recovery$ make check PROVE_TESTS='t/001_stream_rep.pl'
t/001_stream_rep.pl .. # Looks like your test exited with 2 before it 
could output anything.
t/001_stream_rep.pl .. Dubious, test returned 2 (wstat 512, 0x200)
Failed 53/53 subtests
... ...
Result: FAIL
Makefile:23: recipe for target 'check' failed
make: *** [check] Error 1

And then the test script takes another backup `my_backup_2`, but it 
seems this backup is not used anywhere.

  35 # Take a second backup of the standby while the primary is offline.
  36 $node_primary->stop;
  37 $node_standby_1->backup('my_backup_2');
  38 $node_primary->start;

because, if I deleted the backup "my_backup_2" right after line 38 with 
something like below,

39 system_or_bail('rm', '-rf', 
'/home/user/postgres/src/test/recovery/tmp_check/t_001_stream_rep_standby_1_data/backup/my_backup_2');
there is no impact on the test result, and it says all test cases passed.

recovery$ make check PROVE_TESTS='t/001_stream_rep.pl'
...
t/001_stream_rep.pl .. ok
All tests successful.
Files=1, Tests=53,  6 wallclock secs ( 0.01 usr  0.01 sys + 1.00 cusr  
0.82 csys =  1.84 CPU)
Result: PASS

Did I misunderstand something here?

Thank you,

-- 
David

Software Engineer
Highgo Software Inc. (Canada)
www.highgo.ca



Re: Question about 001_stream_rep.pl recovery test

From
Michael Paquier
Date:
On Fri, Dec 10, 2021 at 01:44:40PM -0800, David Zhang wrote:
> Inside the test script `src/test/recovery/t/001_stream_rep.pl`, a comment at
> line 30 says `my_backup` is "not mandatory",
>
>  30 # Take backup of standby 1 (not mandatory, but useful to check if
>  31 # pg_basebackup works on a standby).
>  32 $node_standby_1->backup($backup_name);
>
> however if remove the backup folder "my_backup" after line 32, something
> like below,

Well, the comment is not completely incorrect IMO.  In this context, I
read taht that we don't need a backup from a standby and we could just
take a backup from the primary instead.  If I were to fix something, I
would suggest to reword the comment as follows:
# Take backup of standby 1 (could be taken from the primary, but this
# is useful to check if pg_basebackup works on a standby).

> And then the test script takes another backup `my_backup_2`, but it seems
> this backup is not used anywhere.

This had better stay around, per commit f267c1c.  And as far as I can
see, we don't have an equivalent test in a different place, where
pg_basebackup runs on a standby while its *primary* is stopped.
--
Michael

Attachment

Re: Question about 001_stream_rep.pl recovery test

From
David Zhang
Date:
Thanks a lot Michael for the explanation.

On 2021-12-13 4:05 a.m., Michael Paquier wrote:
> On Fri, Dec 10, 2021 at 01:44:40PM -0800, David Zhang wrote:
>> Inside the test script `src/test/recovery/t/001_stream_rep.pl`, a comment at
>> line 30 says `my_backup` is "not mandatory",
>>
>>   30 # Take backup of standby 1 (not mandatory, but useful to check if
>>   31 # pg_basebackup works on a standby).
>>   32 $node_standby_1->backup($backup_name);
>>
>> however if remove the backup folder "my_backup" after line 32, something
>> like below,
> Well, the comment is not completely incorrect IMO.  In this context, I
> read taht that we don't need a backup from a standby and we could just
> take a backup from the primary instead.  If I were to fix something, I
> would suggest to reword the comment as follows:
> # Take backup of standby 1 (could be taken from the primary, but this
> # is useful to check if pg_basebackup works on a standby).
>
>> And then the test script takes another backup `my_backup_2`, but it seems
>> this backup is not used anywhere.
> This had better stay around, per commit f267c1c.  And as far as I can
> see, we don't have an equivalent test in a different place, where
> pg_basebackup runs on a standby while its *primary* is stopped.
> --
> Michael
-- 
David

Software Engineer
Highgo Software Inc. (Canada)
www.highgo.ca