|
14 | 14 | #include<time.h>
|
15 | 15 | #include<sys/time.h>
|
16 | 16 | #include<unistd.h>
|
| 17 | +#include<string.h> |
17 | 18 |
|
18 | 19 | #ifdefWIN32
|
19 | 20 | #defineFSYNC_FILENAME"./test_fsync.out"
|
20 | 21 | #else
|
21 | 22 | #defineFSYNC_FILENAME"/var/tmp/test_fsync.out"
|
22 | 23 | #endif
|
23 | 24 |
|
24 |
| -/* O_SYNC and O_FSYNC are the same */ |
| 25 | +/* This logic comes from src/backend/access/transam/xlog.c where it's |
| 26 | + better documented */ |
| 27 | +#ifdefO_DIRECT |
| 28 | +#definePG_O_DIRECT O_DIRECT |
| 29 | +#else |
| 30 | +#definePG_O_DIRECT 0 |
| 31 | +#endif |
| 32 | + |
25 | 33 | #if defined(O_SYNC)
|
26 |
| -#defineOPEN_SYNC_FLAGO_SYNC |
| 34 | +#defineBARE_OPEN_SYNC_FLAGO_SYNC |
27 | 35 | #elif defined(O_FSYNC)
|
28 |
| -#defineOPEN_SYNC_FLAGO_FSYNC |
29 |
| -#elif defined(O_DSYNC) |
30 |
| -#defineOPEN_DATASYNC_FLAGO_DSYNC |
| 36 | +#defineBARE_OPEN_SYNC_FLAG O_FSYNC |
| 37 | +#endif |
| 38 | +#ifdefBARE_OPEN_SYNC_FLAG |
| 39 | +#defineOPEN_SYNC_FLAG (BARE_OPEN_SYNC_FLAG | PG_O_DIRECT) |
31 | 40 | #endif
|
32 | 41 |
|
| 42 | +#if defined(O_DSYNC) |
33 | 43 | #if defined(OPEN_SYNC_FLAG)
|
34 |
| -#if defined(O_DSYNC)&& (O_DSYNC!=OPEN_SYNC_FLAG) |
35 |
| -#defineOPEN_DATASYNC_FLAGO_DSYNC |
| 44 | +#ifO_DSYNC!=BARE_OPEN_SYNC_FLAG |
| 45 | +#defineOPEN_DATASYNC_FLAG (O_DSYNC | PG_O_DIRECT) |
| 46 | +#endif |
| 47 | +#else |
| 48 | +#defineOPEN_DATASYNC_FLAG (O_DSYNC | PG_O_DIRECT) |
36 | 49 | #endif
|
37 | 50 | #endif
|
38 | 51 |
|
| 52 | + |
39 | 53 | #defineWAL_FILE_SIZE(16 * 1024 * 1024)
|
40 | 54 |
|
41 | 55 | voiddie(char*str);
|
|