MySQL 8.4.0
Source Code Documentation
fil0fil.h File Reference

The low-level file system. More...

#include "univ.i"
#include "dict0types.h"
#include "fil0types.h"
#include "log0recv.h"
#include "page0size.h"
#include "ibuf0types.h"
#include "ut0new.h"
#include "mysql/strings/m_ctype.h"
#include "sql/dd/object_id.h"
#include <atomic>
#include <cstdint>
#include <list>
#include <vector>

Go to the source code of this file.

Classes

struct  fil_node_t
 File node of a tablespace or the log data space. More...
 
struct  fil_space_t
 Tablespace or log data space. More...
 
class  Fil_path
 Wrapper for a path to a directory that may or may not exist. More...
 
struct  fil_addr_t
 File space address. More...
 
class  Fil_iterator
 Iterate over the files in all the tablespaces. More...
 
struct  PageCallback
 Callback functor. More...
 

Macros

#define UNDO_INITIAL_SIZE_IN_PAGES    os_offset_t { UNDO_INITIAL_SIZE / srv_page_size }
 
#define DOT_IBD   dot_ext[IBD]
 
#define DOT_CFG   dot_ext[CFG]
 
#define DOT_CFP   dot_ext[CFP]
 
#define DOT_IBT   dot_ext[IBT]
 
#define DOT_IBU   dot_ext[IBU]
 
#define DOT_DWR   dot_ext[DWR]
 
#define fil_block_check_type(block, type, mtr)    fil_page_check_type(block->page.id, block->frame, type, mtr)
 Check (and if needed, reset) the page type. More...
 

Typedefs

using Filenames = std::vector< std::string, ut::allocator< std::string > >
 
using Space_ids = std::vector< space_id_t, ut::allocator< space_id_t > >
 
using fil_faddr_t = byte
 'type' definition in C: an address stored in a file page is a string of bytes More...
 
using page_type_t = uint16_t
 

Enumerations

enum  fil_type_t : uint8_t { FIL_TYPE_TEMPORARY = 1 , FIL_TYPE_IMPORT = 2 , FIL_TYPE_TABLESPACE = 4 }
 File types. More...
 
enum class  Fil_state {
  MATCHES , MISSING , DELETED , MOVED ,
  RENAMED
}
 Result of comparing a path. More...
 
enum  ib_file_suffix {
  NO_EXT = 0 , IBD = 1 , CFG = 2 , CFP = 3 ,
  IBT = 4 , IBU = 5 , DWR = 6 , BWR = 7
}
 Common InnoDB file extensions. More...
 

Functions

size_t fil_get_scan_threads (size_t num_files)
 Calculate the number of threads that can be spawned to scan the given number of files taking into the consideration, number of cores available on the machine. More...
 
std::ostream & operator<< (std::ostream &out, const fil_addr_t &obj)
 
fil_space_tfil_space_get (space_id_t space_id)
 Look up a tablespace. More...
 
rw_lock_tfil_space_get_latch (space_id_t space_id)
 Returns the latch of a file space. More...
 
fil_type_t fil_space_get_type (space_id_t space_id)
 Gets the type of a file space. More...
 
void fil_space_set_imported (space_id_t space_id)
 Note that a tablespace has been imported. More...
 
char * fil_node_create (const char *name, page_no_t size, fil_space_t *space, bool is_raw, bool atomic_write, page_no_t max_pages=PAGE_NO_MAX)
 Attach a file to a tablespace. More...
 
fil_space_tfil_space_create (const char *name, space_id_t space_id, uint32_t flags, fil_type_t purpose)
 Create a space memory object and put it to the fil_system hash table. More...
 
bool fil_assign_new_space_id (space_id_t *space_id)
 Assigns a new space id for a new single-table tablespace. More...
 
char * fil_space_get_first_path (space_id_t space_id)
 Returns the path from the first fil_node_t found with this space ID. More...
 
page_no_t fil_space_get_size (space_id_t space_id)
 Returns the size of the space in pages. More...
 
page_no_t fil_space_get_undo_initial_size (space_id_t space_id)
 Returns the size of an undo space just after it was initialized. More...
 
void fil_space_set_undo_size (space_id_t space_id, bool use_current)
 This is called for an undo tablespace after it has been initialized or opened. More...
 
uint32_t fil_space_get_flags (space_id_t space_id)
 Returns the flags of the space. More...
 
void fil_space_set_flags (fil_space_t *space, uint32_t flags)
 Sets the flags of the tablespace. More...
 
bool fil_space_open (space_id_t space_id)
 Open each file of a tablespace if not already open. More...
 
void fil_space_close (space_id_t space_id)
 Close each file of a tablespace if open. More...
 
const page_size_t fil_space_get_page_size (space_id_t space_id, bool *found)
 Returns the page size of the space and whether it is compressed or not. More...
 
void fil_init (ulint max_n_open)
 Initializes the tablespace memory cache. More...
 
bool fil_open_files_limit_update (size_t &new_max_open_files)
 Changes the maximum opened files limit. More...
 
void fil_close ()
 Initializes the tablespace memory cache. More...
 
void fil_open_system_tablespace_files ()
 Opens all log files and system tablespace data files. More...
 
void fil_close_all_files ()
 Closes all open files. More...
 
void fil_set_max_space_id_if_bigger (space_id_t max_id)
 Sets the max tablespace id counter if the given number is bigger than the previous value. More...
 
dberr_t fil_write_flushed_lsn (lsn_t lsn)
 Write the flushed LSN to the page header of the first page in the system tablespace. More...
 
fil_space_tfil_space_acquire (space_id_t space_id)
 Acquire a tablespace when it could be dropped concurrently. More...
 
fil_space_tfil_space_acquire_silent (space_id_t space_id)
 Acquire a tablespace that may not exist. More...
 
void fil_space_release (fil_space_t *space)
 Release a tablespace acquired with fil_space_acquire(). More...
 
bool fil_system_get_file_by_space_id (space_id_t space_id, std::string &name)
 Fetch the file name opened for a space_id from the file map. More...
 
bool fil_system_get_file_by_space_num (space_id_t space_num, space_id_t &space_id, std::string &name)
 Fetch the file name opened for an undo space number from the file map. More...
 
bool fil_truncate_tablespace (space_id_t space_id, page_no_t size_in_pages)
 Truncate the tablespace to needed size. More...
 
dberr_t fil_close_tablespace (space_id_t space_id)
 Closes a single-table tablespace. More...
 
dberr_t fil_discard_tablespace (space_id_t space_id)
 Discards a single-table tablespace. More...
 
dberr_t fil_rename_tablespace_check (space_id_t space_id, const char *old_path, const char *new_path, bool is_discarded)
 Test if a tablespace file can be renamed to a new filepath by checking if that the old filepath exists and the new filepath does not exist. More...
 
dberr_t fil_rename_tablespace (space_id_t space_id, const char *old_path, const char *new_name, const char *new_path_in)
 Rename a single-table tablespace. More...
 
dberr_t fil_ibd_create (space_id_t space_id, const char *name, const char *path, uint32_t flags, page_no_t size)
 Create an IBD tablespace file. More...
 
dberr_t fil_ibt_create (space_id_t space_id, const char *name, const char *path, uint32_t flags, page_no_t size)
 Create a session temporary tablespace (IBT) file. More...
 
dberr_t fil_delete_tablespace (space_id_t space_id, buf_remove_t buf_remove)
 Deletes an IBD or IBU tablespace. More...
 
dberr_t fil_ibd_open (bool validate, fil_type_t purpose, space_id_t space_id, uint32_t flags, const char *space_name, const char *path_in, bool strict, bool old_space)
 Open a single-table tablespace and optionally do some validation such as checking that the space id is correct. More...
 
bool fil_space_exists_in_mem (space_id_t space_id, const char *name, bool print_err, bool adjust_space)
 Returns true if a matching tablespace exists in the InnoDB tablespace memory cache. More...
 
void fil_extend_tablespaces_to_stored_len ()
 Extends all tablespaces to the size stored in the space header. More...
 
bool fil_space_extend (fil_space_t *space, page_no_t size)
 Try to extend a tablespace if it is smaller than the specified size. More...
 
bool fil_space_reserve_free_extents (space_id_t space_id, ulint n_free_now, ulint n_to_reserve)
 Tries to reserve free extents in a file space. More...
 
void fil_space_release_free_extents (space_id_t space_id, ulint n_reserved)
 Releases free extents in a file space. More...
 
ulint fil_space_get_n_reserved_extents (space_id_t space_id)
 Gets the number of reserved extents. More...
 
dberr_t fil_io (const IORequest &type, bool sync, const page_id_t &page_id, const page_size_t &page_size, ulint byte_offset, ulint len, void *buf, void *message)
 Read or write data from a file. More...
 
void fil_aio_wait (ulint segment)
 Waits for an AIO operation to complete. More...
 
void fil_flush (space_id_t space_id)
 Flushes to disk possible writes cached by the OS. More...
 
void fil_flush_file_spaces ()
 Flush to disk the writes in file spaces possibly cached by the OS (note: spaces of type FIL_TYPE_TEMPORARY are skipped) More...
 
bool fil_validate ()
 Checks the consistency of the tablespace cache. More...
 
bool fil_addr_is_null (const fil_addr_t &addr)
 Returns true if file address is undefined. More...
 
page_no_t fil_page_get_prev (const byte *page)
 Get the predecessor of a file page. More...
 
page_no_t fil_page_get_next (const byte *page)
 Get the successor of a file page. More...
 
void fil_page_set_type (byte *page, ulint type)
 Sets the file page type. More...
 
void fil_page_reset_type (const page_id_t &page_id, byte *page, ulint type, mtr_t *mtr)
 Reset the page type. More...
 
void fil_page_check_type (const page_id_t &page_id, byte *page, ulint type, mtr_t *mtr)
 Check (and if needed, reset) the page type. More...
 
void fil_space_inc_redo_skipped_count (space_id_t space_id)
 Increase redo skipped count for a tablespace. More...
 
void fil_space_dec_redo_skipped_count (space_id_t space_id)
 Decrease redo skipped count for a tablespace. More...
 
bool fil_space_is_redo_skipped (space_id_t space_id)
 Check whether a single-table tablespace is redo skipped. More...
 
bool fil_delete_file (const char *path)
 Delete the tablespace file and any related files like .cfg. More...
 
dberr_t fil_tablespace_iterate (const Encryption_metadata &encryption_metadata, dict_table_t *table, ulint n_io_buffers, Compression::Type compression_type, PageCallback &callback)
 Iterate over all the pages in the tablespace. More...
 
bool fil_space_read_name_and_filepath (space_id_t space_id, char **name, char **filepath)
 Looks for a pre-existing fil_space_t with the given tablespace ID and, if found, returns the name and filepath in newly allocated buffers that the caller must free. More...
 
char * fil_path_to_space_name (const char *filename)
 Convert a file name to a tablespace name. More...
 
space_id_t fil_space_get_id_by_name (const char *name)
 Returns the space ID based on the tablespace name. More...
 
dberr_t fil_rename_precheck (const dict_table_t *old_table, const dict_table_t *new_table, const char *tmp_name)
 Check if swapping two .ibd files can be done without failure. More...
 
dberr_t fil_set_compression (space_id_t space_id, const char *algorithm)
 Set the compression type for the tablespace. More...
 
Compression::Type fil_get_compression (space_id_t space_id)
 Get the compression algorithm for a tablespace. More...
 
void fil_io_set_encryption (IORequest &req_type, const page_id_t &page_id, fil_space_t *space)
 Set encryption information for IORequest. More...
 
dberr_t fil_set_encryption (space_id_t space_id, Encryption::Type algorithm, byte *key, byte *iv)
 Set the encryption type for the tablespace. More...
 
dberr_t fil_set_autoextend_size (space_id_t space_id, uint64_t autoextend_size)
 Set the autoextend_size attribute for the tablespace. More...
 
dberr_t fil_reset_encryption (space_id_t space_id)
 Reset the encryption type for the tablespace. More...
 
size_t fil_encryption_rotate ()
 Rotate the tablespace keys by new master key. More...
 
void fil_encryption_reencrypt (std::vector< space_id_t > &sid_vector)
 Roencrypt the tablespace keys by current master key. More...
 
void fil_space_open_if_needed (fil_space_t *space)
 During crash recovery, open a tablespace if it had not been opened yet, to get valid size and flags. More...
 
void fil_no_punch_hole (fil_node_t *file)
 Note that the file system where the file resides doesn't support PUNCH HOLE. More...
 
fil_space_tfil_space_get_sys_space ()
 
const bytefil_tablespace_redo_create (const byte *ptr, const byte *end, const page_id_t &page_id, ulint parsed_bytes, bool parse_only)
 Redo a tablespace create. More...
 
const bytefil_tablespace_redo_delete (const byte *ptr, const byte *end, const page_id_t &page_id, ulint parsed_bytes, bool parse_only)
 Redo a tablespace delete. More...
 
const bytefil_tablespace_redo_rename (const byte *ptr, const byte *end, const page_id_t &page_id, ulint parsed_bytes, bool parse_only)
 Redo a tablespace rename. More...
 
const bytefil_tablespace_redo_extend (const byte *ptr, const byte *end, const page_id_t &page_id, ulint parsed_bytes, bool parse_only)
 Redo a tablespace extend. More...
 
const bytefil_tablespace_redo_encryption (const byte *ptr, const byte *end, space_id_t space_id, lsn_t lsn)
 Parse and process an encryption redo record. More...
 
void fil_tablespace_open_init_for_recovery (bool recovery)
 Read the tablespace id to path mapping from the file. More...
 
bool fil_tablespace_lookup_for_recovery (space_id_t space_id)
 Lookup the tablespace ID. More...
 
bool fil_update_partition_name (space_id_t space_id, uint32_t fsp_flags, bool update_space, std::string &space_name, std::string &dd_path)
 Compare and update space name and dd path for partitioned table. More...
 
void fil_add_moved_space (dd::Object_id dd_object_id, space_id_t space_id, const char *space_name, const std::string &old_path, const std::string &new_path)
 Add tablespace to the set of tablespaces to be updated in DD. More...
 
Fil_state fil_tablespace_path_equals (space_id_t space_id, const char *space_name, ulint fsp_flags, std::string old_path, std::string *new_path)
 Lookup the tablespace ID and return the path to the file. More...
 
bool fil_check_missing_tablespaces ()
 This function should be called after recovery has completed. More...
 
void fil_set_scan_dir (const std::string &directory, bool is_undo_dir=false)
 Normalize and save a directory to scan for datafiles. More...
 
void fil_set_scan_dirs (const std::string &directories)
 Normalize and save a list of directories to scan for datafiles. More...
 
dberr_t fil_scan_for_tablespaces ()
 Discover tablespaces by reading the header from .ibd files. More...
 
dberr_t fil_tablespace_open_for_recovery (space_id_t space_id)
 Open the tablespace and also get the tablespace filenames, space_id must already be known. More...
 
bool fil_op_replay_rename_for_ddl (const page_id_t &page_id, const char *old_name, const char *new_name)
 Replay a file rename operation for ddl replay. More...
 
dberr_t fil_open_for_business (bool read_only_mode)
 Free the Tablespace_files instance. More...
 
bool fil_path_is_known (const std::string &path)
 Check if a path is known to InnoDB meaning that it is in or under one of the four path settings scanned at startup for file discovery. More...
 
std::string fil_get_dirs ()
 Get the list of directories that datafiles can reside in. More...
 
dberr_t fil_rename_tablespace_by_id (space_id_t space_id, const char *old_name, const char *new_name)
 Rename a tablespace. More...
 
dberr_t fil_write_initial_pages (pfs_os_file_t file, const char *path, fil_type_t type, page_no_t size, const byte *encrypt_info, space_id_t space_id, uint32_t &space_flags, bool &atomic_write, bool &punch_hole)
 Write initial pages for a new tablespace file created. More...
 
void fil_free_scanned_files ()
 Free the data structures required for recovery. More...
 
void fil_space_update_name (fil_space_t *space, const char *name)
 Update the tablespace name. More...
 
void fil_adjust_name_import (dict_table_t *table, const char *path, ib_file_suffix extn)
 Adjust file name for import for partition files in different letter case. More...
 
void fil_purge ()
 Allows fil system to do periodical cleanup. More...
 
size_t fil_count_undo_deleted (space_id_t undo_num)
 Count how many truncated undo space IDs are still tracked in the buffer pool and the file_system cache. More...
 
const char * fil_get_page_type_str (page_type_t type) noexcept
 Get the page type as a string. More...
 
bool fil_is_page_type_valid (page_type_t type) noexcept
 Check if the given page type is valid. More...
 
dberr_t fil_prepare_file_for_io (space_id_t space_id, page_no_t &page_no, fil_node_t **node_out)
 
void fil_complete_write (space_id_t space_id, fil_node_t *node)
 

Variables

ulong srv_fast_shutdown
 The value of the configuration parameter innodb_fast_shutdown, controlling the InnoDB shutdown. More...
 
constexpr size_t FIL_SCAN_MAX_TABLESPACES_PER_THREAD = 8000
 Maximum number of tablespaces to be scanned by a thread while scanning for available tablespaces during server startup. More...
 
constexpr size_t FIL_SCAN_MAX_THREADS = 16
 Maximum number of threads that will be used for scanning the tablespace files. More...
 
constexpr size_t FIL_SCAN_THREADS_PER_CORE = 2
 Number of threads per core. More...
 
static constexpr char general_space_name [] = "innodb_general"
 This tablespace name is used internally during file discovery to open a general tablespace before the data dictionary is recovered and available. More...
 
static constexpr char undo_space_name [] = "innodb_undo"
 This tablespace name is used as the prefix for implicit undo tablespaces and during file discovery to open an undo tablespace before the DD is recovered and available. More...
 
volatile bool recv_recovery_on
 true when applying redo log records during crash recovery; false otherwise. More...
 
constexpr uint32_t UNDO_INITIAL_SIZE = 16 * 1024 * 1024
 Initial size of an UNDO tablespace when it is created new or truncated under low load. More...
 
constexpr size_t FIL_SPACE_MAGIC_N = 89472
 Value of fil_space_t::magic_n. More...
 
constexpr size_t FIL_NODE_MAGIC_N = 89389
 Value of fil_node_t::magic_n. More...
 
const char * dot_ext []
 Common InnoDB file extensions. More...
 
Fil_path MySQL_datadir_path
 The MySQL server –datadir value. More...
 
Fil_path MySQL_undo_path
 The MySQL server –innodb-undo-directory value. More...
 
bool MySQL_undo_path_is_unique
 The undo path is different from any other known directory. More...
 
constexpr size_t FIL_IBD_FILE_INITIAL_SIZE = 7
 Initial size of a single-table tablespace in pages. More...
 
constexpr size_t FIL_IBT_FILE_INITIAL_SIZE = 5
 
constexpr size_t FIL_IBD_FILE_INITIAL_SIZE_5_7 = 4
 An empty tablespace (CREATE TABLESPACE) has minimum of 4 pages and an empty CREATE TABLE (file_per_table) has 6 pages. More...
 
constexpr page_no_t FIL_NULL = std::numeric_limits<page_no_t>::max()
 'null' (undefined) page offset in the context of file spaces More...
 
constexpr page_no_t PAGE_NO_MAX = std::numeric_limits<page_no_t>::max() - 1
 Maximum Page Number, one less than FIL_NULL. More...
 
constexpr space_id_t SPACE_UNKNOWN = std::numeric_limits<space_id_t>::max()
 Unknown space id. More...
 
fil_addr_t fil_addr_null
 The null file address. More...
 
std::atomic< std::uint64_t > fil_n_pending_tablespace_flushes
 Number of pending tablespace flushes. More...
 
std::atomic_size_t fil_n_files_open
 Number of files currently open. More...
 
constexpr page_type_t FIL_PAGE_INDEX = 17855
 File page types (values of FIL_PAGE_TYPE) More...
 
constexpr page_type_t FIL_PAGE_RTREE = 17854
 R-tree node. More...
 
constexpr page_type_t FIL_PAGE_SDI = 17853
 Tablespace SDI Index page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_UNUSED = 1
 This page type is unused. More...
 
constexpr page_type_t FIL_PAGE_UNDO_LOG = 2
 Undo log page. More...
 
constexpr page_type_t FIL_PAGE_INODE = 3
 Index node. More...
 
constexpr page_type_t FIL_PAGE_IBUF_FREE_LIST = 4
 Insert buffer free list. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ALLOCATED = 0
 Freshly allocated page. More...
 
constexpr page_type_t FIL_PAGE_IBUF_BITMAP = 5
 Insert buffer bitmap. More...
 
constexpr page_type_t FIL_PAGE_TYPE_SYS = 6
 System page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_TRX_SYS = 7
 Transaction system data. More...
 
constexpr page_type_t FIL_PAGE_TYPE_FSP_HDR = 8
 File space header. More...
 
constexpr page_type_t FIL_PAGE_TYPE_XDES = 9
 Extent descriptor page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_BLOB = 10
 Uncompressed BLOB page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ZBLOB = 11
 First compressed BLOB page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ZBLOB2 = 12
 Subsequent compressed BLOB page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_UNKNOWN = 13
 In old tablespaces, garbage in FIL_PAGE_TYPE is replaced with this value when flushing pages. More...
 
constexpr page_type_t FIL_PAGE_COMPRESSED = 14
 Compressed page. More...
 
constexpr page_type_t FIL_PAGE_ENCRYPTED = 15
 Encrypted page. More...
 
constexpr page_type_t FIL_PAGE_COMPRESSED_AND_ENCRYPTED = 16
 Compressed and Encrypted page. More...
 
constexpr page_type_t FIL_PAGE_ENCRYPTED_RTREE = 17
 Encrypted R-tree page. More...
 
constexpr page_type_t FIL_PAGE_SDI_BLOB = 18
 Uncompressed SDI BLOB page. More...
 
constexpr page_type_t FIL_PAGE_SDI_ZBLOB = 19
 Compressed SDI BLOB page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_LEGACY_DBLWR = 20
 Legacy doublewrite buffer page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_RSEG_ARRAY = 21
 Rollback Segment Array page. More...
 
constexpr page_type_t FIL_PAGE_TYPE_LOB_INDEX = 22
 Index pages of uncompressed LOB. More...
 
constexpr page_type_t FIL_PAGE_TYPE_LOB_DATA = 23
 Data pages of uncompressed LOB. More...
 
constexpr page_type_t FIL_PAGE_TYPE_LOB_FIRST = 24
 The first page of an uncompressed LOB. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ZLOB_FIRST = 25
 The first page of a compressed LOB. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ZLOB_DATA = 26
 Data pages of compressed LOB. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ZLOB_INDEX = 27
 Index pages of compressed LOB. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ZLOB_FRAG = 28
 Fragment pages of compressed LOB. More...
 
constexpr page_type_t FIL_PAGE_TYPE_ZLOB_FRAG_ENTRY = 29
 Index pages of fragment pages (compressed LOB). More...
 
constexpr page_type_t FIL_PAGE_TYPE_LAST = FIL_PAGE_TYPE_ZLOB_FRAG_ENTRY
 Note the highest valid non-index page_type_t. More...
 
bool fil_page_type_is_index (page_type_t page_type)
 Check whether the page type is index (Btree or Rtree or SDI) type. More...
 
page_type_t fil_page_get_type (const byte *page)
 Get the file page type. More...
 
bool fil_page_index_page_check (const byte *page)
 Check whether the page is index page (either regular Btree index or Rtree index. More...
 

Detailed Description

The low-level file system.

Created 10/25/1995 Heikki Tuuri

Macro Definition Documentation

◆ DOT_CFG

#define DOT_CFG   dot_ext[CFG]

◆ DOT_CFP

#define DOT_CFP   dot_ext[CFP]

◆ DOT_DWR

#define DOT_DWR   dot_ext[DWR]

◆ DOT_IBD

#define DOT_IBD   dot_ext[IBD]

◆ DOT_IBT

#define DOT_IBT   dot_ext[IBT]

◆ DOT_IBU

#define DOT_IBU   dot_ext[IBU]

◆ fil_block_check_type

#define fil_block_check_type (   block,
  type,
  mtr 
)     fil_page_check_type(block->page.id, block->frame, type, mtr)

Check (and if needed, reset) the page type.

Data files created before MySQL 5.1 may contain garbage in the FIL_PAGE_TYPE field. In MySQL 3.23.53, only undo log pages and index pages were tagged. Any other pages were written with uninitialized bytes in FIL_PAGE_TYPE.

Parameters
[in,out]blockBlock with possibly invalid FIL_PAGE_TYPE
[in]typeExpected page type
[in,out]mtrMini-transaction

◆ UNDO_INITIAL_SIZE_IN_PAGES

#define UNDO_INITIAL_SIZE_IN_PAGES    os_offset_t { UNDO_INITIAL_SIZE / srv_page_size }

Typedef Documentation

◆ fil_faddr_t

using fil_faddr_t = byte

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

◆ Filenames

using Filenames = std::vector<std::string, ut::allocator<std::string> >

◆ page_type_t

using page_type_t = uint16_t

◆ Space_ids

using Space_ids = std::vector<space_id_t, ut::allocator<space_id_t> >

Enumeration Type Documentation

◆ Fil_state

enum class Fil_state
strong

Result of comparing a path.

Enumerator
MATCHES 

The path matches what was found during the scan.

MISSING 

No MLOG_FILE_DELETE record and the file could not be found.

DELETED 

A MLOG_FILE_DELETE was found, file was deleted.

MOVED 

Space ID matches but the paths don't match.

RENAMED 

Tablespace and/or filename was renamed.

The DDL log will handle this case.

◆ fil_type_t

enum fil_type_t : uint8_t

File types.

Enumerator
FIL_TYPE_TEMPORARY 

temporary tablespace (temporary undo log or tables)

FIL_TYPE_IMPORT 

a tablespace that is being imported (no logging until finished)

FIL_TYPE_TABLESPACE 

persistent tablespace (for system, undo log or tables)

◆ ib_file_suffix

Common InnoDB file extensions.

Enumerator
NO_EXT 
IBD 
CFG 
CFP 
IBT 
IBU 
DWR 
BWR 

Function Documentation

◆ fil_add_moved_space()

void fil_add_moved_space ( dd::Object_id  dd_object_id,
space_id_t  space_id,
const char *  space_name,
const std::string &  old_path,
const std::string &  new_path 
)

Add tablespace to the set of tablespaces to be updated in DD.

Parameters
[in]dd_object_idServer DD tablespace ID
[in]space_idInnodb tablespace ID
[in]space_nameNew tablespace name
[in]old_pathOld Path in the data dictionary
[in]new_pathNew path to be update in dictionary

◆ fil_addr_is_null()

bool fil_addr_is_null ( const fil_addr_t addr)

Returns true if file address is undefined.

Parameters
[in]addrFile address to check
Returns
true if undefined

◆ fil_adjust_name_import()

void fil_adjust_name_import ( dict_table_t table,
const char *  path,
ib_file_suffix  extn 
)

Adjust file name for import for partition files in different letter case.

Parameters
[in]tableInnodb dict table
[in]pathfile path to open
[in]extnfile extension

◆ fil_aio_wait()

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.

Parameters
[in]segmentThe number of the segment in the AIO array to wait for

◆ fil_assign_new_space_id()

bool fil_assign_new_space_id ( space_id_t 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.

Parameters
[out]space_idSet this to the new tablespace ID
Returns
true if assigned, false if not

◆ fil_check_missing_tablespaces()

bool fil_check_missing_tablespaces ( )

This function should be called after recovery has completed.

Check for tablespace files for which we did not see any MLOG_FILE_DELETE or MLOG_FILE_RENAME record. These could not be recovered

Returns
true if there were some filenames missing for which we had to ignore redo log records during the apply phase

◆ fil_close()

void fil_close ( )

Initializes the tablespace memory cache.

Initializes the tablespace memory cache.

◆ fil_close_all_files()

void fil_close_all_files ( )

Closes all open files.

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

◆ fil_close_tablespace()

dberr_t fil_close_tablespace ( space_id_t  space_id)

Closes a single-table tablespace.

The tablespace must be cached in the memory cache. Free all pages used by the tablespace.

Parameters
[in]space_idTablespace ID
Returns
DB_SUCCESS or error

◆ fil_complete_write()

void fil_complete_write ( space_id_t  space_id,
fil_node_t node 
)

◆ fil_count_undo_deleted()

size_t fil_count_undo_deleted ( space_id_t  undo_num)

Count how many truncated undo space IDs are still tracked in the buffer pool and the file_system cache.

Parameters
[in]undo_numundo tablespace number.
Returns
number of undo tablespaces that are still in memory.

◆ fil_delete_file()

bool fil_delete_file ( const char *  path)

Delete the tablespace file and any related files like .cfg.

This should not be called for temporary tables.

Parameters
[in]pathFile path of the IBD tablespace
Returns
true on success

◆ fil_delete_tablespace()

dberr_t fil_delete_tablespace ( space_id_t  space_id,
buf_remove_t  buf_remove 
)

Deletes an IBD or IBU tablespace.

The tablespace must be cached in the memory cache. This will delete the datafile, fil_space_t & fil_node_t entries from the file_system_t cache.

Parameters
[in]space_idTablespace ID
[in]buf_removeSpecify the action to take on the pages for this table in the buffer pool.
Returns
DB_SUCCESS, DB_TABLESPCE_NOT_FOUND or DB_IO_ERROR

◆ fil_discard_tablespace()

dberr_t fil_discard_tablespace ( space_id_t  space_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;
  2. We remove all insert buffer entries for the tablespace immediately; in DROP TABLE they are only removed gradually in the background;
  3. When the user does IMPORT TABLESPACE, the tablespace will have the same id as it originally had.
  4. Free all the pages in use by the tablespace if rename=true.
    Parameters
    [in]space_idTablespace ID
    Returns
    DB_SUCCESS or error

◆ fil_encryption_reencrypt()

void fil_encryption_reencrypt ( std::vector< space_id_t > &  sid_vector)

Roencrypt the tablespace keys by current master key.

◆ fil_encryption_rotate()

size_t fil_encryption_rotate ( )

Rotate the tablespace keys by new master key.

Returns
the number of tablespaces that failed to rotate.

◆ fil_extend_tablespaces_to_stored_len()

void fil_extend_tablespaces_to_stored_len ( )

Extends all tablespaces to the size stored in the space header.

During the mysqlbackup –apply-log phase we extended the spaces on-demand so that log records could be appllied, but that may have left spaces still too small compared to the size stored in the space header.

◆ fil_flush()

void fil_flush ( space_id_t  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.

Parameters
[in]space_idTablespace ID

◆ fil_flush_file_spaces()

void fil_flush_file_spaces ( )

Flush to disk the writes in file spaces possibly cached by the OS (note: spaces of type FIL_TYPE_TEMPORARY are skipped)

◆ fil_free_scanned_files()

void fil_free_scanned_files ( )

Free the data structures required for recovery.

◆ fil_get_compression()

Compression::Type fil_get_compression ( space_id_t  space_id)

Get the compression algorithm for a tablespace.

Parameters
[in]space_idSpace ID to check
Returns
the compression algorithm

◆ fil_get_dirs()

std::string fil_get_dirs ( )

Get the list of directories that datafiles can reside in.

Returns
the list of directories 'dir1;dir2;....;dirN'

◆ fil_get_page_type_str()

const char * fil_get_page_type_str ( page_type_t  type)
noexcept

Get the page type as a string.

Parameters
[in]typepage type to be converted to string.
Returns
the page type as a string.

◆ fil_get_scan_threads()

size_t fil_get_scan_threads ( size_t  num_files)

Calculate the number of threads that can be spawned to scan the given number of files taking into the consideration, number of cores available on the machine.

Parameters
[in]num_filesNumber of files to be scanned
Returns
number of threads to be spawned for scanning the files

◆ fil_ibd_create()

dberr_t fil_ibd_create ( space_id_t  space_id,
const char *  name,
const char *  path,
uint32_t  flags,
page_no_t  size 
)

Create an IBD tablespace file.

Parameters
[in]space_idTablespace ID
[in]nameTablespace name in dbname/tablename format. For general tablespaces, the 'dbname/' part may be missing.
[in]pathPath and filename of the datafile to create.
[in]flagsTablespace flags
[in]sizeInitial size of the tablespace file in pages, must be >= FIL_IBD_FILE_INITIAL_SIZE
Returns
DB_SUCCESS or error code

◆ fil_ibd_open()

dberr_t fil_ibd_open ( bool  validate,
fil_type_t  purpose,
space_id_t  space_id,
uint32_t  flags,
const char *  space_name,
const char *  path_in,
bool  strict,
bool  old_space 
)

Open a single-table tablespace and optionally do some validation such as checking that the space id is correct.

If the file is already open, the validation will be done before reporting success. If not successful, print an error message to the error 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.

The fil_node_t::handle will not be left open.

Parameters
[in]validatewhether we should validate the tablespace (read the first page of the file and check that the space id in it matches id)
[in]purposeFIL_TYPE_TABLESPACE or FIL_TYPE_TEMPORARY
[in]space_idTablespace ID
[in]flagstablespace flags
[in]space_nametablespace name of the datafile If file-per-table, it is the table name in the databasename/tablename format
[in]path_inexpected filepath, usually read from dictionary
[in]strictwhether to report error when open ibd failed
[in]old_spacewhether it is a 5.7 tablespace opening by upgrade
Returns
DB_SUCCESS or error code

◆ fil_ibt_create()

dberr_t fil_ibt_create ( space_id_t  space_id,
const char *  name,
const char *  path,
uint32_t  flags,
page_no_t  size 
)

Create a session temporary tablespace (IBT) file.

Parameters
[in]space_idTablespace ID
[in]nameTablespace name
[in]pathPath and filename of the datafile to create.
[in]flagsTablespace flags
[in]sizeInitial size of the tablespace file in pages, must be >= FIL_IBT_FILE_INITIAL_SIZE
Returns
DB_SUCCESS or error code

◆ fil_init()

void fil_init ( ulint  max_n_open)

Initializes the tablespace memory cache.

Parameters
[in]max_n_openMaximum number of open files

◆ fil_io()

dberr_t fil_io ( const IORequest type,
bool  sync,
const page_id_t page_id,
const page_size_t page_size,
ulint  byte_offset,
ulint  len,
void *  buf,
void *  message 
)

Read or write data from a file.

Parameters
[in]typeIO context
[in]syncIf true then do synchronous IO
[in]page_idpage id
[in]page_sizepage size
[in]byte_offsetremainder of offset in bytes; in aio this must be divisible by the OS block size
[in]lenhow many bytes to read or write; this must not cross a file boundary; in AIO this must be a block size multiple
[in,out]bufbuffer where to store read data or from where to write; in AIO this must be appropriately aligned
[in]messagemessage for AIO handler if !sync, else ignored
Returns
error code
Return values
DB_SUCCESSon success
DB_TABLESPACE_DELETEDif the tablespace does not exist

◆ fil_io_set_encryption()

void fil_io_set_encryption ( IORequest req_type,
const page_id_t page_id,
fil_space_t space 
)

Set encryption information for IORequest.

Parameters
[in,out]req_typeIO request
[in]page_idpage id
[in]spacetable space

◆ fil_is_page_type_valid()

bool fil_is_page_type_valid ( page_type_t  type)
noexcept

Check if the given page type is valid.

Parameters
[in]typethe page type to be checked for validity.
Returns
true if it is valid page type, false otherwise.

◆ fil_no_punch_hole()

void fil_no_punch_hole ( fil_node_t file)

Note that the file system where the file resides doesn't support PUNCH HOLE.

Called from AIO handlers when IO returns DB_IO_NO_PUNCH_HOLE

Parameters
[in,out]filefile to set

◆ fil_node_create()

char * fil_node_create ( const char *  name,
page_no_t  size,
fil_space_t space,
bool  is_raw,
bool  atomic_write,
page_no_t  max_pages 
)

Attach a file to a tablespace.

File must be closed.

Parameters
[in]namefile name (file must be closed)
[in]sizefile size in database blocks, rounded downwards to an integer
[in,out]spacespace where to append
[in]is_rawtrue if a raw device or a raw disk partition
[in]atomic_writetrue if the file has atomic write enabled
[in]max_pagesmaximum number of pages in file
Returns
pointer to the file name
Return values
nullptrif error

◆ fil_op_replay_rename_for_ddl()

bool fil_op_replay_rename_for_ddl ( const page_id_t page_id,
const char *  old_name,
const char *  new_name 
)

Replay a file rename operation for ddl replay.

Parameters
[in]page_idSpace ID and first page number in the file
[in]old_nameold file name
[in]new_namenew file name
Returns
whether the operation was successfully applied (the name did not exist, or new_name did not exist and name was successfully renamed to new_name)

◆ fil_open_files_limit_update()

bool fil_open_files_limit_update ( size_t &  new_max_open_files)

Changes the maximum opened files limit.

Parameters
[in,out]new_max_open_filesNew value for the open files limit. If the limit cannot be changed, the value is changed to a minimum value recommended.
Returns
true if the new limit was set.

◆ fil_open_for_business()

dberr_t fil_open_for_business ( bool  read_only_mode)

Free the Tablespace_files instance.

Parameters
[in]read_only_modetrue if InnoDB is started in read only mode.
Returns
DB_SUCCESS if all OK

◆ fil_open_system_tablespace_files()

void fil_open_system_tablespace_files ( )

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.

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.

◆ fil_page_check_type()

void fil_page_check_type ( const page_id_t page_id,
byte page,
ulint  type,
mtr_t mtr 
)
inline

Check (and if needed, reset) the page type.

Data files created before MySQL 5.1 may contain garbage in the FIL_PAGE_TYPE field. In MySQL 3.23.53, only undo log pages and index pages were tagged. Any other pages were written with uninitialized bytes in FIL_PAGE_TYPE.

Parameters
[in]page_idPage number
[in,out]pagePage with possibly invalid FIL_PAGE_TYPE
[in]typeExpected page type
[in,out]mtrMini-transaction

◆ fil_page_get_next()

page_no_t fil_page_get_next ( const byte page)

Get the successor of a file page.

Parameters
[in]pageFile page
Returns
FIL_PAGE_NEXT

◆ fil_page_get_prev()

page_no_t fil_page_get_prev ( const byte page)

Get the predecessor of a file page.

Parameters
[in]pageFile page
Returns
FIL_PAGE_PREV

◆ fil_page_get_type()

page_type_t fil_page_get_type ( const byte page)
inline

Get the file page type.

Parameters
[in]pageFile page
Returns
page type

◆ fil_page_index_page_check()

bool fil_page_index_page_check ( const byte page)
inline

Check whether the page is index page (either regular Btree index or Rtree index.

Parameters
[in]pagepage frame whose page type is to be checked.

◆ fil_page_reset_type()

void fil_page_reset_type ( const page_id_t page_id,
byte page,
ulint  type,
mtr_t mtr 
)

Reset the page type.

Data files created before MySQL 5.1 may contain garbage in FIL_PAGE_TYPE. In MySQL 3.23.53, only undo log pages and index pages were tagged. Any other pages were written with uninitialized bytes in FIL_PAGE_TYPE.

Parameters
[in]page_idPage number
[in,out]pagePage with invalid FIL_PAGE_TYPE
[in]typeExpected page type
[in,out]mtrMini-transaction

◆ fil_page_set_type()

void fil_page_set_type ( byte page,
ulint  type 
)

Sets the file page type.

Parameters
[in,out]pageFile page
[in]typeFile page type to set

◆ fil_page_type_is_index()

bool fil_page_type_is_index ( page_type_t  page_type)
inline

Check whether the page type is index (Btree or Rtree or SDI) type.

◆ fil_path_is_known()

bool fil_path_is_known ( const std::string &  path)

Check if a path is known to InnoDB meaning that it is in or under one of the four path settings scanned at startup for file discovery.

Parameters
[in]pathPath to check
Returns
true if path is known to InnoDB

◆ fil_path_to_space_name()

char * fil_path_to_space_name ( const char *  filename)

Convert a file name to a tablespace name.

Strip the file name prefix and suffix, leaving only databasename/tablename.

Parameters
[in]filenamedirectory/databasename/tablename.ibd
Returns
database/tablename string, to be freed with ut::free()

◆ fil_prepare_file_for_io()

dberr_t fil_prepare_file_for_io ( space_id_t  space_id,
page_no_t page_no,
fil_node_t **  node_out 
)

◆ fil_purge()

void fil_purge ( )

Allows fil system to do periodical cleanup.

◆ fil_rename_precheck()

dberr_t fil_rename_precheck ( const dict_table_t old_table,
const dict_table_t new_table,
const char *  tmp_name 
)

Check if swapping two .ibd files can be done without failure.

Parameters
[in]old_tableold table
[in]new_tablenew table
[in]tmp_nametemporary table name
Returns
innodb error code

◆ fil_rename_tablespace()

dberr_t fil_rename_tablespace ( space_id_t  space_id,
const char *  old_path,
const char *  new_name,
const char *  new_path_in 
)

Rename a single-table tablespace.

The tablespace must exist in the memory cache.

Parameters
[in]space_idTablespace ID
[in]old_pathOld file name
[in]new_nameNew tablespace name in the schema/name format
[in]new_path_inNew file name, or nullptr if it is located in the normal data directory
Returns
InnoDB error code

◆ fil_rename_tablespace_by_id()

dberr_t fil_rename_tablespace_by_id ( space_id_t  space_id,
const char *  old_name,
const char *  new_name 
)

Rename a tablespace.

Use the space_id to find the shard.

Parameters
[in]space_idtablespace ID
[in]old_nameold tablespace name
[in]new_namenew tablespace name
Returns
DB_SUCCESS on success

◆ fil_rename_tablespace_check()

dberr_t fil_rename_tablespace_check ( space_id_t  space_id,
const char *  old_path,
const char *  new_path,
bool  is_discarded 
)

Test if a tablespace file can be renamed to a new filepath by checking if that the old filepath exists and the new filepath does not exist.

Parameters
[in]space_idTablespace ID
[in]old_pathOld filepath
[in]new_pathNew filepath
[in]is_discardedWhether the tablespace is discarded
Returns
innodb error code

◆ fil_reset_encryption()

dberr_t fil_reset_encryption ( space_id_t  space_id)

Reset the encryption type for the tablespace.

Parameters
[in]space_idSpace ID of tablespace for which to set
Returns
DB_SUCCESS or error code

◆ fil_scan_for_tablespaces()

dberr_t fil_scan_for_tablespaces ( )

Discover tablespaces by reading the header from .ibd files.

Returns
DB_SUCCESS if all goes well

◆ fil_set_autoextend_size()

dberr_t fil_set_autoextend_size ( space_id_t  space_id,
uint64_t  autoextend_size 
)

Set the autoextend_size attribute for the tablespace.

Parameters
[in]space_idSpace ID of tablespace for which to set
[in]autoextend_sizeValue of autoextend_size attribute
Returns
DB_SUCCESS or error code

◆ fil_set_compression()

dberr_t fil_set_compression ( space_id_t  space_id,
const char *  algorithm 
)

Set the compression type for the tablespace.

Parameters
[in]space_idSpace ID of the tablespace
[in]algorithmText representation of the algorithm
Returns
DB_SUCCESS or error code

◆ fil_set_encryption()

dberr_t fil_set_encryption ( space_id_t  space_id,
Encryption::Type  algorithm,
byte key,
byte iv 
)

Set the encryption type for the tablespace.

Parameters
[in]space_idSpace ID of tablespace for which to set
[in]algorithmEncryption algorithm
[in]keyEncryption key
[in]ivEncryption iv
Returns
DB_SUCCESS or error code

◆ fil_set_max_space_id_if_bigger()

void fil_set_max_space_id_if_bigger ( space_id_t  max_id)

Sets the max tablespace id counter if the given number is bigger than the previous value.

Parameters
[in]max_idMaximum known tablespace ID

◆ fil_set_scan_dir()

void fil_set_scan_dir ( const std::string &  directory,
bool  is_undo_dir = false 
)

Normalize and save a directory to scan for datafiles.

Parameters
[in]directorydirectory to scan for ibd and ibu files
[in]is_undo_dirtrue for an undo directory

◆ fil_set_scan_dirs()

void fil_set_scan_dirs ( const std::string &  directories)

Normalize and save a list of directories to scan for datafiles.

Parameters
[in]directoriesDirectories to scan for ibd and ibu files in the form: "dir1;dir2; ... dirN"

◆ fil_space_acquire()

fil_space_t * fil_space_acquire ( space_id_t  space_id)

Acquire a tablespace when it could be dropped concurrently.

Used by background threads that do not necessarily hold proper locks for concurrency control.

Parameters
[in]space_idTablespace ID
Returns
the tablespace, or nullptr if missing or being deleted

◆ fil_space_acquire_silent()

fil_space_t * fil_space_acquire_silent ( space_id_t  space_id)

Acquire a tablespace that may not exist.

Used by background threads that do not necessarily hold proper locks for concurrency control.

Parameters
[in]space_idTablespace ID
Returns
the tablespace, or nullptr if missing or being deleted

◆ fil_space_close()

void fil_space_close ( space_id_t  space_id)

Close each file of a tablespace if open.

Parameters
[in]space_idTablespace ID

◆ fil_space_create()

fil_space_t * fil_space_create ( const char *  name,
space_id_t  space_id,
uint32_t  flags,
fil_type_t  purpose 
)

Create a space memory object and put it to the fil_system hash table.

The tablespace name is independent from the tablespace file-name. Error messages are issued to the server log.

Parameters
[in]nameTablespace name
[in]space_idTablespace ID
[in]flagsTablespace flags
[in]purposeTablespace purpose
Returns
pointer to created tablespace, to be filled in with fil_node_create()
Return values
nullptron failure (such as when the same tablespace exists)

◆ fil_space_dec_redo_skipped_count()

void fil_space_dec_redo_skipped_count ( space_id_t  space_id)

Decrease redo skipped count for a tablespace.

Parameters
[in]space_idTablespace ID

◆ fil_space_exists_in_mem()

bool fil_space_exists_in_mem ( space_id_t  space_id,
const char *  name,
bool  print_err,
bool  adjust_space 
)

Returns true if a matching tablespace exists in the InnoDB tablespace memory cache.

Parameters
[in]space_idTablespace ID
[in]nameTablespace name used in space_create().
[in]print_errPrint detailed error information to the error log if a matching tablespace is not found from memory.
[in]adjust_spaceWhether to adjust space id on mismatch
Returns
true if a matching tablespace exists in the memory cache

◆ fil_space_extend()

bool fil_space_extend ( fil_space_t space,
page_no_t  size 
)

Try to extend a tablespace if it is smaller than the specified size.

Parameters
[in,out]spaceTablespace ID
[in]sizedesired size in pages
Returns
whether the tablespace is at least as big as requested

◆ fil_space_get()

fil_space_t * fil_space_get ( space_id_t  space_id)

Look up a tablespace.

The caller should hold an InnoDB table lock or a MDL that prevents the tablespace from being dropped during the operation, or the caller should be in single-threaded crash recovery mode (no user connections that could drop tablespaces). If this is not the case, fil_space_acquire() and fil_space_release() should be used instead.

Parameters
[in]space_idTablespace ID
Returns
tablespace, or nullptr if not found

◆ fil_space_get_first_path()

char * fil_space_get_first_path ( space_id_t  space_id)

Returns the path from the first fil_node_t found with this space ID.

The caller is responsible for freeing the memory allocated here for the value returned.

Parameters
[in]space_idTablespace ID
Returns
own: A copy of fil_node_t::path, nullptr if space ID is zero or not found.

◆ fil_space_get_flags()

uint32_t fil_space_get_flags ( space_id_t  space_id)

Returns the flags of the space.

The tablespace must be cached in the memory cache.

Parameters
[in]space_idTablespace ID for which to get the flags
Returns
flags, ULINT_UNDEFINED if space not found

◆ fil_space_get_id_by_name()

space_id_t fil_space_get_id_by_name ( const char *  name)

Returns the space ID based on the tablespace name.

The tablespace must be found in the tablespace memory cache. This call is made from external to this module, so the mutex is not owned.

Parameters
[in]nameTablespace name
Returns
space ID if tablespace found, SPACE_UNKNOWN if space not.

◆ fil_space_get_latch()

rw_lock_t * fil_space_get_latch ( space_id_t  space_id)

Returns the latch of a file space.

Parameters
[in]space_idTablespace ID
Returns
latch protecting storage allocation

◆ fil_space_get_n_reserved_extents()

ulint fil_space_get_n_reserved_extents ( space_id_t  space_id)

Gets the number of reserved extents.

If the database is silent, this number should be zero.

Parameters
[in]space_idTablespace ID
Returns
the number of reserved extents

◆ fil_space_get_page_size()

const page_size_t fil_space_get_page_size ( space_id_t  space_id,
bool *  found 
)

Returns the page size of the space and whether it is compressed or not.

The tablespace must be cached in the memory cache.

Parameters
[in]space_idTablespace ID
[out]foundtrue if tablespace was found
Returns
page size

◆ fil_space_get_size()

page_no_t fil_space_get_size ( space_id_t  space_id)

Returns the size of the space in pages.

The tablespace must be cached in the memory cache.

Parameters
[in]space_idTablespace ID
Returns
space size, 0 if space not found

◆ fil_space_get_sys_space()

fil_space_t * fil_space_get_sys_space ( )
inline
Returns
the system tablespace instance

◆ fil_space_get_type()

fil_type_t fil_space_get_type ( space_id_t  space_id)

Gets the type of a file space.

Parameters
[in]space_idTablespace ID
Returns
file type

◆ fil_space_get_undo_initial_size()

page_no_t fil_space_get_undo_initial_size ( space_id_t  space_id)

Returns the size of an undo space just after it was initialized.

Parameters
[in]space_idTablespace ID
Returns
initial space size, 0 if space not found

◆ fil_space_inc_redo_skipped_count()

void fil_space_inc_redo_skipped_count ( space_id_t  space_id)

Increase redo skipped count for a tablespace.

Parameters
[in]space_idTablespace ID

◆ fil_space_is_redo_skipped()

bool fil_space_is_redo_skipped ( space_id_t  space_id)

Check whether a single-table tablespace is redo skipped.

Parameters
[in]space_idTablespace ID
Returns
true if redo skipped

◆ fil_space_open()

bool fil_space_open ( space_id_t  space_id)

Open each file of a tablespace if not already open.

Parameters
[in]space_idTablespace ID
Return values
trueif all file nodes were opened
falseon failure

◆ fil_space_open_if_needed()

void fil_space_open_if_needed ( fil_space_t space)
inline

During crash recovery, open a tablespace if it had not been opened yet, to get valid size and flags.

Parameters
[in,out]spaceTablespace instance

◆ fil_space_read_name_and_filepath()

bool fil_space_read_name_and_filepath ( space_id_t  space_id,
char **  name,
char **  filepath 
)

Looks for a pre-existing fil_space_t with the given tablespace ID and, if found, returns the name and filepath in newly allocated buffers that the caller must free.

Parameters
[in]space_idThe tablespace ID to search for.
[out]nameName of the tablespace found.
[out]filepathThe filepath of the first datafile for the tablespace.
Returns
true if tablespace is found, false if not.

◆ fil_space_release()

void fil_space_release ( fil_space_t space)

Release a tablespace acquired with fil_space_acquire().

Parameters
[in,out]spaceTablespace to release

◆ fil_space_release_free_extents()

void fil_space_release_free_extents ( space_id_t  space_id,
ulint  n_reserved 
)

Releases free extents in a file space.

Parameters
[in]space_idTablespace ID
[in]n_reservedHow many were reserved

◆ fil_space_reserve_free_extents()

bool fil_space_reserve_free_extents ( space_id_t  space_id,
ulint  n_free_now,
ulint  n_to_reserve 
)

Tries to reserve free extents in a file space.

Parameters
[in]space_idTablespace ID
[in]n_free_nowNumber of free extents now
[in]n_to_reserveHow many one wants to reserve
Returns
true if succeed

◆ fil_space_set_flags()

void fil_space_set_flags ( fil_space_t space,
uint32_t  flags 
)

Sets the flags of the tablespace.

The tablespace must be locked in MDL_EXCLUSIVE MODE.

Parameters
[in]spacetablespace in-memory struct
[in]flagstablespace flags

◆ fil_space_set_imported()

void fil_space_set_imported ( space_id_t  space_id)

Note that a tablespace has been imported.

It is initially marked as FIL_TYPE_IMPORT so that no logging is done during the import process when the space ID is stamped to each page. Now we change it to FIL_TYPE_TABLESPACE to start redo and undo logging. NOTE: temporary tablespaces are never imported.

Parameters
[in]space_idTablespace ID

◆ fil_space_set_undo_size()

void fil_space_set_undo_size ( space_id_t  space_id,
bool  use_current 
)

This is called for an undo tablespace after it has been initialized or opened.

It sets the minimum size in pages at which it should be truncated and the number of pages that it should be extended. An undo tablespace is extended by larger amounts than normal tablespaces. It starts at 16Mb and is increased during aggressive growth and decreased when the growth is slower.

Parameters
[in]space_idTablespace ID
[in]use_currentIf true, use the current size in pages as the initial size. If false, use UNDO_INITIAL_SIZE_IN_PAGES.

◆ fil_space_update_name()

void fil_space_update_name ( fil_space_t space,
const char *  name 
)

Update the tablespace name.

In case, the new name and old name are same, no update done.

Parameters
[in,out]spacetablespace object on which name will be updated
[in]namenew name for tablespace

◆ fil_system_get_file_by_space_id()

bool fil_system_get_file_by_space_id ( space_id_t  space_id,
std::string &  name 
)

Fetch the file name opened for a space_id from the file map.

Parameters
[in]space_idtablespace ID
[out]namethe scanned filename
Returns
true if the space_id is found. The name is set to an empty string if the space_id is not found.

◆ fil_system_get_file_by_space_num()

bool fil_system_get_file_by_space_num ( space_id_t  space_num,
space_id_t space_id,
std::string &  name 
)

Fetch the file name opened for an undo space number from the file map.

Parameters
[in]space_numUndo tablespace Number
[out]space_idUndo tablespace ID
[out]namethe scanned filename
Returns
true if the space_num was found. The name is set to an empty string if the space_num is not found.

◆ fil_tablespace_iterate()

dberr_t fil_tablespace_iterate ( const Encryption_metadata encryption_metadata,
dict_table_t table,
ulint  n_io_buffers,
Compression::Type  compression_type,
PageCallback callback 
)

Iterate over all the pages in the tablespace.

Parameters
[in]encryption_metadatathe encryption metadata to use for reading
[in]tablethe table definition in the server
[in]n_io_buffersnumber of blocks to read and write together
[in]compression_typecompression type if compression is enabled, else Compression::Type::NONE
[in,out]callbackfunctor that will do the page updates
Returns
DB_SUCCESS or error code

Add an extra page for compressed page scratch area.

◆ fil_tablespace_lookup_for_recovery()

bool fil_tablespace_lookup_for_recovery ( space_id_t  space_id)

Lookup the tablespace ID.

Parameters
[in]space_idTablespace ID to lookup
Returns
true if the space ID is known.

◆ fil_tablespace_open_for_recovery()

dberr_t fil_tablespace_open_for_recovery ( space_id_t  space_id)

Open the tablespace and also get the tablespace filenames, space_id must already be known.

Parameters
[in]space_idTablespace ID to lookup
Returns
DB_SUCCESS if open was successful

◆ fil_tablespace_open_init_for_recovery()

void fil_tablespace_open_init_for_recovery ( bool  recovery)

Read the tablespace id to path mapping from the file.

Parameters
[in]recoverytrue if called from crash recovery

◆ fil_tablespace_path_equals()

Fil_state fil_tablespace_path_equals ( space_id_t  space_id,
const char *  space_name,
ulint  fsp_flags,
std::string  old_path,
std::string *  new_path 
)

Lookup the tablespace ID and return the path to the file.

The filename is ignored when testing for equality. Only the path up to the file name is considered for matching: e.g. ./test/a.ibd == ./test/b.ibd.

Parameters
[in]space_idtablespace ID to lookup
[in]space_nametablespace name
[in]fsp_flagstablespace flags
[in]old_paththe path found in dd:Tablespace_files
[out]new_paththe scanned path for this space_id
Returns
status of the match.

◆ fil_tablespace_redo_create()

const byte * fil_tablespace_redo_create ( const byte ptr,
const byte end,
const page_id_t page_id,
ulint  parsed_bytes,
bool  parse_only 
)

Redo a tablespace create.

Parameters
[in]ptrredo log record
[in]endend of the redo log buffer
[in]page_idTablespace Id and first page in file
[in]parsed_bytesNumber of bytes parsed so far
[in]parse_onlyDon't apply, parse only
Returns
pointer to next redo log record
Return values
nullptrif this log record was truncated

◆ fil_tablespace_redo_delete()

const byte * fil_tablespace_redo_delete ( const byte ptr,
const byte end,
const page_id_t page_id,
ulint  parsed_bytes,
bool  parse_only 
)

Redo a tablespace delete.

Parameters
[in]ptrredo log record
[in]endend of the redo log buffer
[in]page_idTablespace Id and first page in file
[in]parsed_bytesNumber of bytes parsed so far
[in]parse_onlyDon't apply, parse only
Returns
pointer to next redo log record
Return values
nullptrif this log record was truncated

◆ fil_tablespace_redo_encryption()

const byte * fil_tablespace_redo_encryption ( const byte ptr,
const byte end,
space_id_t  space_id,
lsn_t  lsn 
)

Parse and process an encryption redo record.

Parameters
[in]ptrredo log record
[in]endend of the redo log buffer
[in]space_idthe tablespace ID
[in]lsnlsn for REDO record
Returns
log record end, nullptr if not a complete record

◆ fil_tablespace_redo_extend()

const byte * fil_tablespace_redo_extend ( const byte ptr,
const byte end,
const page_id_t page_id,
ulint  parsed_bytes,
bool  parse_only 
)

Redo a tablespace extend.

Parameters
[in]ptrredo log record
[in]endend of the redo log buffer
[in]page_idTablespace Id and first page in file
[in]parsed_bytesNumber of bytes parsed so far
[in]parse_onlyDon't apply the log if true
Returns
pointer to next redo log record
Return values
nullptrif this log record was truncated

◆ fil_tablespace_redo_rename()

const byte * fil_tablespace_redo_rename ( const byte ptr,
const byte end,
const page_id_t page_id,
ulint  parsed_bytes,
bool  parse_only 
)

Redo a tablespace rename.

This function doesn't do anything, simply parses the redo log record.

Parameters
[in]ptrredo log record
[in]endend of the redo log buffer
[in]page_idTablespace Id and first page in file
[in]parsed_bytesNumber of bytes parsed so far
[in]parse_onlyDon't apply, parse only
Returns
pointer to next redo log record
Return values
nullptrif this log record was truncated

◆ fil_truncate_tablespace()

bool fil_truncate_tablespace ( space_id_t  space_id,
page_no_t  size_in_pages 
)

Truncate the tablespace to needed size.

Parameters
[in]space_idTablespace ID to truncate
[in]size_in_pagesTruncate size.
Returns
true if truncate was successful.

◆ fil_update_partition_name()

bool fil_update_partition_name ( space_id_t  space_id,
uint32_t  fsp_flags,
bool  update_space,
std::string &  space_name,
std::string &  dd_path 
)

Compare and update space name and dd path for partitioned table.

Uniformly converts partition separators and names to lower case.

Parameters
[in]space_idtablespace ID
[in]fsp_flagstablespace flags
[in]update_spaceupdate space name
[in,out]space_nametablespace name
[in,out]dd_pathfile name with complete path
Returns
true, if names are updated.

◆ fil_validate()

bool fil_validate ( )

Checks the consistency of the tablespace cache.

Returns
true if ok

◆ fil_write_flushed_lsn()

dberr_t fil_write_flushed_lsn ( lsn_t  lsn)

Write the flushed LSN to the page header of the first page in the system tablespace.

Parameters
[in]lsnFlushed LSN
Returns
DB_SUCCESS or error number

◆ fil_write_initial_pages()

dberr_t fil_write_initial_pages ( pfs_os_file_t  file,
const char *  path,
fil_type_t  type,
page_no_t  size,
const byte encrypt_info,
space_id_t  space_id,
uint32_t &  space_flags,
bool &  atomic_write,
bool &  punch_hole 
)

Write initial pages for a new tablespace file created.

Parameters
[in]fileopen file handle
[in]pathpath and filename of the datafile
[in]typefile type
[in]sizeInitial size of the tablespace file in pages
[in]encrypt_infoencryption key information
[in]space_idtablespace ID
[in,out]space_flagstablespace flags
[out]atomic_writeif atomic write is used
[out]punch_holeif punch hole is used
Returns
DB_SUCCESS on success

◆ operator<<()

std::ostream & operator<< ( std::ostream &  out,
const fil_addr_t obj 
)
inline

Variable Documentation

◆ dot_ext

const char* dot_ext[]
extern

Common InnoDB file extensions.

◆ fil_addr_null

fil_addr_t fil_addr_null
extern

The null file address.

◆ FIL_IBD_FILE_INITIAL_SIZE

constexpr size_t FIL_IBD_FILE_INITIAL_SIZE = 7
constexpr

Initial size of a single-table tablespace in pages.

◆ FIL_IBD_FILE_INITIAL_SIZE_5_7

constexpr size_t FIL_IBD_FILE_INITIAL_SIZE_5_7 = 4
constexpr

An empty tablespace (CREATE TABLESPACE) has minimum of 4 pages and an empty CREATE TABLE (file_per_table) has 6 pages.

Minimum of these two is 4

◆ FIL_IBT_FILE_INITIAL_SIZE

constexpr size_t FIL_IBT_FILE_INITIAL_SIZE = 5
constexpr

◆ fil_n_files_open

std::atomic_size_t fil_n_files_open
extern

Number of files currently open.

◆ fil_n_pending_tablespace_flushes

std::atomic<std::uint64_t> fil_n_pending_tablespace_flushes
extern

Number of pending tablespace flushes.

◆ FIL_NODE_MAGIC_N

constexpr size_t FIL_NODE_MAGIC_N = 89389
constexpr

Value of fil_node_t::magic_n.

◆ FIL_NULL

constexpr page_no_t FIL_NULL = std::numeric_limits<page_no_t>::max()
constexpr

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

◆ FIL_PAGE_COMPRESSED

constexpr page_type_t FIL_PAGE_COMPRESSED = 14
constexpr

Compressed page.

◆ FIL_PAGE_COMPRESSED_AND_ENCRYPTED

constexpr page_type_t FIL_PAGE_COMPRESSED_AND_ENCRYPTED = 16
constexpr

Compressed and Encrypted page.

◆ FIL_PAGE_ENCRYPTED

constexpr page_type_t FIL_PAGE_ENCRYPTED = 15
constexpr

Encrypted page.

◆ FIL_PAGE_ENCRYPTED_RTREE

constexpr page_type_t FIL_PAGE_ENCRYPTED_RTREE = 17
constexpr

Encrypted R-tree page.

◆ FIL_PAGE_IBUF_BITMAP

constexpr page_type_t FIL_PAGE_IBUF_BITMAP = 5
constexpr

Insert buffer bitmap.

◆ FIL_PAGE_IBUF_FREE_LIST

constexpr page_type_t FIL_PAGE_IBUF_FREE_LIST = 4
constexpr

Insert buffer free list.

◆ FIL_PAGE_INDEX

constexpr page_type_t FIL_PAGE_INDEX = 17855
constexpr

File page types (values of FIL_PAGE_TYPE)

B-tree node

◆ FIL_PAGE_INODE

constexpr page_type_t FIL_PAGE_INODE = 3
constexpr

Index node.

◆ FIL_PAGE_RTREE

constexpr page_type_t FIL_PAGE_RTREE = 17854
constexpr

R-tree node.

◆ FIL_PAGE_SDI

constexpr page_type_t FIL_PAGE_SDI = 17853
constexpr

Tablespace SDI Index page.

◆ FIL_PAGE_SDI_BLOB

constexpr page_type_t FIL_PAGE_SDI_BLOB = 18
constexpr

Uncompressed SDI BLOB page.

◆ FIL_PAGE_SDI_ZBLOB

constexpr page_type_t FIL_PAGE_SDI_ZBLOB = 19
constexpr

Compressed SDI BLOB page.

◆ FIL_PAGE_TYPE_ALLOCATED

constexpr page_type_t FIL_PAGE_TYPE_ALLOCATED = 0
constexpr

Freshly allocated page.

◆ FIL_PAGE_TYPE_BLOB

constexpr page_type_t FIL_PAGE_TYPE_BLOB = 10
constexpr

Uncompressed BLOB page.

◆ FIL_PAGE_TYPE_FSP_HDR

constexpr page_type_t FIL_PAGE_TYPE_FSP_HDR = 8
constexpr

File space header.

◆ FIL_PAGE_TYPE_LAST

constexpr page_type_t FIL_PAGE_TYPE_LAST = FIL_PAGE_TYPE_ZLOB_FRAG_ENTRY
constexpr

Note the highest valid non-index page_type_t.

◆ FIL_PAGE_TYPE_LEGACY_DBLWR

constexpr page_type_t FIL_PAGE_TYPE_LEGACY_DBLWR = 20
constexpr

Legacy doublewrite buffer page.

◆ FIL_PAGE_TYPE_LOB_DATA

constexpr page_type_t FIL_PAGE_TYPE_LOB_DATA = 23
constexpr

Data pages of uncompressed LOB.

◆ FIL_PAGE_TYPE_LOB_FIRST

constexpr page_type_t FIL_PAGE_TYPE_LOB_FIRST = 24
constexpr

The first page of an uncompressed LOB.

◆ FIL_PAGE_TYPE_LOB_INDEX

constexpr page_type_t FIL_PAGE_TYPE_LOB_INDEX = 22
constexpr

Index pages of uncompressed LOB.

◆ FIL_PAGE_TYPE_RSEG_ARRAY

constexpr page_type_t FIL_PAGE_TYPE_RSEG_ARRAY = 21
constexpr

Rollback Segment Array page.

◆ FIL_PAGE_TYPE_SYS

constexpr page_type_t FIL_PAGE_TYPE_SYS = 6
constexpr

System page.

◆ FIL_PAGE_TYPE_TRX_SYS

constexpr page_type_t FIL_PAGE_TYPE_TRX_SYS = 7
constexpr

Transaction system data.

◆ FIL_PAGE_TYPE_UNKNOWN

constexpr page_type_t FIL_PAGE_TYPE_UNKNOWN = 13
constexpr

In old tablespaces, garbage in FIL_PAGE_TYPE is replaced with this value when flushing pages.

◆ FIL_PAGE_TYPE_UNUSED

constexpr page_type_t FIL_PAGE_TYPE_UNUSED = 1
constexpr

This page type is unused.

◆ FIL_PAGE_TYPE_XDES

constexpr page_type_t FIL_PAGE_TYPE_XDES = 9
constexpr

Extent descriptor page.

◆ FIL_PAGE_TYPE_ZBLOB

constexpr page_type_t FIL_PAGE_TYPE_ZBLOB = 11
constexpr

First compressed BLOB page.

◆ FIL_PAGE_TYPE_ZBLOB2

constexpr page_type_t FIL_PAGE_TYPE_ZBLOB2 = 12
constexpr

Subsequent compressed BLOB page.

◆ FIL_PAGE_TYPE_ZLOB_DATA

constexpr page_type_t FIL_PAGE_TYPE_ZLOB_DATA = 26
constexpr

Data pages of compressed LOB.

◆ FIL_PAGE_TYPE_ZLOB_FIRST

constexpr page_type_t FIL_PAGE_TYPE_ZLOB_FIRST = 25
constexpr

The first page of a compressed LOB.

◆ FIL_PAGE_TYPE_ZLOB_FRAG

constexpr page_type_t FIL_PAGE_TYPE_ZLOB_FRAG = 28
constexpr

Fragment pages of compressed LOB.

◆ FIL_PAGE_TYPE_ZLOB_FRAG_ENTRY

constexpr page_type_t FIL_PAGE_TYPE_ZLOB_FRAG_ENTRY = 29
constexpr

Index pages of fragment pages (compressed LOB).

◆ FIL_PAGE_TYPE_ZLOB_INDEX

constexpr page_type_t FIL_PAGE_TYPE_ZLOB_INDEX = 27
constexpr

Index pages of compressed LOB.

This page contains an array of z_index_entry_t objects.

◆ FIL_PAGE_UNDO_LOG

constexpr page_type_t FIL_PAGE_UNDO_LOG = 2
constexpr

Undo log page.

◆ FIL_SCAN_MAX_TABLESPACES_PER_THREAD

constexpr size_t FIL_SCAN_MAX_TABLESPACES_PER_THREAD = 8000
constexpr

Maximum number of tablespaces to be scanned by a thread while scanning for available tablespaces during server startup.

This is a hard maximum. If the number of files to be scanned is more than FIL_SCAN_MAX_TABLESPACES_PER_THREAD, then additional threads will be spawned to scan the additional files in parallel.

◆ FIL_SCAN_MAX_THREADS

constexpr size_t FIL_SCAN_MAX_THREADS = 16
constexpr

Maximum number of threads that will be used for scanning the tablespace files.

This can be further adjusted depending on the number of available cores.

◆ FIL_SCAN_THREADS_PER_CORE

constexpr size_t FIL_SCAN_THREADS_PER_CORE = 2
constexpr

Number of threads per core.

◆ FIL_SPACE_MAGIC_N

constexpr size_t FIL_SPACE_MAGIC_N = 89472
constexpr

Value of fil_space_t::magic_n.

◆ general_space_name

constexpr char general_space_name[] = "innodb_general"
staticconstexpr

This tablespace name is used internally during file discovery to open a general tablespace before the data dictionary is recovered and available.

◆ MySQL_datadir_path

Fil_path MySQL_datadir_path
extern

The MySQL server –datadir value.

The MySQL server –datadir value.

◆ MySQL_undo_path

Fil_path MySQL_undo_path
extern

The MySQL server –innodb-undo-directory value.

The MySQL server –innodb-undo-directory value.

◆ MySQL_undo_path_is_unique

bool MySQL_undo_path_is_unique
extern

The undo path is different from any other known directory.

◆ PAGE_NO_MAX

constexpr page_no_t PAGE_NO_MAX = std::numeric_limits<page_no_t>::max() - 1
constexpr

Maximum Page Number, one less than FIL_NULL.

◆ recv_recovery_on

volatile bool recv_recovery_on
extern

true when applying redo log records during crash recovery; false otherwise.

Note that this is false while a background thread is rolling back incomplete transactions.

◆ SPACE_UNKNOWN

constexpr space_id_t SPACE_UNKNOWN = std::numeric_limits<space_id_t>::max()
constexpr

Unknown space id.

◆ srv_fast_shutdown

ulong srv_fast_shutdown
extern

The value of the configuration parameter innodb_fast_shutdown, controlling the InnoDB shutdown.

If innodb_fast_shutdown=0, InnoDB shutdown will purge all undo log records (except XA PREPARE transactions) and complete the merge of the entire change buffer, and then shut down the redo log.

If innodb_fast_shutdown=1, InnoDB shutdown will only flush the buffer pool to data files, cleanly shutting down the redo log.

If innodb_fast_shutdown=2, shutdown will effectively 'crash' InnoDB (but lose no committed transactions).

◆ UNDO_INITIAL_SIZE

constexpr uint32_t UNDO_INITIAL_SIZE = 16 * 1024 * 1024
constexpr

Initial size of an UNDO tablespace when it is created new or truncated under low load.

page size | FSP_EXTENT_SIZE | Initial Size | Pages -------—+---------------—+-----------—+----— 4 KB | 256 pages = 1 MB | 16 MB | 4096 8 KB | 128 pages = 1 MB | 16 MB | 2048 16 KB | 64 pages = 1 MB | 16 MB | 1024 32 KB | 64 pages = 2 MB | 16 MB | 512 64 KB | 64 pages = 4 MB | 16 MB | 256

◆ undo_space_name

constexpr char undo_space_name[] = "innodb_undo"
staticconstexpr

This tablespace name is used as the prefix for implicit undo tablespaces and during file discovery to open an undo tablespace before the DD is recovered and available.