• Tom Lane's avatar
    Restore robustness of TAP tests that wait for postmaster restart. · f452aaf7
    Tom Lane authored
    Several TAP tests use poll_query_until() to wait for the postmaster
    to restart.  They were checking to see if a trivial query
    (e.g. "SELECT 1") succeeds.  However, that's problematic in the wake
    of commit 11e9caff, because now that we feed said query to psql
    via stdin, we risk IPC::Run whining about a SIGPIPE failure if psql
    quits before reading the query.  Hence, we can't use a nonempty
    query in cases where we need to wait for connection failures to
    stop happening.
    
    Per the precedent of commits c757a3da and 6d41dd04, we can pass
    "undef" as the query in such cases to ensure that IPC::Run has
    nothing to write.  However, then we have to say that the expected
    output is empty, and this exposes a deficiency in poll_query_until:
    if psql fails altogether and returns empty stdout, poll_query_until
    will treat that as a success!  That's because, contrary to its
    documentation, it makes no actual check for psql failure, looking
    neither at the exit status nor at stderr.
    
    To fix that, adjust poll_query_until to insist on empty stderr as
    well as a stdout match.  (I experimented with checking exit status
    instead, but it seems that psql often does exit(1) in cases that we
    need to consider successes.  That might be something to fix someday,
    but it would be a non-back-patchable behavior change.)
    
    Back-patch to v10.  The test cases needing this exist only as far
    back as v11, but it seems wise to keep poll_query_until's behavior
    the same in v10, in case we back-patch another such test case in
    future.  (9.6 does not currently need this change, because in that
    branch poll_query_until can't be told to accept empty stdout as
    a success case.)
    
    Per assorted buildfarm failures, mostly on hoverfly.
    
    Discussion: https://postgr.es/m/CAA4eK1+zM6L4QSA1XMvXY_qqWwdUmqkOS1+hWvL8QcYEBGA1Uw@mail.gmail.com
    f452aaf7
PostgresNode.pm 63.4 KB