mariadb/innobase/include/buf0flu.h
unknown d587a36aa1 InnoDB: Revert most of ChangeSet@1.1772, as the debug functions may
be needed when testing production releases


innobase/btr/btr0btr.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/buf/buf0buf.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/buf/buf0flu.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/buf/buf0lru.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/buf/buf0rea.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/data/data0type.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/dict/dict0dict.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/fsp/fsp0fsp.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/fut/fut0lst.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/ibuf/ibuf0ibuf.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/btr0btr.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/buf0buf.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/buf0buf.ic:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/buf0flu.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/buf0lru.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/data0type.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/dict0dict.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/fsp0fsp.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/fut0lst.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/lock0lock.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/mem0dbg.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/mem0dbg.ic:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/mem0pool.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/mtr0mtr.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/pars0opt.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/sync0rw.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/include/sync0sync.h:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/lock/lock0lock.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/mem/mem0dbg.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/mem/mem0pool.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/mtr/mtr0mtr.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/pars/pars0opt.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/srv/srv0start.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/sync/sync0rw.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/sync/sync0sync.c:
  Remove #ifdef UNIV_DEBUG around debug code
innobase/trx/trx0roll.c:
  Remove #ifdef UNIV_DEBUG around debug code
2004-06-16 13:41:14 +03:00

120 lines
4.3 KiB
C

/******************************************************
The database buffer pool flush algorithm
(c) 1995 Innobase Oy
Created 11/5/1995 Heikki Tuuri
*******************************************************/
#ifndef buf0flu_h
#define buf0flu_h
#include "univ.i"
#include "buf0types.h"
#include "ut0byte.h"
#include "mtr0types.h"
/************************************************************************
Updates the flush system data structures when a write is completed. */
void
buf_flush_write_complete(
/*=====================*/
buf_block_t* block); /* in: pointer to the block in question */
/*************************************************************************
Flushes pages from the end of the LRU list if there is too small
a margin of replaceable pages there. */
void
buf_flush_free_margin(void);
/*=======================*/
/************************************************************************
Initializes a page for writing to the tablespace. */
void
buf_flush_init_for_writing(
/*=======================*/
byte* page, /* in: page */
dulint newest_lsn, /* in: newest modification lsn to the page */
ulint space, /* in: space id */
ulint page_no); /* in: page number */
/***********************************************************************
This utility flushes dirty blocks from the end of the LRU list or flush_list.
NOTE 1: in the case of an LRU flush the calling thread may own latches to
pages: to avoid deadlocks, this function must be written so that it cannot
end up waiting for these latches! NOTE 2: in the case of a flush list flush,
the calling thread is not allowed to own any latches on pages! */
ulint
buf_flush_batch(
/*============*/
/* out: number of blocks for which the write
request was queued */
ulint flush_type, /* in: BUF_FLUSH_LRU or BUF_FLUSH_LIST; if
BUF_FLUSH_LIST, then the caller must not own
any latches on pages */
ulint min_n, /* in: wished minimum mumber of blocks flushed
(it is not guaranteed that the actual number
is that big, though) */
dulint lsn_limit); /* in the case BUF_FLUSH_LIST all blocks whose
oldest_modification is smaller than this
should be flushed (if their number does not
exceed min_n), otherwise ignored */
/**********************************************************************
Waits until a flush batch of the given type ends */
void
buf_flush_wait_batch_end(
/*=====================*/
ulint type); /* in: BUF_FLUSH_LRU or BUF_FLUSH_LIST */
/************************************************************************
This function should be called at a mini-transaction commit, if a page was
modified in it. Puts the block to the list of modified blocks, if it not
already in it. */
UNIV_INLINE
void
buf_flush_note_modification(
/*========================*/
buf_block_t* block, /* in: block which is modified */
mtr_t* mtr); /* in: mtr */
/************************************************************************
This function should be called when recovery has modified a buffer page. */
UNIV_INLINE
void
buf_flush_recv_note_modification(
/*=============================*/
buf_block_t* block, /* in: block which is modified */
dulint start_lsn, /* in: start lsn of the first mtr in a
set of mtr's */
dulint end_lsn); /* in: end lsn of the last mtr in the
set of mtr's */
/************************************************************************
Returns TRUE if the file page block is immediately suitable for replacement,
i.e., transition FILE_PAGE => NOT_USED allowed. */
ibool
buf_flush_ready_for_replace(
/*========================*/
/* out: TRUE if can replace immediately */
buf_block_t* block); /* in: buffer control block, must be in state
BUF_BLOCK_FILE_PAGE and in the LRU list */
/**********************************************************************
Validates the flush list. */
ibool
buf_flush_validate(void);
/*====================*/
/* out: TRUE if ok */
/* When buf_flush_free_margin is called, it tries to make this many blocks
available to replacement in the free list and at the end of the LRU list (to
make sure that a read-ahead batch can be read efficiently in a single
sweep). */
#define BUF_FLUSH_FREE_BLOCK_MARGIN (5 + BUF_READ_AHEAD_AREA)
#define BUF_FLUSH_EXTRA_MARGIN (BUF_FLUSH_FREE_BLOCK_MARGIN / 4 + 100)
#ifndef UNIV_NONINL
#include "buf0flu.ic"
#endif
#endif