PostgreSQL Source Code  git master
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
procarray.h
Go to the documentation of this file.
1 /*-------------------------------------------------------------------------
2  *
3  * procarray.h
4  * POSTGRES process array definitions.
5  *
6  *
7  * Portions Copyright (c) 1996-2017, PostgreSQL Global Development Group
8  * Portions Copyright (c) 1994, Regents of the University of California
9  *
10  * src/include/storage/procarray.h
11  *
12  *-------------------------------------------------------------------------
13  */
14 #ifndef PROCARRAY_H
15 #define PROCARRAY_H
16 
17 #include "storage/lock.h"
18 #include "storage/standby.h"
19 #include "utils/relcache.h"
20 #include "utils/snapshot.h"
21 
22 
23 /*
24  * These are to implement PROCARRAY_FLAGS_XXX
25  *
26  * Note: These flags are cloned from PROC_XXX flags in src/include/storage/proc.h
27  * to avoid forcing to include proc.h when including procarray.h. So if you modify
28  * PROC_XXX flags, you need to modify these flags.
29  */
30 #define PROCARRAY_VACUUM_FLAG 0x02 /* currently running lazy
31  * vacuum */
32 #define PROCARRAY_ANALYZE_FLAG 0x04 /* currently running
33  * analyze */
34 #define PROCARRAY_LOGICAL_DECODING_FLAG 0x10 /* currently doing logical
35  * decoding outside xact */
36 
37 #define PROCARRAY_SLOTS_XMIN 0x20 /* replication slot xmin,
38  * catalog_xmin */
39 /*
40  * Only flags in PROCARRAY_PROC_FLAGS_MASK are considered when matching
41  * PGXACT->vacuumFlags. Other flags are used for different purposes and
42  * have no corresponding PROC flag equivalent.
43  */
44 #define PROCARRAY_PROC_FLAGS_MASK (PROCARRAY_VACUUM_FLAG | \
45  PROCARRAY_ANALYZE_FLAG | \
46  PROCARRAY_LOGICAL_DECODING_FLAG)
47 
48 /* Use the following flags as an input "flags" to GetOldestXmin function */
49 /* Consider all backends except for logical decoding ones which manage xmin separately */
50 #define PROCARRAY_FLAGS_DEFAULT PROCARRAY_LOGICAL_DECODING_FLAG
51 /* Ignore vacuum backends */
52 #define PROCARRAY_FLAGS_VACUUM PROCARRAY_FLAGS_DEFAULT | PROCARRAY_VACUUM_FLAG
53 /* Ignore analyze backends */
54 #define PROCARRAY_FLAGS_ANALYZE PROCARRAY_FLAGS_DEFAULT | PROCARRAY_ANALYZE_FLAG
55 /* Ignore both vacuum and analyze backends */
56 #define PROCARRAY_FLAGS_VACUUM_ANALYZE PROCARRAY_FLAGS_DEFAULT | PROCARRAY_VACUUM_FLAG | PROCARRAY_ANALYZE_FLAG
57 
58 extern Size ProcArrayShmemSize(void);
59 extern void CreateSharedProcArray(void);
60 extern void ProcArrayAdd(PGPROC *proc);
61 extern void ProcArrayRemove(PGPROC *proc, TransactionId latestXid);
62 
63 extern void ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid);
64 extern void ProcArrayClearTransaction(PGPROC *proc);
65 
66 extern void ProcArrayInitRecovery(TransactionId initializedUptoXID);
69  int nsubxids, TransactionId *subxids);
70 
73  int nsubxids, TransactionId *subxids,
74  TransactionId max_xid);
75 extern void ExpireAllKnownAssignedTransactionIds(void);
77 
78 extern int GetMaxSnapshotXidCount(void);
79 extern int GetMaxSnapshotSubxidCount(void);
80 
81 extern Snapshot GetSnapshotData(Snapshot snapshot);
82 
84  VirtualTransactionId *sourcevxid);
85 extern bool ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc);
86 
88 
90 extern bool TransactionIdIsActive(TransactionId xid);
91 extern TransactionId GetOldestXmin(Relation rel, int flags);
93 extern TransactionId GetOldestSafeDecodingTransactionId(bool catalogOnly);
94 
96 extern bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, int nvxids);
97 
98 extern PGPROC *BackendPidGetProc(int pid);
99 extern PGPROC *BackendPidGetProcWithLock(int pid);
100 extern int BackendXidGetPid(TransactionId xid);
101 extern bool IsBackendPid(int pid);
102 
104  bool excludeXmin0, bool allDbs, int excludeVacuum,
105  int *nvxids);
108 
109 extern bool MinimumActiveBackends(int min);
110 extern int CountDBBackends(Oid databaseid);
111 extern int CountDBConnections(Oid databaseid);
112 extern void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending);
113 extern int CountUserBackends(Oid roleid);
114 extern bool CountOtherDBBackends(Oid databaseId,
115  int *nbackends, int *nprepared);
116 
118  int nxids, const TransactionId *xids,
119  TransactionId latestXid);
120 
122  TransactionId catalog_xmin, bool already_locked);
123 
125  TransactionId *catalog_xmin);
126 
127 #endif /* PROCARRAY_H */
bool TransactionIdIsActive(TransactionId xid)
Definition: procarray.c:1215
void ProcArrayInitRecovery(TransactionId initializedUptoXID)
Definition: procarray.c:636
TransactionId GetOldestXmin(Relation rel, int flags)
Definition: procarray.c:1314
bool IsBackendPid(int pid)
Definition: procarray.c:2440
uint32 TransactionId
Definition: c.h:397
void ProcArraySetReplicationSlotXmin(TransactionId xmin, TransactionId catalog_xmin, bool already_locked)
Definition: procarray.c:2963
PGPROC * BackendPidGetProcWithLock(int pid)
Definition: procarray.c:2368
void CreateSharedProcArray(void)
Definition: procarray.c:221
bool ProcArrayInstallRestoredXmin(TransactionId xmin, PGPROC *proc)
Definition: procarray.c:1871
Size ProcArrayShmemSize(void)
Definition: procarray.c:179
int BackendXidGetPid(TransactionId xid)
Definition: procarray.c:2405
int CountUserBackends(Oid roleid)
Definition: procarray.c:2839
VirtualTransactionId * GetCurrentVirtualXIDs(TransactionId limitXmin, bool excludeXmin0, bool allDbs, int excludeVacuum, int *nvxids)
Definition: procarray.c:2473
unsigned int Oid
Definition: postgres_ext.h:31
int GetMaxSnapshotXidCount(void)
Definition: procarray.c:1455
void ExpireOldKnownAssignedTransactionIds(TransactionId xid)
Definition: procarray.c:3282
int GetMaxSnapshotSubxidCount(void)
Definition: procarray.c:1466
RunningTransactions GetRunningTransactionData(void)
Definition: procarray.c:1933
bool HaveVirtualXIDsDelayingChkpt(VirtualTransactionId *vxids, int nvxids)
Definition: procarray.c:2298
bool ProcArrayInstallImportedXmin(TransactionId xmin, VirtualTransactionId *sourcevxid)
Definition: procarray.c:1796
Snapshot GetSnapshotData(Snapshot snapshot)
Definition: procarray.c:1508
void ProcArrayAdd(PGPROC *proc)
Definition: procarray.c:274
pid_t CancelVirtualTransaction(VirtualTransactionId vxid, ProcSignalReason sigmode)
Definition: procarray.c:2636
TransactionId GetOldestSafeDecodingTransactionId(bool catalogOnly)
Definition: procarray.c:2157
TransactionId GetOldestActiveTransactionId(void)
Definition: procarray.c:2091
void ProcArrayApplyXidAssignment(TransactionId topxid, int nsubxids, TransactionId *subxids)
Definition: procarray.c:914
bool CountOtherDBBackends(Oid databaseId, int *nbackends, int *nprepared)
Definition: procarray.c:2889
PGPROC * BackendPidGetProc(int pid)
Definition: procarray.c:2345
void ProcArrayApplyRecoveryInfo(RunningTransactions running)
Definition: procarray.c:667
int CountDBConnections(Oid databaseid)
Definition: procarray.c:2768
void XidCacheRemoveRunningXids(TransactionId xid, int nxids, const TransactionId *xids, TransactionId latestXid)
Definition: procarray.c:3015
void ProcArrayRemove(PGPROC *proc, TransactionId latestXid)
Definition: procarray.c:332
void ProcArrayEndTransaction(PGPROC *proc, TransactionId latestXid)
Definition: procarray.c:395
void RecordKnownAssignedTransactionIds(TransactionId xid)
Definition: procarray.c:3172
size_t Size
Definition: c.h:356
bool MinimumActiveBackends(int min)
Definition: procarray.c:2684
VirtualTransactionId * GetVirtualXIDsDelayingChkpt(int *nvxids)
Definition: procarray.c:2253
void ProcArrayClearTransaction(PGPROC *proc)
Definition: procarray.c:604
int CountDBBackends(Oid databaseid)
Definition: procarray.c:2738
void CancelDBBackends(Oid databaseid, ProcSignalReason sigmode, bool conflictPending)
Definition: procarray.c:2799
void ExpireTreeKnownAssignedTransactionIds(TransactionId xid, int nsubxids, TransactionId *subxids, TransactionId max_xid)
Definition: procarray.c:3245
ProcSignalReason
Definition: procsignal.h:30
void ProcArrayGetReplicationSlotXmin(TransactionId *xmin, TransactionId *catalog_xmin)
Definition: procarray.c:2985
void ExpireAllKnownAssignedTransactionIds(void)
Definition: procarray.c:3270
bool TransactionIdIsInProgress(TransactionId xid)
Definition: procarray.c:998
Definition: proc.h:94
VirtualTransactionId * GetConflictingVirtualXIDs(TransactionId limitXmin, Oid dbOid)
Definition: procarray.c:2561