diff options
Diffstat (limited to 'storage/xtradb/include/log0log.ic')
-rw-r--r-- | storage/xtradb/include/log0log.ic | 168 |
1 files changed, 89 insertions, 79 deletions
diff --git a/storage/xtradb/include/log0log.ic b/storage/xtradb/include/log0log.ic index 85eebda4942..d071985982a 100644 --- a/storage/xtradb/include/log0log.ic +++ b/storage/xtradb/include/log0log.ic @@ -16,7 +16,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA *****************************************************************************/ -/****************************************************** +/**************************************************//** +@file include/log0log.ic Database log Created 12/9/1995 Heikki Tuuri @@ -26,28 +27,27 @@ Created 12/9/1995 Heikki Tuuri #include "mach0data.h" #include "mtr0mtr.h" -/********************************************************** +/******************************************************//** Checks by parsing that the catenated log segment for a single mtr is consistent. */ UNIV_INTERN ibool log_check_log_recs( /*===============*/ - byte* buf, /* in: pointer to the start of + byte* buf, /*!< in: pointer to the start of the log segment in the log_sys->buf log buffer */ - ulint len, /* in: segment length in bytes */ - ib_uint64_t buf_start_lsn); /* in: buffer start lsn */ + ulint len, /*!< in: segment length in bytes */ + ib_uint64_t buf_start_lsn); /*!< in: buffer start lsn */ -/**************************************************************** -Gets a log block flush bit. */ +/************************************************************//** +Gets a log block flush bit. +@return TRUE if this block was the first to be written in a log flush */ UNIV_INLINE ibool log_block_get_flush_bit( /*====================*/ - /* out: TRUE if this block was the first - to be written in a log flush */ - byte* log_block) /* in: log block */ + const byte* log_block) /*!< in: log block */ { if (LOG_BLOCK_FLUSH_BIT_MASK & mach_read_from_4(log_block + LOG_BLOCK_HDR_NO)) { @@ -58,14 +58,14 @@ log_block_get_flush_bit( return(FALSE); } -/**************************************************************** +/************************************************************//** Sets the log block flush bit. */ UNIV_INLINE void log_block_set_flush_bit( /*====================*/ - byte* log_block, /* in: log block */ - ibool val) /* in: value to set */ + byte* log_block, /*!< in/out: log block */ + ibool val) /*!< in: value to set */ { ulint field; @@ -80,29 +80,28 @@ log_block_set_flush_bit( mach_write_to_4(log_block + LOG_BLOCK_HDR_NO, field); } -/**************************************************************** -Gets a log block number stored in the header. */ +/************************************************************//** +Gets a log block number stored in the header. +@return log block number stored in the block header */ UNIV_INLINE ulint log_block_get_hdr_no( /*=================*/ - /* out: log block number stored in the block - header */ - byte* log_block) /* in: log block */ + const byte* log_block) /*!< in: log block */ { return(~LOG_BLOCK_FLUSH_BIT_MASK & mach_read_from_4(log_block + LOG_BLOCK_HDR_NO)); } -/**************************************************************** +/************************************************************//** Sets the log block number stored in the header; NOTE that this must be set before the flush bit! */ UNIV_INLINE void log_block_set_hdr_no( /*=================*/ - byte* log_block, /* in: log block */ - ulint n) /* in: log block number: must be > 0 and + byte* log_block, /*!< in/out: log block */ + ulint n) /*!< in: log block number: must be > 0 and < LOG_BLOCK_FLUSH_BIT_MASK */ { ut_ad(n > 0); @@ -111,101 +110,99 @@ log_block_set_hdr_no( mach_write_to_4(log_block + LOG_BLOCK_HDR_NO, n); } -/**************************************************************** -Gets a log block data length. */ +/************************************************************//** +Gets a log block data length. +@return log block data length measured as a byte offset from the block start */ UNIV_INLINE ulint log_block_get_data_len( /*===================*/ - /* out: log block data length measured as a - byte offset from the block start */ - byte* log_block) /* in: log block */ + const byte* log_block) /*!< in: log block */ { return(mach_read_from_2(log_block + LOG_BLOCK_HDR_DATA_LEN)); } -/**************************************************************** +/************************************************************//** Sets the log block data length. */ UNIV_INLINE void log_block_set_data_len( /*===================*/ - byte* log_block, /* in: log block */ - ulint len) /* in: data length */ + byte* log_block, /*!< in/out: log block */ + ulint len) /*!< in: data length */ { mach_write_to_2(log_block + LOG_BLOCK_HDR_DATA_LEN, len); } -/**************************************************************** -Gets a log block first mtr log record group offset. */ +/************************************************************//** +Gets a log block first mtr log record group offset. +@return first mtr log record group byte offset from the block start, 0 +if none */ UNIV_INLINE ulint log_block_get_first_rec_group( /*==========================*/ - /* out: first mtr log record group byte offset - from the block start, 0 if none */ - byte* log_block) /* in: log block */ + const byte* log_block) /*!< in: log block */ { return(mach_read_from_2(log_block + LOG_BLOCK_FIRST_REC_GROUP)); } -/**************************************************************** +/************************************************************//** Sets the log block first mtr log record group offset. */ UNIV_INLINE void log_block_set_first_rec_group( /*==========================*/ - byte* log_block, /* in: log block */ - ulint offset) /* in: offset, 0 if none */ + byte* log_block, /*!< in/out: log block */ + ulint offset) /*!< in: offset, 0 if none */ { mach_write_to_2(log_block + LOG_BLOCK_FIRST_REC_GROUP, offset); } -/**************************************************************** -Gets a log block checkpoint number field (4 lowest bytes). */ +/************************************************************//** +Gets a log block checkpoint number field (4 lowest bytes). +@return checkpoint no (4 lowest bytes) */ UNIV_INLINE ulint log_block_get_checkpoint_no( /*========================*/ - /* out: checkpoint no (4 lowest bytes) */ - byte* log_block) /* in: log block */ + const byte* log_block) /*!< in: log block */ { return(mach_read_from_4(log_block + LOG_BLOCK_CHECKPOINT_NO)); } -/**************************************************************** +/************************************************************//** Sets a log block checkpoint number field (4 lowest bytes). */ UNIV_INLINE void log_block_set_checkpoint_no( /*========================*/ - byte* log_block, /* in: log block */ - ib_uint64_t no) /* in: checkpoint no */ + byte* log_block, /*!< in/out: log block */ + ib_uint64_t no) /*!< in: checkpoint no */ { mach_write_to_4(log_block + LOG_BLOCK_CHECKPOINT_NO, (ulint) no); } -/**************************************************************** -Converts a lsn to a log block number. */ +/************************************************************//** +Converts a lsn to a log block number. +@return log block number, it is > 0 and <= 1G */ UNIV_INLINE ulint log_block_convert_lsn_to_no( /*========================*/ - /* out: log block number, - it is > 0 and <= 1G */ - ib_uint64_t lsn) /* in: lsn of a byte within the block */ + ib_uint64_t lsn) /*!< in: lsn of a byte within the block */ { return(((ulint) (lsn / OS_FILE_LOG_BLOCK_SIZE) & 0x3FFFFFFFUL) + 1); } -/**************************************************************** -Calculates the checksum for a log block. */ +/************************************************************//** +Calculates the checksum for a log block. +@return checksum */ UNIV_INLINE ulint log_block_calc_checksum( /*====================*/ - /* out: checksum */ - const byte* block) /* in: log block */ + const byte* block) /*!< in: log block */ { ulint sum; ulint sh; @@ -228,41 +225,41 @@ log_block_calc_checksum( return(sum); } -/**************************************************************** -Gets a log block checksum field value. */ +/************************************************************//** +Gets a log block checksum field value. +@return checksum */ UNIV_INLINE ulint log_block_get_checksum( /*===================*/ - /* out: checksum */ - const byte* log_block) /* in: log block */ + const byte* log_block) /*!< in: log block */ { return(mach_read_from_4(log_block + OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_CHECKSUM)); } -/**************************************************************** +/************************************************************//** Sets a log block checksum field value. */ UNIV_INLINE void log_block_set_checksum( /*===================*/ - byte* log_block, /* in: log block */ - ulint checksum) /* in: checksum */ + byte* log_block, /*!< in/out: log block */ + ulint checksum) /*!< in: checksum */ { mach_write_to_4(log_block + OS_FILE_LOG_BLOCK_SIZE - LOG_BLOCK_CHECKSUM, checksum); } -/**************************************************************** +/************************************************************//** Initializes a log block in the log buffer. */ UNIV_INLINE void log_block_init( /*===========*/ - byte* log_block, /* in: pointer to the log buffer */ - ib_uint64_t lsn) /* in: lsn within the log block */ + byte* log_block, /*!< in: pointer to the log buffer */ + ib_uint64_t lsn) /*!< in: lsn within the log block */ { ulint no; @@ -276,15 +273,15 @@ log_block_init( log_block_set_first_rec_group(log_block, 0); } -/**************************************************************** +/************************************************************//** Initializes a log block in the log buffer in the old format, where there was no checksum yet. */ UNIV_INLINE void log_block_init_in_old_format( /*=========================*/ - byte* log_block, /* in: pointer to the log buffer */ - ib_uint64_t lsn) /* in: lsn within the log block */ + byte* log_block, /*!< in: pointer to the log buffer */ + ib_uint64_t lsn) /*!< in: lsn within the log block */ { ulint no; @@ -299,19 +296,19 @@ log_block_init_in_old_format( log_block_set_first_rec_group(log_block, 0); } -/**************************************************************** +#ifndef UNIV_HOTBACKUP +/************************************************************//** Writes to the log the string given. The log must be released with -log_release. */ +log_release. +@return end lsn of the log record, zero if did not succeed */ UNIV_INLINE ib_uint64_t log_reserve_and_write_fast( /*=======================*/ - /* out: end lsn of the log record, - zero if did not succeed */ - byte* str, /* in: string */ - ulint len, /* in: string length */ - ib_uint64_t* start_lsn,/* out: start lsn of the log record */ - ibool* success)/* out: TRUE if success */ + byte* str, /*!< in: string */ + ulint len, /*!< in: string length */ + ib_uint64_t* start_lsn,/*!< out: start lsn of the log record */ + ibool* success)/*!< out: TRUE if success */ { log_t* log = log_sys; ulint data_len; @@ -359,7 +356,7 @@ log_reserve_and_write_fast( return(lsn); } -/*************************************************************************** +/***********************************************************************//** Releases the log mutex. */ UNIV_INLINE void @@ -369,13 +366,13 @@ log_release(void) mutex_exit(&(log_sys->mutex)); } -/**************************************************************** -Gets the current lsn. */ +/************************************************************//** +Gets the current lsn. +@return current lsn */ UNIV_INLINE ib_uint64_t log_get_lsn(void) /*=============*/ - /* out: current lsn */ { ib_uint64_t lsn; @@ -388,7 +385,19 @@ log_get_lsn(void) return(lsn); } -/*************************************************************************** +/**************************************************************** +Gets the log group capacity. It is OK to read the value without +holding log_sys->mutex because it is constant. +@return log group capacity */ +UNIV_INLINE +ulint +log_get_capacity(void) +/*==================*/ +{ + return(log_sys->log_group_capacity); +} + +/***********************************************************************//** Checks if there is need for a log buffer flush or a new checkpoint, and does this if yes. Any database operation should call this when it has modified more than about 4 pages. NOTE that this function may only be called when the @@ -405,3 +414,4 @@ log_free_check(void) log_check_margins(); } } +#endif /* !UNIV_HOTBACKUP */ |