PostgreSQL Source Code git master
Loading...
Searching...
No Matches
inval.h File Reference
#include "access/htup.h"
#include "storage/relfilelocator.h"
#include "utils/relcache.h"
Include dependency graph for inval.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define MIN_DEBUG_DISCARD_CACHES   0
 
#define DEFAULT_DEBUG_DISCARD_CACHES   0
 
#define MAX_DEBUG_DISCARD_CACHES   0
 

Typedefs

typedef void(* SyscacheCallbackFunction) (Datum arg, int cacheid, uint32 hashvalue)
 
typedef void(* RelcacheCallbackFunction) (Datum arg, Oid relid)
 
typedef void(* RelSyncCallbackFunction) (Datum arg, Oid relid)
 

Functions

void AcceptInvalidationMessages (void)
 
void AtEOXact_Inval (bool isCommit)
 
void PreInplace_Inval (void)
 
void AtInplace_Inval (void)
 
void ForgetInplace_Inval (void)
 
void AtEOSubXact_Inval (bool isCommit)
 
void PostPrepare_Inval (void)
 
void CommandEndInvalidationMessages (void)
 
void CacheInvalidateHeapTuple (Relation relation, HeapTuple tuple, HeapTuple newtuple)
 
void CacheInvalidateHeapTupleInplace (Relation relation, HeapTuple key_equivalent_tuple)
 
void CacheInvalidateCatalog (Oid catalogId)
 
void CacheInvalidateRelcache (Relation relation)
 
void CacheInvalidateRelcacheAll (void)
 
void CacheInvalidateRelcacheByTuple (HeapTuple classTuple)
 
void CacheInvalidateRelcacheByRelid (Oid relid)
 
void CacheInvalidateRelSync (Oid relid)
 
void CacheInvalidateRelSyncAll (void)
 
void CacheInvalidateSmgr (RelFileLocatorBackend rlocator)
 
void CacheInvalidateRelmap (Oid databaseId)
 
void CacheRegisterSyscacheCallback (int cacheid, SyscacheCallbackFunction func, Datum arg)
 
void CacheRegisterRelcacheCallback (RelcacheCallbackFunction func, Datum arg)
 
void CacheRegisterRelSyncCallback (RelSyncCallbackFunction func, Datum arg)
 
void CallSyscacheCallbacks (int cacheid, uint32 hashvalue)
 
void CallRelSyncCallbacks (Oid relid)
 
void InvalidateSystemCaches (void)
 
void InvalidateSystemCachesExtended (bool debug_discard)
 
void LogLogicalInvalidations (void)
 

Variables

PGDLLIMPORT int debug_discard_caches
 

Macro Definition Documentation

◆ DEFAULT_DEBUG_DISCARD_CACHES

#define DEFAULT_DEBUG_DISCARD_CACHES   0

Definition at line 36 of file inval.h.

◆ MAX_DEBUG_DISCARD_CACHES

#define MAX_DEBUG_DISCARD_CACHES   0

Definition at line 37 of file inval.h.

◆ MIN_DEBUG_DISCARD_CACHES

#define MIN_DEBUG_DISCARD_CACHES   0

Definition at line 23 of file inval.h.

Typedef Documentation

◆ RelcacheCallbackFunction

typedef void(* RelcacheCallbackFunction) (Datum arg, Oid relid)

Definition at line 42 of file inval.h.

◆ RelSyncCallbackFunction

typedef void(* RelSyncCallbackFunction) (Datum arg, Oid relid)

Definition at line 43 of file inval.h.

◆ SyscacheCallbackFunction

typedef void(* SyscacheCallbackFunction) (Datum arg, int cacheid, uint32 hashvalue)

Definition at line 41 of file inval.h.

Function Documentation

◆ AcceptInvalidationMessages()

void AcceptInvalidationMessages ( void  )
extern

Definition at line 930 of file inval.c.

931{
932#ifdef USE_ASSERT_CHECKING
933 /* message handlers shall access catalogs only during transactions */
934 if (IsTransactionState())
936#endif
937
940
941 /*----------
942 * Test code to force cache flushes anytime a flush could happen.
943 *
944 * This helps detect intermittent faults caused by code that reads a cache
945 * entry and then performs an action that could invalidate the entry, but
946 * rarely actually does so. This can spot issues that would otherwise
947 * only arise with badly timed concurrent DDL, for example.
948 *
949 * The default debug_discard_caches = 0 does no forced cache flushes.
950 *
951 * If used with CLOBBER_FREED_MEMORY,
952 * debug_discard_caches = 1 (formerly known as CLOBBER_CACHE_ALWAYS)
953 * provides a fairly thorough test that the system contains no cache-flush
954 * hazards. However, it also makes the system unbelievably slow --- the
955 * regression tests take about 100 times longer than normal.
956 *
957 * If you're a glutton for punishment, try
958 * debug_discard_caches = 3 (formerly known as CLOBBER_CACHE_RECURSIVELY).
959 * This slows things by at least a factor of 10000, so I wouldn't suggest
960 * trying to run the entire regression tests that way. It's useful to try
961 * a few simple tests, to make sure that cache reload isn't subject to
962 * internal cache-flush hazards, but after you've done a few thousand
963 * recursive reloads it's unlikely you'll learn more.
964 *----------
965 */
966#ifdef DISCARD_CACHES_ENABLED
967 {
968 static int recursion_depth = 0;
969
971 {
975 }
976 }
977#endif
978}
static int recursion_depth
Definition elog.c:150
void InvalidateSystemCachesExtended(bool debug_discard)
Definition inval.c:785
void LocalExecuteInvalidationMessage(SharedInvalidationMessage *msg)
Definition inval.c:823
void InvalidateSystemCaches(void)
Definition inval.c:916
int debug_discard_caches
Definition inval.c:260
static void AssertCouldGetRelation(void)
Definition relcache.h:44
void ReceiveSharedInvalidMessages(void(*invalFunction)(SharedInvalidationMessage *msg), void(*resetFunction)(void))
Definition sinval.c:69
bool IsTransactionState(void)
Definition xact.c:388

References AssertCouldGetRelation(), debug_discard_caches, InvalidateSystemCaches(), InvalidateSystemCachesExtended(), IsTransactionState(), LocalExecuteInvalidationMessage(), ReceiveSharedInvalidMessages(), and recursion_depth.

Referenced by apply_handle_commit_internal(), AtStart_Cache(), ConditionalLockDatabaseObject(), ConditionalLockRelation(), ConditionalLockRelationOid(), ConditionalLockSharedObject(), delay_execution_planner(), heap_inplace_update_and_unlock(), InitializeSessionUserId(), LockDatabaseObject(), LockRelation(), LockRelationId(), LockRelationOid(), LockSharedObject(), LogicalRepApplyLoop(), pgstat_init_function_usage(), ProcessCatchupInterrupt(), RangeVarGetRelidExtended(), relation_openrv(), relation_openrv_extended(), RelationBuildPartitionDesc(), RemoveRelations(), SearchSysCacheLocked1(), and write_relcache_init_file().

◆ AtEOSubXact_Inval()

void AtEOSubXact_Inval ( bool  isCommit)
extern

Definition at line 1310 of file inval.c.

1311{
1312 int my_level;
1314
1315 /*
1316 * Successful inplace update must clear this, but we clear it on abort.
1317 * Inplace updates allocate this in CurrentMemoryContext, which has
1318 * lifespan <= subtransaction lifespan. Hence, don't free it explicitly.
1319 */
1320 if (isCommit)
1322 else
1324
1325 /* Quick exit if no transactional messages. */
1327 if (myInfo == NULL)
1328 return;
1329
1330 /* Also bail out quickly if messages are not for this level. */
1331 my_level = GetCurrentTransactionNestLevel();
1332 if (myInfo->my_level != my_level)
1333 {
1334 Assert(myInfo->my_level < my_level);
1335 return;
1336 }
1337
1338 if (isCommit)
1339 {
1340 /* If CurrentCmdInvalidMsgs still has anything, fix it */
1342
1343 /*
1344 * We create invalidation stack entries lazily, so the parent might
1345 * not have one. Instead of creating one, moving all the data over,
1346 * and then freeing our own, we can just adjust the level of our own
1347 * entry.
1348 */
1349 if (myInfo->parent == NULL || myInfo->parent->my_level < my_level - 1)
1350 {
1351 myInfo->my_level--;
1352 return;
1353 }
1354
1355 /*
1356 * Pass up my inval messages to parent. Notice that we stick them in
1357 * PriorCmdInvalidMsgs, not CurrentCmdInvalidMsgs, since they've
1358 * already been locally processed. (This would trigger the Assert in
1359 * AppendInvalidationMessageSubGroup if the parent's
1360 * CurrentCmdInvalidMsgs isn't empty; but we already checked that in
1361 * PrepareInvalidationState.)
1362 */
1363 AppendInvalidationMessages(&myInfo->parent->PriorCmdInvalidMsgs,
1364 &myInfo->PriorCmdInvalidMsgs);
1365
1366 /* Must readjust parent's CurrentCmdInvalidMsgs indexes now */
1367 SetGroupToFollow(&myInfo->parent->ii.CurrentCmdInvalidMsgs,
1368 &myInfo->parent->PriorCmdInvalidMsgs);
1369
1370 /* Pending relcache inval becomes parent's problem too */
1371 if (myInfo->ii.RelcacheInitFileInval)
1372 myInfo->parent->ii.RelcacheInitFileInval = true;
1373
1374 /* Pop the transaction state stack */
1376
1377 /* Need not free anything else explicitly */
1378 pfree(myInfo);
1379 }
1380 else
1381 {
1382 ProcessInvalidationMessages(&myInfo->PriorCmdInvalidMsgs,
1384
1385 /* Pop the transaction state stack */
1387
1388 /* Need not free anything else explicitly */
1389 pfree(myInfo);
1390 }
1391}
#define Assert(condition)
Definition c.h:873
static void ProcessInvalidationMessages(InvalidationMsgsGroup *group, void(*func)(SharedInvalidationMessage *msg))
Definition inval.c:574
static InvalidationInfo * inplaceInvalInfo
Definition inval.c:257
static TransInvalidationInfo * transInvalInfo
Definition inval.c:255
static void AppendInvalidationMessages(InvalidationMsgsGroup *dest, InvalidationMsgsGroup *src)
Definition inval.c:560
#define SetGroupToFollow(targetgroup, priorgroup)
Definition inval.c:198
void CommandEndInvalidationMessages(void)
Definition inval.c:1409
void pfree(void *pointer)
Definition mcxt.c:1616
static int fb(int x)
struct TransInvalidationInfo * parent
Definition inval.c:249
int GetCurrentTransactionNestLevel(void)
Definition xact.c:930

References AppendInvalidationMessages(), Assert, CommandEndInvalidationMessages(), fb(), GetCurrentTransactionNestLevel(), inplaceInvalInfo, LocalExecuteInvalidationMessage(), TransInvalidationInfo::parent, pfree(), ProcessInvalidationMessages(), SetGroupToFollow, and transInvalInfo.

Referenced by AbortSubTransaction(), and CommitSubTransaction().

◆ AtEOXact_Inval()

void AtEOXact_Inval ( bool  isCommit)
extern

Definition at line 1199 of file inval.c.

1200{
1202
1203 /* Quick exit if no transactional messages */
1204 if (transInvalInfo == NULL)
1205 return;
1206
1207 /* Must be at top of stack */
1209
1210 INJECTION_POINT("transaction-end-process-inval", NULL);
1211
1212 if (isCommit)
1213 {
1214 /*
1215 * Relcache init file invalidation requires processing both before and
1216 * after we send the SI messages. However, we need not do anything
1217 * unless we committed.
1218 */
1221
1224
1227
1230 }
1231 else
1232 {
1235 }
1236
1237 /* Need not free anything explicitly */
1239}
#define INJECTION_POINT(name, arg)
static void ProcessInvalidationMessagesMulti(InvalidationMsgsGroup *group, void(*func)(const SharedInvalidationMessage *msgs, int n))
Definition inval.c:586
void RelationCacheInitFilePostInvalidate(void)
Definition relcache.c:6880
void RelationCacheInitFilePreInvalidate(void)
Definition relcache.c:6855
void SendSharedInvalidMessages(const SharedInvalidationMessage *msgs, int n)
Definition sinval.c:47
bool RelcacheInitFileInval
Definition inval.c:236
InvalidationMsgsGroup CurrentCmdInvalidMsgs
Definition inval.c:233
struct InvalidationInfo ii
Definition inval.c:243
InvalidationMsgsGroup PriorCmdInvalidMsgs
Definition inval.c:246

References AppendInvalidationMessages(), Assert, InvalidationInfo::CurrentCmdInvalidMsgs, fb(), TransInvalidationInfo::ii, INJECTION_POINT, inplaceInvalInfo, LocalExecuteInvalidationMessage(), TransInvalidationInfo::my_level, TransInvalidationInfo::parent, TransInvalidationInfo::PriorCmdInvalidMsgs, ProcessInvalidationMessages(), ProcessInvalidationMessagesMulti(), RelationCacheInitFilePostInvalidate(), RelationCacheInitFilePreInvalidate(), InvalidationInfo::RelcacheInitFileInval, SendSharedInvalidMessages(), and transInvalInfo.

Referenced by AbortTransaction(), CommitTransaction(), and PostPrepare_Inval().

◆ AtInplace_Inval()

◆ CacheInvalidateCatalog()

void CacheInvalidateCatalog ( Oid  catalogId)
extern

Definition at line 1612 of file inval.c.

1613{
1614 Oid databaseId;
1615
1616 if (IsSharedRelation(catalogId))
1617 databaseId = InvalidOid;
1618 else
1619 databaseId = MyDatabaseId;
1620
1622 databaseId, catalogId);
1623}
bool IsSharedRelation(Oid relationId)
Definition catalog.c:304
Oid MyDatabaseId
Definition globals.c:94
static InvalidationInfo * PrepareInvalidationState(void)
Definition inval.c:682
static void RegisterCatalogInvalidation(InvalidationInfo *info, Oid dbId, Oid catId)
Definition inval.c:621
#define InvalidOid
unsigned int Oid

References InvalidOid, IsSharedRelation(), MyDatabaseId, PrepareInvalidationState(), and RegisterCatalogInvalidation().

Referenced by finish_heap_swap().

◆ CacheInvalidateHeapTuple()

void CacheInvalidateHeapTuple ( Relation  relation,
HeapTuple  tuple,
HeapTuple  newtuple 
)
extern

Definition at line 1571 of file inval.c.

1574{
1575 CacheInvalidateHeapTupleCommon(relation, tuple, newtuple,
1577}
static void CacheInvalidateHeapTupleCommon(Relation relation, HeapTuple tuple, HeapTuple newtuple, InvalidationInfo *(*prepare_callback)(void))
Definition inval.c:1436

References CacheInvalidateHeapTupleCommon(), and PrepareInvalidationState().

Referenced by AlterDomainAddConstraint(), AlterDomainDropConstraint(), heap_delete(), heap_inplace_update_and_unlock(), heap_insert(), heap_multi_insert(), and heap_update().

◆ CacheInvalidateHeapTupleInplace()

void CacheInvalidateHeapTupleInplace ( Relation  relation,
HeapTuple  key_equivalent_tuple 
)
extern

Definition at line 1593 of file inval.c.

1595{
1598}
static InvalidationInfo * PrepareInplaceInvalidationState(void)
Definition inval.c:752

References CacheInvalidateHeapTupleCommon(), fb(), and PrepareInplaceInvalidationState().

Referenced by heap_inplace_lock().

◆ CacheInvalidateRelcache()

◆ CacheInvalidateRelcacheAll()

◆ CacheInvalidateRelcacheByRelid()

void CacheInvalidateRelcacheByRelid ( Oid  relid)
extern

Definition at line 1691 of file inval.c.

1692{
1693 HeapTuple tup;
1694
1696 if (!HeapTupleIsValid(tup))
1697 elog(ERROR, "cache lookup failed for relation %u", relid);
1700}
#define ERROR
Definition elog.h:39
#define elog(elevel,...)
Definition elog.h:226
#define HeapTupleIsValid(tuple)
Definition htup.h:78
void CacheInvalidateRelcacheByTuple(HeapTuple classTuple)
Definition inval.c:1669
static Datum ObjectIdGetDatum(Oid X)
Definition postgres.h:262
void ReleaseSysCache(HeapTuple tuple)
Definition syscache.c:264
HeapTuple SearchSysCache1(int cacheId, Datum key1)
Definition syscache.c:220

References CacheInvalidateRelcacheByTuple(), elog, ERROR, fb(), HeapTupleIsValid, ObjectIdGetDatum(), ReleaseSysCache(), and SearchSysCache1().

Referenced by AlterConstrUpdateConstraintEntry(), ATExecAlterConstraintInternal(), ATExecAttachPartition(), DefineIndex(), DetachPartitionFinalize(), heap_drop_with_catalog(), InvalidatePublicationRels(), ReindexRelationConcurrently(), RemoveStatisticsById(), and StorePartitionBound().

◆ CacheInvalidateRelcacheByTuple()

void CacheInvalidateRelcacheByTuple ( HeapTuple  classTuple)
extern

Definition at line 1669 of file inval.c.

1670{
1672 Oid databaseId;
1674
1675 relationId = classtup->oid;
1676 if (classtup->relisshared)
1677 databaseId = InvalidOid;
1678 else
1679 databaseId = MyDatabaseId;
1681 databaseId, relationId);
1682}
static void * GETSTRUCT(const HeapTupleData *tuple)
FormData_pg_class * Form_pg_class
Definition pg_class.h:156

References fb(), GETSTRUCT(), InvalidOid, MyDatabaseId, PrepareInvalidationState(), and RegisterRelcacheInvalidation().

Referenced by CacheInvalidateRelcacheByRelid(), copy_table_data(), CreateTriggerFiringOn(), index_update_stats(), RemoveRoleFromObjectPolicy(), SetRelationHasSubclass(), SetRelationRuleStatus(), and swap_relation_files().

◆ CacheInvalidateRelmap()

void CacheInvalidateRelmap ( Oid  databaseId)
extern

Definition at line 1789 of file inval.c.

1790{
1792
1794 msg.rm.dbId = databaseId;
1795 /* check AddCatcacheInvalidationMessage() for an explanation */
1796 VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg));
1797
1799}
#define VALGRIND_MAKE_MEM_DEFINED(addr, size)
Definition memdebug.h:26
#define SHAREDINVALRELMAP_ID
Definition sinval.h:97
SharedInvalRelmapMsg rm
Definition sinval.h:131

References SharedInvalRelmapMsg::dbId, SharedInvalRelmapMsg::id, SharedInvalidationMessage::rm, SendSharedInvalidMessages(), SHAREDINVALRELMAP_ID, and VALGRIND_MAKE_MEM_DEFINED.

Referenced by write_relmap_file().

◆ CacheInvalidateRelSync()

void CacheInvalidateRelSync ( Oid  relid)
extern

Definition at line 1712 of file inval.c.

1713{
1715 MyDatabaseId, relid);
1716}
static void RegisterRelsyncInvalidation(InvalidationInfo *info, Oid dbId, Oid relId)
Definition inval.c:660

References MyDatabaseId, PrepareInvalidationState(), and RegisterRelsyncInvalidation().

Referenced by CacheInvalidateRelSyncAll(), and InvalidatePubRelSyncCache().

◆ CacheInvalidateRelSyncAll()

void CacheInvalidateRelSyncAll ( void  )
extern

Definition at line 1724 of file inval.c.

1725{
1727}
void CacheInvalidateRelSync(Oid relid)
Definition inval.c:1712

References CacheInvalidateRelSync(), and InvalidOid.

Referenced by InvalidatePubRelSyncCache().

◆ CacheInvalidateSmgr()

void CacheInvalidateSmgr ( RelFileLocatorBackend  rlocator)
extern

Definition at line 1755 of file inval.c.

1756{
1758
1759 /* verify optimization stated above stays valid */
1761 "MAX_BACKENDS_BITS is too big for inval.c");
1762
1763 msg.sm.id = SHAREDINVALSMGR_ID;
1764 msg.sm.backend_hi = rlocator.backend >> 16;
1765 msg.sm.backend_lo = rlocator.backend & 0xffff;
1766 msg.sm.rlocator = rlocator.locator;
1767 /* check AddCatcacheInvalidationMessage() for an explanation */
1768 VALGRIND_MAKE_MEM_DEFINED(&msg, sizeof(msg));
1769
1771}
#define StaticAssertDecl(condition, errmessage)
Definition c.h:942
#define MAX_BACKENDS_BITS
Definition procnumber.h:38
#define SHAREDINVALSMGR_ID
Definition sinval.h:86
RelFileLocator locator
uint16 backend_lo
Definition sinval.h:93
RelFileLocator rlocator
Definition sinval.h:94
SharedInvalSmgrMsg sm
Definition sinval.h:130

References RelFileLocatorBackend::backend, SharedInvalSmgrMsg::backend_hi, SharedInvalSmgrMsg::backend_lo, SharedInvalSmgrMsg::id, RelFileLocatorBackend::locator, MAX_BACKENDS_BITS, SharedInvalSmgrMsg::rlocator, SendSharedInvalidMessages(), SHAREDINVALSMGR_ID, SharedInvalidationMessage::sm, StaticAssertDecl, and VALGRIND_MAKE_MEM_DEFINED.

Referenced by smgrdounlinkall(), smgrtruncate(), and vm_extend().

◆ CacheRegisterRelcacheCallback()

void CacheRegisterRelcacheCallback ( RelcacheCallbackFunction  func,
Datum  arg 
)
extern

Definition at line 1858 of file inval.c.

1860{
1862 elog(FATAL, "out of relcache_callback_list slots");
1863
1866
1868}
#define FATAL
Definition elog.h:41
static int relcache_callback_count
Definition inval.c:294
static struct RELCACHECALLBACK relcache_callback_list[MAX_RELCACHE_CALLBACKS]
#define MAX_RELCACHE_CALLBACKS
Definition inval.c:273
void * arg
RelcacheCallbackFunction function
Definition inval.c:290

References RELCACHECALLBACK::arg, arg, elog, FATAL, RELCACHECALLBACK::function, MAX_RELCACHE_CALLBACKS, relcache_callback_count, and relcache_callback_list.

Referenced by init_rel_sync_cache(), InitializeRelfilenumberMap(), InitPlanCache(), logicalrep_partmap_init(), logicalrep_relmap_init(), and lookup_type_cache().

◆ CacheRegisterRelSyncCallback()

void CacheRegisterRelSyncCallback ( RelSyncCallbackFunction  func,
Datum  arg 
)
extern

Definition at line 1879 of file inval.c.

1881{
1883 elog(FATAL, "out of relsync_callback_list slots");
1884
1887
1889}
static int relsync_callback_count
Definition inval.c:302
static struct RELSYNCCALLBACK relsync_callback_list[MAX_RELSYNC_CALLBACKS]
#define MAX_RELSYNC_CALLBACKS
Definition inval.c:274
RelSyncCallbackFunction function
Definition inval.c:298

References RELSYNCCALLBACK::arg, arg, elog, FATAL, RELSYNCCALLBACK::function, MAX_RELSYNC_CALLBACKS, relsync_callback_count, and relsync_callback_list.

Referenced by pgoutput_startup().

◆ CacheRegisterSyscacheCallback()

void CacheRegisterSyscacheCallback ( int  cacheid,
SyscacheCallbackFunction  func,
Datum  arg 
)
extern

Definition at line 1816 of file inval.c.

1819{
1821 elog(FATAL, "invalid cache ID: %d", cacheid);
1823 elog(FATAL, "out of syscache_callback_list slots");
1824
1826 {
1827 /* first callback for this cache */
1829 }
1830 else
1831 {
1832 /* add to end of chain, so that older callbacks are called first */
1834
1835 while (syscache_callback_list[i].link > 0)
1838 }
1839
1844
1846}
static struct SYSCACHECALLBACK syscache_callback_list[MAX_SYSCACHE_CALLBACKS]
#define MAX_SYSCACHE_CALLBACKS
Definition inval.c:272
static int16 syscache_callback_links[SysCacheSize]
Definition inval.c:284
static int syscache_callback_count
Definition inval.c:286
int i
Definition isn.c:77
SyscacheCallbackFunction function
Definition inval.c:280

References SYSCACHECALLBACK::arg, arg, elog, FATAL, fb(), SYSCACHECALLBACK::function, i, SYSCACHECALLBACK::id, SYSCACHECALLBACK::link, MAX_SYSCACHE_CALLBACKS, syscache_callback_count, syscache_callback_links, and syscache_callback_list.

Referenced by BuildEventTriggerCache(), find_oper_cache_entry(), GetConnection(), init_rel_sync_cache(), init_ts_config_cache(), initialize_acl(), InitializeAttoptCache(), InitializeLogRepWorker(), InitializeSearchPath(), InitializeShippableCache(), InitializeTableSpaceCache(), InitPlanCache(), lookup_proof_cache(), lookup_ts_dictionary_cache(), lookup_ts_parser_cache(), lookup_type_cache(), ParallelApplyWorkerMain(), pgoutput_startup(), ri_InitHashTables(), SetupApplyOrSyncWorker(), and superuser_arg().

◆ CallRelSyncCallbacks()

void CallRelSyncCallbacks ( Oid  relid)
extern

Definition at line 1920 of file inval.c.

1921{
1922 for (int i = 0; i < relsync_callback_count; i++)
1923 {
1925
1926 ccitem->function(ccitem->arg, relid);
1927 }
1928}

References fb(), RELSYNCCALLBACK::function, i, relsync_callback_count, and relsync_callback_list.

Referenced by LocalExecuteInvalidationMessage().

◆ CallSyscacheCallbacks()

void CallSyscacheCallbacks ( int  cacheid,
uint32  hashvalue 
)
extern

Definition at line 1898 of file inval.c.

1899{
1900 int i;
1901
1903 elog(ERROR, "invalid cache ID: %d", cacheid);
1904
1906 while (i >= 0)
1907 {
1909
1910 Assert(ccitem->id == cacheid);
1911 ccitem->function(ccitem->arg, cacheid, hashvalue);
1912 i = ccitem->link - 1;
1913 }
1914}

References Assert, elog, ERROR, fb(), i, syscache_callback_links, and syscache_callback_list.

Referenced by CatalogCacheFlushCatalog(), and LocalExecuteInvalidationMessage().

◆ CommandEndInvalidationMessages()

void CommandEndInvalidationMessages ( void  )
extern

Definition at line 1409 of file inval.c.

1410{
1411 /*
1412 * You might think this shouldn't be called outside any transaction, but
1413 * bootstrap does it, and also ABORT issued when not in a transaction. So
1414 * just quietly return if no state to work on.
1415 */
1416 if (transInvalInfo == NULL)
1417 return;
1418
1421
1422 /* WAL Log per-command invalidation messages for logical decoding */
1425
1428}
void LogLogicalInvalidations(void)
Definition inval.c:1939
#define XLogLogicalInfoActive()
Definition xlog.h:136

References AppendInvalidationMessages(), InvalidationInfo::CurrentCmdInvalidMsgs, fb(), TransInvalidationInfo::ii, LocalExecuteInvalidationMessage(), LogLogicalInvalidations(), TransInvalidationInfo::PriorCmdInvalidMsgs, ProcessInvalidationMessages(), transInvalInfo, and XLogLogicalInfoActive.

Referenced by AtCCI_LocalCache(), and AtEOSubXact_Inval().

◆ ForgetInplace_Inval()

void ForgetInplace_Inval ( void  )
extern

Definition at line 1286 of file inval.c.

1287{
1289}

References fb(), and inplaceInvalInfo.

Referenced by heap_inplace_lock(), and heap_inplace_unlock().

◆ InvalidateSystemCaches()

◆ InvalidateSystemCachesExtended()

void InvalidateSystemCachesExtended ( bool  debug_discard)
extern

Definition at line 785 of file inval.c.

786{
787 int i;
788
791 RelationCacheInvalidate(debug_discard); /* gets smgr and relmap too */
792
793 for (i = 0; i < syscache_callback_count; i++)
794 {
796
797 ccitem->function(ccitem->arg, ccitem->id, 0);
798 }
799
800 for (i = 0; i < relcache_callback_count; i++)
801 {
803
805 }
806
807 for (i = 0; i < relsync_callback_count; i++)
808 {
810
812 }
813}
void ResetCatalogCachesExt(bool debug_discard)
Definition catcache.c:811
void RelationCacheInvalidate(bool debug_discard)
Definition relcache.c:2989
void InvalidateCatalogSnapshot(void)
Definition snapmgr.c:455

References fb(), SYSCACHECALLBACK::function, RELCACHECALLBACK::function, RELSYNCCALLBACK::function, i, InvalidateCatalogSnapshot(), InvalidOid, RelationCacheInvalidate(), relcache_callback_count, relcache_callback_list, relsync_callback_count, relsync_callback_list, ResetCatalogCachesExt(), syscache_callback_count, and syscache_callback_list.

Referenced by AcceptInvalidationMessages(), and InvalidateSystemCaches().

◆ LogLogicalInvalidations()

void LogLogicalInvalidations ( void  )
extern

Definition at line 1939 of file inval.c.

1940{
1942 InvalidationMsgsGroup *group;
1943 int nmsgs;
1944
1945 /* Quick exit if we haven't done anything with invalidation messages. */
1946 if (transInvalInfo == NULL)
1947 return;
1948
1950 nmsgs = NumMessagesInGroup(group);
1951
1952 if (nmsgs > 0)
1953 {
1954 /* prepare record */
1956 xlrec.nmsgs = nmsgs;
1957
1958 /* perform insertion */
1962 XLogRegisterData(msgs,
1963 n * sizeof(SharedInvalidationMessage)));
1965 XLogRegisterData(msgs,
1966 n * sizeof(SharedInvalidationMessage)));
1968 }
1969}
#define NumMessagesInGroup(group)
Definition inval.c:207
#define CatCacheMsgs
Definition inval.c:171
#define ProcessMessageSubGroupMulti(group, subgroup, codeFragment)
Definition inval.c:402
#define RelCacheMsgs
Definition inval.c:172
#define MinSizeOfXactInvals
Definition xact.h:308
#define XLOG_XACT_INVALIDATIONS
Definition xact.h:176
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
Definition xloginsert.c:478
void XLogRegisterData(const void *data, uint32 len)
Definition xloginsert.c:368
void XLogBeginInsert(void)
Definition xloginsert.c:152

References CatCacheMsgs, InvalidationInfo::CurrentCmdInvalidMsgs, fb(), TransInvalidationInfo::ii, MinSizeOfXactInvals, NumMessagesInGroup, ProcessMessageSubGroupMulti, RelCacheMsgs, transInvalInfo, XLOG_XACT_INVALIDATIONS, XLogBeginInsert(), XLogInsert(), and XLogRegisterData().

Referenced by CommandEndInvalidationMessages(), and RecordTransactionCommit().

◆ PostPrepare_Inval()

void PostPrepare_Inval ( void  )
extern

Definition at line 993 of file inval.c.

994{
995 AtEOXact_Inval(false);
996}
void AtEOXact_Inval(bool isCommit)
Definition inval.c:1199

References AtEOXact_Inval().

Referenced by PrepareTransaction().

◆ PreInplace_Inval()

Variable Documentation

◆ debug_discard_caches

PGDLLIMPORT int debug_discard_caches
extern

Definition at line 260 of file inval.c.

Referenced by AcceptInvalidationMessages(), LookupOpclassInfo(), and RelationBuildDesc().