LCOV - differential code coverage report
Current view: top level - src/include/utils - snapmgr.h (source / functions) Coverage Total Hit CBC
Current: Differential Code Coverage HEAD vs 15 Lines: 100.0 % 2 2 2
Current Date: 2023-04-08 17:13:01 Functions: 100.0 % 1 1 1
Baseline: 15 Line coverage date bins:
Baseline Date: 2023-04-08 15:09:40 (240..) days: 100.0 % 2 2 2
Legend: Lines: hit not hit Function coverage date bins:
(240..) days: 100.0 % 1 1 1

 Age         Owner                  TLA  Line data    Source code
                                  1                 : /*-------------------------------------------------------------------------
                                  2                 :  *
                                  3                 :  * snapmgr.h
                                  4                 :  *    POSTGRES snapshot manager
                                  5                 :  *
                                  6                 :  * Portions Copyright (c) 1996-2023, PostgreSQL Global Development Group
                                  7                 :  * Portions Copyright (c) 1994, Regents of the University of California
                                  8                 :  *
                                  9                 :  * src/include/utils/snapmgr.h
                                 10                 :  *
                                 11                 :  *-------------------------------------------------------------------------
                                 12                 :  */
                                 13                 : #ifndef SNAPMGR_H
                                 14                 : #define SNAPMGR_H
                                 15                 : 
                                 16                 : #include "access/transam.h"
                                 17                 : #include "utils/relcache.h"
                                 18                 : #include "utils/resowner.h"
                                 19                 : #include "utils/snapshot.h"
                                 20                 : 
                                 21                 : 
                                 22                 : /*
                                 23                 :  * The structure used to map times to TransactionId values for the "snapshot
                                 24                 :  * too old" feature must have a few entries at the tail to hold old values;
                                 25                 :  * otherwise the lookup will often fail and the expected early pruning or
                                 26                 :  * vacuum will not usually occur.  It is best if this padding is for a number
                                 27                 :  * of minutes greater than a thread would normally be stalled, but it's OK if
                                 28                 :  * early vacuum opportunities are occasionally missed, so there's no need to
                                 29                 :  * use an extreme value or get too fancy.  10 minutes seems plenty.
                                 30                 :  */
                                 31                 : #define OLD_SNAPSHOT_PADDING_ENTRIES 10
                                 32                 : #define OLD_SNAPSHOT_TIME_MAP_ENTRIES (old_snapshot_threshold + OLD_SNAPSHOT_PADDING_ENTRIES)
                                 33                 : 
                                 34                 : /*
                                 35                 :  * Common definition of relation properties that allow early pruning/vacuuming
                                 36                 :  * when old_snapshot_threshold >= 0.
                                 37                 :  */
                                 38                 : #define RelationAllowsEarlyPruning(rel) \
                                 39                 : ( \
                                 40                 :      RelationIsPermanent(rel) && !IsCatalogRelation(rel) \
                                 41                 :   && !RelationIsAccessibleInLogicalDecoding(rel) \
                                 42                 : )
                                 43                 : 
                                 44                 : #define EarlyPruningEnabled(rel) (old_snapshot_threshold >= 0 && RelationAllowsEarlyPruning(rel))
                                 45                 : 
                                 46                 : /* GUC variables */
                                 47                 : extern PGDLLIMPORT int old_snapshot_threshold;
                                 48                 : 
                                 49                 : 
                                 50                 : extern Size SnapMgrShmemSize(void);
                                 51                 : extern void SnapMgrInit(void);
                                 52                 : extern TimestampTz GetSnapshotCurrentTimestamp(void);
                                 53                 : extern TimestampTz GetOldSnapshotThresholdTimestamp(void);
                                 54                 : extern void SnapshotTooOldMagicForTest(void);
                                 55                 : 
                                 56                 : extern PGDLLIMPORT bool FirstSnapshotSet;
                                 57                 : 
                                 58                 : extern PGDLLIMPORT TransactionId TransactionXmin;
                                 59                 : extern PGDLLIMPORT TransactionId RecentXmin;
                                 60                 : 
                                 61                 : /* Variables representing various special snapshot semantics */
                                 62                 : extern PGDLLIMPORT SnapshotData SnapshotSelfData;
                                 63                 : extern PGDLLIMPORT SnapshotData SnapshotAnyData;
                                 64                 : extern PGDLLIMPORT SnapshotData CatalogSnapshotData;
                                 65                 : 
                                 66                 : #define SnapshotSelf        (&SnapshotSelfData)
                                 67                 : #define SnapshotAny         (&SnapshotAnyData)
                                 68                 : 
                                 69                 : /*
                                 70                 :  * We don't provide a static SnapshotDirty variable because it would be
                                 71                 :  * non-reentrant.  Instead, users of that snapshot type should declare a
                                 72                 :  * local variable of type SnapshotData, and initialize it with this macro.
                                 73                 :  */
                                 74                 : #define InitDirtySnapshot(snapshotdata)  \
                                 75                 :     ((snapshotdata).snapshot_type = SNAPSHOT_DIRTY)
                                 76                 : 
                                 77                 : /*
                                 78                 :  * Similarly, some initialization is required for a NonVacuumable snapshot.
                                 79                 :  * The caller must supply the visibility cutoff state to use (c.f.
                                 80                 :  * GlobalVisTestFor()).
                                 81                 :  */
                                 82                 : #define InitNonVacuumableSnapshot(snapshotdata, vistestp)  \
                                 83                 :     ((snapshotdata).snapshot_type = SNAPSHOT_NON_VACUUMABLE, \
                                 84                 :      (snapshotdata).vistest = (vistestp))
                                 85                 : 
                                 86                 : /*
                                 87                 :  * Similarly, some initialization is required for SnapshotToast.  We need
                                 88                 :  * to set lsn and whenTaken correctly to support snapshot_too_old.
                                 89                 :  */
                                 90                 : #define InitToastSnapshot(snapshotdata, l, w)  \
                                 91                 :     ((snapshotdata).snapshot_type = SNAPSHOT_TOAST, \
                                 92                 :      (snapshotdata).lsn = (l),                  \
                                 93                 :      (snapshotdata).whenTaken = (w))
                                 94                 : 
                                 95                 : /* This macro encodes the knowledge of which snapshots are MVCC-safe */
                                 96                 : #define IsMVCCSnapshot(snapshot)  \
                                 97                 :     ((snapshot)->snapshot_type == SNAPSHOT_MVCC || \
                                 98                 :      (snapshot)->snapshot_type == SNAPSHOT_HISTORIC_MVCC)
                                 99                 : 
                                100                 : #ifndef FRONTEND
                                101                 : static inline bool
  970 andres                    102 CBC     9384962 : OldSnapshotThresholdActive(void)
                                103                 : {
                                104         9384962 :     return old_snapshot_threshold >= 0;
                                105                 : }
                                106                 : #endif
                                107                 : 
                                108                 : extern Snapshot GetTransactionSnapshot(void);
                                109                 : extern Snapshot GetLatestSnapshot(void);
                                110                 : extern void SnapshotSetCommandId(CommandId curcid);
                                111                 : extern Snapshot GetOldestSnapshot(void);
                                112                 : 
                                113                 : extern Snapshot GetCatalogSnapshot(Oid relid);
                                114                 : extern Snapshot GetNonHistoricCatalogSnapshot(Oid relid);
                                115                 : extern void InvalidateCatalogSnapshot(void);
                                116                 : extern void InvalidateCatalogSnapshotConditionally(void);
                                117                 : 
                                118                 : extern void PushActiveSnapshot(Snapshot snapshot);
                                119                 : extern void PushActiveSnapshotWithLevel(Snapshot snapshot, int snap_level);
                                120                 : extern void PushCopiedSnapshot(Snapshot snapshot);
                                121                 : extern void UpdateActiveSnapshotCommandId(void);
                                122                 : extern void PopActiveSnapshot(void);
                                123                 : extern Snapshot GetActiveSnapshot(void);
                                124                 : extern bool ActiveSnapshotSet(void);
                                125                 : 
                                126                 : extern Snapshot RegisterSnapshot(Snapshot snapshot);
                                127                 : extern void UnregisterSnapshot(Snapshot snapshot);
                                128                 : extern Snapshot RegisterSnapshotOnOwner(Snapshot snapshot, ResourceOwner owner);
                                129                 : extern void UnregisterSnapshotFromOwner(Snapshot snapshot, ResourceOwner owner);
                                130                 : 
                                131                 : extern void AtSubCommit_Snapshot(int level);
                                132                 : extern void AtSubAbort_Snapshot(int level);
                                133                 : extern void AtEOXact_Snapshot(bool isCommit, bool resetXmin);
                                134                 : 
                                135                 : extern void ImportSnapshot(const char *idstr);
                                136                 : extern bool XactHasExportedSnapshots(void);
                                137                 : extern void DeleteAllExportedSnapshotFiles(void);
                                138                 : extern void WaitForOlderSnapshots(TransactionId limitXmin, bool progress);
                                139                 : extern bool ThereAreNoPriorRegisteredSnapshots(void);
                                140                 : extern bool HaveRegisteredOrActiveSnapshot(void);
                                141                 : extern bool TransactionIdLimitedForOldSnapshots(TransactionId recentXmin,
                                142                 :                                                 Relation relation,
                                143                 :                                                 TransactionId *limit_xid,
                                144                 :                                                 TimestampTz *limit_ts);
                                145                 : extern void SetOldSnapshotThresholdTimestamp(TimestampTz ts, TransactionId xlimit);
                                146                 : extern void MaintainOldSnapshotTimeMapping(TimestampTz whenTaken,
                                147                 :                                            TransactionId xmin);
                                148                 : 
                                149                 : extern char *ExportSnapshot(Snapshot snapshot);
                                150                 : 
                                151                 : /*
                                152                 :  * These live in procarray.c because they're intimately linked to the
                                153                 :  * procarray contents, but thematically they better fit into snapmgr.h.
                                154                 :  */
                                155                 : typedef struct GlobalVisState GlobalVisState;
                                156                 : extern GlobalVisState *GlobalVisTestFor(Relation rel);
                                157                 : extern bool GlobalVisTestIsRemovableXid(GlobalVisState *state, TransactionId xid);
                                158                 : extern bool GlobalVisTestIsRemovableFullXid(GlobalVisState *state, FullTransactionId fxid);
                                159                 : extern FullTransactionId GlobalVisTestNonRemovableFullHorizon(GlobalVisState *state);
                                160                 : extern TransactionId GlobalVisTestNonRemovableHorizon(GlobalVisState *state);
                                161                 : extern bool GlobalVisCheckRemovableXid(Relation rel, TransactionId xid);
                                162                 : extern bool GlobalVisCheckRemovableFullXid(Relation rel, FullTransactionId fxid);
                                163                 : 
                                164                 : /*
                                165                 :  * Utility functions for implementing visibility routines in table AMs.
                                166                 :  */
                                167                 : extern bool XidInMVCCSnapshot(TransactionId xid, Snapshot snapshot);
                                168                 : 
                                169                 : /* Support for catalog timetravel for logical decoding */
                                170                 : struct HTAB;
                                171                 : extern struct HTAB *HistoricSnapshotGetTupleCids(void);
                                172                 : extern void SetupHistoricSnapshot(Snapshot historic_snapshot, struct HTAB *tuplecids);
                                173                 : extern void TeardownHistoricSnapshot(bool is_error);
                                174                 : extern bool HistoricSnapshotActive(void);
                                175                 : 
                                176                 : extern Size EstimateSnapshotSpace(Snapshot snapshot);
                                177                 : extern void SerializeSnapshot(Snapshot snapshot, char *start_address);
                                178                 : extern Snapshot RestoreSnapshot(char *start_address);
                                179                 : extern void RestoreTransactionSnapshot(Snapshot snapshot, void *source_pgproc);
                                180                 : 
                                181                 : #endif                          /* SNAPMGR_H */
        

Generated by: LCOV version v1.16-55-g56c0a2a