MCPcopy Create free account
hub / github.com/apache/cloudberry / XLogRegisterBuffer

Function XLogRegisterBuffer

src/backend/access/transam/xloginsert.c:228–275  ·  view source on GitHub ↗

* Register a reference to a buffer with the WAL record being constructed. * This must be called for every page that the WAL-logged operation modifies. */

Source from the content-addressed store, hash-verified

226 * This must be called for every page that the WAL-logged operation modifies.
227 */
228void
229XLogRegisterBuffer(uint8 block_id, Buffer buffer, uint8 flags)
230{
231 registered_buffer *regbuf;
232
233 /* NO_IMAGE doesn't make sense with FORCE_IMAGE */
234 Assert(!((flags & REGBUF_FORCE_IMAGE) && (flags & (REGBUF_NO_IMAGE))));
235 Assert(begininsert_called);
236
237 if (block_id >= max_registered_block_id)
238 {
239 if (block_id >= max_registered_buffers)
240 elog(ERROR, "too many registered buffers");
241 max_registered_block_id = block_id + 1;
242 }
243
244 regbuf = &registered_buffers[block_id];
245
246 BufferGetTag(buffer, &regbuf->rnode, &regbuf->forkno, &regbuf->block);
247 regbuf->page = BufferGetPage(buffer);
248 regbuf->flags = flags;
249 regbuf->rdata_tail = (XLogRecData *) &regbuf->rdata_head;
250 regbuf->rdata_len = 0;
251
252 /*
253 * Check that this page hasn't already been registered with some other
254 * block_id.
255 */
256#ifdef USE_ASSERT_CHECKING
257 {
258 int i;
259
260 for (i = 0; i < max_registered_block_id; i++)
261 {
262 registered_buffer *regbuf_old = &registered_buffers[i];
263
264 if (i == block_id || !regbuf_old->in_use)
265 continue;
266
267 Assert(!RelFileNodeEquals(regbuf_old->rnode, regbuf->rnode) ||
268 regbuf_old->forkno != regbuf->forkno ||
269 regbuf_old->block != regbuf->block);
270 }
271 }
272#endif
273
274 regbuf->in_use = true;
275}
276
277/*
278 * Like XLogRegisterBuffer, but for registering a block that's not in the

Callers 15

fill_seq_with_dataFunction · 0.85
nextval_internalFunction · 0.85
do_setvalFunction · 0.85
addLeafTupleFunction · 0.85
moveLeafsFunction · 0.85
doPickSplitFunction · 0.85
spgAddNodeActionFunction · 0.85
spgSplitNodeActionFunction · 0.85
vacuumLeafPageFunction · 0.85
vacuumLeafRootFunction · 0.85
ginUpdateStatsFunction · 0.85

Calls 1

BufferGetTagFunction · 0.85

Tested by

no test coverage detected