From: Bryan Green <dbryan.green@gmail.com>
To: pgsql-hackers@lists.postgresql.org
Subject: [PATCH] Avoid uninitialized-value error in poll_query_until timeout diagnostic
Date: Sat, 8 Aug 2026 21:59:57 -0500
Message-ID: <0f515c6d-6032-4c5f-80ac-5c78faae9522@gmail.com> (raw)
Greetings,
PostgreSQL::Test::Cluster::poll_query_until() accepts an undefined query
for connection-only checks -- several recovery TAP tests call it that way:
$node->poll_query_until('postgres', undef, '');
On timeout it builds a diag message that interpolates $query:
diag qq(poll_query_until timed out executing this query:
$query
...);
Cluster.pm runs under "use warnings FATAL => 'all'", so when $query is
undefined this does not warn, it dies with "Use of uninitialized value
$query in concatenation". The result is that a timeout in a connection
only poll fails with an uninitialized-value error instead of printing
the timeout diagnostic the code is trying to produce, hiding the actual
failure.
$ perl -e 'use warnings FATAL => "all"; my $q; my $s = qq(q: $q);'
Use of uninitialized value $q in concatenation (.) or string at -e
line 1.
The fix uses a fallback string when the query is undefined:
my $msg_query = $query // '(undef - connection attempt only)';
and interpolates $msg_query instead. Test-only, one line.
--
Bryan Green
EDB: https://www.enterprisedb.comAttachments:0001-Avoid-uninitialized-value-error-in-poll_query_until-.patch (text/plain, 1.5K) download
From 114ae6240b1f35c31461228cc2af748bdf8813b9 Mon Sep 17 00:00:00 2001
From: Bryan Green <dbryan.green@gmail.com>
Date: Sat, 8 Aug 2026 15:27:42 -0500
Subject: [PATCH] Avoid uninitialized-value error in poll_query_until timeout
diagnostic
PostgreSQL::Test::Cluster::poll_query_until() accepts an undefined query
for connection-only checks; several recovery TAP tests call it as
poll_query_until('postgres', undef, ''). On timeout it interpolates
$query into the diag message, and because Cluster.pm runs under
"use warnings FATAL => 'all'", interpolating the undefined value dies with
"Use of uninitialized value" instead of printing the intended diagnostic,
hiding the actual timeout.
Use a fallback string when the query is undefined.
Co-authored-by: Mark Dilger <mark.dilger@enterprisedb.com>
---
src/test/perl/PostgreSQL/Test/Cluster.pm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/test/perl/PostgreSQL/Test/Cluster.pm b/src/test/perl/PostgreSQL/Test/Cluster.pmindex 3eae4cf628..9fec6b4e42 100644--- a/src/test/perl/PostgreSQL/Test/Cluster.pm+++ b/src/test/perl/PostgreSQL/Test/Cluster.pm@@ -2808,8 +2808,9 @@ sub poll_query_until
# Give up. Print the output from the last attempt, hopefully that's useful
# for debugging.
+ my $msg_query = $query // '(undef - connection attempt only)';
diag qq(poll_query_until timed out executing this query:
-$query+$msg_query
expecting this output:
$expected
last actual query output:
--
2.49.0
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: dbryan.green@gmail.com, pgsql-hackers@lists.postgresql.org
Subject: Re: [PATCH] Avoid uninitialized-value error in poll_query_until timeout diagnostic
In-Reply-To: <0f515c6d-6032-4c5f-80ac-5c78faae9522@gmail.com>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox