]> granicus.if.org Git - postgresql/commitdiff
In test_fsync, warn about options without o_direct that are not used by
authorBruce Momjian <bruce@momjian.us>
Sat, 15 Jan 2011 23:27:10 +0000 (18:27 -0500)
committerBruce Momjian <bruce@momjian.us>
Sat, 15 Jan 2011 23:27:43 +0000 (18:27 -0500)
Postgres, and cases where o_direct does not work with certain file systems.

src/tools/fsync/test_fsync.c

index cd2b1f2e39ede286b0d361bb5f9378a15e36bd0a..51d4d81e9ec90b1d92e71769cf3f5c742a89a2d8 100644 (file)
@@ -163,7 +163,8 @@ void
 test_sync(int writes_per_op)
 {
        int                     tmpfile, ops, writes;
-
+       bool            fs_warning = false;
+       
        if (writes_per_op == 1)
                printf("\nCompare file sync methods using one write:\n");
        else
@@ -176,9 +177,17 @@ test_sync(int writes_per_op)
         */
 #ifdef OPEN_DATASYNC_FLAG
        if (writes_per_op == 1)
-               printf(LABEL_FORMAT, "open_datasync 8k write");
+               printf(LABEL_FORMAT, "open_datasync 8k write"
+#if PG_O_DIRECT != 0
+               "**"
+#endif
+               );
        else
-               printf(LABEL_FORMAT, "2 open_datasync 8k writes");
+               printf(LABEL_FORMAT, "2 open_datasync 8k writes"
+#if PG_O_DIRECT != 0
+               "**"
+#endif
+               );
        fflush(stdout);
 
        if ((tmpfile = open(filename, O_RDWR | O_DSYNC, 0)) == -1)
@@ -201,7 +210,10 @@ test_sync(int writes_per_op)
         */
 #if PG_O_DIRECT != 0
        if ((tmpfile = open(filename, O_RDWR | O_DSYNC | PG_O_DIRECT, 0)) == -1)
-               printf(NA_FORMAT, "o_direct", "n/a on this filesystem\n");
+       {
+               printf(NA_FORMAT, "o_direct", "n/a*\n");
+               fs_warning = true;
+       }
        else
        {
                if (writes_per_op == 1)
@@ -321,9 +333,17 @@ test_sync(int writes_per_op)
  */
 #ifdef OPEN_SYNC_FLAG
        if (writes_per_op == 1)
-               printf(LABEL_FORMAT, "open_sync 8k write");
+               printf(LABEL_FORMAT, "open_sync 8k write"
+#if PG_O_DIRECT != 0
+               "**"
+#endif
+               );
        else
-               printf(LABEL_FORMAT, "2 open_sync 8k writes");
+               printf(LABEL_FORMAT, "2 open_sync 8k writes"
+#if PG_O_DIRECT != 0
+               "**"
+#endif
+               );
        fflush(stdout);
 
        if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG, 0)) == -1)
@@ -352,7 +372,10 @@ test_sync(int writes_per_op)
        fflush(stdout);
 
        if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG | PG_O_DIRECT, 0)) == -1)
-               printf(NA_FORMAT, "o_direct", "n/a on this filesystem\n");
+       {
+               printf(NA_FORMAT, "o_direct", "n/a*\n");
+               fs_warning = true;
+       }
        else
        {
                gettimeofday(&start_t, NULL);
@@ -375,6 +398,17 @@ test_sync(int writes_per_op)
 #else
        printf(NA_FORMAT, "open_sync", "n/a\n");
 #endif
+
+       if (fs_warning)
+       {
+               printf("* This file system and its mount options do not support direct\n");
+               printf("I/O, e.g. ext4 in journaled mode.\n");
+       }
+
+#if defined(OPEN_DATASYNC_FLAG) || defined(OPEN_SYNC_FLAG)
+       if (PG_O_DIRECT != 0)
+               printf("** This non-direct I/O option is not used by Postgres.\n");
+#endif
 }
 
 void
@@ -389,6 +423,8 @@ test_open_syncs(void)
        printf("(This is designed to compare the cost of one large\n");
        printf("sync'ed write and two smaller sync'ed writes.)\n");
 
+       /* XXX no PG_O_DIRECT */
+
 /*
  * Test open_sync with different size files
  */