PostgreSQL Source Code
git master
xlogdefs.h
Go to the documentation of this file.
1
/*
2
* xlogdefs.h
3
*
4
* Postgres write-ahead log manager record pointer and
5
* timeline number definitions
6
*
7
* Portions Copyright (c) 1996-2021, PostgreSQL Global Development Group
8
* Portions Copyright (c) 1994, Regents of the University of California
9
*
10
* src/include/access/xlogdefs.h
11
*/
12
#ifndef XLOG_DEFS_H
13
#define XLOG_DEFS_H
14
15
#include <fcntl.h>
/* need open() flags */
16
17
/*
18
* Pointer to a location in the XLOG. These pointers are 64 bits wide,
19
* because we don't want them ever to overflow.
20
*/
21
typedef
uint64
XLogRecPtr
;
22
23
/*
24
* Zero is used indicate an invalid pointer. Bootstrap skips the first possible
25
* WAL segment, initializing the first WAL page at WAL segment size, so no XLOG
26
* record can begin at zero.
27
*/
28
#define InvalidXLogRecPtr 0
29
#define XLogRecPtrIsInvalid(r) ((r) == InvalidXLogRecPtr)
30
31
/*
32
* First LSN to use for "fake" LSNs.
33
*
34
* Values smaller than this can be used for special per-AM purposes.
35
*/
36
#define FirstNormalUnloggedLSN ((XLogRecPtr) 1000)
37
38
/*
39
* XLogSegNo - physical log file sequence number.
40
*/
41
typedef
uint64
XLogSegNo
;
42
43
/*
44
* TimeLineID (TLI) - identifies different database histories to prevent
45
* confusion after restoring a prior state of a database installation.
46
* TLI does not change in a normal stop/restart of the database (including
47
* crash-and-recover cases); but we must assign a new TLI after doing
48
* a recovery to a prior state, a/k/a point-in-time recovery. This makes
49
* the new WAL logfile sequence we generate distinguishable from the
50
* sequence that was generated in the previous incarnation.
51
*/
52
typedef
uint32
TimeLineID
;
53
54
/*
55
* Replication origin id - this is located in this file to avoid having to
56
* include origin.h in a bunch of xlog related places.
57
*/
58
typedef
uint16
RepOriginId
;
59
60
/*
61
* Because O_DIRECT bypasses the kernel buffers, and because we never
62
* read those buffers except during crash recovery or if wal_level != minimal,
63
* it is a win to use it in all cases where we sync on each write(). We could
64
* allow O_DIRECT with fsync(), but it is unclear if fsync() could process
65
* writes not buffered in the kernel. Also, O_DIRECT is never enough to force
66
* data to the drives, it merely tries to bypass the kernel cache, so we still
67
* need O_SYNC/O_DSYNC.
68
*/
69
#ifdef O_DIRECT
70
#define PG_O_DIRECT O_DIRECT
71
#else
72
#define PG_O_DIRECT 0
73
#endif
74
75
/*
76
* This chunk of hackery attempts to determine which file sync methods
77
* are available on the current platform, and to choose an appropriate
78
* default method. We assume that fsync() is always available, and that
79
* configure determined whether fdatasync() is.
80
*/
81
#if defined(O_SYNC)
82
#define OPEN_SYNC_FLAG O_SYNC
83
#elif defined(O_FSYNC)
84
#define OPEN_SYNC_FLAG O_FSYNC
85
#endif
86
87
#if defined(O_DSYNC)
88
#if defined(OPEN_SYNC_FLAG)
89
/* O_DSYNC is distinct? */
90
#if O_DSYNC != OPEN_SYNC_FLAG
91
#define OPEN_DATASYNC_FLAG O_DSYNC
92
#endif
93
#else
/* !defined(OPEN_SYNC_FLAG) */
94
/* Win32 only has O_DSYNC */
95
#define OPEN_DATASYNC_FLAG O_DSYNC
96
#endif
97
#endif
98
99
#if defined(PLATFORM_DEFAULT_SYNC_METHOD)
100
#define DEFAULT_SYNC_METHOD PLATFORM_DEFAULT_SYNC_METHOD
101
#elif defined(OPEN_DATASYNC_FLAG)
102
#define DEFAULT_SYNC_METHOD SYNC_METHOD_OPEN_DSYNC
103
#elif defined(HAVE_FDATASYNC)
104
#define DEFAULT_SYNC_METHOD SYNC_METHOD_FDATASYNC
105
#else
106
#define DEFAULT_SYNC_METHOD SYNC_METHOD_FSYNC
107
#endif
108
109
#endif
/* XLOG_DEFS_H */
TimeLineID
uint32 TimeLineID
Definition:
xlogdefs.h:52
RepOriginId
uint16 RepOriginId
Definition:
xlogdefs.h:58
uint16
unsigned short uint16
Definition:
c.h:428
XLogSegNo
uint64 XLogSegNo
Definition:
xlogdefs.h:41
uint32
unsigned int uint32
Definition:
c.h:429
XLogRecPtr
uint64 XLogRecPtr
Definition:
xlogdefs.h:21
src
include
access
xlogdefs.h
Generated on Thu Jan 21 2021 00:13:25 for PostgreSQL Source Code by
1.8.13