Header And Logo

PostgreSQL
| The world's most advanced open source database.

Defines | Functions | Variables

pg_test_fsync.c File Reference

#include "postgres_fe.h"
#include <sys/stat.h>
#include <sys/time.h>
#include <unistd.h>
#include <signal.h>
#include "getopt_long.h"
#include "access/xlogdefs.h"
Include dependency graph for pg_test_fsync.c:

Go to the source code of this file.

Defines

#define FSYNC_FILENAME   "./pg_test_fsync.out"
#define XLOG_BLCKSZ_K   (XLOG_BLCKSZ / 1024)
#define LABEL_FORMAT   " %-32s"
#define NA_FORMAT   "%18s"
#define OPS_FORMAT   "%9.3f ops/sec %6.0f usecs/op"
#define USECS_SEC   1000000
#define START_TIMER
#define STOP_TIMER

Functions

static void handle_args (int argc, char *argv[])
static void prepare_buf (void)
static void test_open (void)
static void test_non_sync (void)
static void test_sync (int writes_per_op)
static void test_open_syncs (void)
static void test_open_sync (const char *msg, int writes_size)
static void test_file_descriptor_sync (void)
static void process_alarm (int sig)
static void signal_cleanup (int sig)
static void print_elapse (struct timeval start_t, struct timeval stop_t, int ops)
static void die (const char *str)
int main (int argc, char *argv[])

Variables

static const char * progname
static int secs_per_test = 5
static int needs_unlink = 0
static char full_buf [XLOG_SEG_SIZE]
static char * buf
static char * filename = FSYNC_FILENAME
static struct timeval start_t stop_t
static bool alarm_triggered = false

Define Documentation

#define FSYNC_FILENAME   "./pg_test_fsync.out"

Definition at line 22 of file pg_test_fsync.c.

#define LABEL_FORMAT   " %-32s"
#define NA_FORMAT   "%18s"

Definition at line 27 of file pg_test_fsync.c.

Referenced by test_open_sync(), and test_sync().

#define OPS_FORMAT   "%9.3f ops/sec %6.0f usecs/op"

Definition at line 28 of file pg_test_fsync.c.

Referenced by print_elapse().

#define START_TIMER
Value:
do { \
    alarm_triggered = false; \
    alarm(secs_per_test); \
    gettimeofday(&start_t, NULL); \
} while (0)

Definition at line 33 of file pg_test_fsync.c.

#define STOP_TIMER
Value:
do { \
    gettimeofday(&stop_t, NULL); \
    print_elapse(start_t, stop_t, ops); \
} while (0)

Definition at line 54 of file pg_test_fsync.c.

#define USECS_SEC   1000000

Definition at line 29 of file pg_test_fsync.c.

Referenced by print_elapse().

#define XLOG_BLCKSZ_K   (XLOG_BLCKSZ / 1024)

Definition at line 24 of file pg_test_fsync.c.

Referenced by test_non_sync(), and test_sync().


Function Documentation

static void die ( const char *  str  )  [static]

Definition at line 596 of file pg_test_fsync.c.

References strerror().

Referenced by AutoVacWorkerMain(), bootstrap_signals(), PostgresMain(), test_file_descriptor_sync(), test_non_sync(), test_open(), test_open_sync(), test_sync(), and WalSndSignals().

{
    fprintf(stderr, "%s: %s\n", str, strerror(errno));
    exit(1);
}

static void handle_args ( int  argc,
char *  argv[] 
) [static]

Definition at line 136 of file pg_test_fsync.c.

References filename, getopt_long(), optarg, optind, progname, and secs_per_test.

Referenced by main().

{
    static struct option long_options[] = {
        {"filename", required_argument, NULL, 'f'},
        {"secs-per-test", required_argument, NULL, 's'},
        {NULL, 0, NULL, 0}
    };

    int         option;         /* Command line option */
    int         optindex = 0;   /* used by getopt_long */

    if (argc > 1)
    {
        if (strcmp(argv[1], "--help") == 0 || strcmp(argv[1], "-h") == 0 ||
            strcmp(argv[1], "-?") == 0)
        {
            printf("Usage: %s [-f FILENAME] [-s SECS-PER-TEST]\n", progname);
            exit(0);
        }
        if (strcmp(argv[1], "--version") == 0 || strcmp(argv[1], "-V") == 0)
        {
            puts("pg_test_fsync (PostgreSQL) " PG_VERSION);
            exit(0);
        }
    }

    while ((option = getopt_long(argc, argv, "f:s:",
                                 long_options, &optindex)) != -1)
    {
        switch (option)
        {
            case 'f':
                filename = strdup(optarg);
                break;

            case 's':
                secs_per_test = atoi(optarg);
                break;

            default:
                fprintf(stderr, "Try \"%s --help\" for more information.\n",
                        progname);
                exit(1);
                break;
        }
    }

    if (argc > optind)
    {
        fprintf(stderr,
                "%s: too many command-line arguments (first is \"%s\")\n",
                progname, argv[optind]);
        fprintf(stderr, "Try \"%s --help\" for more information.\n",
                progname);
        exit(1);
    }

    printf("%d seconds per test\n", secs_per_test);
#if PG_O_DIRECT != 0
    printf("O_DIRECT supported on this platform for open_datasync and open_sync.\n");
#else
    printf("Direct I/O is not supported on this platform.\n");
#endif
}

int main ( int  argc,
char *  argv[] 
)

Definition at line 97 of file pg_test_fsync.c.

References filename, get_progname(), handle_args(), pqsignal(), prepare_buf(), process_alarm(), progname, SIGALRM, SIGHUP, signal_cleanup(), test_file_descriptor_sync(), test_non_sync(), test_open(), test_open_syncs(), test_sync(), and unlink().

{
    progname = get_progname(argv[0]);

    handle_args(argc, argv);

    /* Prevent leaving behind the test file */
    pqsignal(SIGINT, signal_cleanup);
    pqsignal(SIGTERM, signal_cleanup);
#ifndef WIN32
    pqsignal(SIGALRM, process_alarm);
#endif
#ifdef SIGHUP
    /* Not defined on win32 */
    pqsignal(SIGHUP, signal_cleanup);
#endif

    prepare_buf();

    test_open();

    /* Test using 1 XLOG_BLCKSZ write */
    test_sync(1);

    /* Test using 2 XLOG_BLCKSZ writes */
    test_sync(2);

    test_open_syncs();

    test_file_descriptor_sync();

    test_non_sync();

    unlink(filename);

    return 0;
}

static void prepare_buf ( void   )  [static]

Definition at line 202 of file pg_test_fsync.c.

References ALIGNOF_XLOG_BUFFER, buf, full_buf, random(), and TYPEALIGN.

Referenced by main().

{
    int         ops;

    /* write random data into buffer */
    for (ops = 0; ops < XLOG_SEG_SIZE; ops++)
        full_buf[ops] = random();

    buf = (char *) TYPEALIGN(ALIGNOF_XLOG_BUFFER, full_buf);
}

static void print_elapse ( struct timeval  start_t,
struct timeval  stop_t,
int  ops 
) [static]

Definition at line 568 of file pg_test_fsync.c.

References OPS_FORMAT, and USECS_SEC.

{
    double      total_time = (stop_t.tv_sec - start_t.tv_sec) +
    (stop_t.tv_usec - start_t.tv_usec) * 0.000001;
    double      per_second = ops / total_time;
    double      avg_op_time_us = (total_time / ops) * USECS_SEC;

    printf(OPS_FORMAT "\n", per_second, avg_op_time_us);
}

static void process_alarm ( int  sig  )  [static]

Definition at line 580 of file pg_test_fsync.c.

References alarm_triggered.

Referenced by main().

{
    alarm_triggered = true;
}

static void signal_cleanup ( int  sig  )  [static]

Definition at line 538 of file pg_test_fsync.c.

References filename, needs_unlink, and unlink().

Referenced by main().

{
    /* Delete the file if it exists. Ignore errors */
    if (needs_unlink)
        unlink(filename);
    /* Finish incomplete line on stdout */
    puts("");
    exit(signum);
}

static void test_file_descriptor_sync ( void   )  [static]

Definition at line 444 of file pg_test_fsync.c.

References alarm_triggered, buf, close, die(), filename, fsync, LABEL_FORMAT, and write.

Referenced by main().

{
    int         tmpfile,
                ops;

    /*
     * Test whether fsync can sync data written on a different descriptor for
     * the same file.  This checks the efficiency of multi-process fsyncs
     * against the same file. Possibly this should be done with writethrough
     * on platforms which support it.
     */
    printf("\nTest if fsync on non-write file descriptor is honored:\n");
    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 normal behavior without
     * multiple descriptors
     */
    printf(LABEL_FORMAT, "write, fsync, close");
    fflush(stdout);

    START_TIMER;
    for (ops = 0; alarm_triggered == false; ops++)
    {
        if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
            die("could not open output file");
        if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
            die("write failed");
        if (fsync(tmpfile) != 0)
            die("fsync failed");
        close(tmpfile);

        /*
         * open and close the file again to be consistent with the following
         * test
         */
        if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
            die("could not open output file");
        close(tmpfile);
    }
    STOP_TIMER;

    /*
     * Now open, write, close, open again and fsync This simulates processes
     * fsyncing each other's writes.
     */
    printf(LABEL_FORMAT, "write, close, fsync");
    fflush(stdout);

    START_TIMER;
    for (ops = 0; alarm_triggered == false; ops++)
    {
        if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
            die("could not open output file");
        if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
            die("write failed");
        close(tmpfile);
        /* reopen file */
        if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
            die("could not open output file");
        if (fsync(tmpfile) != 0)
            die("fsync failed");
        close(tmpfile);
    }
    STOP_TIMER;
}

static void test_non_sync ( void   )  [static]

Definition at line 513 of file pg_test_fsync.c.

References alarm_triggered, buf, close, die(), filename, LABEL_FORMAT, write, and XLOG_BLCKSZ_K.

Referenced by main().

{
    int         tmpfile,
                ops;

    /*
     * Test a simple write without fsync
     */
    printf("\nNon-Sync'ed %dkB writes:\n", XLOG_BLCKSZ_K);
    printf(LABEL_FORMAT, "write");
    fflush(stdout);

    START_TIMER;
    for (ops = 0; alarm_triggered == false; ops++)
    {
        if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
            die("could not open output file");
        if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
            die("write failed");
        close(tmpfile);
    }
    STOP_TIMER;
}

static void test_open ( void   )  [static]

Definition at line 214 of file pg_test_fsync.c.

References close, die(), filename, fsync, full_buf, needs_unlink, and write.

Referenced by main().

{
    int         tmpfile;

    /*
     * test if we can open the target file
     */
    if ((tmpfile = open(filename, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR)) == -1)
        die("could not open output file");
    needs_unlink = 1;
    if (write(tmpfile, full_buf, XLOG_SEG_SIZE) != XLOG_SEG_SIZE)
        die("write failed");

    /* fsync now so that dirty buffers don't skew later tests */
    if (fsync(tmpfile) != 0)
        die("fsync failed");

    close(tmpfile);
}

static void test_open_sync ( const char *  msg,
int  writes_size 
) [static]

Definition at line 409 of file pg_test_fsync.c.

References alarm_triggered, buf, close, die(), filename, LABEL_FORMAT, NA_FORMAT, PG_O_DIRECT, and write.

Referenced by test_open_syncs().

{
#ifdef OPEN_SYNC_FLAG
    int         tmpfile,
                ops,
                writes;
#endif

    printf(LABEL_FORMAT, msg);
    fflush(stdout);

#ifdef OPEN_SYNC_FLAG
    if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG | PG_O_DIRECT, 0)) == -1)
        printf(NA_FORMAT, "n/a*\n");
    else
    {
        START_TIMER;
        for (ops = 0; alarm_triggered == false; ops++)
        {
            for (writes = 0; writes < 16 / writes_size; writes++)
                if (write(tmpfile, buf, writes_size * 1024) !=
                    writes_size * 1024)
                    die("write failed");
            if (lseek(tmpfile, 0, SEEK_SET) == -1)
                die("seek failed");
        }
        STOP_TIMER;
        close(tmpfile);
    }
#else
    printf(NA_FORMAT, "n/a\n");
#endif
}

static void test_open_syncs ( void   )  [static]

Definition at line 392 of file pg_test_fsync.c.

References test_open_sync().

Referenced by main().

{
    printf("\nCompare open_sync with different write sizes:\n");
    printf("(This is designed to compare the cost of writing 16kB\n");
    printf("in different write open_sync sizes.)\n");

    test_open_sync(" 1 * 16kB open_sync write", 16);
    test_open_sync(" 2 *  8kB open_sync writes", 8);
    test_open_sync(" 4 *  4kB open_sync writes", 4);
    test_open_sync(" 8 *  2kB open_sync writes", 2);
    test_open_sync("16 *  1kB open_sync writes", 1);
}

static void test_sync ( int  writes_per_op  )  [static]

Definition at line 235 of file pg_test_fsync.c.

References alarm_triggered, buf, close, die(), filename, fsync, LABEL_FORMAT, NA_FORMAT, O_DSYNC, pg_fsync_writethrough(), PG_O_DIRECT, write, and XLOG_BLCKSZ_K.

Referenced by main().

{
    int         tmpfile,
                ops,
                writes;
    bool        fs_warning = false;

    if (writes_per_op == 1)
        printf("\nCompare file sync methods using one %dkB write:\n", XLOG_BLCKSZ_K);
    else
        printf("\nCompare file sync methods using two %dkB writes:\n", XLOG_BLCKSZ_K);
    printf("(in wal_sync_method preference order, except fdatasync\n");
    printf("is Linux's default)\n");

    /*
     * Test open_datasync if available
     */
    printf(LABEL_FORMAT, "open_datasync");
    fflush(stdout);

#ifdef OPEN_DATASYNC_FLAG
    if ((tmpfile = open(filename, O_RDWR | O_DSYNC | PG_O_DIRECT, 0)) == -1)
    {
        printf(NA_FORMAT, "n/a*\n");
        fs_warning = true;
    }
    else
    {
        if ((tmpfile = open(filename, O_RDWR | O_DSYNC | PG_O_DIRECT, 0)) == -1)
            die("could not open output file");
        START_TIMER;
        for (ops = 0; alarm_triggered == false; ops++)
        {
            for (writes = 0; writes < writes_per_op; writes++)
                if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
                    die("write failed");
            if (lseek(tmpfile, 0, SEEK_SET) == -1)
                die("seek failed");
        }
        STOP_TIMER;
        close(tmpfile);
    }
#else
    printf(NA_FORMAT, "n/a\n");
#endif

/*
 * Test fdatasync if available
 */
    printf(LABEL_FORMAT, "fdatasync");
    fflush(stdout);

#ifdef HAVE_FDATASYNC
    if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
        die("could not open output file");
    START_TIMER;
    for (ops = 0; alarm_triggered == false; ops++)
    {
        for (writes = 0; writes < writes_per_op; writes++)
            if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
                die("write failed");
        fdatasync(tmpfile);
        if (lseek(tmpfile, 0, SEEK_SET) == -1)
            die("seek failed");
    }
    STOP_TIMER;
    close(tmpfile);
#else
    printf(NA_FORMAT, "n/a\n");
#endif

/*
 * Test fsync
 */
    printf(LABEL_FORMAT, "fsync");
    fflush(stdout);

    if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
        die("could not open output file");
    START_TIMER;
    for (ops = 0; alarm_triggered == false; ops++)
    {
        for (writes = 0; writes < writes_per_op; writes++)
            if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
                die("write failed");
        if (fsync(tmpfile) != 0)
            die("fsync failed");
        if (lseek(tmpfile, 0, SEEK_SET) == -1)
            die("seek failed");
    }
    STOP_TIMER;
    close(tmpfile);

/*
 * If fsync_writethrough is available, test as well
 */
    printf(LABEL_FORMAT, "fsync_writethrough");
    fflush(stdout);

#ifdef HAVE_FSYNC_WRITETHROUGH
    if ((tmpfile = open(filename, O_RDWR, 0)) == -1)
        die("could not open output file");
    START_TIMER;
    for (ops = 0; alarm_triggered == false; ops++)
    {
        for (writes = 0; writes < writes_per_op; writes++)
            if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
                die("write failed");
        if (pg_fsync_writethrough(tmpfile) != 0)
            die("fsync failed");
        if (lseek(tmpfile, 0, SEEK_SET) == -1)
            die("seek failed");
    }
    STOP_TIMER;
    close(tmpfile);
#else
    printf(NA_FORMAT, "n/a\n");
#endif

/*
 * Test open_sync if available
 */
    printf(LABEL_FORMAT, "open_sync");
    fflush(stdout);

#ifdef OPEN_SYNC_FLAG
    if ((tmpfile = open(filename, O_RDWR | OPEN_SYNC_FLAG | PG_O_DIRECT, 0)) == -1)
    {
        printf(NA_FORMAT, "n/a*\n");
        fs_warning = true;
    }
    else
    {
        START_TIMER;
        for (ops = 0; alarm_triggered == false; ops++)
        {
            for (writes = 0; writes < writes_per_op; writes++)
                if (write(tmpfile, buf, XLOG_BLCKSZ) != XLOG_BLCKSZ)
                    die("write failed");
            if (lseek(tmpfile, 0, SEEK_SET) == -1)
                die("seek failed");
        }
        STOP_TIMER;
        close(tmpfile);
    }
#else
    printf(NA_FORMAT, "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");
    }
}


Variable Documentation

bool alarm_triggered = false [static]
char * buf [static]

Definition at line 65 of file pg_test_fsync.c.

Referenced by _bt_doinsert(), _bt_endpoint(), _bt_findinsertloc(), _bt_first(), _bt_get_endpoint(), _bt_getbuf(), _bt_getstackbuf(), _bt_relandgetbuf(), _conv(), _discoverArchiveFormat(), _EndBlob(), _hash_doinsert(), _hash_first(), _hash_getbuf(), _hash_getbuf_with_strategy(), _hash_getinitbuf(), _hash_getnewbuf(), _hash_initbitmap(), _hash_metapinit(), _hash_next(), _hash_step(), _MasterStartParallelItem(), _PrintFileData(), _skipData(), _WorkerJobDumpDirectory(), _WorkerJobRestoreCustom(), _WorkerJobRestoreDirectory(), _WriteBlobData(), abstimeout(), abstimerecv(), abstimesend(), add_tablespace_footer(), aes_cbc_decrypt(), AlterSequence(), array_dims(), array_recv(), array_send(), array_to_text_internal(), asyncQueueReadAllNotifications(), AtEOXact_Snapshot(), b64_decode(), b64_encode(), big5_to_euc_tw(), bit_recv(), boolrecv(), boolsend(), bootstrap_template1(), box_recv(), box_send(), bpcharrecv(), bqarr_in(), BSD44_derived_dlsym(), btree_xlog_cleanup(), btvacuumpage(), btvacuumscan(), buf_init(), BufferAlloc(), BuildIndexValueDescription(), bytearecv(), cache_locale_time(), calc_s2k_iter_salted(), calc_s2k_salted(), calc_s2k_simple(), cash_out(), cash_recv(), cash_send(), cash_words(), charrecv(), charsend(), check_key_cksum(), check_TSCurrentConfig(), CheckForExternalTrigger(), ChooseIndexColumnNames(), ChooseIndexNameAddition(), cidr_recv(), cidrecv(), cidsend(), circle_recv(), circle_send(), compile_pltcl_function(), complex_recv(), complex_send(), conninfo_parse(), conninfo_uri_decode(), conninfo_uri_parse_options(), constructConnStr(), ConvertTriggerToFK(), copy_heap_data(), copy_relation_data(), copyAndUpdateFile(), CopyGetInt16(), CopyGetInt32(), CopySendInt16(), CopySendInt32(), count_nondeletable_pages(), create_cursor(), cstring_recv(), cstring_send(), cube_out(), date_out(), date_recv(), date_send(), date_test_fmt(), dblink_close(), dblink_fdw_validator(), dblink_fetch(), dblink_open(), DeleteAllExportedSnapshotFiles(), deparse_expression_pretty(), deparseArrayExpr(), deparseArrayRef(), deparseBoolExpr(), deparseConst(), deparseDistinctExpr(), deparseFuncExpr(), deparseNullTest(), deparseOpExpr(), deparseParam(), deparseScalarArrayOpExpr(), deparseVar(), describeAggregates(), describeFunctions(), describeOneTableDetails(), describeOneTSConfig(), describeOneTSParser(), describeOperators(), describeRoles(), describeTableDetails(), describeTablespaces(), describeTypes(), do_compile(), do_lo_list(), do_setval(), do_start_bgworker(), domain_recv(), drainSelfPipe(), dump_lo_buf(), dumpBlobs(), dumpCreateDB(), dumpDatabaseConfig(), dumpDbRoleConfig(), dumpGroups(), dumpRoles(), dumpTablespaces(), dumpTimestamp(), dumpUserConfig(), ean13_out(), ean2isn(), enum_recv(), enum_send(), escape_param_str(), euc_tw_to_big5(), exec_command(), exec_describe_statement_message(), ExecBuildSlotValueDescription(), ExecEvalXml(), ExecQueryUsingCursor(), ExplainPropertyFloat(), ExplainPropertyInteger(), ExplainPropertyLong(), exportFile(), ExportSnapshot(), file_fdw_validator(), fill_seq_with_data(), find_provider(), FinishPreparedTransaction(), flatten_set_variable_args(), float4_numeric(), float4recv(), float4send(), float8_numeric(), float8recv(), float8send(), flush_pipe_input(), fmtlong(), fork_process(), format_aggregate_signature(), format_operator_internal(), format_procedure_internal(), format_type_internal(), FreeSpaceMapTruncateRel(), fsm_readbuf(), fsm_search(), fsm_set_and_search(), fsm_vacuum_page(), generate_operator_name(), generate_trgm(), generate_wildcard_trgm(), get_agg_expr(), get_basic_select_query(), get_coercion_expr(), get_column_alias_list(), get_connect_string(), get_const_collation(), get_const_expr(), get_delete_query_def(), get_from_clause(), get_from_clause_coldeflist(), get_from_clause_item(), get_func_expr(), get_insert_query_def(), get_oper_expr(), get_prompt(), get_raw_page_internal(), get_rule_expr(), get_rule_orderby(), get_rule_sortgroupclause(), get_rule_windowclause(), get_rule_windowspec(), get_select_query_def(), get_setop_query(), get_sql_delete(), get_sql_insert(), get_sql_update(), get_sublink_expr(), get_target_list(), get_tuple_of_interest(), get_update_query_def(), get_utility_query_def(), get_values_def(), get_variable(), get_windowfunc_expr(), get_with_clause(), getaddrinfo(), GetBufferFromRing(), GetConfigOptionByNum(), GetRecordedFreeSpace(), gistfixsplit(), handleCopyIn(), handleCopyOut(), hashbulkdelete(), hashgettuple(), heap_lock_updated_tuple_rec(), hmac_finish(), hstore_recv(), hstore_send(), hstorePairs(), IdentifySystem(), importFile(), inet_recv(), infile(), init_params(), InitBufferPool(), initialize_worker_spi(), InitLocalBuffers(), int2recv(), int2send(), int2vectorrecv(), int4recv(), int4send(), int8out(), int8recv(), int8send(), interval_out(), interval_recv(), interval_send(), inzone(), isn_out(), iso_to_koi8r(), iso_to_win1251(), iso_to_win866(), json_recv(), json_send(), KnownAssignedXidsDisplay(), koi8r_to_iso(), koi8r_to_win1251(), koi8r_to_win866(), latin2_to_win1250(), lazy_scan_heap(), lazy_vacuum_heap(), listAllDbs(), listCasts(), listCollations(), listConversions(), listDbRoleSettings(), listDefaultACLs(), listDomains(), listEventTriggers(), listExtensionContents(), listExtensions(), listForeignDataWrappers(), listForeignServers(), listForeignTables(), listLanguages(), listOneExtensionContents(), listSchemas(), listTables(), listTSConfigs(), listTSConfigsVerbose(), listTSDictionaries(), listTSParsers(), listTSParsersVerbose(), listTSTemplates(), listUserMappings(), lo_export(), lo_import_internal(), load_resultmap(), locale_date_order(), lquery_in(), lquery_out(), lseg_recv(), lseg_send(), ltree_in(), ltree_out(), macaddr_recv(), macaddr_send(), main(), make_absolute_path(), makeAlterConfigCommand(), mp_px_rand(), mxid_to_string(), myFormatType(), namerecv(), namesend(), network_send(), next_field_expand(), nextval_internal(), NotifyMyFrontEnd(), num_word(), numeric_recv(), numeric_send(), objectDescription(), oidrecv(), oidsend(), oidvectorrecv(), output(), overwrite(), pad_eme_pkcs1_v15(), parallel_msg_master(), parse_literal_data(), parse_snapshot(), parseAclItem(), parseServiceFile(), parseTypeString(), PasswordFromFile(), path_recv(), path_send(), perform_base_backup(), permissionsList(), pg_gen_salt(), pg_gen_salt_rounds(), pg_get_constraintdef_worker(), pg_get_function_arguments(), pg_get_function_identity_arguments(), pg_get_function_result(), pg_get_functiondef(), pg_get_indexdef_worker(), pg_get_ruledef_worker(), pg_get_triggerdef_worker(), pg_get_viewdef_worker(), pg_local_sendauth(), pg_sequence_parameters(), pg_size_pretty(), pg_size_pretty_numeric(), pgp_armor_decode(), pgp_encrypt(), pgp_key_id_w(), pgp_mpi_hash(), pgp_mpi_write(), pgrowlocks(), pgstat_btree_page(), pgstat_gist_page(), pgstat_hash_page(), PGTYPESdate_to_asc(), PGTYPESinterval_to_asc(), PGTYPESnumeric_div(), PGTYPEStimestamp_to_asc(), pgwin32_select(), pgwin32_waitforsinglesocket(), pgxmlNodeSetToText(), pickout(), pltcl_init_load_unknown(), pltcl_process_SPI_result(), pltcl_set_tuple_values(), pltcl_SPI_lastoid(), PLy_exception_set(), PLy_exception_set_plural(), point_recv(), point_send(), poly2path(), poly_recv(), poly_send(), postgres_fdw_validator(), PostgresMain(), postgresql_fdw_validator(), PQoidStatus(), prefix_init(), prepare_buf(), PrescanPreparedTransactions(), PrintBufferLeakWarning(), PrintQueryStatus(), printSubscripts(), printtup(), printtup_20(), printtup_internal_20(), process_builtin(), process_file(), process_pipe_input(), processIndirection(), ProcessStartupPacket(), ProcSleep(), psnprintf(), puttzcode(), puttzcode64(), px_debug(), px_find_combo(), quote_qualified_identifier(), range_bound_escape(), range_deparse(), range_parse_bound(), range_recv(), range_send(), read_binary_file(), read_text_file(), ReadBufferExtended(), ReadStr(), ReadTwoPhaseFile(), ReadyForQuery(), ReceiveCopyBegin(), record_in(), record_out(), record_recv(), record_send(), RecoverPreparedTransactions(), recv_password_packet(), regression_main(), reltimeout(), reltimerecv(), reltimesend(), repairDependencyLoop(), replace_text_regexp(), report_invalid_encoding(), report_untranslatable_char(), reseed(), ResetSequence(), restore(), run_permutation(), sendAuthRequest(), SendBackupHeader(), SendCopyBegin(), sendFile(), sendFileWithContent(), SendFunctionResult(), SendQuery(), SendRowDescriptionMessage(), SendTimeLineHistory(), SendXlogRecPtrResult(), sepgsql_audit_log(), serialize_deflist(), show_log_file_mode(), show_unix_socket_permissions(), ShowTransactionStateRec(), simple_prompt(), SortTocFromFile(), SPI_result_code_string(), SplitToVariants(), StandbyRecoverPreparedTransactions(), StandbyTransactionIdIsPrepared(), StartReplication(), startup_tricks(), StartupXLOG(), stop_postmaster(), str_time(), StrategyGetBuffer(), strerror(), string2ean(), system_reseed(), t_readline(), test_file_descriptor_sync(), test_non_sync(), test_open_sync(), test_sync(), textrecv(), textsend(), tidout(), tidrecv(), tidsend(), time_out(), time_recv(), time_send(), timeofday(), timestamp_out(), timestamp_recv(), timestamp_send(), timestamptz_out(), timestamptz_recv(), timestamptz_send(), timestamptz_to_str(), timetz_out(), timetz_recv(), timetz_send(), tintervalrecv(), tintervalsend(), to_hex32(), to_hex64(), truncate_identifier(), ts_stat_sql(), tsquery_rewrite_query(), tsqueryrecv(), tsquerysend(), tsvectorin(), tsvectorrecv(), tsvectorsend(), txid_snapshot_recv(), txid_snapshot_send(), tzload(), unknownrecv(), unknownsend(), usage(), uuid_out(), uuid_to_string(), vacuumlo(), varbit_recv(), varbit_send(), varcharrecv(), vm_readbuf(), void_send(), WalReceiverMain(), win1250_to_latin2(), win1251_to_iso(), win1251_to_koi8r(), win1251_to_win866(), win866_to_iso(), win866_to_koi8r(), win866_to_win1251(), worker_spi_main(), xidrecv(), xidsend(), XLogInsert(), XLogReadBuffer(), XLogRecordPageWithFreeSpace(), XLOGShmemSize(), xml_out_internal(), xml_recv(), xml_send(), and yearistype().

char * filename = FSYNC_FILENAME [static]
char full_buf[XLOG_SEG_SIZE] [static]

Definition at line 65 of file pg_test_fsync.c.

Referenced by prepare_buf(), and test_open().

int needs_unlink = 0 [static]

Definition at line 64 of file pg_test_fsync.c.

Referenced by signal_cleanup(), and test_open().

const char* progname [static]

Definition at line 61 of file pg_test_fsync.c.

int secs_per_test = 5 [static]

Definition at line 63 of file pg_test_fsync.c.

Referenced by handle_args().

struct timeval start_t stop_t [static]

Definition at line 68 of file pg_test_fsync.c.