pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
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.com

Attachments:

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.pm index 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

view thread (3+ messages)  latest in thread

Message-ID: <0f515c6d-6032-4c5f-80ac-5c78faae9522@gmail.com>
Permalink:  ../0f515c6d-6032-4c5f-80ac-5c78faae9522@gmail.com/
Also on:    postgresql.org/message-id/0f515c6d-6032-4c5f-80ac-5c78faae9522@gmail.com

 ·  · 

reply

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