mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 21:12:26 +01:00
1904897be7
ut0ut.c Merge changes in InnoDB-3.23.43b trx0purge.c Merge changes in InnoDB-3.23.43b trx0rec.c Merge changes in InnoDB-3.23.43b trx0trx.c Merge changes in InnoDB-3.23.43b trx0undo.c Merge changes in InnoDB-3.23.43b thr0loc.c Merge changes in InnoDB-3.23.43b sync0arr.c Merge changes in InnoDB-3.23.43b sync0rw.c Merge changes in InnoDB-3.23.43b sync0sync.c Merge changes in InnoDB-3.23.43b srv0srv.c Merge changes in InnoDB-3.23.43b srv0start.c Merge changes in InnoDB-3.23.43b row0ins.c Merge changes in InnoDB-3.23.43b row0mysql.c Merge changes in InnoDB-3.23.43b row0purge.c Merge changes in InnoDB-3.23.43b row0sel.c Merge changes in InnoDB-3.23.43b row0umod.c Merge changes in InnoDB-3.23.43b row0upd.c Merge changes in InnoDB-3.23.43b row0vers.c Merge changes in InnoDB-3.23.43b rem0cmp.c Merge changes in InnoDB-3.23.43b que0que.c Merge changes in InnoDB-3.23.43b pars0opt.c Merge changes in InnoDB-3.23.43b pars0pars.c Merge changes in InnoDB-3.23.43b lexyy.c Merge changes in InnoDB-3.23.43b pars0grm.c Merge changes in InnoDB-3.23.43b page0page.c Merge changes in InnoDB-3.23.43b os0file.c Merge changes in InnoDB-3.23.43b mtr0log.c Merge changes in InnoDB-3.23.43b mem0pool.c Merge changes in InnoDB-3.23.43b log0log.c Merge changes in InnoDB-3.23.43b log0recv.c Merge changes in InnoDB-3.23.43b lock0lock.c Merge changes in InnoDB-3.23.43b ibuf0ibuf.c Merge changes in InnoDB-3.23.43b fil0fil.c Merge changes in InnoDB-3.23.43b dict0crea.c Merge changes in InnoDB-3.23.43b dict0dict.c Merge changes in InnoDB-3.23.43b dict0load.c Merge changes in InnoDB-3.23.43b dict0mem.c Merge changes in InnoDB-3.23.43b data0data.c Merge changes in InnoDB-3.23.43b data0type.c Merge changes in InnoDB-3.23.43b buf0buf.c Merge changes in InnoDB-3.23.43b buf0lru.c Merge changes in InnoDB-3.23.43b btr0btr.c Merge changes in InnoDB-3.23.43b btr0cur.c Merge changes in InnoDB-3.23.43b btr0pcur.c Merge changes in InnoDB-3.23.43b btr0sea.c Merge changes in InnoDB-3.23.43b data0type.ic Merge changes in InnoDB-3.23.43b dict0dict.ic Merge changes in InnoDB-3.23.43b mtr0mtr.ic Merge changes in InnoDB-3.23.43b row0upd.ic Merge changes in InnoDB-3.23.43b sync0ipm.ic Merge changes in InnoDB-3.23.43b sync0rw.ic Merge changes in InnoDB-3.23.43b sync0sync.ic Merge changes in InnoDB-3.23.43b trx0rseg.ic Merge changes in InnoDB-3.23.43b btr0pcur.ic Merge changes in InnoDB-3.23.43b buf0buf.ic Merge changes in InnoDB-3.23.43b data0data.ic Merge changes in InnoDB-3.23.43b row0upd.h Merge changes in InnoDB-3.23.43b srv0srv.h Merge changes in InnoDB-3.23.43b sync0arr.h Merge changes in InnoDB-3.23.43b sync0rw.h Merge changes in InnoDB-3.23.43b sync0sync.h Merge changes in InnoDB-3.23.43b trx0trx.h Merge changes in InnoDB-3.23.43b ut0mem.h Merge changes in InnoDB-3.23.43b data0data.h Merge changes in InnoDB-3.23.43b data0type.h Merge changes in InnoDB-3.23.43b db0err.h Merge changes in InnoDB-3.23.43b dict0crea.h Merge changes in InnoDB-3.23.43b dict0dict.h Merge changes in InnoDB-3.23.43b dict0load.h Merge changes in InnoDB-3.23.43b dict0mem.h Merge changes in InnoDB-3.23.43b dict0types.h Merge changes in InnoDB-3.23.43b fil0fil.h Merge changes in InnoDB-3.23.43b ibuf0ibuf.h Merge changes in InnoDB-3.23.43b lock0lock.h Merge changes in InnoDB-3.23.43b log0log.h Merge changes in InnoDB-3.23.43b mtr0mtr.h Merge changes in InnoDB-3.23.43b rem0cmp.h Merge changes in InnoDB-3.23.43b row0ins.h Merge changes in InnoDB-3.23.43b row0mysql.h Merge changes in InnoDB-3.23.43b btr0cur.h Merge changes in InnoDB-3.23.43b btr0pcur.h Merge changes in InnoDB-3.23.43b btr0sea.h Merge changes in InnoDB-3.23.43b buf0buf.h Merge changes in InnoDB-3.23.43b sql_table.cc Merge changes in InnoDB-3.23.43b sql_db.cc Merge changes in InnoDB-3.23.43b ha_innobase.cc Merge changes in InnoDB-3.23.43b handler.cc Merge changes in InnoDB-3.23.43b ha_innobase.h Merge changes in InnoDB-3.23.43b handler.h Merge changes in InnoDB-3.23.43b sql/ha_innobase.h: Merge changes in InnoDB-3.23.43b sql/handler.h: Merge changes in InnoDB-3.23.43b sql/ha_innobase.cc: Merge changes in InnoDB-3.23.43b sql/handler.cc: Merge changes in InnoDB-3.23.43b sql/sql_db.cc: Merge changes in InnoDB-3.23.43b sql/sql_table.cc: Merge changes in InnoDB-3.23.43b innobase/include/btr0cur.h: Merge changes in InnoDB-3.23.43b innobase/include/btr0pcur.h: Merge changes in InnoDB-3.23.43b innobase/include/btr0sea.h: Merge changes in InnoDB-3.23.43b innobase/include/buf0buf.h: Merge changes in InnoDB-3.23.43b innobase/include/data0data.h: Merge changes in InnoDB-3.23.43b innobase/include/data0type.h: Merge changes in InnoDB-3.23.43b innobase/include/db0err.h: Merge changes in InnoDB-3.23.43b innobase/include/dict0crea.h: Merge changes in InnoDB-3.23.43b innobase/include/dict0dict.h: Merge changes in InnoDB-3.23.43b innobase/include/dict0load.h: Merge changes in InnoDB-3.23.43b innobase/include/dict0mem.h: Merge changes in InnoDB-3.23.43b innobase/include/dict0types.h: Merge changes in InnoDB-3.23.43b innobase/include/fil0fil.h: Merge changes in InnoDB-3.23.43b innobase/include/ibuf0ibuf.h: Merge changes in InnoDB-3.23.43b innobase/include/lock0lock.h: Merge changes in InnoDB-3.23.43b innobase/include/log0log.h: Merge changes in InnoDB-3.23.43b innobase/include/mtr0mtr.h: Merge changes in InnoDB-3.23.43b innobase/include/rem0cmp.h: Merge changes in InnoDB-3.23.43b innobase/include/row0ins.h: Merge changes in InnoDB-3.23.43b innobase/include/row0mysql.h: Merge changes in InnoDB-3.23.43b innobase/include/row0upd.h: Merge changes in InnoDB-3.23.43b innobase/include/srv0srv.h: Merge changes in InnoDB-3.23.43b innobase/include/sync0arr.h: Merge changes in InnoDB-3.23.43b innobase/include/sync0rw.h: Merge changes in InnoDB-3.23.43b innobase/include/sync0sync.h: Merge changes in InnoDB-3.23.43b innobase/include/trx0trx.h: Merge changes in InnoDB-3.23.43b innobase/include/ut0mem.h: Merge changes in InnoDB-3.23.43b innobase/include/btr0pcur.ic: Merge changes in InnoDB-3.23.43b innobase/include/buf0buf.ic: Merge changes in InnoDB-3.23.43b innobase/include/data0data.ic: Merge changes in InnoDB-3.23.43b innobase/include/data0type.ic: Merge changes in InnoDB-3.23.43b innobase/include/dict0dict.ic: Merge changes in InnoDB-3.23.43b innobase/include/mtr0mtr.ic: Merge changes in InnoDB-3.23.43b innobase/include/row0upd.ic: Merge changes in InnoDB-3.23.43b innobase/include/sync0ipm.ic: Merge changes in InnoDB-3.23.43b innobase/include/sync0rw.ic: Merge changes in InnoDB-3.23.43b innobase/include/sync0sync.ic: Merge changes in InnoDB-3.23.43b innobase/include/trx0rseg.ic: Merge changes in InnoDB-3.23.43b innobase/btr/btr0btr.c: Merge changes in InnoDB-3.23.43b innobase/btr/btr0cur.c: Merge changes in InnoDB-3.23.43b innobase/btr/btr0pcur.c: Merge changes in InnoDB-3.23.43b innobase/btr/btr0sea.c: Merge changes in InnoDB-3.23.43b innobase/buf/buf0buf.c: Merge changes in InnoDB-3.23.43b innobase/buf/buf0lru.c: Merge changes in InnoDB-3.23.43b innobase/data/data0data.c: Merge changes in InnoDB-3.23.43b innobase/data/data0type.c: Merge changes in InnoDB-3.23.43b innobase/dict/dict0crea.c: Merge changes in InnoDB-3.23.43b innobase/dict/dict0dict.c: Merge changes in InnoDB-3.23.43b innobase/dict/dict0load.c: Merge changes in InnoDB-3.23.43b innobase/dict/dict0mem.c: Merge changes in InnoDB-3.23.43b innobase/fil/fil0fil.c: Merge changes in InnoDB-3.23.43b innobase/ibuf/ibuf0ibuf.c: Merge changes in InnoDB-3.23.43b innobase/lock/lock0lock.c: Merge changes in InnoDB-3.23.43b innobase/log/log0log.c: Merge changes in InnoDB-3.23.43b innobase/log/log0recv.c: Merge changes in InnoDB-3.23.43b innobase/mem/mem0pool.c: Merge changes in InnoDB-3.23.43b innobase/mtr/mtr0log.c: Merge changes in InnoDB-3.23.43b innobase/os/os0file.c: Merge changes in InnoDB-3.23.43b innobase/page/page0page.c: Merge changes in InnoDB-3.23.43b innobase/pars/lexyy.c: Merge changes in InnoDB-3.23.43b innobase/pars/pars0grm.c: Merge changes in InnoDB-3.23.43b innobase/pars/pars0opt.c: Merge changes in InnoDB-3.23.43b innobase/pars/pars0pars.c: Merge changes in InnoDB-3.23.43b innobase/que/que0que.c: Merge changes in InnoDB-3.23.43b innobase/rem/rem0cmp.c: Merge changes in InnoDB-3.23.43b innobase/row/row0ins.c: Merge changes in InnoDB-3.23.43b innobase/row/row0mysql.c: Merge changes in InnoDB-3.23.43b innobase/row/row0purge.c: Merge changes in InnoDB-3.23.43b innobase/row/row0sel.c: Merge changes in InnoDB-3.23.43b innobase/row/row0umod.c: Merge changes in InnoDB-3.23.43b innobase/row/row0upd.c: Merge changes in InnoDB-3.23.43b innobase/row/row0vers.c: Merge changes in InnoDB-3.23.43b innobase/srv/srv0srv.c: Merge changes in InnoDB-3.23.43b innobase/srv/srv0start.c: Merge changes in InnoDB-3.23.43b innobase/sync/sync0arr.c: Merge changes in InnoDB-3.23.43b innobase/sync/sync0rw.c: Merge changes in InnoDB-3.23.43b innobase/sync/sync0sync.c: Merge changes in InnoDB-3.23.43b innobase/thr/thr0loc.c: Merge changes in InnoDB-3.23.43b innobase/trx/trx0purge.c: Merge changes in InnoDB-3.23.43b innobase/trx/trx0rec.c: Merge changes in InnoDB-3.23.43b innobase/trx/trx0trx.c: Merge changes in InnoDB-3.23.43b innobase/trx/trx0undo.c: Merge changes in InnoDB-3.23.43b innobase/ut/ut0mem.c: Merge changes in InnoDB-3.23.43b innobase/ut/ut0ut.c: Merge changes in InnoDB-3.23.43b BitKeeper/etc/logging_ok: Logging to logging@openlogging.org accepted
331 lines
11 KiB
C
331 lines
11 KiB
C
/******************************************************
|
|
Mini-transaction buffer
|
|
|
|
(c) 1995 Innobase Oy
|
|
|
|
Created 11/26/1995 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
#ifndef mtr0mtr_h
|
|
#define mtr0mtr_h
|
|
|
|
#include "univ.i"
|
|
#include "mem0mem.h"
|
|
#include "dyn0dyn.h"
|
|
#include "buf0types.h"
|
|
#include "sync0rw.h"
|
|
#include "ut0byte.h"
|
|
#include "mtr0types.h"
|
|
#include "page0types.h"
|
|
|
|
/* Logging modes for a mini-transaction */
|
|
#define MTR_LOG_ALL 21 /* default mode: log all operations
|
|
modifying disk-based data */
|
|
#define MTR_LOG_NONE 22 /* log no operations */
|
|
/*#define MTR_LOG_SPACE 23 */ /* log only operations modifying
|
|
file space page allocation data
|
|
(operations in fsp0fsp.* ) */
|
|
#define MTR_LOG_SHORT_INSERTS 24 /* inserts are logged in a shorter
|
|
form */
|
|
|
|
/* Types for the mlock objects to store in the mtr memo; NOTE that the
|
|
first 3 values must be RW_S_LATCH, RW_X_LATCH, RW_NO_LATCH */
|
|
#define MTR_MEMO_PAGE_S_FIX RW_S_LATCH
|
|
#define MTR_MEMO_PAGE_X_FIX RW_X_LATCH
|
|
#define MTR_MEMO_BUF_FIX RW_NO_LATCH
|
|
#define MTR_MEMO_MODIFY 54
|
|
#define MTR_MEMO_S_LOCK 55
|
|
#define MTR_MEMO_X_LOCK 56
|
|
|
|
/* Log item types: we have made them to be of the type 'byte'
|
|
for the compiler to warn if val and type parameters are switched
|
|
in a call to mlog_write_ulint. NOTE! For 1 - 8 bytes, the
|
|
flag value must give the length also! */
|
|
#define MLOG_SINGLE_REC_FLAG 128 /* if the mtr contains only
|
|
one log record for one page,
|
|
i.e., write_initial_log_record
|
|
has been called only once,
|
|
this flag is ORed to the type
|
|
of that first log record */
|
|
#define MLOG_1BYTE ((byte)1) /* one byte is written */
|
|
#define MLOG_2BYTES ((byte)2) /* 2 bytes ... */
|
|
#define MLOG_4BYTES ((byte)4) /* 4 bytes ... */
|
|
#define MLOG_8BYTES ((byte)8) /* 8 bytes ... */
|
|
#define MLOG_REC_INSERT ((byte)9) /* record insert */
|
|
#define MLOG_REC_CLUST_DELETE_MARK ((byte)10) /* mark clustered index record
|
|
deleted */
|
|
#define MLOG_REC_SEC_DELETE_MARK ((byte)11) /* mark secondary index record
|
|
deleted */
|
|
#define MLOG_REC_UPDATE_IN_PLACE ((byte)13) /* update of a record,
|
|
preserves record field sizes */
|
|
#define MLOG_REC_DELETE ((byte)14) /* delete a record from a
|
|
page */
|
|
#define MLOG_LIST_END_DELETE ((byte)15) /* delete record list end on
|
|
index page */
|
|
#define MLOG_LIST_START_DELETE ((byte)16) /* delete record list start on
|
|
index page */
|
|
#define MLOG_LIST_END_COPY_CREATED ((byte)17) /* copy record list end to a
|
|
new created index page */
|
|
#define MLOG_PAGE_REORGANIZE ((byte)18) /* reorganize an index page */
|
|
#define MLOG_PAGE_CREATE ((byte)19) /* create an index page */
|
|
#define MLOG_UNDO_INSERT ((byte)20) /* insert entry in an undo
|
|
log */
|
|
#define MLOG_UNDO_ERASE_END ((byte)21) /* erase an undo log page end */
|
|
#define MLOG_UNDO_INIT ((byte)22) /* initialize a page in an
|
|
undo log */
|
|
#define MLOG_UNDO_HDR_DISCARD ((byte)23) /* discard an update undo log
|
|
header */
|
|
#define MLOG_UNDO_HDR_REUSE ((byte)24) /* reuse an insert undo log
|
|
header */
|
|
#define MLOG_UNDO_HDR_CREATE ((byte)25) /* create an undo log header */
|
|
#define MLOG_REC_MIN_MARK ((byte)26) /* mark an index record as the
|
|
predefined minimum record */
|
|
#define MLOG_IBUF_BITMAP_INIT ((byte)27) /* initialize an ibuf bitmap
|
|
page */
|
|
#define MLOG_FULL_PAGE ((byte)28) /* full contents of a page */
|
|
#define MLOG_INIT_FILE_PAGE ((byte)29) /* this means that a file page
|
|
is taken into use and the prior
|
|
contents of the page should be
|
|
ignored: in recovery we must
|
|
not trust the lsn values stored
|
|
to the file page */
|
|
#define MLOG_WRITE_STRING ((byte)30) /* write a string to a page */
|
|
#define MLOG_MULTI_REC_END ((byte)31) /* if a single mtr writes
|
|
log records for several pages,
|
|
this log record ends the
|
|
sequence of these records */
|
|
#define MLOG_DUMMY_RECORD ((byte)32) /* dummy log record used to
|
|
pad a log block full */
|
|
#define MLOG_BIGGEST_TYPE ((byte)32) /* biggest value (used in
|
|
asserts) */
|
|
|
|
/*******************************************************************
|
|
Starts a mini-transaction and creates a mini-transaction handle
|
|
and buffer in the memory buffer given by the caller. */
|
|
UNIV_INLINE
|
|
mtr_t*
|
|
mtr_start(
|
|
/*======*/
|
|
/* out: mtr buffer which also acts as
|
|
the mtr handle */
|
|
mtr_t* mtr); /* in: memory buffer for the mtr buffer */
|
|
/*******************************************************************
|
|
Starts a mini-transaction and creates a mini-transaction handle
|
|
and buffer in the memory buffer given by the caller. */
|
|
|
|
mtr_t*
|
|
mtr_start_noninline(
|
|
/*================*/
|
|
/* out: mtr buffer which also acts as
|
|
the mtr handle */
|
|
mtr_t* mtr); /* in: memory buffer for the mtr buffer */
|
|
/*******************************************************************
|
|
Commits a mini-transaction. */
|
|
|
|
void
|
|
mtr_commit(
|
|
/*=======*/
|
|
mtr_t* mtr); /* in: mini-transaction */
|
|
/****************************************************************
|
|
Writes to the database log the full contents of the pages that this mtr is
|
|
the first to modify in the buffer pool. This function is called when the
|
|
database is in the online backup state. */
|
|
|
|
void
|
|
mtr_log_write_backup_entries(
|
|
/*=========================*/
|
|
mtr_t* mtr, /* in: mini-transaction */
|
|
dulint backup_lsn); /* in: online backup lsn */
|
|
/**************************************************************
|
|
Sets and returns a savepoint in mtr. */
|
|
UNIV_INLINE
|
|
ulint
|
|
mtr_set_savepoint(
|
|
/*==============*/
|
|
/* out: savepoint */
|
|
mtr_t* mtr); /* in: mtr */
|
|
/**************************************************************
|
|
Releases the latches stored in an mtr memo down to a savepoint.
|
|
NOTE! The mtr must not have made changes to buffer pages after the
|
|
savepoint, as these can be handled only by mtr_commit. */
|
|
|
|
void
|
|
mtr_rollback_to_savepoint(
|
|
/*======================*/
|
|
mtr_t* mtr, /* in: mtr */
|
|
ulint savepoint); /* in: savepoint */
|
|
/**************************************************************
|
|
Releases the (index tree) s-latch stored in an mtr memo after a
|
|
savepoint. */
|
|
UNIV_INLINE
|
|
void
|
|
mtr_release_s_latch_at_savepoint(
|
|
/*=============================*/
|
|
mtr_t* mtr, /* in: mtr */
|
|
ulint savepoint, /* in: savepoint */
|
|
rw_lock_t* lock); /* in: latch to release */
|
|
/*******************************************************************
|
|
Gets the logging mode of a mini-transaction. */
|
|
UNIV_INLINE
|
|
ulint
|
|
mtr_get_log_mode(
|
|
/*=============*/
|
|
/* out: logging mode: MTR_LOG_NONE, ... */
|
|
mtr_t* mtr); /* in: mtr */
|
|
/*******************************************************************
|
|
Changes the logging mode of a mini-transaction. */
|
|
UNIV_INLINE
|
|
ulint
|
|
mtr_set_log_mode(
|
|
/*=============*/
|
|
/* out: old mode */
|
|
mtr_t* mtr, /* in: mtr */
|
|
ulint mode); /* in: logging mode: MTR_LOG_NONE, ... */
|
|
/************************************************************
|
|
Reads 1 - 4 bytes from a file page buffered in the buffer pool. */
|
|
|
|
ulint
|
|
mtr_read_ulint(
|
|
/*===========*/
|
|
/* out: value read */
|
|
byte* ptr, /* in: pointer from where to read */
|
|
ulint type, /* in: MLOG_1BYTE, MLOG_2BYTES, MLOG_4BYTES */
|
|
mtr_t* mtr); /* in: mini-transaction handle */
|
|
/************************************************************
|
|
Reads 8 bytes from a file page buffered in the buffer pool. */
|
|
|
|
dulint
|
|
mtr_read_dulint(
|
|
/*===========*/
|
|
/* out: value read */
|
|
byte* ptr, /* in: pointer from where to read */
|
|
ulint type, /* in: MLOG_8BYTES */
|
|
mtr_t* mtr); /* in: mini-transaction handle */
|
|
/*************************************************************************
|
|
This macro locks an rw-lock in s-mode. */
|
|
#define mtr_s_lock(B, MTR) mtr_s_lock_func((B), IB__FILE__, __LINE__,\
|
|
(MTR))
|
|
/*************************************************************************
|
|
This macro locks an rw-lock in x-mode. */
|
|
#define mtr_x_lock(B, MTR) mtr_x_lock_func((B), IB__FILE__, __LINE__,\
|
|
(MTR))
|
|
/*************************************************************************
|
|
NOTE! Use the macro above!
|
|
Locks a lock in s-mode. */
|
|
UNIV_INLINE
|
|
void
|
|
mtr_s_lock_func(
|
|
/*============*/
|
|
rw_lock_t* lock, /* in: rw-lock */
|
|
char* file, /* in: file name */
|
|
ulint line, /* in: line number */
|
|
mtr_t* mtr); /* in: mtr */
|
|
/*************************************************************************
|
|
NOTE! Use the macro above!
|
|
Locks a lock in x-mode. */
|
|
UNIV_INLINE
|
|
void
|
|
mtr_x_lock_func(
|
|
/*============*/
|
|
rw_lock_t* lock, /* in: rw-lock */
|
|
char* file, /* in: file name */
|
|
ulint line, /* in: line number */
|
|
mtr_t* mtr); /* in: mtr */
|
|
|
|
/*******************************************************
|
|
Releases an object in the memo stack. */
|
|
|
|
void
|
|
mtr_memo_release(
|
|
/*=============*/
|
|
mtr_t* mtr, /* in: mtr */
|
|
void* object, /* in: object */
|
|
ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */
|
|
/****************************************************************
|
|
Parses a log record which contains the full contents of a page. */
|
|
|
|
byte*
|
|
mtr_log_parse_full_page(
|
|
/*====================*/
|
|
/* out: end of log record or NULL */
|
|
byte* ptr, /* in: buffer */
|
|
byte* end_ptr,/* in: buffer end */
|
|
page_t* page); /* in: page or NULL */
|
|
/**************************************************************
|
|
Checks if memo contains the given item. */
|
|
UNIV_INLINE
|
|
ibool
|
|
mtr_memo_contains(
|
|
/*==============*/
|
|
/* out: TRUE if contains */
|
|
mtr_t* mtr, /* in: mtr */
|
|
void* object, /* in: object to search */
|
|
ulint type); /* in: type of object */
|
|
/*************************************************************
|
|
Prints info of an mtr handle. */
|
|
|
|
void
|
|
mtr_print(
|
|
/*======*/
|
|
mtr_t* mtr); /* in: mtr */
|
|
/*######################################################################*/
|
|
|
|
#define MTR_BUF_MEMO_SIZE 200 /* number of slots in memo */
|
|
|
|
/*******************************************************************
|
|
Returns the log object of a mini-transaction buffer. */
|
|
UNIV_INLINE
|
|
dyn_array_t*
|
|
mtr_get_log(
|
|
/*========*/
|
|
/* out: log */
|
|
mtr_t* mtr); /* in: mini-transaction */
|
|
/*******************************************************
|
|
Pushes an object to an mtr memo stack. */
|
|
UNIV_INLINE
|
|
void
|
|
mtr_memo_push(
|
|
/*==========*/
|
|
mtr_t* mtr, /* in: mtr */
|
|
void* object, /* in: object */
|
|
ulint type); /* in: object type: MTR_MEMO_S_LOCK, ... */
|
|
|
|
|
|
/* Type definition of a mini-transaction memo stack slot. */
|
|
typedef struct mtr_memo_slot_struct mtr_memo_slot_t;
|
|
struct mtr_memo_slot_struct{
|
|
ulint type; /* type of the stored object (MTR_MEMO_S_LOCK, ...) */
|
|
void* object; /* pointer to the object */
|
|
};
|
|
|
|
/* Mini-transaction handle and buffer */
|
|
struct mtr_struct{
|
|
ulint state; /* MTR_ACTIVE, MTR_COMMITTING, MTR_COMMITTED */
|
|
dyn_array_t memo; /* memo stack for locks etc. */
|
|
dyn_array_t log; /* mini-transaction log */
|
|
ibool modifications;
|
|
/* TRUE if the mtr made modifications to
|
|
buffer pool pages */
|
|
ulint n_log_recs;
|
|
/* count of how many page initial log records
|
|
have been written to the mtr log */
|
|
ulint log_mode; /* specifies which operations should be
|
|
logged; default value MTR_LOG_ALL */
|
|
dulint start_lsn;/* start lsn of the possible log entry for
|
|
this mtr */
|
|
dulint end_lsn;/* end lsn of the possible log entry for
|
|
this mtr */
|
|
ulint magic_n;
|
|
};
|
|
|
|
#define MTR_MAGIC_N 54551
|
|
|
|
#define MTR_ACTIVE 12231
|
|
#define MTR_COMMITTING 56456
|
|
#define MTR_COMMITTED 34676
|
|
|
|
#ifndef UNIV_NONINL
|
|
#include "mtr0mtr.ic"
|
|
#endif
|
|
|
|
#endif
|