Skip to content
Snippets Groups Projects
Commit 68cfc75a authored by Greg Stark's avatar Greg Stark
Browse files

Temporarily disable fsyncing the database directory in CREATE DATABASE

until we can work out portability issues the build farm uncovered.

In passing avoid fsyncing subdirectories twice.
parent bec81039
No related branches found
No related tags found
No related merge requests found
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* as a service. * as a service.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/port/copydir.c,v 1.27 2010/02/15 04:05:06 itagaki Exp $ * $PostgreSQL: pgsql/src/port/copydir.c,v 1.28 2010/02/15 11:40:49 stark Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -101,22 +101,36 @@ copydir(char *fromdir, char *todir, bool recurse) ...@@ -101,22 +101,36 @@ copydir(char *fromdir, char *todir, bool recurse)
while ((xlde = ReadDir(xldir, fromdir)) != NULL) while ((xlde = ReadDir(xldir, fromdir)) != NULL)
{ {
struct stat fst;
if (strcmp(xlde->d_name, ".") == 0 || if (strcmp(xlde->d_name, ".") == 0 ||
strcmp(xlde->d_name, "..") == 0) strcmp(xlde->d_name, "..") == 0)
continue; continue;
snprintf(tofile, MAXPGPATH, "%s/%s", todir, xlde->d_name); snprintf(tofile, MAXPGPATH, "%s/%s", todir, xlde->d_name);
fsync_fname(tofile);
/* We don't need to sync directories here since the recursive
* copydir will do it before it returns */
if (lstat(fromfile, &fst) < 0)
ereport(ERROR,
(errcode_for_file_access(),
errmsg("could not stat file \"%s\": %m", fromfile)));
if (S_ISREG(fst.st_mode))
{
fsync_fname(tofile);
}
} }
FreeDir(xldir); FreeDir(xldir);
#ifdef NOTYET
/* It's important to fsync the destination directory itself as /* It's important to fsync the destination directory itself as
* individual file fsyncs don't guarantee that the directory entry * individual file fsyncs don't guarantee that the directory entry
* for the file is synced. Recent versions of ext4 have made the * for the file is synced. Recent versions of ext4 have made the
* window much wider but it's been true for ext3 and other * window much wider but it's been true for ext3 and other
* filesyetems in the past * filesystems in the past
*/ */
fsync_fname(todir); fsync_fname(todir);
#endif
} }
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment