Обсуждение: Should program exit, When close() failed for O_RDONLY mode
Hi, I find that most of the code does not check the return value of close(), When open a file for reading(O_RDONLY). But I find that it checks the return value of close() in code "src/bin/pg_rewind/copy_fetch.c" When open a file for reading(O_RDONLY). And it will call pg_fatal to cause premature exit. I think that when closing a read-only file fails, it shouid not exit the program early.It should ensure that the programexecution is completed. Like below: ・src/bin/pg_rewind/copy_fetch.c before -------------------------- rewind_copy_file_range { ... if (close(srcfd) != 0) pg_fatal("could not close file \"%s\": %m", srcpath); } -------------------------- after -------------------------- rewind_copy_file_range { ... close(srcfd); } -------------------------- Regards, -- Lin
On Tue, Apr 14, 2020 at 02:32:40AM +0000, Lin, Cuiping wrote: > I find that most of the code does not check the return value of close(), When open a file for reading(O_RDONLY). > > But I find that it checks the return value of close() in code "src/bin/pg_rewind/copy_fetch.c" When open a file for reading(O_RDONLY). I think ignoring the return value is a superior style. It is less code, and failure "can't happen." > And it will call pg_fatal to cause premature exit. > > I think that when closing a read-only file fails, it shouid not exit the program early.It should ensure that the programexecution is completed. I would not say that. If close() does fail, something is badly wrong in the program or the system running it. Though I opt not to check the return value, if one does check it, exiting is a suitable response.
On Sun, May 03, 2020 at 10:18:27AM -0700, Noah Misch wrote: > I would not say that. If close() does fail, something is badly wrong in the > program or the system running it. Though I opt not to check the return value, > if one does check it, exiting is a suitable response. FWIW, it seems to me that we have an argument for copy_fetch.c that it can be an advantage to know if something wrong is going on beforehand: let's remember that after running pg_rewind, the target will be started to replay up to its consistent point. -- Michael