diff --git a/contrib/Makefile b/contrib/Makefile index 5747bcc6ad5..76fa2a65769 100644 --- a/contrib/Makefile +++ b/contrib/Makefile @@ -33,6 +33,7 @@ SUBDIRS = \ pg_freespacemap \ pg_standby \ pg_stat_statements \ + pg_test_fsync \ pg_trgm \ pg_upgrade \ pg_upgrade_support \ diff --git a/contrib/README b/contrib/README index 6c5b7d57b2e..fdc5dc11e64 100644 --- a/contrib/README +++ b/contrib/README @@ -30,7 +30,7 @@ adminpack - auth_delay Add a short delay after a failed authentication attempt, to make - brute-force attacks on database passwords a bit harder. + brute-force attacks on database passwords a bit harder. by KaiGai Kohei auto_explain - @@ -71,7 +71,7 @@ dict_xsyn - earthdistance - Functions for computing distances between two points on Earth - by Bruno Wolff III and Hal Snyder + by Bruno Wolff III and Hal Snyder fuzzystrmatch - Levenshtein, metaphone, and soundex fuzzy string matching @@ -129,6 +129,10 @@ pg_stat_statements - Track statement execution times across a whole database cluster by Takahiro Itagaki +pg_test_fsync - + Test different wal_sync_method settings + by Bruce Momjian + pg_trgm - Functions for determining the similarity of text based on trigram matching. diff --git a/contrib/pg_test_fsync/.gitignore b/contrib/pg_test_fsync/.gitignore new file mode 100644 index 00000000000..f3b59324985 --- /dev/null +++ b/contrib/pg_test_fsync/.gitignore @@ -0,0 +1 @@ +/pg_test_fsync diff --git a/contrib/pg_test_fsync/Makefile b/contrib/pg_test_fsync/Makefile index 22622a19493..a9365667b39 100644 --- a/contrib/pg_test_fsync/Makefile +++ b/contrib/pg_test_fsync/Makefile @@ -1,22 +1,20 @@ # -# Makefile for test_fsync +# Makefile for pg_test_fsync # -# contrib/test_fsync/Makefile +# contrib/pg_test_fsync/Makefile -PGFILEDESC = "test_fsync - test various disk sync methods" +PGFILEDESC = "pg_test_fsync - test various disk sync methods" PGAPPICON = win32 -PROGRAM = test_fsync -OBJS = test_fsync.o - -PG_LIBS = $(libpq_pgport) +PROGRAM = pg_test_fsync +OBJS = pg_test_fsync.o ifdef USE_PGXS PG_CONFIG = pg_config PGXS := $(shell $(PG_CONFIG) --pgxs) include $(PGXS) else -subdir = contrib/test_fsync +subdir = contrib/pg_test_fsync top_builddir = ../.. include $(top_builddir)/src/Makefile.global include $(top_srcdir)/contrib/contrib-global.mk diff --git a/contrib/pg_test_fsync/test_fsync.c b/contrib/pg_test_fsync/pg_test_fsync.c similarity index 95% rename from contrib/pg_test_fsync/test_fsync.c rename to contrib/pg_test_fsync/pg_test_fsync.c index 59aefa405ca..33095979070 100644 --- a/contrib/pg_test_fsync/test_fsync.c +++ b/contrib/pg_test_fsync/pg_test_fsync.c @@ -1,31 +1,27 @@ /* - * test_fsync.c + * pg_test_fsync.c * tests all supported fsync() methods */ #include "postgres.h" +#include +#include +#include +#include +#include + #include "getopt_long.h" #include "access/xlog_internal.h" #include "access/xlog.h" #include "access/xlogdefs.h" -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* +/* * put the temp files in the local directory - * unless the user specifies otherwise + * unless the user specifies otherwise */ -#define FSYNC_FILENAME "./test_fsync.out" +#define FSYNC_FILENAME "./pg_test_fsync.out" #define WRITE_SIZE (8 * 1024) /* 8k */ @@ -54,23 +50,23 @@ int main(int argc, char *argv[]) { handle_args(argc, argv); - + prepare_buf(); test_open(); - + /* Test using 1 8k write */ test_sync(1); /* Test using 2 8k writes */ test_sync(2); - + test_open_syncs(); test_file_descriptor_sync(); - + test_non_sync(); - + unlink(filename); return 0; @@ -92,12 +88,12 @@ handle_args(int argc, char *argv[]) if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 || strcmp(argv[1], "-?") == 0) { - fprintf(stderr, "test_fsync [-f filename] [ops-per-test]\n"); + fprintf(stderr, "pg_test_fsync [-f filename] [ops-per-test]\n"); exit(0); } if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0) { - fprintf(stderr,"test_fsync " PG_VERSION "\n"); + fprintf(stderr,"pg_test_fsync " PG_VERSION "\n"); exit(0); } } @@ -114,11 +110,11 @@ handle_args(int argc, char *argv[]) case 'o': ops_per_test = atoi(optarg); break; - + default: fprintf(stderr, "Try \"%s --help\" for more information.\n", - "test_fsync"); + "pg_test_fsync"); exit(1); break; } @@ -144,8 +140,8 @@ test_open(void) { int tmpfile; - /* - * test if we can open the target file + /* + * test if we can open the target file */ if ((tmpfile = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) == -1) die("Cannot open output file."); @@ -164,7 +160,7 @@ 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 8k write:\n"); else @@ -279,10 +275,10 @@ test_sync(int writes_per_op) gettimeofday(&stop_t, NULL); close(tmpfile); print_elapse(start_t, stop_t); - + /* * If fsync_writethrough is available, test as well - */ + */ #ifdef HAVE_FSYNC_WRITETHROUGH printf(LABEL_FORMAT, "fsync_writethrough"); fflush(stdout); @@ -422,7 +418,7 @@ test_open_sync(const char *msg, int writes_size) close(tmpfile); print_elapse(start_t, stop_t); } - + #else printf(NA_FORMAT, "open_sync", "n/a\n"); #endif @@ -444,8 +440,8 @@ test_file_descriptor_sync(void) printf("(If the times are similar, fsync() can sync data written\n"); printf("on a different descriptor.)\n"); - /* - * first write, fsync and close, which is the + /* + * first write, fsync and close, which is the * normal behavior without multiple descriptors */ printf(LABEL_FORMAT, "write, fsync, close"); @@ -477,8 +473,8 @@ test_file_descriptor_sync(void) * This simulates processes fsyncing each other's * writes. */ - printf(LABEL_FORMAT, "write, close, fsync"); - fflush(stdout); + printf(LABEL_FORMAT, "write, close, fsync"); + fflush(stdout); gettimeofday(&start_t, NULL); for (ops = 0; ops < ops_per_test; ops++) @@ -525,7 +521,7 @@ test_non_sync(void) print_elapse(start_t, stop_t); } -/* +/* * print out the writes per second for tests */ void diff --git a/doc/src/sgml/pgtestfsync.sgml b/doc/src/sgml/pgtestfsync.sgml index d5358a95e4b..5ad7b73ed0b 100644 --- a/doc/src/sgml/pgtestfsync.sgml +++ b/doc/src/sgml/pgtestfsync.sgml @@ -40,7 +40,7 @@ pg_test_fsync [options] This file should be in the same file system that the pg_xlog directory is or will be placed in. (pg_xlog contains the WAL files.) - The default is test_fsync.out in the current + The default is pg_test_fsync.out in the current directory.