Re: BUG #16161: pg_ctl stop fails sometimes (on Windows)
Alexander Law <exclusion@gmail.com>
From: Alexander Lakhin <exclusion@gmail.com>
To: pgsql-bugs@lists.postgresql.org,
PG Bug reporting form <noreply@postgresql.org>
Date: 2019-12-11T20:30:01Z
Lists: pgsql-bugs
Attachments
- sync_pid_ops+test.patch (text/x-patch) patch
- fix_open_for_unlink.patch (text/x-patch) patch
11.12.2019 23:00, PG Bug reporting form wrote: > The following bug has been logged on the website: > > Bug reference: 16161 > Logged by: Alexander Lakhin > Email address: exclusion@gmail.com > PostgreSQL version: 12.1 > Operating system: Windows > Description: > > The regression tests on Windows sometimes fail with 'Permission denied' > errors. For example: > https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=dory&dt=2019-12-11%2007%3A45%3A33 > > ============== shutting down postmaster ============== > pg_ctl: could not open PID file > "c:/pgbuildfarm/pgbuildroot/HEAD/pgsql.build/src/test/regress/./tmp_check/data/postmaster.pid": > Permission denied > > This error occurs when pg_ctl is trying to open postmaster.pid while this > file is in "delete pending" state > (https://stackoverflow.com/questions/3764072/). To reproduce the issue reliably I propose a simple modification to synchronize unlink() with open() and a simple test (sync_pid_ops+test.patch). With the patch applied, `vcregress taptest src/test/restart` fails for me on iteration 47, 6, 7, 42, 51, 26, ... I see two ways to fix the issue: 1) Unlink postmaster.pid using rename operation (adopt the solution from https://stackoverflow.com/questions/3764072/). 2) Ignore such 'Permission denied' error and just try to open the file once again (attached fix_open_for_unlink.patch implements this). I'm inclined to the second approach as pgwin32_open() already handles two transient states (Windows-only), and it could be useful not only for postmaster.pid, but for some other files. Best regards, Alexander
Commits
-
In pgwin32_open, loop after ERROR_ACCESS_DENIED only if we can't stat.
- f1a4020ef3bb 9.4.26 landed
- 35b28d98335e 9.5.21 landed
- b3c4e2418835 11.7 landed
- a69f5697ae13 10.12 landed
- 90281a3a28a7 12.2 landed
- 739201b0e62d 9.6.17 landed
- 5406513e997f 13.0 landed
-
On Windows, wait a little to see if ERROR_ACCESS_DENIED goes away.
- cfb2a4cce37b 9.4.26 landed
- cd03803512bf 9.5.21 landed
- 95f43fee9179 12.2 landed
- 81b052c3173a 10.12 landed
- 6d7547c219ad 13.0 landed
- 65cb25e4fb50 9.6.17 landed
- 2cf51809b1ae 11.7 landed