On Thu, Jan 7, 2016 at 4:21 PM, Andres Freund <and...@anarazel.de> wrote: > > On 2016-01-07 11:27:13 +0100, Fabien COELHO wrote: > > I read your patch and I know what I want to try to have a small and simple > > fix. I must admit that I have not really understood in which condition the > > checkpointer would decide to close a file, but that does not mean that the > > potential issue should not be addressed. > > There's a trivial example: Consider three tablespaces and > max_files_per_process = 2. The balancing can easily cause three files > being flushed at the same time. >
Won't the same thing can occur without patch in mdsync() and can't we handle it in same way? In particular, I am referring to below code: mdsync() { .. /* * It is possible that the relation has been dropped or * truncated since the fsync request was entered. * Therefore, allow ENOENT, but only if we didn't fail * already on this file. This applies both for * _mdfd_getseg() and for FileSync, since fd.c might have * closed the file behind our back. * * XXX is there any point in allowing more than one retry? * Don't see one at the moment, but easy to change the * test here if so. */ if (!FILE_POSSIBLY_DELETED(errno) || failures > 0) ereport(ERROR, (errcode_for_file_access(), errmsg("could not fsync file \"%s\": %m", path))); else ereport(DEBUG1, (errcode_for_file_access(), errmsg("could not fsync file \"%s\" but retrying: %m", path))); } With Regards, Amit Kapila. EnterpriseDB: http://www.enterprisedb.com