InnoDB Plugin  1.0
Data Structures | Macros | Typedefs | Functions | Variables
fil0fil.h File Reference
#include "univ.i"
#include "dict0types.h"
#include "ut0byte.h"
#include "os0file.h"
#include "sync0rw.h"
#include "ibuf0types.h"
#include "log0log.h"
#include <list>
Include dependency graph for fil0fil.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  fil_addr_t
struct  fsp_open_info
struct  PageCallback

Macros

#define FIL_IBD_FILE_INITIAL_SIZE   4
#define FIL_NULL   ULINT32_UNDEFINED
#define FIL_ADDR_PAGE   0 /* first in address is the page offset */
#define FIL_ADDR_BYTE   4 /* then comes 2-byte byte offset within page*/
#define FIL_ADDR_SIZE   6 /* address size is 6 bytes */
#define FIL_PAGE_SPACE_OR_CHKSUM   0
#define FIL_PAGE_OFFSET   4
#define FIL_PAGE_PREV   8
#define FIL_PAGE_NEXT   12
#define FIL_PAGE_LSN   16
#define FIL_PAGE_TYPE   24
#define FIL_PAGE_FILE_FLUSH_LSN   26
#define FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID   34
#define FIL_PAGE_SPACE_ID   FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID
#define FIL_PAGE_DATA   38
#define FIL_PAGE_END_LSN_OLD_CHKSUM   8
#define FIL_PAGE_DATA_END   8
#define FIL_PAGE_INDEX   17855
#define FIL_PAGE_UNDO_LOG   2
#define FIL_PAGE_INODE   3
#define FIL_PAGE_IBUF_FREE_LIST   4
#define FIL_PAGE_TYPE_ALLOCATED   0
#define FIL_PAGE_IBUF_BITMAP   5
#define FIL_PAGE_TYPE_SYS   6
#define FIL_PAGE_TYPE_TRX_SYS   7
#define FIL_PAGE_TYPE_FSP_HDR   8
#define FIL_PAGE_TYPE_XDES   9
#define FIL_PAGE_TYPE_BLOB   10
#define FIL_PAGE_TYPE_ZBLOB   11
#define FIL_PAGE_TYPE_ZBLOB2   12
#define FIL_PAGE_TYPE_LAST   FIL_PAGE_TYPE_ZBLOB2
#define FIL_TABLESPACE   501
#define FIL_LOG   502

Typedefs

typedef std::list< const char * > space_name_list_t
typedef byte fil_faddr_t

Functions

UNIV_INTERN ib_int64_t fil_space_get_version (ulint id)
UNIV_INTERN rw_lock_tfil_space_get_latch (ulint id, ulint *zip_size)
UNIV_INTERN ulint fil_space_get_type (ulint id)
UNIV_INTERN char * fil_node_create (const char *name, ulint size, ulint id, ibool is_raw))
UNIV_INTERN ibool fil_space_create (const char *name, ulint id, ulint zip_size, ulint purpose)
UNIV_INTERN ibool fil_assign_new_space_id (ulint *space_id)
UNIV_INTERN char * fil_space_get_first_path (ulint id)
UNIV_INTERN ulint fil_space_get_size (ulint id)
UNIV_INTERN ulint fil_space_get_flags (ulint id)
UNIV_INTERN ulint fil_space_get_zip_size (ulint id)
UNIV_INTERN ibool fil_check_adress_in_tablespace (ulint id, ulint page_no)
UNIV_INTERN void fil_init (ulint hash_size, ulint max_n_open)
UNIV_INTERN void fil_close (void)
UNIV_INTERN void fil_open_log_and_system_tablespace_files (void)
UNIV_INTERN void fil_close_all_files (void)
UNIV_INTERN void fil_close_log_files (bool free)
UNIV_INTERN void fil_set_max_space_id_if_bigger (ulint max_id)
UNIV_INTERN dberr_t fil_write_flushed_lsn_to_data_files (lsn_t lsn, ulint arch_log_no)
UNIV_INTERN const char * fil_read_first_page (os_file_t data_file, ibool one_read_already, ulint *flags, ulint *space_id, lsn_t *min_flushed_lsn, lsn_t *max_flushed_lsn))
UNIV_INTERN ibool fil_inc_pending_ops (ulint id, ibool print_err)
UNIV_INTERN void fil_decr_pending_ops (ulint id)
UNIV_INTERN byte * fil_op_log_parse_or_replay (byte *ptr, byte *end_ptr, ulint type, ulint space_id, ulint log_flags)
UNIV_INTERN dberr_t fil_delete_tablespace (ulint id, buf_remove_t buf_remove)
UNIV_INTERN dberr_t fil_close_tablespace (trx_t *trx, ulint id)
UNIV_INTERN dberr_t fil_discard_tablespace (ulint id))
UNIV_INTERN ibool fil_rename_tablespace (const char *old_name_in, ulint id, const char *new_name, const char *new_path)
UNIV_INTERN char * fil_make_ibd_name (const char *name, bool is_full_path)
UNIV_INTERN char * fil_make_isl_name (const char *name)
UNIV_INTERN dberr_t fil_create_link_file (const char *tablename, const char *filepath)
UNIV_INTERN void fil_delete_link_file (const char *tablename)
UNIV_INTERN char * fil_read_link_file (const char *name)
UNIV_INTERN dberr_t fil_create_new_single_table_tablespace (ulint space_id, const char *tablename, const char *dir_path, ulint flags, ulint flags2, ulint size))
UNIV_INTERN dberr_t fil_open_single_table_tablespace (bool validate, bool fix_dict, ulint id, ulint flags, const char *tablename, const char *filepath)
UNIV_INTERN dberr_t fil_load_single_table_tablespaces (void)
UNIV_INTERN ibool fil_tablespace_deleted_or_being_deleted_in_mem (ulint id, ib_int64_t version)
UNIV_INTERN ibool fil_tablespace_exists_in_mem (ulint id)
UNIV_INTERN ibool fil_space_for_table_exists_in_mem (ulint id, const char *name, ibool mark_space, ibool print_error_if_does_not_exist, bool adjust_space, mem_heap_t *heap, table_id_t table_id)
UNIV_INTERN ibool fil_extend_space_to_desired_size (ulint *actual_size, ulint space_id, ulint size_after_extend)
UNIV_INTERN ibool fil_space_reserve_free_extents (ulint id, ulint n_free_now, ulint n_to_reserve)
UNIV_INTERN void fil_space_release_free_extents (ulint id, ulint n_reserved)
UNIV_INTERN ulint fil_space_get_n_reserved_extents (ulint id)
UNIV_INTERN dberr_t fil_io (ulint type, bool sync, ulint space_id, ulint zip_size, ulint block_offset, ulint byte_offset, ulint len, void *buf, void *message)))
UNIV_INTERN void fil_aio_wait (ulint segment)
UNIV_INTERN void fil_flush (ulint space_id)
UNIV_INTERN void fil_flush_file_spaces (ulint purpose)
UNIV_INTERN ibool fil_validate (void)
UNIV_INTERN ibool fil_addr_is_null (fil_addr_t addr)
UNIV_INTERN ulint fil_page_get_prev (const byte *page)
UNIV_INTERN ulint fil_page_get_next (const byte *page)
UNIV_INTERN void fil_page_set_type (byte *page, ulint type)
UNIV_INTERN ulint fil_page_get_type (const byte *page)
UNIV_INTERN ibool fil_tablespace_is_being_deleted (ulint id)
UNIV_INTERN void fil_delete_file (const char *path)
UNIV_INTERN dberr_t fil_tablespace_iterate (dict_table_t *table, ulint n_io_buffers, PageCallback &callback))
UNIV_INTERN ulint fil_get_space_id_for_table (const char *name)
UNIV_INTERN dberr_t fil_get_space_names (space_name_list_t &space_name_list))
UNIV_INTERN void fil_mtr_rename_log (ulint old_space_id, const char *old_name, ulint new_space_id, const char *new_name, const char *tmp_name, mtr_t *mtr))
bool fil_user_tablespace_restore_page (fsp_open_info *fsp, ulint page_no)

Variables

my_bool lower_case_file_system
const char * fil_path_to_mysql_datadir
fil_addr_t fil_addr_null
ulint fil_n_log_flushes
ulint fil_n_pending_log_flushes
ulint fil_n_pending_tablespace_flushes
ulint fil_n_file_opened
UNIV_INTERN dberr_t warn_unused_result

Detailed Description

The low-level file system

Created 10/25/1995 Heikki Tuuri

Macro Definition Documentation

#define FIL_IBD_FILE_INITIAL_SIZE   4

Initial size of a single-table tablespace in pages

#define FIL_LOG   502

redo log

#define FIL_NULL   ULINT32_UNDEFINED

'null' (undefined) page offset in the context of file spaces

#define FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID   34

starting from 4.1.x this contains the space id of the page

#define FIL_PAGE_DATA   38

start of the data on the page

#define FIL_PAGE_DATA_END   8

size of the page trailer

#define FIL_PAGE_END_LSN_OLD_CHKSUM   8

File page trailer the low 4 bytes of this are used to store the page checksum, the last 4 bytes should be identical to the last 4 bytes of FIL_PAGE_LSN

#define FIL_PAGE_FILE_FLUSH_LSN   26

this is only defined for the first page in a system tablespace data file (ibdata*, not *.ibd): the file has been flushed to disk at least up to this lsn

#define FIL_PAGE_IBUF_BITMAP   5

Insert buffer bitmap

#define FIL_PAGE_IBUF_FREE_LIST   4

Insert buffer free list

#define FIL_PAGE_INDEX   17855

File page types (values of FIL_PAGE_TYPE) B-tree node

#define FIL_PAGE_INODE   3

Index node

#define FIL_PAGE_LSN   16

lsn of the end of the newest modification log record to the page

#define FIL_PAGE_NEXT   12

if there is a 'natural' successor of the page, its offset. Otherwise FIL_NULL. B-tree index pages (FIL_PAGE_TYPE contains FIL_PAGE_INDEX) on the same PAGE_LEVEL are maintained as a doubly linked list via FIL_PAGE_PREV and FIL_PAGE_NEXT in the collation order of the smallest user record on each page.

#define FIL_PAGE_OFFSET   4

page offset inside space

#define FIL_PAGE_PREV   8

if there is a 'natural' predecessor of the page, its offset. Otherwise FIL_NULL. This field is not set on BLOB pages, which are stored as a singly-linked list. See also FIL_PAGE_NEXT.

#define FIL_PAGE_SPACE_OR_CHKSUM   0

The byte offsets on a file page for various variables in < MySQL-4.0.14 space id the page belongs to (== 0) but in later versions the 'new' checksum of the page

#define FIL_PAGE_TYPE   24

file page type: FIL_PAGE_INDEX,..., 2 bytes.

The contents of this field can only be trusted in the following case: if the page is an uncompressed B-tree index page, then it is guaranteed that the value is FIL_PAGE_INDEX. The opposite does not hold.

In tablespaces created by MySQL/InnoDB 5.1.7 or later, the contents of this field is valid for all uncompressed pages.

#define FIL_PAGE_TYPE_ALLOCATED   0

Freshly allocated page

#define FIL_PAGE_TYPE_BLOB   10

Uncompressed BLOB page

#define FIL_PAGE_TYPE_FSP_HDR   8

File space header

#define FIL_PAGE_TYPE_LAST   FIL_PAGE_TYPE_ZBLOB2

Last page type

#define FIL_PAGE_TYPE_SYS   6

System page

#define FIL_PAGE_TYPE_TRX_SYS   7

Transaction system data

#define FIL_PAGE_TYPE_XDES   9

Extent descriptor page

#define FIL_PAGE_TYPE_ZBLOB   11

First compressed BLOB page

#define FIL_PAGE_TYPE_ZBLOB2   12

Subsequent compressed BLOB page

#define FIL_PAGE_UNDO_LOG   2

Undo log page

#define FIL_TABLESPACE   501

Space types tablespace

Typedef Documentation

typedef byte fil_faddr_t

'type' definition in C: an address stored in a file page is a string of bytes

Function Documentation

UNIV_INTERN ibool fil_addr_is_null ( fil_addr_t  addr)

Returns TRUE if file address is undefined.

Returns
TRUE if undefined in: address
UNIV_INTERN void fil_aio_wait ( ulint  segment)

Waits for an aio operation to complete. This function is used to write the handler for completed requests. The aio array of pending requests is divided into segments (see os0file.cc for more info). The thread specifies which segment it wants to wait for. in: the number of the segment in the aio array to wait for

UNIV_INTERN ibool fil_assign_new_space_id ( ulint *  space_id)

Assigns a new space id for a new single-table tablespace. This works simply by incrementing the global counter. If 4 billion id's is not enough, we may need to recycle id's.

Returns
TRUE if assigned, FALSE if not in/out: space id
UNIV_INTERN ibool fil_check_adress_in_tablespace ( ulint  id,
ulint  page_no 
)

Checks if the pair space, page_no refers to an existing page in a tablespace file space. The tablespace must be cached in the memory cache.

Returns
TRUE if the address is meaningful in: page number
Parameters
idin: space id
UNIV_INTERN void fil_close ( void  )

Initializes the tablespace memory cache.

UNIV_INTERN void fil_close_all_files ( void  )

Closes all open files. There must not be any pending i/o's or not flushed modifications in the files.

UNIV_INTERN void fil_close_log_files ( bool  free)

Closes the redo log files. There must not be any pending i/o's or not flushed modifications in the files. in: whether to free the memory object

UNIV_INTERN dberr_t fil_close_tablespace ( trx_t trx,
ulint  id 
)

Closes a single-table tablespace. The tablespace must be cached in the memory cache. Free all pages used by the tablespace.

Returns
DB_SUCCESS or error in: space id
Parameters
trxin/out: Transaction covering the close
UNIV_INTERN dberr_t fil_create_link_file ( const char *  tablename,
const char *  filepath 
)

Creates a new InnoDB Symbolic Link (ISL) file. It is always created under the 'datadir' of MySQL. The datadir is the directory of a running mysqld program. We can refer to it by simply using the path '.'.

Returns
DB_SUCCESS or error code in: pathname of tablespace
Parameters
tablenamein: tablename
UNIV_INTERN dberr_t fil_create_new_single_table_tablespace ( ulint  space_id,
const char *  tablename,
const char *  dir_path,
ulint  flags,
ulint  flags2,
ulint  size 
)

Creates a new single-table tablespace to a database directory of MySQL. Database directories are under the 'datadir' of MySQL. The datadir is the directory of a running mysqld program. We can refer to it by simply the path '.'. Tables created with CREATE TEMPORARY TABLE we place in the temp dir of the mysqld server.

Returns
DB_SUCCESS or error code
Parameters
space_idin: space id
tablenamein: the table name in the usual databasename/tablename format of InnoDB
dir_pathin: NULL or a dir path
flagsin: tablespace flags
flags2in: table flags2
sizein: the initial size of the tablespace file in pages, must be >= FIL_IBD_FILE_INITIAL_SIZE
UNIV_INTERN void fil_decr_pending_ops ( ulint  id)

Decrements the count of pending operations. in: space id

UNIV_INTERN void fil_delete_file ( const char *  path)

Delete the tablespace file and any related files like .cfg. This should not be called for temporary tables. in: filepath of the ibd tablespace

UNIV_INTERN void fil_delete_link_file ( const char *  tablename)

Deletes an InnoDB Symbolic Link (ISL) file. in: name of table

UNIV_INTERN dberr_t fil_delete_tablespace ( ulint  id,
buf_remove_t  buf_remove 
)

Deletes a single-table tablespace. The tablespace must be cached in the memory cache.

Returns
TRUE if success in: specify the action to take on the tables pages in the buffer pool
Parameters
idin: space id
UNIV_INTERN dberr_t fil_discard_tablespace ( ulint  id)

Discards a single-table tablespace. The tablespace must be cached in the memory cache. Discarding is like deleting a tablespace, but

  1. We do not drop the table from the data dictionary;
  1. We remove all insert buffer entries for the tablespace immediately; in DROP TABLE they are only removed gradually in the background;
  1. When the user does IMPORT TABLESPACE, the tablespace will have the same id as it originally had.
  1. Free all the pages in use by the tablespace if rename=TRUE.
    Returns
    DB_SUCCESS or error
Parameters
idin: space id
UNIV_INTERN ibool fil_extend_space_to_desired_size ( ulint *  actual_size,
ulint  space_id,
ulint  size_after_extend 
)

Tries to extend a data file so that it would accommodate the number of pages given. The tablespace must be cached in the memory cache. If the space is big enough already, does nothing.

Returns
TRUE if success in: desired size in pages after the extension; if the current space size is bigger than this already, the function does nothing
Parameters
actual_sizeout: size of the space after extension; if we ran out of disk space this may be lower than the desired size
space_idin: space id
UNIV_INTERN void fil_flush ( ulint  space_id)

Flushes to disk possible writes cached by the OS. If the space does not exist or is being dropped, does not do anything. in: file space id (this can be a group of log files or a tablespace of the database)

UNIV_INTERN void fil_flush_file_spaces ( ulint  purpose)

Flushes to disk writes in file spaces of the given type possibly cached by the OS. in: FIL_TABLESPACE, FIL_LOG

UNIV_INTERN ulint fil_get_space_id_for_table ( const char *  name)

Checks if a single-table tablespace for a given table name exists in the tablespace memory cache.

Returns
space id, ULINT_UNDEFINED if not found in: table name in the standard 'databasename/tablename' format
UNIV_INTERN dberr_t fil_get_space_names ( space_name_list_t &  space_name_list)

Iterate over all the spaces in the space list and fetch the tablespace names. It will return a copy of the name that must be freed by the caller using: delete[].

Returns
DB_SUCCESS if all OK.
Parameters
space_name_listin/out: Vector for collecting the names.
UNIV_INTERN ibool fil_inc_pending_ops ( ulint  id,
ibool  print_err 
)

Increments the count of pending operation, if space is not being deleted.

Returns
TRUE if being deleted, and operation should be skipped in: need to print error or not
Parameters
idin: space id
UNIV_INTERN void fil_init ( ulint  hash_size,
ulint  max_n_open 
)

Initializes the tablespace memory cache. in: max number of open files

Parameters
hash_sizein: hash table size
UNIV_INTERN dberr_t fil_io ( ulint  type,
bool  sync,
ulint  space_id,
ulint  zip_size,
ulint  block_offset,
ulint  byte_offset,
ulint  len,
void *  buf,
void *  message 
)

Reads or writes data. This operation is asynchronous (aio).

Returns
DB_SUCCESS, or DB_TABLESPACE_DELETED if we are trying to do i/o on a tablespace which does not exist
Parameters
typein: OS_FILE_READ or OS_FILE_WRITE, ORed to OS_FILE_LOG, if a log i/o and ORed to OS_AIO_SIMULATED_WAKE_LATER if simulated aio and we want to post a batch of i/os; NOTE that a simulated batch may introduce hidden chances of deadlocks, because i/os are not actually handled until all have been posted: use with great caution!
syncin: true if synchronous aio is desired
space_idin: space id
zip_sizein: compressed page size in bytes; 0 for uncompressed pages
block_offsetin: offset in number of blocks
byte_offsetin: remainder of offset in bytes; in aio this must be divisible by the OS block size
lenin: how many bytes to read or write; this must not cross a file boundary; in aio this must be a block size multiple
bufin/out: buffer where to store read data or from where to write; in aio this must be appropriately aligned
messagein: message for aio handler if non-sync aio used, else ignored
UNIV_INTERN dberr_t fil_load_single_table_tablespaces ( void  )

At the server startup, if we need crash recovery, scans the database directories under the MySQL datadir, looking for .ibd files. Those files are single-table tablespaces. We need to know the space id in each of them so that we know into which file we should look to check the contents of a page stored in the doublewrite buffer, also to know where to apply log records where the space id is != 0.

Returns
DB_SUCCESS or error number
UNIV_INTERN char* fil_make_ibd_name ( const char *  name,
bool  is_full_path 
)

Allocates a file name for a single-table tablespace. The string must be freed by caller with mem_free().

Returns
own: file name in: TRUE if it is a dir path
Parameters
namein: table name or a dir path
UNIV_INTERN char* fil_make_isl_name ( const char *  name)

Allocates a file name for a tablespace ISL file (InnoDB Symbolic Link). The string must be freed by caller with mem_free().

Returns
own: file name in: table name
UNIV_INTERN void fil_mtr_rename_log ( ulint  old_space_id,
const char *  old_name,
ulint  new_space_id,
const char *  new_name,
const char *  tmp_name,
mtr_t mtr 
)

Generate redo logs for swapping two .ibd files

Parameters
old_space_idin: tablespace id of the old table.
old_namein: old table name
new_space_idin: tablespace id of the new table
new_namein: new table name
tmp_namein: temp table name used while swapping
mtrin/out: mini-transaction
UNIV_INTERN char* fil_node_create ( const char *  name,
ulint  size,
ulint  id,
ibool  is_raw 
)

Appends a new file to the chain of files of a space. File must be closed.

Returns
pointer to the file name, or NULL on error
Parameters
namein: file name (file must be closed)
sizein: file size in database blocks, rounded downwards to an integer
idin: space id where to append
is_rawin: TRUE if a raw device or a raw disk partition
UNIV_INTERN byte* fil_op_log_parse_or_replay ( byte *  ptr,
byte *  end_ptr,
ulint  type,
ulint  space_id,
ulint  log_flags 
)

Parses the body of a log record written about an .ibd file operation. That is, the log record part after the standard (type, space id, page no) header of the log record.

If desired, also replays the delete or rename operation if the .ibd file exists and the space id in it matches. Replays the create operation if a file at that path does not exist yet. If the database directory for the file to be created does not exist, then we create the directory, too.

Note that mysqlbackup –apply-log sets fil_path_to_mysql_datadir to point to the datadir that we should use in replaying the file operations.

Returns
end of log record, or NULL if the record was not completely contained between ptr and end_ptr in: redo log flags (stored in the page number parameter)
Parameters
ptrin: buffer containing the log record body, or an initial segment of it, if the record does not fir completely between ptr and end_ptr
end_ptrin: buffer end
typein: the type of this log record
space_idin: the space id of the tablespace in question, or 0 if the log record should only be parsed but not replayed
UNIV_INTERN void fil_open_log_and_system_tablespace_files ( void  )

Opens all log files and system tablespace data files. They stay open until the database server shutdown. This should be called at a server startup after the space objects for the log and the system tablespace have been created. The purpose of this operation is to make sure we never run out of file descriptors if we need to read from the insert buffer or to write to the log.

UNIV_INTERN dberr_t fil_open_single_table_tablespace ( bool  validate,
bool  fix_dict,
ulint  id,
ulint  flags,
const char *  tablename,
const char *  filepath 
)

Tries to open a single-table tablespace and optionally checks the space id is right in it. If does not succeed, prints an error message to the .err log. This function is used to open a tablespace when we start up mysqld, and also in IMPORT TABLESPACE. NOTE that we assume this operation is used either at the database startup or under the protection of the dictionary mutex, so that two users cannot race here. This operation does not leave the file associated with the tablespace open, but closes it after we have looked at the space id in it.

If the validate boolean is set, we read the first page of the file and check that the space id in the file is what we expect. We assume that this function runs much faster if no check is made, since accessing the file inode probably is much faster (the OS caches them) than accessing the first page of the file. This boolean may be initially FALSE, but if a remote tablespace is found it will be changed to true.

If the fix_dict boolean is set, then it is safe to use an internal SQL statement to update the dictionary tables if they are incorrect.

Returns
DB_SUCCESS or error code
Parameters
validatein: Do we validate tablespace?
fix_dictin: Can we fix the dictionary?
idin: space id
flagsin: tablespace flags
tablenamein: table name in the databasename/tablename format
filepathin: tablespace filepath
UNIV_INTERN ulint fil_page_get_next ( const byte *  page)

Get the successor of a file page.

Returns
FIL_PAGE_NEXT in: file page
UNIV_INTERN ulint fil_page_get_prev ( const byte *  page)

Get the predecessor of a file page.

Returns
FIL_PAGE_PREV in: file page
UNIV_INTERN ulint fil_page_get_type ( const byte *  page)

Gets the file page type.

Returns
type; NOTE that if the type has not been written to page, the return value not defined in: file page
UNIV_INTERN void fil_page_set_type ( byte *  page,
ulint  type 
)

Sets the file page type. in: type

Parameters
pagein/out: file page
UNIV_INTERN const char* fil_read_first_page ( os_file_t  data_file,
ibool  one_read_already,
ulint *  flags,
ulint *  space_id,
lsn_t *  min_flushed_lsn,
lsn_t *  max_flushed_lsn 
)

Reads the flushed lsn, arch no, and tablespace flag fields from a data file at database startup.

Return values
NULLon success, or if innodb_force_recovery is set
Returns
pointer to an error message string
Parameters
data_filein: open data file
one_read_alreadyin: TRUE if min and max parameters below already contain sensible data
flagsout: tablespace flags
space_idout: tablespace ID
min_flushed_lsnout: min of flushed lsn values in data files
max_flushed_lsnout: max of flushed lsn values in data files
UNIV_INTERN char* fil_read_link_file ( const char *  name)

Reads an InnoDB Symbolic Link (ISL) file. It is always created under the 'datadir' of MySQL. The name is of the form {databasename}/{tablename}. and the isl file is expected to be in a '{databasename}' directory called '{tablename}.isl'. The caller must free the memory of the null-terminated path returned if it is not null.

Returns
own: filepath found in link file, NULL if not found. in: tablespace name
UNIV_INTERN ibool fil_rename_tablespace ( const char *  old_name_in,
ulint  id,
const char *  new_name,
const char *  new_path 
)

Renames a single-table tablespace. The tablespace must be cached in the tablespace memory cache.

Returns
TRUE if success in: new full datafile path if the tablespace is remotely located, or NULL if it is located in the normal data directory.
Parameters
old_name_inin: old table name in the standard databasename/tablename format of InnoDB, or NULL if we do the rename based on the space id only
idin: space id
new_namein: new table name in the standard databasename/tablename format of InnoDB
UNIV_INTERN void fil_set_max_space_id_if_bigger ( ulint  max_id)

Sets the max tablespace id counter if the given number is bigger than the previous value. in: maximum known id

UNIV_INTERN ibool fil_space_create ( const char *  name,
ulint  id,
ulint  zip_size,
ulint  purpose 
)

Creates a space memory object and puts it to the 'fil system' hash table. If there is an error, prints an error message to the .err log.

Returns
TRUE if success in: FIL_TABLESPACE, or FIL_LOG if log
Parameters
namein: space name
idin: space id
zip_sizein: compressed page size, or 0 for uncompressed tablespaces
UNIV_INTERN ibool fil_space_for_table_exists_in_mem ( ulint  id,
const char *  name,
ibool  mark_space,
ibool  print_error_if_does_not_exist,
bool  adjust_space,
mem_heap_t heap,
table_id_t  table_id 
)

Returns TRUE if a matching tablespace exists in the InnoDB tablespace memory cache. Note that if we have not done a crash recovery at the database startup, there may be many tablespaces which are not yet in the memory cache.

Returns
TRUE if a matching tablespace exists in the memory cache in: table id
Parameters
idin: space id
namein: table name in the standard 'databasename/tablename' format
mark_spacein: in crash recovery, at database startup we mark all spaces which have an associated table in the InnoDB data dictionary, so that we can print a warning about orphaned tablespaces
print_error_if_does_not_existin: print detailed error information to the .err log if a matching tablespace is not found from memory
adjust_spacein: whether to adjust space id when find table space mismatch
heapin: heap memory
UNIV_INTERN char* fil_space_get_first_path ( ulint  id)

Returns the path from the first fil_node_t found for the space ID sent. The caller is responsible for freeing the memory allocated here for the value returned.

Returns
a copy of fil_node_t::path, NULL if space is zero or not found. in: space id
UNIV_INTERN ulint fil_space_get_flags ( ulint  id)

Returns the flags of the space. The tablespace must be cached in the memory cache.

Returns
flags, ULINT_UNDEFINED if space not found in: space id
UNIV_INTERN rw_lock_t* fil_space_get_latch ( ulint  id,
ulint *  zip_size 
)

Returns the latch of a file space.

Returns
latch protecting storage allocation out: compressed page size, or 0 for uncompressed tablespaces
Parameters
idin: space id
UNIV_INTERN ulint fil_space_get_n_reserved_extents ( ulint  id)

Gets the number of reserved extents. If the database is silent, this number should be zero. in: space id

UNIV_INTERN ulint fil_space_get_size ( ulint  id)

Returns the size of the space in pages. The tablespace must be cached in the memory cache.

Returns
space size, 0 if space not found in: space id
UNIV_INTERN ulint fil_space_get_type ( ulint  id)

Returns the type of a file space.

Returns
FIL_TABLESPACE or FIL_LOG in: space id
UNIV_INTERN ib_int64_t fil_space_get_version ( ulint  id)

Returns the version number of a tablespace, -1 if not found.

Returns
version number, -1 if the tablespace does not exist in the memory cache in: space id
UNIV_INTERN ulint fil_space_get_zip_size ( ulint  id)

Returns the compressed page size of the space, or 0 if the space is not compressed. The tablespace must be cached in the memory cache.

Returns
compressed page size, ULINT_UNDEFINED if space not found in: space id
UNIV_INTERN void fil_space_release_free_extents ( ulint  id,
ulint  n_reserved 
)

Releases free extents in a file space. in: how many one reserved

Parameters
idin: space id
UNIV_INTERN ibool fil_space_reserve_free_extents ( ulint  id,
ulint  n_free_now,
ulint  n_to_reserve 
)

Tries to reserve free extents in a file space.

Returns
TRUE if succeed in: how many one wants to reserve
Parameters
idin: space id
n_free_nowin: number of free extents now
UNIV_INTERN ibool fil_tablespace_deleted_or_being_deleted_in_mem ( ulint  id,
ib_int64_t  version 
)

Returns TRUE if a single-table tablespace does not exist in the memory cache, or is being deleted there.

Returns
TRUE if does not exist or is being deleted in: tablespace_version should be this; if you pass -1 as the value of this, then this parameter is ignored
Parameters
idin: space id
UNIV_INTERN ibool fil_tablespace_exists_in_mem ( ulint  id)

Returns TRUE if a single-table tablespace exists in the memory cache.

Returns
TRUE if exists in: space id
UNIV_INTERN ibool fil_tablespace_is_being_deleted ( ulint  id)

Returns TRUE if a single-table tablespace is being deleted.

Returns
TRUE if being deleted in: space id
UNIV_INTERN dberr_t fil_tablespace_iterate ( dict_table_t table,
ulint  n_io_buffers,
PageCallback callback 
)

Iterate over all the pages in the tablespace.

Parameters
table- the table definiton in the server
n_io_buffers- number of blocks to read and write together
callback- functor that will do the page updates
Returns
DB_SUCCESS or error code
bool fil_user_tablespace_restore_page ( fsp_open_info fsp,
ulint  page_no 
)

Finds the given page_no of the given space id from the double write buffer, and copies it to the corresponding .ibd file.

Returns
true if copy was successful, or false.
UNIV_INTERN ibool fil_validate ( void  )

Checks the consistency of the tablespace cache.

Returns
TRUE if ok
UNIV_INTERN dberr_t fil_write_flushed_lsn_to_data_files ( lsn_t  lsn,
ulint  arch_log_no 
)

Writes the flushed lsn and the latest archived log number to the page header of the first page of each data file in the system tablespace.

Returns
DB_SUCCESS or error number in: latest archived log file number
Parameters
lsnin: lsn to write

Variable Documentation

fil_addr_t fil_addr_null

The null file address

ulint fil_n_file_opened

Number of files currently open

ulint fil_n_log_flushes

The number of fsyncs done to the log

ulint fil_n_pending_log_flushes

Number of pending redo log flushes

ulint fil_n_pending_tablespace_flushes

Number of pending tablespace flushes

const char* fil_path_to_mysql_datadir
When mysqld is run, the default directory "." is the mysqld datadir,

but in the MySQL Embedded Server Library and mysqlbackup it is not the default directory, and we must set the base file path explicitly