Slide 93
Slide 93 text
A Tour of PostgreSQL Concurrency Control, Luka Huang@COSCUP 2019
1. rseg_id - get rollback tablespace id
2. get data from undo log
4UFQTPG3PMM1PJOUFS
/** Decodes a roll pointer. */
inline void trx_undo_decode_roll_ptr
(
roll_ptr_t roll_ptr, /*!< in: roll pointer */
ibool *is_insert, /*!< out: TRUE if insert undo log */
ulint *rseg_id, /*!< out: rollback segment id */
page_no_t *page_no, /*!< out: page number */
ulint *offset) /*!< out: offset of the und
o
entry within page */
{
ut_ad(roll_ptr < (1ULL << 56))
;
*offset = (ulint)roll_ptr & 0xFFFF
;
roll_ptr >>= 16
;
*page_no = (ulint)roll_ptr & 0xFFFFFFFF
;
roll_ptr >>= 32
;
*rseg_id = (ulint)roll_ptr & 0x7F
;
roll_ptr >>= 7
;
*is_insert = (ibool)roll_ptr; /* TRUE==1 */
}