YoushouldhavereceivedacopyoftheGNUGeneralPublicLicense alongwiththisprogram;ifnot,writetotheFreeSoftware
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */
#ifndef _ma_loghandler_h #define _ma_loghandler_h
#define MB (1024UL*1024)
/* transaction log default cache size (TODO: make it global variable) */ #define TRANSLOG_PAGECACHE_SIZE (2*MB) /* transaction log default file size */ #define TRANSLOG_FILE_SIZE (1024U*MB) /* minimum possible transaction log size */ #define TRANSLOG_MIN_FILE_SIZE (8*MB) /* transaction log default flags (TODO: make it global variable) */ #ifdef HAVE_DBUG_TRANSLOG_CRC #define TRANSLOG_DEFAULT_FLAGS IF_DBUG(TRANSLOG_PAGE_CRC,0) #else #define TRANSLOG_DEFAULT_FLAGS 0 #endif
/* short transaction ID type */ typedef uint16 SHORT_TRANSACTION_ID;
struct st_maria_handler;
/* Changing one of the "SIZE" below will break backward-compatibility! */ /* Length of CRC at end of pages */ #define ROW_EXTENT_PAGE_SIZE 5 #define ROW_EXTENT_COUNT_SIZE 2 /* Size of file id in logs */ #define FILEID_STORE_SIZE 2 /* Size of page reference in log */ #define PAGE_STORE_SIZE ROW_EXTENT_PAGE_SIZE /* Size of page ranges in log */ #define PAGERANGE_STORE_SIZE ROW_EXTENT_COUNT_SIZE #define DIRPOS_STORE_SIZE 1 #define CLR_TYPE_STORE_SIZE 1 /* If table has live checksum we store its changes in UNDOs */ #define HA_CHECKSUM_STORE_SIZE 4 #define KEY_NR_STORE_SIZE 1 #define PAGE_LENGTH_STORE_SIZE 2
/* Store methods to match the above sizes */ #define fileid_store(T,A) int2store(T,A) #define page_store(T,A) int5store(T,((ulonglong)(A))) #define dirpos_store(T,A) ((*(uchar*) (T)) = A) #define pagerange_store(T,A) int2store(T,A) #define clr_type_store(T,A) ((*(uchar*) (T)) = A) #define key_nr_store(T, A) ((*(uchar*) (T)) = A) #define ha_checksum_store(T,A) int4store(T,A) #define fileid_korr(P) uint2korr(P) #define page_korr(P) uint5korr(P) #define dirpos_korr(P) (*(const uchar *) (P)) #define pagerange_korr(P) uint2korr(P) #define clr_type_korr(P) (*(const uchar *) (P)) #define key_nr_korr(P) (*(const uchar *) (P)) #define ha_checksum_korr(P) uint4korr(P)
enum en_key_op
{
KEY_OP_NONE, /* Not used */
KEY_OP_OFFSET, /* Set current position */
KEY_OP_SHIFT, /* Shift up/or down at current position */
KEY_OP_CHANGE, /* Change data at current position */
KEY_OP_ADD_PREFIX, /* Insert data at start of page */
KEY_OP_DEL_PREFIX, /* Delete data at start of page */
KEY_OP_ADD_SUFFIX, /* Insert data at end of page */
KEY_OP_DEL_SUFFIX, /* Delete data at end of page */
KEY_OP_CHECK, /* For debugging; CRC of used part of page */
KEY_OP_MULTI_COPY, /* List of memcpy()s with fixed-len sources in page */
KEY_OP_SET_PAGEFLAG, /* Set pageflag from next byte */
KEY_OP_COMPACT_PAGE, /* Compact key page */
KEY_OP_MAX_PAGELENGTH, /* Set page to max page length */
KEY_OP_DEBUG, /* Entry for storing what triggered redo_index */
KEY_OP_DEBUG_2 /* Entry for pagelengths */
};
typedefstruct st_translog_header_buffer
{ /* LSN of the read record */
LSN lsn; /* array of groups descriptors, can be used only if groups_no > 0 */
TRANSLOG_GROUP *groups; /* short transaction ID or 0 if it has no sense for the record */
SHORT_TRANSACTION_ID short_trid; /* TheRecordlengthinbuffer(includingreadheader,butexcluding hiddenpartofrecord(type,shortTrID,length)
*/
translog_size_t record_length; /* Bufferforwritedecodedheaderoftherecord(dependontherecord type)
*/
uchar header[TRANSLOG_RECORD_HEADER_MAX_SIZE]; /* number of groups listed in */
uint groups_no; /* in multi-group number of chunk0 pages (valid only if groups_no > 0) */
uint chunk0_pages; /* type of the read record */ enum translog_record_type type; /* chunk 0 data address (valid only if groups_no > 0) */
TRANSLOG_ADDRESS chunk0_data_addr; /* RealcompressedLSN(s)sizeeconomy(<numberofLSN(s)>*7-<real_size>)
*/
int16 compressed_LSN_economy; /* short transaction ID or 0 if it has no sense for the record */
uint16 non_header_data_start_offset; /* non read body data length in this first chunk */
uint16 non_header_data_len; /* chunk 0 data size (valid only if groups_no > 0) */
uint16 chunk0_data_len;
} TRANSLOG_HEADER_BUFFER;
typedefstruct st_translog_scanner_data
{
uchar buffer[TRANSLOG_PAGE_SIZE]; /* buffer for page content */
TRANSLOG_ADDRESS page_addr; /* current page address */ /* end of the log which we saw last time */
TRANSLOG_ADDRESS horizon;
TRANSLOG_ADDRESS last_file_page; /* Last page on in this file */
uchar *page; /* page content pointer */ /* direct link on the current page or NULL if not supported/requested */
PAGECACHE_BLOCK_LINK *direct_link; /* offset of the chunk in the page */
translog_size_t page_offset; /* set horizon only once at init */
my_bool fixed_horizon; /* try to get direct link on the page if it is possible */
my_bool use_direct_link;
} TRANSLOG_SCANNER_DATA;
typedefstruct st_translog_reader_data
{
TRANSLOG_HEADER_BUFFER header; /* Header */
TRANSLOG_SCANNER_DATA scanner; /* chunks scanner */
translog_size_t body_offset; /* current chunk body offset */ /* data offset from the record beginning */
translog_size_t current_offset; /* number of bytes read in header */
uint16 read_header;
uint16 chunk_size; /* current chunk size */
uint current_group; /* current group */
uint current_chunk; /* current chunk in the group */
my_bool eor; /* end of the record */
} TRANSLOG_READER_DATA;
enum enum_translog_status
{
TRANSLOG_UNINITED, /* no initialization done or error during initialization */
TRANSLOG_OK, /* transaction log is functioning */
TRANSLOG_READONLY, /* read only mode due to write errors */
TRANSLOG_SHUTDOWN /* going to shutdown the loghandler */
}; externenum enum_translog_status translog_status; extern ulonglong translog_syncs; /* Number of sync()s */
typedefstruct st_loghandler_file_info
{ /* LSN_IMPOSSIBLEforcurrentfile(notfinishedfile). MaximumLSNoftherecordwhichpartsstoredinthe file.
*/
LSN max_lsn;
ulonglong timestamp; /* Time stamp */
ulong maria_version; /* Version of maria loghandler */
ulong mysql_version; /* Version of mysql server */
ulong server_id; /* Server ID */
ulong page_size; /* Loghandler page size */
ulong file_number; /* Number of the file (from the file header) */
} LOGHANDLER_FILE_INFO;
/* record parts descriptor */ struct st_translog_parts
{ /* full record length */
translog_size_t record_length; /* full record length with chunk headers */
translog_size_t total_record_length; /* current part index */
uint current; /* total number of elements in parts */
uint elements; /* array of parts */
LEX_CUSTRING *parts;
};
/* Descriptoroflogrecordtype
*/ typedefstruct st_log_record_type_descriptor
{ /* internal class of the record */ enum record_class rclass; /* lengthforfixed-sizerecord,pseudo-fixedrecord lengthwithuncompressedLSNs
*/
uint16 fixed_length; /* how much record body (belonged to headers too) read with headers */
uint16 read_header_len; /* HOOK for writing the record called before lock */
prewrite_rec_hook prewrite_hook; /* HOOK for writing the record called when LSN is known, inside lock */
inwrite_rec_hook inwrite_hook; /* HOOK for reading headers */
read_rec_hook read_hook; /* ForpseudofixedrecordsnumberofcompressedLSNsfollowedby systemheader
*/
int16 compressed_LSN; /* the rest is for maria_read_log & Recovery */ /** @brief for debug error messages or "maria_read_log" command-line tool */ constchar *name; enum enum_record_in_group record_in_group; /* a function to execute when we see the record during the REDO phase */ int (*record_execute_in_redo_phase)(const TRANSLOG_HEADER_BUFFER *); /* a function to execute when we see the record during the UNDO phase */ int (*record_execute_in_undo_phase)(const TRANSLOG_HEADER_BUFFER *, TRN *);
} LOG_DESC;
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.14Bemerkung:
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-08)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.