Обсуждение: pgsql: Fix bogus loop logic in 013_crash_restart test's pump_untilsubr
Fix bogus loop logic in 013_crash_restart test's pump_until subroutine. The pump_nb() step might've already received the desired data, so we must check for that at the top of the loop not the bottom. Otherwise, the call to pump() will sit with nothing to do until the timeout elapses. pump_until then falls out with apparent success ... but the timeout has been used up, causing the next call of pump_until to report a timeout failure. I believe this explains the intermittent timeout failures we've seen in the buildfarm ever since this test went in. I was able to reproduce the problem on gaur semi-repeatably, and this appears to fix it. In passing, remove a duplicate assignment, fix one stdin-assignment to look like the rest, and document the test's dependency on test_decoding. Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/d11eae09e48694ad6b4139bbb7d7b112833301f5 Modified Files -------------- src/test/recovery/README | 2 ++ src/test/recovery/t/013_crash_restart.pl | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-)
On Mon, Aug 13, 2018 at 10:05 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Fix bogus loop logic in 013_crash_restart test's pump_until subroutine. > > The pump_nb() step might've already received the desired data, so we must > check for that at the top of the loop not the bottom. Otherwise, the > call to pump() will sit with nothing to do until the timeout elapses. > pump_until then falls out with apparent success ... but the timeout has > been used up, causing the next call of pump_until to report a timeout > failure. I believe this explains the intermittent timeout failures > we've seen in the buildfarm ever since this test went in. I was able > to reproduce the problem on gaur semi-repeatably, and this appears to > fix it. Oh, thank you! Occasional failures fitting this description had been vexing me for a while in the cfbot results. -- Thomas Munro http://www.enterprisedb.com