Re: ecpg test thread/alloc hangs on sidewinder running NetBSD 9.3 - Mailing list pgsql-hackers

From Alexander Lakhin
Subject Re: ecpg test thread/alloc hangs on sidewinder running NetBSD 9.3
Date
Msg-id a18ca9da-489e-460e-afe8-a5eb3118f818@gmail.com
Whole thread Raw
In response to Re: ecpg test thread/alloc hangs on sidewinder running NetBSD 9.3  (Mikael Kjellström <mikael.kjellstrom@mksoft.nu>)
Responses Re: ecpg test thread/alloc hangs on sidewinder running NetBSD 9.3
List pgsql-hackers
Hello Mikael,

31.08.2025 22:55, Mikael Kjellström wrote:
>
> Yes, I will upgrade that animal to the latest release of NetBSD 10.1 I think.

[ a bit off-topic, but still related to sidewinder ]

I've noticed an interesting failure on sidewinder occurred recently [1]:
#   Failed test 'get an error when running within another function'
#   at t/049_wait_for_lsn.pl line 218.
# Looks like you failed 1 test of 33.
[23:19:49] t/049_wait_for_lsn.pl .................
Dubious, test returned 1 (wstat 256, 0x100)
Failed 1/33 subtests

The corresponding code in the test:
$node_standby->psql(
     'postgres',
     "SELECT pg_wal_replay_wait_wrap('${lsn3}');",
     stderr => \$stderr);
ok( $stderr =~
       /WAIT FOR must be called without an active or registered snapshot/,
     "get an error when running within another function");

But 049_wait_for_lsn_standby.log in fact contains:
2026-02-19 23:19:42.251 CET [7417:4] 049_wait_for_lsn.pl LOG: statement: SELECT pg_wal_replay_wait_wrap('2/570C0FC0');
2026-02-19 23:19:42.252 CET [7417:5] 049_wait_for_lsn.pl ERROR: WAIT FOR must be called without an active or registered

snapshot
2026-02-19 23:19:42.252 CET [7417:6] 049_wait_for_lsn.pl DETAIL: WAIT FOR cannot be executed from a function or 
procedure, nor within a transaction with an isolation level higher than READ COMMITTED.
2026-02-19 23:19:42.252 CET [7417:7] 049_wait_for_lsn.pl CONTEXT: SQL statement "WAIT FOR LSN '2/570C0FC0';"
     PL/pgSQL function pg_wal_replay_wait_wrap(pg_lsn) line 3 at EXECUTE
2026-02-19 23:19:42.252 CET [7417:8] 049_wait_for_lsn.pl STATEMENT: SELECT pg_wal_replay_wait_wrap('2/570C0FC0');
2026-02-19 23:19:42.253 CET [7417:9] 049_wait_for_lsn.pl LOG: disconnection: session time: 0:00:00.005 user=pgbf 
database=postgres host=[local]

That is, the server returned the expected error, but the test didn't
receive it.

I've managed to reproduce this failure locally, on NetBSD 10.1, with the
following modification:
--- a/src/test/recovery/t/049_wait_for_lsn.pl
+++ b/src/test/recovery/t/049_wait_for_lsn.pl
@@ -211,13 +211,20 @@ LANGUAGE plpgsql;
  ]);

  $node_primary->wait_for_catchup($node_standby);
+
+for (my $i=1; $i<=50; $i++)
+{
+my $stdout;
  $node_standby->psql(
         'postgres',
-       "SELECT pg_wal_replay_wait_wrap('${lsn3}');",
+       "SELECT pg_wal_replay_wait_wrap('${lsn3}') /*$i*/;",
+        stdout => \$stdout,
         stderr => \$stderr);
+print("stdout: [$stdout]; stderr: [$stderr]\n");
  ok( $stderr =~
           /WAIT FOR must be called without an active or registered snapshot/,
-       "get an error when running within another function");
+       "get an error when running within another function ($i)");
+}

  # 6. Check parameter validation error cases on standby before promotion
  my $test_lsn =

when running multiple paralled test instances in a loop:
stdout: []; stderr: [psql:<stdin>:1: ERROR:  WAIT FOR must be called without an active or registered snapshot
DETAIL:  WAIT FOR cannot be executed from a function or procedure, nor within a transaction with an isolation level 
higher than READ COMMITTED.
CONTEXT:  SQL statement "WAIT FOR LSN '2/570C0FF8';"
PL/pgSQL function pg_wal_replay_wait_wrap(pg_lsn) line 3 at EXECUTE]
[09:33:27.469](0.062s) ok 25 - get an error when running within another function (14)
stdout: []; stderr: []
[09:33:27.636](0.168s) not ok 26 - get an error when running within another function (15)
[09:33:27.651](0.015s)
[09:33:27.652](0.001s) #   Failed test 'get an error when running within another function (15)'
#   at t/049_wait_for_lsn.pl line 225.
stdout: []; stderr: [psql:<stdin>:1: ERROR:  WAIT FOR must be called without an active or registered snapshot
DETAIL:  WAIT FOR cannot be executed from a function or procedure, nor within a transaction with an isolation level 
higher than READ COMMITTED.
CONTEXT:  SQL statement "WAIT FOR LSN '2/570C0FF8';"
PL/pgSQL function pg_wal_replay_wait_wrap(pg_lsn) line 3 at EXECUTE]

It reminded me of [2]. In my system, I found p5-IPC-Run-20231003.0nb1
installed. So I tried to update it with:
sudo pkg_delete p5-IPC-Run
git clone https://github.com/cpan-authors/IPC-Run.git
(cd IPC-Run*/ && perl Makefile.PL && make && sudo make install)
and it really helped -- no failure reproduced with many more runs. (I can
share my repro if needed.)

So maybe you could consider updating IPC::Run on sidewinder too...

[1]
https://buildfarm.postgresql.org/cgi-bin/show_stage_log.pl?nm=sidewinder&dt=2026-02-19%2021%3A35%3A01&stg=recovery-check
[2] https://www.postgresql.org/message-id/fb666566-32bb-9c36-9c2e-3949b7a061bc%40gmail.com

Best regards,
Alexander



pgsql-hackers by date:

Previous
From: "David G. Johnston"
Date:
Subject: Re: Partial Mode in Aggregate Functions
Next
From: Andrew Dunstan
Date:
Subject: Re: getting "shell command argument contains a newline or carriage return:" error with pg_dumpall when db name have new line in double quote