mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
MDEV-6927: Share more structures
Merge Facebook commit f981a51a47519b0ba527917887f8adc6df9ae147 authored by Steaphan Greene from https://github.com/facebook/mysql-5.6. This just moves some structure definitions from inside a single .cc file to a shared .h file, with a few tweaks to allow these structures to be shared. On its own, it should have no actual effect. This is needed later.
This commit is contained in:
parent
3486135bb5
commit
cff0012d28
4 changed files with 359 additions and 339 deletions
|
|
@ -140,181 +140,15 @@ UNIV_INTERN mysql_pfs_key_t fil_system_mutex_key;
|
|||
UNIV_INTERN mysql_pfs_key_t fil_space_latch_key;
|
||||
#endif /* UNIV_PFS_RWLOCK */
|
||||
|
||||
/** File node of a tablespace or the log data space */
|
||||
struct fil_node_t {
|
||||
fil_space_t* space; /*!< backpointer to the space where this node
|
||||
belongs */
|
||||
char* name; /*!< path to the file */
|
||||
ibool open; /*!< TRUE if file open */
|
||||
os_file_t handle; /*!< OS handle to the file, if file open */
|
||||
os_event_t sync_event;/*!< Condition event to group and
|
||||
serialize calls to fsync */
|
||||
ibool is_raw_disk;/*!< TRUE if the 'file' is actually a raw
|
||||
device or a raw disk partition */
|
||||
ulint size; /*!< size of the file in database pages, 0 if
|
||||
not known yet; the possible last incomplete
|
||||
megabyte may be ignored if space == 0 */
|
||||
ulint n_pending;
|
||||
/*!< count of pending i/o's on this file;
|
||||
closing of the file is not allowed if
|
||||
this is > 0 */
|
||||
ulint n_pending_flushes;
|
||||
/*!< count of pending flushes on this file;
|
||||
closing of the file is not allowed if
|
||||
this is > 0 */
|
||||
ibool being_extended;
|
||||
/*!< TRUE if the node is currently
|
||||
being extended. */
|
||||
ib_int64_t modification_counter;/*!< when we write to the file we
|
||||
increment this by one */
|
||||
ib_int64_t flush_counter;/*!< up to what
|
||||
modification_counter value we have
|
||||
flushed the modifications to disk */
|
||||
UT_LIST_NODE_T(fil_node_t) chain;
|
||||
/*!< link field for the file chain */
|
||||
UT_LIST_NODE_T(fil_node_t) LRU;
|
||||
/*!< link field for the LRU list */
|
||||
ulint magic_n;/*!< FIL_NODE_MAGIC_N */
|
||||
};
|
||||
|
||||
/** Value of fil_node_t::magic_n */
|
||||
#define FIL_NODE_MAGIC_N 89389
|
||||
|
||||
/** Tablespace or log data space: let us call them by a common name space */
|
||||
struct fil_space_t {
|
||||
char* name; /*!< space name = the path to the first file in
|
||||
it */
|
||||
ulint id; /*!< space id */
|
||||
ib_int64_t tablespace_version;
|
||||
/*!< in DISCARD/IMPORT this timestamp
|
||||
is used to check if we should ignore
|
||||
an insert buffer merge request for a
|
||||
page because it actually was for the
|
||||
previous incarnation of the space */
|
||||
ibool mark; /*!< this is set to TRUE at database startup if
|
||||
the space corresponds to a table in the InnoDB
|
||||
data dictionary; so we can print a warning of
|
||||
orphaned tablespaces */
|
||||
ibool stop_ios;/*!< TRUE if we want to rename the
|
||||
.ibd file of tablespace and want to
|
||||
stop temporarily posting of new i/o
|
||||
requests on the file */
|
||||
ibool stop_new_ops;
|
||||
/*!< we set this TRUE when we start
|
||||
deleting a single-table tablespace.
|
||||
When this is set following new ops
|
||||
are not allowed:
|
||||
* read IO request
|
||||
* ibuf merge
|
||||
* file flush
|
||||
Note that we can still possibly have
|
||||
new write operations because we don't
|
||||
check this flag when doing flush
|
||||
batches. */
|
||||
ulint purpose;/*!< FIL_TABLESPACE, FIL_LOG, or
|
||||
FIL_ARCH_LOG */
|
||||
UT_LIST_BASE_NODE_T(fil_node_t) chain;
|
||||
/*!< base node for the file chain */
|
||||
ulint size; /*!< space size in pages; 0 if a single-table
|
||||
tablespace whose size we do not know yet;
|
||||
last incomplete megabytes in data files may be
|
||||
ignored if space == 0 */
|
||||
ulint flags; /*!< tablespace flags; see
|
||||
fsp_flags_is_valid(),
|
||||
fsp_flags_get_zip_size() */
|
||||
ulint n_reserved_extents;
|
||||
/*!< number of reserved free extents for
|
||||
ongoing operations like B-tree page split */
|
||||
ulint n_pending_flushes; /*!< this is positive when flushing
|
||||
the tablespace to disk; dropping of the
|
||||
tablespace is forbidden if this is positive */
|
||||
ulint n_pending_ops;/*!< this is positive when we
|
||||
have pending operations against this
|
||||
tablespace. The pending operations can
|
||||
be ibuf merges or lock validation code
|
||||
trying to read a block.
|
||||
Dropping of the tablespace is forbidden
|
||||
if this is positive */
|
||||
hash_node_t hash; /*!< hash chain node */
|
||||
hash_node_t name_hash;/*!< hash chain the name_hash table */
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
prio_rw_lock_t latch; /*!< latch protecting the file space storage
|
||||
allocation */
|
||||
#endif /* !UNIV_HOTBACKUP */
|
||||
UT_LIST_NODE_T(fil_space_t) unflushed_spaces;
|
||||
/*!< list of spaces with at least one unflushed
|
||||
file we have written to */
|
||||
bool is_in_unflushed_spaces;
|
||||
/*!< true if this space is currently in
|
||||
unflushed_spaces */
|
||||
ibool is_corrupt;
|
||||
UT_LIST_NODE_T(fil_space_t) space_list;
|
||||
/*!< list of all spaces */
|
||||
ulint magic_n;/*!< FIL_SPACE_MAGIC_N */
|
||||
};
|
||||
|
||||
/** Value of fil_space_t::magic_n */
|
||||
#define FIL_SPACE_MAGIC_N 89472
|
||||
|
||||
/** The tablespace memory cache; also the totality of logs (the log
|
||||
data space) is stored here; below we talk about tablespaces, but also
|
||||
the ib_logfiles form a 'space' and it is handled here */
|
||||
struct fil_system_t {
|
||||
#ifndef UNIV_HOTBACKUP
|
||||
ib_mutex_t mutex; /*!< The mutex protecting the cache */
|
||||
#endif /* !UNIV_HOTBACKUP */
|
||||
hash_table_t* spaces; /*!< The hash table of spaces in the
|
||||
system; they are hashed on the space
|
||||
id */
|
||||
hash_table_t* name_hash; /*!< hash table based on the space
|
||||
name */
|
||||
UT_LIST_BASE_NODE_T(fil_node_t) LRU;
|
||||
/*!< base node for the LRU list of the
|
||||
most recently used open files with no
|
||||
pending i/o's; if we start an i/o on
|
||||
the file, we first remove it from this
|
||||
list, and return it to the start of
|
||||
the list when the i/o ends;
|
||||
log files and the system tablespace are
|
||||
not put to this list: they are opened
|
||||
after the startup, and kept open until
|
||||
shutdown */
|
||||
UT_LIST_BASE_NODE_T(fil_space_t) unflushed_spaces;
|
||||
/*!< base node for the list of those
|
||||
tablespaces whose files contain
|
||||
unflushed writes; those spaces have
|
||||
at least one file node where
|
||||
modification_counter > flush_counter */
|
||||
ulint n_open; /*!< number of files currently open */
|
||||
ulint max_n_open; /*!< n_open is not allowed to exceed
|
||||
this */
|
||||
ib_int64_t modification_counter;/*!< when we write to a file we
|
||||
increment this by one */
|
||||
ulint max_assigned_id;/*!< maximum space id in the existing
|
||||
tables, or assigned during the time
|
||||
mysqld has been up; at an InnoDB
|
||||
startup we scan the data dictionary
|
||||
and set here the maximum of the
|
||||
space id's of the tables there */
|
||||
ib_int64_t tablespace_version;
|
||||
/*!< a counter which is incremented for
|
||||
every space object memory creation;
|
||||
every space mem object gets a
|
||||
'timestamp' from this; in DISCARD/
|
||||
IMPORT this is used to check if we
|
||||
should ignore an insert buffer merge
|
||||
request */
|
||||
UT_LIST_BASE_NODE_T(fil_space_t) space_list;
|
||||
/*!< list of all file spaces */
|
||||
ibool space_id_reuse_warned;
|
||||
/* !< TRUE if fil_space_create()
|
||||
has issued a warning about
|
||||
potential space_id reuse */
|
||||
};
|
||||
|
||||
/** The tablespace memory cache. This variable is NULL before the module is
|
||||
initialized. */
|
||||
static fil_system_t* fil_system = NULL;
|
||||
fil_system_t* fil_system = NULL;
|
||||
|
||||
/** Determine if (i) is a user tablespace id or not. */
|
||||
# define fil_is_user_tablespace_id(i) ((i) > srv_undo_tablespaces_open)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue