📄 trx0undo.h
字号:
trx_t* trx, /* in: transaction */ trx_undo_t* undo, /* in: undo log memory copy */ mtr_t* mtr); /* in: mtr *//**************************************************************************Adds the update undo log header as the first in the history list, andfrees the memory object, or puts it to the list of cached update undo logsegments. */voidtrx_undo_update_cleanup(/*====================*/ trx_t* trx, /* in: trx owning the update undo log */ page_t* undo_page, /* in: update undo log header page, x-latched */ mtr_t* mtr); /* in: mtr *//**********************************************************************Frees or caches an insert undo log after a transaction commit or rollback.Knowledge of inserts is not needed after a commit or rollback, thereforethe data can be discarded. */voidtrx_undo_insert_cleanup(/*====================*/ trx_t* trx); /* in: transaction handle *//***************************************************************Parses the redo log entry of an undo log page initialization. */byte*trx_undo_parse_page_init(/*======================*/ /* out: end of log record or NULL */ byte* ptr, /* in: buffer */ byte* end_ptr,/* in: buffer end */ page_t* page, /* in: page or NULL */ mtr_t* mtr); /* in: mtr or NULL *//***************************************************************Parses the redo log entry of an undo log page header create or reuse. */byte*trx_undo_parse_page_header(/*=======================*/ /* out: end of log record or NULL */ ulint type, /* in: MLOG_UNDO_HDR_CREATE or MLOG_UNDO_HDR_REUSE */ byte* ptr, /* in: buffer */ byte* end_ptr,/* in: buffer end */ page_t* page, /* in: page or NULL */ mtr_t* mtr); /* in: mtr or NULL *//***************************************************************Parses the redo log entry of an undo log page header discard. */byte*trx_undo_parse_discard_latest(/*==========================*/ /* out: end of log record or NULL */ byte* ptr, /* in: buffer */ byte* end_ptr,/* in: buffer end */ page_t* page, /* in: page or NULL */ mtr_t* mtr); /* in: mtr or NULL *//* Types of an undo log segment */#define TRX_UNDO_INSERT 1 /* contains undo entries for inserts */#define TRX_UNDO_UPDATE 2 /* contains undo entries for updates and delete markings: in short, modifys (the name 'UPDATE' is a historical relic) *//* States of an undo log segment */#define TRX_UNDO_ACTIVE 1 /* contains an undo log of an active transaction */#define TRX_UNDO_CACHED 2 /* cached for quick reuse */#define TRX_UNDO_TO_FREE 3 /* insert undo segment can be freed */#define TRX_UNDO_TO_PURGE 4 /* update undo segment will not be reused: it can be freed in purge when all undo data in it is removed */#define TRX_UNDO_PREPARED 5 /* contains an undo log of an prepared transaction *//* Transaction undo log memory object; this is protected by the undo_mutexin the corresponding transaction object */struct trx_undo_struct{ /*-----------------------------*/ ulint id; /* undo log slot number within the rollback segment */ ulint type; /* TRX_UNDO_INSERT or TRX_UNDO_UPDATE */ ulint state; /* state of the corresponding undo log segment */ ibool del_marks; /* relevant only in an update undo log: this is TRUE if the transaction may have delete marked records, because of a delete of a row or an update of an indexed field; purge is then necessary; also TRUE if the transaction has updated an externally stored field */ dulint trx_id; /* id of the trx assigned to the undo log */ XID xid; /* X/Open XA transaction identification */ ibool dict_operation; /* TRUE if a dict operation trx */ dulint table_id; /* if a dict operation, then the table id */ trx_rseg_t* rseg; /* rseg where the undo log belongs */ /*-----------------------------*/ ulint space; /* space id where the undo log placed */ ulint hdr_page_no; /* page number of the header page in the undo log */ ulint hdr_offset; /* header offset of the undo log on the page */ ulint last_page_no; /* page number of the last page in the undo log; this may differ from top_page_no during a rollback */ ulint size; /* current size in pages */ /*-----------------------------*/ ulint empty; /* TRUE if the stack of undo log records is currently empty */ ulint top_page_no; /* page number where the latest undo log record was catenated; during rollback the page from which the latest undo record was chosen */ ulint top_offset; /* offset of the latest undo record, i.e., the topmost element in the undo log if we think of it as a stack */ dulint top_undo_no; /* undo number of the latest record */ page_t* guess_page; /* guess for the buffer frame where the top page might reside */ /*-----------------------------*/ UT_LIST_NODE_T(trx_undo_t) undo_list; /* undo log objects in the rollback segment are chained into lists */};/* The offset of the undo log page header on pages of the undo log */#define TRX_UNDO_PAGE_HDR FSEG_PAGE_DATA/*-------------------------------------------------------------*//* Transaction undo log page header offsets */#define TRX_UNDO_PAGE_TYPE 0 /* TRX_UNDO_INSERT or TRX_UNDO_UPDATE */#define TRX_UNDO_PAGE_START 2 /* Byte offset where the undo log records for the LATEST transaction start on this page (remember that in an update undo log, the first page can contain several undo logs) */#define TRX_UNDO_PAGE_FREE 4 /* On each page of the undo log this field contains the byte offset of the first free byte on the page */#define TRX_UNDO_PAGE_NODE 6 /* The file list node in the chain of undo log pages *//*-------------------------------------------------------------*/#define TRX_UNDO_PAGE_HDR_SIZE (6 + FLST_NODE_SIZE)/* An update undo segment with just one page can be reused if it has< this number bytes used; we must leave space at least for one new undolog header on the page */#define TRX_UNDO_PAGE_REUSE_LIMIT (3 * UNIV_PAGE_SIZE / 4)/* An update undo log segment may contain several undo logs on its first pageif the undo logs took so little space that the segment could be cached andreused. All the undo log headers are then on the first page, and the last oneowns the undo log records on subsequent pages if the segment is bigger thanone page. If an undo log is stored in a segment, then on the first page it isallowed to have zero undo records, but if the segment extends to severalpages, then all the rest of the pages must contain at least one undo logrecord. *//* The offset of the undo log segment header on the first page of the undolog segment */#define TRX_UNDO_SEG_HDR (TRX_UNDO_PAGE_HDR + TRX_UNDO_PAGE_HDR_SIZE)/*-------------------------------------------------------------*/#define TRX_UNDO_STATE 0 /* TRX_UNDO_ACTIVE, ... */#define TRX_UNDO_LAST_LOG 2 /* Offset of the last undo log header on the segment header page, 0 if none */#define TRX_UNDO_FSEG_HEADER 4 /* Header for the file segment which the undo log segment occupies */#define TRX_UNDO_PAGE_LIST (4 + FSEG_HEADER_SIZE) /* Base node for the list of pages in the undo log segment; defined only on the undo log segment's first page *//*-------------------------------------------------------------*//* Size of the undo log segment header */#define TRX_UNDO_SEG_HDR_SIZE (4 + FSEG_HEADER_SIZE + FLST_BASE_NODE_SIZE)/* The undo log header. There can be several undo log headers on the firstpage of an update undo log segment. *//*-------------------------------------------------------------*/#define TRX_UNDO_TRX_ID 0 /* Transaction id */#define TRX_UNDO_TRX_NO 8 /* Transaction number of the transaction; defined only if the log is in a history list */#define TRX_UNDO_DEL_MARKS 16 /* Defined only in an update undo log: TRUE if the transaction may have done delete markings of records, and thus purge is necessary */#define TRX_UNDO_LOG_START 18 /* Offset of the first undo log record of this log on the header page; purge may remove undo log record from the log start, and therefore this is not necessarily the same as this log header end offset */#define TRX_UNDO_XID_EXISTS 20 /* TRUE if undo log header includes X/Open XA transaction identification XID */#define TRX_UNDO_DICT_TRANS 21 /* TRUE if the transaction is a table create, index create, or drop transaction: in recovery the transaction cannot be rolled back in the usual way: a 'rollback' rather means dropping the created or dropped table, if it still exists */#define TRX_UNDO_TABLE_ID 22 /* Id of the table if the preceding field is TRUE */#define TRX_UNDO_NEXT_LOG 30 /* Offset of the next undo log header on this page, 0 if none */#define TRX_UNDO_PREV_LOG 32 /* Offset of the previous undo log header on this page, 0 if none */#define TRX_UNDO_HISTORY_NODE 34 /* If the log is put to the history list, the file list node is here *//*-------------------------------------------------------------*/#define TRX_UNDO_LOG_OLD_HDR_SIZE (34 + FLST_NODE_SIZE)/* Note: the writing of the undo log old header is coded by a log recordMLOG_UNDO_HDR_CREATE or MLOG_UNDO_HDR_REUSE. The appending of an XID to theheader is logged separately. In this sense, the XID is not really a memberof the undo log header. TODO: do not append the XID to the log header if XAis not needed by the user. The XID wastes about 150 bytes of space in everyundo log. In the history list we may have millions of undo logs, which meansquite a large overhead. *//* X/Open XA Transaction Identification (XID) */#define TRX_UNDO_XA_FORMAT (TRX_UNDO_LOG_OLD_HDR_SIZE)#define TRX_UNDO_XA_TRID_LEN (TRX_UNDO_XA_FORMAT + 4)#define TRX_UNDO_XA_BQUAL_LEN (TRX_UNDO_XA_TRID_LEN + 4)#define TRX_UNDO_XA_XID (TRX_UNDO_XA_BQUAL_LEN + 4)/*--------------------------------------------------------------*/#define TRX_UNDO_LOG_XA_HDR_SIZE (TRX_UNDO_XA_XID + XIDDATASIZE) /* Total size of the header with the XA XID */#ifndef UNIV_NONINL#include "trx0undo.ic"#endif#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -