Re: BUG #16161: pg_ctl stop fails sometimes (on Windows)
Tom Lane <tgl@sss.pgh.pa.us>
From: Tom Lane <tgl@sss.pgh.pa.us>
To: Alexander Lakhin <exclusion@gmail.com>
Cc: pgsql-bugs@lists.postgresql.org
Date: 2019-12-15T21:26:40Z
Lists: pgsql-bugs
Alexander Lakhin <exclusion@gmail.com> writes: >> 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 > 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. Agreed that (2) seems like the way to go. However, I'm not too pleased with the patch as given, because it is gratuitously different in almost every possible way from the adjacent code that's doing just about the same thing for those other transient failures. Why is the timeout duration different? Why is the looping logic not identical? Why did you make a different decision about whether logging might be a good idea? Actually, why didn't you just extend the existing if-block to also cover this case? Maybe there's good reasons to be different, but you didn't explain them. I'm also not that excited about memorializing a stackoverflow discussion as the reason to do something. Can we point to something in Microsoft's official docs? regards, tom lane
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