• Fujii Masao's avatar
    postgres_fdw: Restructure connection retry logic. · 7fc1a81e
    Fujii Masao authored
    Commit 32a9c0bd introduced connection retry logic into postgres_fdw.
    Previously it used goto statement for retry. This commit gets rid of that
    goto from the logic to make the code simpler and easier-to-read.
    
    When getting out of PG_CATCH() for the retry, the error state should be
    cleaned up and the memory context should be reset. But commit 32a9c0bd
    forgot to do that. This commit also fixes this bug.
    
    Previously only PQstatus()==CONNECTION_BAD was verified to detect
    connection failure. But this could cause false detection in the case where
    any error other than connection failure (e.g., out-of-memory) was thrown
    after a broken connection was detected in libpq and CONNECTION_BAD is set.
    To fix this issue, this commit changes the logic so that it also checks
    the error's sqlstate is ERRCODE_CONNECTION_FAILURE.
    
    Author: Fujii Masao
    Reviewed-by: Tom Lane
    Discussion: https://postgr.es/m/2943611.1602375376@sss.pgh.pa.us
    7fc1a81e
connection.c 40 KB