PostgreSQL Source Code: src/include/access/xloginsert.h File Reference (original) (raw)
Go to the source code of this file.
Macros | |
---|---|
#define | XLR_NORMAL_MAX_BLOCK_ID 4 |
#define | XLR_NORMAL_RDATAS 20 |
#define | REGBUF_FORCE_IMAGE 0x01 /* force a full-page image */ |
#define | REGBUF_NO_IMAGE 0x02 /* don't take a full-page image */ |
#define | REGBUF_WILL_INIT |
#define | REGBUF_STANDARD |
#define | REGBUF_KEEP_DATA |
#define | REGBUF_NO_CHANGE 0x20 /* intentionally register clean buffer */ |
◆ REGBUF_FORCE_IMAGE
#define REGBUF_FORCE_IMAGE 0x01 /* force a full-page image */
◆ REGBUF_KEEP_DATA
◆ REGBUF_NO_CHANGE
#define REGBUF_NO_CHANGE 0x20 /* intentionally register clean buffer */
◆ REGBUF_NO_IMAGE
#define REGBUF_NO_IMAGE 0x02 /* don't take a full-page image */
◆ REGBUF_STANDARD
◆ REGBUF_WILL_INIT
◆ XLR_NORMAL_MAX_BLOCK_ID
#define XLR_NORMAL_MAX_BLOCK_ID 4
◆ XLR_NORMAL_RDATAS
#define XLR_NORMAL_RDATAS 20
◆ InitXLogInsert()
void InitXLogInsert | ( | void | ) |
---|
Definition at line 1348 of file xloginsert.c.
1349{
1350#ifdef USE_ASSERT_CHECKING
1351
1352
1353
1354
1355
1356
1357
1358 size_t max_required =
1360
1362#endif
1363
1364
1366 {
1368 "WAL record construction",
1370 }
1371
1373 {
1378 }
1380 {
1384 }
1385
1386
1387
1388
1392}
Assert(PointerIsAligned(start, uint64))
void * MemoryContextAlloc(MemoryContext context, Size size)
void * MemoryContextAllocZero(MemoryContext context, Size size)
MemoryContext TopMemoryContext
#define AllocSetContextCreate
#define ALLOCSET_DEFAULT_SIZES
#define AllocSizeIsValid(size)
static int max_registered_buffers
static MemoryContext xloginsert_cxt
static char * hdr_scratch
static XLogRecData * rdatas
static registered_buffer * registered_buffers
#define HEADER_SCRATCH_SIZE
#define XLR_NORMAL_MAX_BLOCK_ID
#define XLR_NORMAL_RDATAS
size_t DecodeXLogRecordRequiredSpace(size_t xl_tot_len)
#define XLogRecordMaxSize
References ALLOCSET_DEFAULT_SIZES, AllocSetContextCreate, AllocSizeIsValid, Assert(), DecodeXLogRecordRequiredSpace(), hdr_scratch, HEADER_SCRATCH_SIZE, max_rdatas, max_registered_buffers, MemoryContextAlloc(), MemoryContextAllocZero(), rdatas, registered_buffers, TopMemoryContext, xloginsert_cxt, XLogRecordMaxSize, XLR_NORMAL_MAX_BLOCK_ID, and XLR_NORMAL_RDATAS.
Referenced by BaseInit().
◆ log_newpage()
Definition at line 1143 of file xloginsert.c.
1145{
1146 int flags;
1148
1150 if (page_std)
1152
1156
1157
1158
1159
1160
1162 {
1164 }
1165
1166 return recptr;
1167}
static bool PageIsNew(const PageData *page)
static void PageSetLSN(Page page, XLogRecPtr lsn)
XLogRecPtr XLogInsert(RmgrId rmid, uint8 info)
void XLogRegisterBlock(uint8 block_id, RelFileLocator *rlocator, ForkNumber forknum, BlockNumber blknum, const PageData *page, uint8 flags)
void XLogBeginInsert(void)
#define REGBUF_FORCE_IMAGE
References PageIsNew(), PageSetLSN(), REGBUF_FORCE_IMAGE, REGBUF_STANDARD, XLOG_FPI, XLogBeginInsert(), XLogInsert(), and XLogRegisterBlock().
Referenced by _hash_alloc_buckets(), _hash_init(), and log_newpage_buffer().
◆ log_newpage_buffer()
Definition at line 1237 of file xloginsert.c.
1238{
1243
1244
1246
1247 BufferGetTag(buffer, &rlocator, &forknum, &blkno);
1248
1249 return log_newpage(&rlocator, forknum, blkno, page, page_std);
1250}
void BufferGetTag(Buffer buffer, RelFileLocator *rlocator, ForkNumber *forknum, BlockNumber *blknum)
static Page BufferGetPage(Buffer buffer)
volatile uint32 CritSectionCount
XLogRecPtr log_newpage(RelFileLocator *rlocator, ForkNumber forknum, BlockNumber blkno, Page page, bool page_std)
References Assert(), BufferGetPage(), BufferGetTag(), CritSectionCount, and log_newpage().
Referenced by brin_initialize_empty_new_buffer(), brinbuildempty(), FreeSpaceMapPrepareTruncateRel(), ginbuildempty(), gistbuildempty(), heap_force_common(), lazy_scan_new_or_empty(), RelationCopyStorageUsingBuffer(), and visibilitymap_prepare_truncate().
◆ log_newpage_range()
Definition at line 1270 of file xloginsert.c.
1273{
1274 int flags;
1276
1278 if (page_std)
1280
1281
1282
1283
1284
1285
1287
1288 blkno = startblk;
1289 while (blkno < endblk)
1290 {
1293 int nbufs;
1294 int i;
1295
1297
1298
1299 nbufs = 0;
1301 {
1304
1306
1307
1308
1309
1310
1311
1313 bufpack[nbufs++] = buf;
1314 else
1316 blkno++;
1317 }
1318
1319
1320 if (nbufs == 0)
1321 break;
1322
1323
1325
1327 for (i = 0; i < nbufs; i++)
1328 {
1331 }
1332
1334
1335 for (i = 0; i < nbufs; i++)
1336 {
1339 }
1341 }
1342}
void UnlockReleaseBuffer(Buffer buffer)
void MarkBufferDirty(Buffer buffer)
void LockBuffer(Buffer buffer, int mode)
Buffer ReadBufferExtended(Relation reln, ForkNumber forkNum, BlockNumber blockNum, ReadBufferMode mode, BufferAccessStrategy strategy)
#define BUFFER_LOCK_EXCLUSIVE
#define START_CRIT_SECTION()
#define CHECK_FOR_INTERRUPTS()
#define END_CRIT_SECTION()
void XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
void XLogEnsureRecordSpace(int max_block_id, int ndatas)
References buf, BUFFER_LOCK_EXCLUSIVE, BufferGetPage(), CHECK_FOR_INTERRUPTS, END_CRIT_SECTION, i, LockBuffer(), MarkBufferDirty(), PageIsNew(), PageSetLSN(), RBM_NORMAL, ReadBufferExtended(), REGBUF_FORCE_IMAGE, REGBUF_STANDARD, START_CRIT_SECTION, UnlockReleaseBuffer(), XLOG_FPI, XLogBeginInsert(), XLogEnsureRecordSpace(), XLogInsert(), XLogRegisterBuffer(), and XLR_MAX_BLOCK_ID.
Referenced by ginbuild(), gistbuild(), smgrDoPendingSyncs(), and spgbuild().
◆ log_newpages()
Definition at line 1175 of file xloginsert.c.
1177{
1178 int flags;
1180 int i;
1181 int j;
1182
1184 if (page_std)
1186
1187
1188
1189
1190
1191
1193
1194 i = 0;
1195 while (i < num_pages)
1196 {
1198 int nbatch;
1199
1201
1202 nbatch = 0;
1204 {
1205 XLogRegisterBlock(nbatch, rlocator, forknum, blknos[i], pages[i], flags);
1206 i++;
1207 nbatch++;
1208 }
1209
1211
1213 {
1214
1215
1216
1217
1219 {
1221 }
1222 }
1223 }
1224}
Datum batch_start(PG_FUNCTION_ARGS)
References batch_start(), i, j, PageIsNew(), PageSetLSN(), REGBUF_FORCE_IMAGE, REGBUF_STANDARD, XLOG_FPI, XLogBeginInsert(), XLogEnsureRecordSpace(), XLogInsert(), XLogRegisterBlock(), and XLR_MAX_BLOCK_ID.
Referenced by smgr_bulk_flush().
◆ XLogBeginInsert()
void XLogBeginInsert | ( | void | ) |
---|
Definition at line 149 of file xloginsert.c.
150{
154
155
157 elog(ERROR, "cannot make new WAL entries during recovery");
158
160 elog(ERROR, "XLogBeginInsert was already called");
161
163}
bool XLogInsertAllowed(void)
static XLogRecData * mainrdata_head
static uint64 mainrdata_len
static bool begininsert_called
static int max_registered_block_id
static XLogRecData * mainrdata_last
References Assert(), begininsert_called, elog, ERROR, mainrdata_head, mainrdata_last, mainrdata_len, max_registered_block_id, and XLogInsertAllowed().
Referenced by _bt_allocbuf(), _bt_dedup_pass(), _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_getroot(), _bt_insertonpg(), _bt_mark_page_halfdead(), _bt_newlevel(), _bt_set_cleanup_info(), _bt_split(), _bt_unlink_halfdead_page(), _hash_addovflpage(), _hash_doinsert(), _hash_expandtable(), _hash_freeovflpage(), _hash_init(), _hash_splitbucket(), _hash_squeezebucket(), _hash_vacuum_one_page(), addLeafTuple(), AssignTransactionId(), brin_doinsert(), brin_doupdate(), brinbuild(), brinRevmapDesummarizeRange(), CreateCheckPoint(), CreateDatabaseUsingFileCopy(), CreateDirAndVersionFile(), CreateEndOfRecoveryRecord(), CreateOverwriteContrecordRecord(), createPostingTree(), CreateTableSpace(), do_pg_backup_stop(), do_setval(), doPickSplit(), DropTableSpace(), EndPrepare(), ExecuteTruncateGuts(), fill_seq_fork_with_data(), GenericXLogFinish(), ginDeletePage(), ginHeapTupleFastInsert(), ginPlaceToPage(), ginUpdateStats(), ginVacuumPostingTreeLeaf(), gistXLogAssignLSN(), gistXLogDelete(), gistXLogPageDelete(), gistXLogPageReuse(), gistXLogSplit(), gistXLogUpdate(), hashbucketcleanup(), hashbulkdelete(), heap_abort_speculative(), heap_delete(), heap_finish_speculative(), heap_inplace_update_and_unlock(), heap_insert(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heap_update(), log_heap_new_cid(), log_heap_prune_and_freeze(), log_heap_update(), log_heap_visible(), log_newpage(), log_newpage_range(), log_newpages(), log_smgrcreate(), log_split_page(), LogAccessExclusiveLocks(), LogCurrentRunningXacts(), logical_heap_rewrite_flush_mappings(), LogLogicalInvalidations(), LogLogicalMessage(), LogStandbyInvalidations(), movedb(), moveLeafs(), MultiXactIdCreateFromMembers(), nextval_internal(), pg_truncate_visibility_map(), RelationTruncate(), remove_dbtablespaces(), replorigin_advance(), replorigin_state_clear(), RequestXLogSwitch(), revmap_physical_extend(), shiftList(), spgAddNodeAction(), spgSplitNodeAction(), test_custom_rmgrs_insert_wal_record(), UpdateFullPageWrites(), vacuumLeafPage(), vacuumLeafRoot(), vacuumRedirectAndPlaceholder(), write_relmap_file(), writeListPage(), WriteMTruncateXlogRec(), WriteMZeroPageXlogRec(), WriteTruncateXlogRec(), WriteZeroPageXlogRec(), XactLogAbortRecord(), XactLogCommitRecord(), XLogPutNextOid(), XLogReportParameters(), XLogRestorePoint(), XLogSaveBufferForHint(), and xlogVacuumPage().
◆ XLogCheckBufferNeedsBackup()
bool XLogCheckBufferNeedsBackup | ( | Buffer | buffer | ) |
---|
◆ XLogEnsureRecordSpace()
void XLogEnsureRecordSpace | ( | int | max_block_id, |
---|---|---|---|
int | ndatas | ||
) |
Definition at line 175 of file xloginsert.c.
176{
177 int nbuffers;
178
179
180
181
182
183
184
186
187
192
194 elog(ERROR, "maximum number of WAL record block references exceeded");
195 nbuffers = max_block_id + 1;
196
198 {
201
202
203
204
205
209 }
210
212 {
215 }
216}
#define MemSet(start, val, len)
void * repalloc(void *pointer, Size size)
References Assert(), CritSectionCount, elog, ERROR, max_rdatas, max_registered_buffers, MemSet, rdatas, registered_buffers, repalloc(), XLR_MAX_BLOCK_ID, XLR_NORMAL_MAX_BLOCK_ID, and XLR_NORMAL_RDATAS.
Referenced by _hash_freeovflpage(), _hash_squeezebucket(), EndPrepare(), gistplacetopage(), log_newpage_range(), log_newpages(), and shiftList().
Definition at line 474 of file xloginsert.c.
475{
477
478
480 elog(ERROR, "XLogBeginInsert was not called");
481
482
483
484
485
489 elog(PANIC, "invalid xlog info mask %02X", info);
490
491 TRACE_POSTGRESQL_WAL_INSERT(rmid, info);
492
493
494
495
496
498 {
501 return EndPos;
502 }
503
504 do
505 {
508 bool topxid_included = false;
511 int num_fpi = 0;
512
513
514
515
516
517
519
521 &fpw_lsn, &num_fpi, &topxid_included);
522
524 topxid_included);
526
528
529 return EndPos;
530}
#define IsBootstrapProcessingMode()
XLogRecPtr XLogInsertRecord(XLogRecData *rdata, XLogRecPtr fpw_lsn, uint8 flags, int num_fpi, bool topxid_included)
#define SizeOfXLogLongPHD
#define InvalidXLogRecPtr
static uint8 curinsert_flags
void XLogResetInsertion(void)
static XLogRecData * XLogRecordAssemble(RmgrId rmid, uint8 info, XLogRecPtr RedoRecPtr, bool doPageWrites, XLogRecPtr *fpw_lsn, int *num_fpi, bool *topxid_included)
#define XLR_RMGR_INFO_MASK
#define XLR_SPECIAL_REL_UPDATE
#define XLR_CHECK_CONSISTENCY
References begininsert_called, curinsert_flags, doPageWrites, elog, ERROR, GetFullPageWriteInfo(), InvalidXLogRecPtr, IsBootstrapProcessingMode, PANIC, RedoRecPtr, SizeOfXLogLongPHD, XLogInsertRecord(), XLogRecordAssemble(), XLogResetInsertion(), XLR_CHECK_CONSISTENCY, XLR_RMGR_INFO_MASK, and XLR_SPECIAL_REL_UPDATE.
Referenced by _bt_allocbuf(), _bt_dedup_pass(), _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_getroot(), _bt_insertonpg(), _bt_mark_page_halfdead(), _bt_newlevel(), _bt_set_cleanup_info(), _bt_split(), _bt_unlink_halfdead_page(), _hash_addovflpage(), _hash_doinsert(), _hash_expandtable(), _hash_freeovflpage(), _hash_init(), _hash_splitbucket(), _hash_squeezebucket(), _hash_vacuum_one_page(), addLeafTuple(), AssignTransactionId(), brin_doinsert(), brin_doupdate(), brinbuild(), brinRevmapDesummarizeRange(), CreateCheckPoint(), CreateDatabaseUsingFileCopy(), CreateDirAndVersionFile(), CreateEndOfRecoveryRecord(), CreateOverwriteContrecordRecord(), createPostingTree(), CreateTableSpace(), do_pg_backup_stop(), do_setval(), doPickSplit(), DropTableSpace(), EndPrepare(), ExecuteTruncateGuts(), fill_seq_fork_with_data(), GenericXLogFinish(), ginDeletePage(), ginHeapTupleFastInsert(), ginPlaceToPage(), ginUpdateStats(), ginVacuumPostingTreeLeaf(), gistXLogAssignLSN(), gistXLogDelete(), gistXLogPageDelete(), gistXLogPageReuse(), gistXLogSplit(), gistXLogUpdate(), hashbucketcleanup(), hashbulkdelete(), heap_abort_speculative(), heap_delete(), heap_finish_speculative(), heap_inplace_update_and_unlock(), heap_insert(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heap_update(), log_heap_new_cid(), log_heap_prune_and_freeze(), log_heap_update(), log_heap_visible(), log_newpage(), log_newpage_range(), log_newpages(), log_smgrcreate(), log_split_page(), LogAccessExclusiveLocks(), LogCurrentRunningXacts(), logical_heap_rewrite_flush_mappings(), LogLogicalInvalidations(), LogLogicalMessage(), LogStandbyInvalidations(), movedb(), moveLeafs(), MultiXactIdCreateFromMembers(), nextval_internal(), pg_truncate_visibility_map(), RelationTruncate(), remove_dbtablespaces(), replorigin_advance(), replorigin_state_clear(), RequestXLogSwitch(), revmap_physical_extend(), shiftList(), spgAddNodeAction(), spgSplitNodeAction(), test_custom_rmgrs_insert_wal_record(), UpdateFullPageWrites(), vacuumLeafPage(), vacuumLeafRoot(), vacuumRedirectAndPlaceholder(), write_relmap_file(), writeListPage(), WriteMTruncateXlogRec(), WriteMZeroPageXlogRec(), WriteTruncateXlogRec(), WriteZeroPageXlogRec(), XactLogAbortRecord(), XactLogCommitRecord(), XLogPutNextOid(), XLogReportParameters(), XLogRestorePoint(), XLogSaveBufferForHint(), and xlogVacuumPage().
◆ XLogRegisterBlock()
Definition at line 309 of file xloginsert.c.
311{
313
315
318
320 elog(ERROR, "too many registered buffers");
321
323
324 regbuf->rlocator = *rlocator;
325 regbuf->forkno = forknum;
326 regbuf->block = blknum;
327 regbuf->page = page;
328 regbuf->flags = flags;
331
332
333
334
335
336#ifdef USE_ASSERT_CHECKING
337 {
338 int i;
339
341 {
343
344 if (i == block_id || !regbuf_old->in_use)
345 continue;
346
350 }
351 }
352#endif
353
354 regbuf->in_use = true;
355}
#define RelFileLocatorEquals(locator1, locator2)
References Assert(), begininsert_called, registered_buffer::block, elog, ERROR, registered_buffer::flags, for(), registered_buffer::forkno, i, registered_buffer::in_use, max_registered_block_id, max_registered_buffers, registered_buffer::page, registered_buffer::rdata_head, registered_buffer::rdata_len, registered_buffer::rdata_tail, registered_buffers, RelFileLocatorEquals, and registered_buffer::rlocator.
Referenced by heap_inplace_update_and_unlock(), log_newpage(), log_newpages(), and XLogSaveBufferForHint().
◆ XLogRegisterBufData()
void XLogRegisterBufData | ( | uint8 | block_id, |
---|---|---|---|
const void * | data, | ||
uint32 | len | ||
) |
Definition at line 405 of file xloginsert.c.
406{
409
411
412
415 elog(ERROR, "no block with id %d registered with WAL insertion",
416 block_id);
417
418
419
420
421
422
423
429 if (regbuf->rdata_len + len > UINT16_MAX || len > UINT16_MAX)
432 errdetail_internal("Registering more than maximum %u bytes allowed to block %u: current %u bytes, adding %u bytes.",
433 UINT16_MAX, block_id, regbuf->rdata_len, len)));
434
436
439
443}
int errmsg_internal(const char *fmt,...)
int errdetail_internal(const char *fmt,...)
#define ereport(elevel,...)
struct XLogRecData * next
References Assert(), begininsert_called, XLogRecData::data, data, elog, ereport, errdetail_internal(), errmsg_internal(), ERROR, registered_buffer::in_use, XLogRecData::len, len, max_rdatas, XLogRecData::next, num_rdatas, registered_buffer::rdata_len, registered_buffer::rdata_tail, rdatas, and registered_buffers.
Referenced by _bt_dedup_pass(), _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_getroot(), _bt_insertonpg(), _bt_newlevel(), _bt_set_cleanup_info(), _bt_split(), _bt_unlink_halfdead_page(), _hash_addovflpage(), _hash_doinsert(), _hash_expandtable(), _hash_freeovflpage(), _hash_squeezebucket(), brin_doinsert(), brin_doupdate(), dataExecPlaceToPageInternal(), dataExecPlaceToPageLeaf(), entryExecPlaceToPage(), GenericXLogFinish(), ginHeapTupleFastInsert(), ginVacuumPostingTreeLeaf(), gistXLogSplit(), gistXLogUpdate(), hashbucketcleanup(), heap_inplace_update_and_unlock(), heap_insert(), heap_multi_insert(), log_heap_prune_and_freeze(), log_heap_update(), and writeListPage().
◆ XLogRegisterBuffer()
Definition at line 242 of file xloginsert.c.
243{
245
246
249
250
251
252
253
254
255
256
257
258
259#ifdef USE_ASSERT_CHECKING
262#endif
263
265 {
267 elog(ERROR, "too many registered buffers");
269 }
270
272
275 regbuf->flags = flags;
278
279
280
281
282
283#ifdef USE_ASSERT_CHECKING
284 {
285 int i;
286
288 {
290
291 if (i == block_id || !regbuf_old->in_use)
292 continue;
293
297 }
298 }
299#endif
300
301 regbuf->in_use = true;
302}
bool BufferIsExclusiveLocked(Buffer buffer)
bool BufferIsDirty(Buffer buffer)
References Assert(), begininsert_called, registered_buffer::block, BufferGetPage(), BufferGetTag(), BufferIsDirty(), BufferIsExclusiveLocked(), elog, ERROR, registered_buffer::flags, for(), registered_buffer::forkno, i, registered_buffer::in_use, max_registered_block_id, max_registered_buffers, registered_buffer::page, registered_buffer::rdata_head, registered_buffer::rdata_len, registered_buffer::rdata_tail, REGBUF_FORCE_IMAGE, REGBUF_NO_CHANGE, REGBUF_NO_IMAGE, registered_buffers, RelFileLocatorEquals, and registered_buffer::rlocator.
Referenced by _bt_dedup_pass(), _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_getroot(), _bt_insertonpg(), _bt_mark_page_halfdead(), _bt_newlevel(), _bt_set_cleanup_info(), _bt_split(), _bt_unlink_halfdead_page(), _hash_addovflpage(), _hash_doinsert(), _hash_expandtable(), _hash_freeovflpage(), _hash_init(), _hash_splitbucket(), _hash_squeezebucket(), _hash_vacuum_one_page(), addLeafTuple(), brin_doinsert(), brin_doupdate(), brinbuild(), brinRevmapDesummarizeRange(), createPostingTree(), dataExecPlaceToPageInternal(), dataExecPlaceToPageLeaf(), do_setval(), doPickSplit(), entryExecPlaceToPage(), fill_seq_fork_with_data(), GenericXLogFinish(), ginDeletePage(), ginHeapTupleFastInsert(), ginPlaceToPage(), ginUpdateStats(), ginVacuumPostingTreeLeaf(), gistXLogDelete(), gistXLogPageDelete(), gistXLogSplit(), gistXLogUpdate(), hashbucketcleanup(), hashbulkdelete(), heap_abort_speculative(), heap_delete(), heap_finish_speculative(), heap_insert(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heap_update(), log_heap_prune_and_freeze(), log_heap_update(), log_heap_visible(), log_newpage_range(), log_split_page(), moveLeafs(), nextval_internal(), revmap_physical_extend(), shiftList(), spgAddNodeAction(), spgSplitNodeAction(), vacuumLeafPage(), vacuumLeafRoot(), vacuumRedirectAndPlaceholder(), writeListPage(), and xlogVacuumPage().
◆ XLogRegisterData()
void XLogRegisterData | ( | const void * | data, |
---|---|---|---|
uint32 | len | ||
) |
Definition at line 364 of file xloginsert.c.
365{
367
369
376
379
380
381
382
383
384
387
389}
References Assert(), begininsert_called, XLogRecData::data, data, ereport, errdetail_internal(), errmsg_internal(), ERROR, XLogRecData::len, len, mainrdata_last, mainrdata_len, max_rdatas, XLogRecData::next, num_rdatas, and rdatas.
Referenced by _bt_allocbuf(), _bt_dedup_pass(), _bt_delitems_delete(), _bt_delitems_vacuum(), _bt_getroot(), _bt_insertonpg(), _bt_mark_page_halfdead(), _bt_newlevel(), _bt_split(), _bt_unlink_halfdead_page(), _hash_addovflpage(), _hash_doinsert(), _hash_expandtable(), _hash_freeovflpage(), _hash_init(), _hash_splitbucket(), _hash_squeezebucket(), _hash_vacuum_one_page(), addLeafTuple(), AssignTransactionId(), brin_doinsert(), brin_doupdate(), brinbuild(), brinRevmapDesummarizeRange(), CreateCheckPoint(), CreateDatabaseUsingFileCopy(), CreateDirAndVersionFile(), CreateEndOfRecoveryRecord(), CreateOverwriteContrecordRecord(), createPostingTree(), CreateTableSpace(), do_pg_backup_stop(), do_setval(), doPickSplit(), DropTableSpace(), EndPrepare(), ExecuteTruncateGuts(), fill_seq_fork_with_data(), ginDeletePage(), ginHeapTupleFastInsert(), ginPlaceToPage(), ginUpdateStats(), gistXLogAssignLSN(), gistXLogDelete(), gistXLogPageDelete(), gistXLogPageReuse(), gistXLogSplit(), gistXLogUpdate(), hashbucketcleanup(), hashbulkdelete(), heap_abort_speculative(), heap_delete(), heap_finish_speculative(), heap_inplace_update_and_unlock(), heap_insert(), heap_lock_tuple(), heap_lock_updated_tuple_rec(), heap_multi_insert(), heap_update(), log_heap_new_cid(), log_heap_prune_and_freeze(), log_heap_update(), log_heap_visible(), log_smgrcreate(), LogAccessExclusiveLocks(), LogCurrentRunningXacts(), logical_heap_rewrite_flush_mappings(), LogLogicalInvalidations(), LogLogicalMessage(), LogStandbyInvalidations(), movedb(), moveLeafs(), MultiXactIdCreateFromMembers(), nextval_internal(), pg_truncate_visibility_map(), RelationTruncate(), remove_dbtablespaces(), replorigin_advance(), replorigin_state_clear(), revmap_physical_extend(), shiftList(), spgAddNodeAction(), spgSplitNodeAction(), test_custom_rmgrs_insert_wal_record(), UpdateFullPageWrites(), vacuumLeafPage(), vacuumLeafRoot(), vacuumRedirectAndPlaceholder(), write_relmap_file(), writeListPage(), WriteMTruncateXlogRec(), WriteMZeroPageXlogRec(), WriteTruncateXlogRec(), WriteZeroPageXlogRec(), XactLogAbortRecord(), XactLogCommitRecord(), XLogPutNextOid(), XLogReportParameters(), and XLogRestorePoint().
◆ XLogResetInsertion()
void XLogResetInsertion | ( | void | ) |
---|
Definition at line 222 of file xloginsert.c.
223{
224 int i;
225
228
235}
References begininsert_called, curinsert_flags, i, mainrdata_head, mainrdata_last, mainrdata_len, max_registered_block_id, num_rdatas, and registered_buffers.
Referenced by AbortSubTransaction(), AbortTransaction(), and XLogInsert().
◆ XLogSaveBufferForHint()
Definition at line 1065 of file xloginsert.c.
1066{
1070
1071
1072
1073
1075
1076
1077
1078
1080
1081
1082
1083
1084
1085
1086
1088
1090 {
1091 int flags = 0;
1097
1098
1099
1100
1101
1102
1103 if (buffer_std)
1104 {
1105
1109
1110 memcpy(copied_buffer.data, origdata, lower);
1112 }
1113 else
1114 memcpy(copied_buffer.data, origdata, BLCKSZ);
1115
1117
1118 if (buffer_std)
1120
1121 BufferGetTag(buffer, &rlocator, &forkno, &blkno);
1123
1125 }
1126
1127 return recptr;
1128}
XLogRecPtr BufferGetLSNAtomic(Buffer buffer)
static Block BufferGetBlock(Buffer buffer)
PageHeaderData * PageHeader
Datum lower(PG_FUNCTION_ARGS)
Datum upper(PG_FUNCTION_ARGS)
#define XLOG_FPI_FOR_HINT
#define DELAY_CHKPT_START
XLogRecPtr GetRedoRecPtr(void)
References Assert(), BufferGetBlock(), BufferGetLSNAtomic(), BufferGetPage(), BufferGetTag(), PGAlignedBlock::data, DELAY_CHKPT_START, PGPROC::delayChkptFlags, GetRedoRecPtr(), InvalidXLogRecPtr, lower(), MyProc, RedoRecPtr, REGBUF_STANDARD, upper(), XLOG_FPI_FOR_HINT, XLogBeginInsert(), XLogInsert(), and XLogRegisterBlock().
Referenced by MarkBufferDirtyHint().
◆ XLogSetRecordFlags()
void XLogSetRecordFlags | ( | uint8 | flags | ) |
---|
Definition at line 456 of file xloginsert.c.
References Assert(), begininsert_called, and curinsert_flags.
Referenced by EndPrepare(), ExecuteTruncateGuts(), gistXLogAssignLSN(), heap_delete(), heap_finish_speculative(), heap_insert(), heap_multi_insert(), log_heap_update(), LogAccessExclusiveLocks(), LogCurrentRunningXacts(), LogLogicalMessage(), RequestXLogSwitch(), test_custom_rmgrs_insert_wal_record(), XactLogAbortRecord(), and XactLogCommitRecord().