OSDN Git Service

Temporarily disable fsyncing the database directory in CREATE DATABASE
authorGreg Stark <stark@mit.edu>
Mon, 15 Feb 2010 11:40:49 +0000 (11:40 +0000)
committerGreg Stark <stark@mit.edu>
Mon, 15 Feb 2010 11:40:49 +0000 (11:40 +0000)
until we can work out portability issues the build farm uncovered.

In passing avoid fsyncing subdirectories twice.

src/port/copydir.c

index 9b6bb53..f2b150d 100644 (file)
@@ -11,7 +11,7 @@
  *     as a service.
  *
  * 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)
 
        while ((xlde = ReadDir(xldir, fromdir)) != NULL)
        {
+               struct stat fst;
+
                if (strcmp(xlde->d_name, ".") == 0 ||
                        strcmp(xlde->d_name, "..") == 0)
                        continue;
 
                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);
 
+#ifdef NOTYET
        /* It's important to fsync the destination directory itself as
         * individual file fsyncs don't guarantee that the directory entry
         * for the file is synced. Recent versions of ext4 have made the
         * window much wider but it's been true for ext3 and other
-        * filesyetems in the past 
+        * filesystems in the past 
         */
        fsync_fname(todir);
+#endif
 }
 
 /*