55#include <sys/statvfs.h> 
   68#define OS_FILE_PREFIX "#" 
  121typedef HANDLE os_file_dir_t; 
 
  124#define UNIV_NON_BUFFERED_IO 
  134#define OS_FILE_FROM_FD(fd) (HANDLE) _get_osfhandle(fd) 
  139#define OS_FD_FROM_FILE(file) _open_osfhandle((intptr_t)file, _O_RDONLY) 
  144#define OS_FILE_CLOSE_FD(fd) _close(fd) 
  156#define OS_FILE_FROM_FD(fd) fd 
  161#define OS_FD_FROM_FILE(file) file 
  166#define OS_FILE_CLOSE_FD(fd) (os_file_close(fd) ? 0 : OS_FD_CLOSED) 
  261#define IORequestRead IORequest(IORequest::READ) 
  262#define IORequestWrite IORequest(IORequest::WRITE) 
  515#if defined(HAVE_FALLOC_PUNCH_HOLE_AND_KEEP_SIZE) || defined(_WIN32) 
  653              "(FN_REFLEN_SE < OS_FILE_MAX_PATH)");
 
  672#ifndef UNIV_HOTBACKUP 
  744                         const 
char *operation_name,
 
  745                         bool on_error_silent = false);
 
  811#define register_pfs_file_open_begin(state, locker, key, op, name,           \ 
  814    locker = PSI_FILE_CALL(get_thread_file_name_locker)(state, key.m_value,  \ 
  815                                                        op, name, &locker);  \ 
  816    if (locker != nullptr) {                                                 \ 
  817      PSI_FILE_CALL(start_file_open_wait)                                    \ 
  818      (locker, src_location.filename, static_cast<uint>(src_location.line)); \ 
  822#define register_pfs_file_open_end(locker, file, result)              \ 
  824    if (locker != nullptr) {                                          \ 
  825      file.m_psi = PSI_FILE_CALL(end_file_open_wait)(locker, result); \ 
  829#define register_pfs_file_rename_begin(state, locker, key, op, from, to,    \ 
  832    locker = PSI_FILE_CALL(get_thread_file_name_locker)(state, key.m_value, \ 
  833                                                        op, from, &locker); \ 
  834    if (locker != nullptr) {                                                \ 
  835      PSI_FILE_CALL(start_file_rename_wait)                                 \ 
  836      (locker, (size_t)0, from, to, src_location.filename,                  \ 
  837       static_cast<uint>(src_location.line));                               \ 
  841#define register_pfs_file_rename_end(locker, from, to, result)       \ 
  843    if (locker != nullptr) {                                         \ 
  844      PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result); \ 
  848#define register_pfs_file_close_begin(state, locker, key, op, name,          \ 
  851    locker = PSI_FILE_CALL(get_thread_file_name_locker)(state, key.m_value,  \ 
  852                                                        op, name, &locker);  \ 
  853    if (locker != nullptr) {                                                 \ 
  854      PSI_FILE_CALL(start_file_close_wait)                                   \ 
  855      (locker, src_location.filename, static_cast<uint>(src_location.line)); \ 
  859#define register_pfs_file_close_end(locker, result)       \ 
  861    if (locker != nullptr) {                              \ 
  862      PSI_FILE_CALL(end_file_close_wait)(locker, result); \ 
  866#define register_pfs_file_io_begin(state, locker, file, count, op,           \ 
  870        PSI_FILE_CALL(get_thread_file_stream_locker)(state, file.m_psi, op); \ 
  871    if (locker != nullptr) {                                                 \ 
  872      PSI_FILE_CALL(start_file_wait)                                         \ 
  873      (locker, count, src_location.filename,                                 \ 
  874       static_cast<uint>(src_location.line));                                \ 
  878#define register_pfs_file_io_end(locker, count)    \ 
  880    if (locker != nullptr) {                       \ 
  881      PSI_FILE_CALL(end_file_wait)(locker, count); \ 
  901#define os_file_create(key, name, create, purpose, read_only, success)    \ 
  902  pfs_os_file_create_func(key, name, create, purpose, read_only, success, \ 
  906#define os_file_create_simple_no_error_handling(key, name, create_mode,     \ 
  907                                                access, read_only, success) \ 
  908  pfs_os_file_create_simple_no_error_handling_func(                         \ 
  909      key, name, create_mode, access, read_only, os_innodb_umask_default,   \ 
  910      success, UT_LOCATION_HERE) 
  912#define os_file_create_simple_no_error_handling_with_umask(                  \ 
  913    key, name, create_mode, access, read_only, umask, success)               \ 
  914  pfs_os_file_create_simple_no_error_handling_func(key, name, create_mode,   \ 
  915                                                   access, read_only, umask, \ 
  916                                                   success, UT_LOCATION_HERE) 
  918#define os_file_create_simple_no_error_handling(key, name, create_mode,     \ 
  919                                                access, read_only, success) \ 
  920  pfs_os_file_create_simple_no_error_handling_func(                         \ 
  921      key, name, create_mode, access, read_only, success, UT_LOCATION_HERE) 
  924#define os_file_close_pfs(file) pfs_os_file_close_func(file, UT_LOCATION_HERE) 
  926#define os_aio(type, mode, name, file, buf, offset, n, read_only, message1,    \ 
  928  pfs_os_aio_func(type, mode, name, file, buf, offset, n, read_only, message1, \ 
  929                  message2, UT_LOCATION_HERE) 
  931#define os_file_read_pfs(type, file_name, file, buf, offset, n) \ 
  932  pfs_os_file_read_func(type, file_name, file, buf, offset, n, UT_LOCATION_HERE) 
  934#define os_file_read_first_page_pfs(type, file_name, file, buf, n) \ 
  935  pfs_os_file_read_first_page_func(type, file_name, file, buf, n,  \ 
  938#define os_file_copy_pfs(src, src_offset, dest, dest_offset, size) \ 
  939  pfs_os_file_copy_func(src, src_offset, dest, dest_offset, size,  \ 
  942#define os_file_read_no_error_handling_pfs(type, file_name, file, buf, offset, \ 
  944  pfs_os_file_read_no_error_handling_func(type, file_name, file, buf, offset,  \ 
  945                                          n, o, UT_LOCATION_HERE) 
  947#define os_file_read_no_error_handling_int_fd(type, file_name, file, buf, \ 
  949  pfs_os_file_read_no_error_handling_int_fd_func(                         \ 
  950      type, file_name, file, buf, offset, n, o, UT_LOCATION_HERE) 
  952#define os_file_write_pfs(type, name, file, buf, offset, n) \ 
  953  pfs_os_file_write_func(type, name, file, buf, offset, n, UT_LOCATION_HERE) 
  955#define os_file_write_int_fd(type, name, file, buf, offset, n)    \ 
  956  pfs_os_file_write_int_fd_func(type, name, file, buf, offset, n, \ 
  959#define os_file_flush_pfs(file) pfs_os_file_flush_func(file, UT_LOCATION_HERE) 
  961#define os_file_rename(key, oldpath, newpath) \ 
  962  pfs_os_file_rename_func(key, oldpath, newpath, UT_LOCATION_HERE) 
  964#define os_file_delete(key, name) \ 
  965  pfs_os_file_delete_func(key, name, UT_LOCATION_HERE) 
  967#define os_file_delete_if_exists(key, name, exist) \ 
  968  pfs_os_file_delete_if_exists_func(key, name, exist, UT_LOCATION_HERE) 
 1207                                           const char *oldpath,
 
 1208                                           const char *newpath,
 
 1244#define os_file_create(key, name, create, purpose, read_only, success) \ 
 1245  os_file_create_func(name, create, purpose, read_only, success) 
 1249#define os_file_create_simple_no_error_handling(key, name, create_mode,     \ 
 1250                                                access, read_only, success) \ 
 1251  os_file_create_simple_no_error_handling_func(                             \ 
 1252      name, create_mode, access, read_only, os_innodb_umask_default, success) 
 1254#define os_file_create_simple_no_error_handling_with_umask(               \ 
 1255    key, name, create_mode, access, read_only, umask, success)            \ 
 1256  os_file_create_simple_no_error_handling_func(name, create_mode, access, \ 
 1257                                               read_only, umask, success) 
 1261#define os_file_create_simple_no_error_handling(key, name, create_mode,     \ 
 1262                                                access, read_only, success) \ 
 1263  os_file_create_simple_no_error_handling_func(name, create_mode, access,   \ 
 1268#define os_file_close_pfs(file) os_file_close_func(file) 
 1270#define os_aio(type, mode, name, file, buf, offset, n, read_only, message1, \ 
 1272  os_aio_func(type, mode, name, file, buf, offset, n, read_only, message1,  \ 
 1275#define os_file_read_pfs(type, file_name, file, buf, offset, n) \ 
 1276  os_file_read_func(type, file_name, file, buf, offset, n) 
 1278#define os_file_read_first_page_pfs(type, file_name, file, buf, n) \ 
 1279  os_file_read_first_page_func(type, file_name, file, buf, n) 
 1281#define os_file_copy_pfs(src, src_offset, dest, dest_offset, size) \ 
 1282  os_file_copy_func(src, src_offset, dest, dest_offset, size) 
 1284#define os_file_read_no_error_handling_pfs(type, file_name, file, buf, offset, \ 
 1286  os_file_read_no_error_handling_func(type, file_name, file, buf, offset, n, o) 
 1288#define os_file_read_no_error_handling_int_fd(type, file_name, file, buf,     \ 
 1290  os_file_read_no_error_handling_func(type, file_name, OS_FILE_FROM_FD(file), \ 
 1293#define os_file_write_pfs(type, name, file, buf, offset, n) \ 
 1294  os_file_write_func(type, name, file, buf, offset, n) 
 1296#define os_file_write_int_fd(type, name, file, buf, offset, n) \ 
 1297  os_file_write_func(type, name, OS_FILE_FROM_FD(file), buf, offset, n) 
 1299#define os_file_flush_pfs(file) os_file_flush_func(file) 
 1301#define os_file_rename(key, oldpath, newpath) \ 
 1302  os_file_rename_func(oldpath, newpath) 
 1304#define os_file_delete(key, name) os_file_delete_func(name) 
 1306#define os_file_delete_if_exists(key, name, exist) \ 
 1307  os_file_delete_if_exists_func(name, exist) 
 1312#define os_file_close(file) os_file_close_pfs(file) 
 1314#define os_file_close(file) os_file_close_pfs((file).m_file) 
 1318#define os_file_read(type, file_name, file, buf, offset, n) \ 
 1319  os_file_read_pfs(type, file_name, file, buf, offset, n) 
 1321#define os_file_read(type, file_name, file, buf, offset, n) \ 
 1322  os_file_read_pfs(type, file_name, file.m_file, buf, offset, n) 
 1326#define os_file_read_first_page(type, file_name, file, buf, n) \ 
 1327  os_file_read_first_page_pfs(type, file_name, file, buf, n) 
 1329#define os_file_read_first_page(type, file_name, file, buf, n) \ 
 1330  os_file_read_first_page_pfs(type, file_name, file.m_file, buf, n) 
 1334#define os_file_flush(file) os_file_flush_pfs(file) 
 1336#define os_file_flush(file) os_file_flush_pfs(file.m_file) 
 1340#define os_file_write(type, name, file, buf, offset, n) \ 
 1341  os_file_write_pfs(type, name, file, buf, offset, n) 
 1343#define os_file_write(type, name, file, buf, offset, n) \ 
 1344  os_file_write_pfs(type, name, file.m_file, buf, offset, n) 
 1348#define os_file_copy(src, src_offset, dest, dest_offset, size) \ 
 1349  os_file_copy_pfs(src, src_offset, dest, dest_offset, size) 
 1351#define os_file_copy(src, src_offset, dest, dest_offset, size) \ 
 1352  os_file_copy_pfs(src.m_file, src_offset, dest.m_file, dest_offset, size) 
 1356#define os_file_read_no_error_handling(type, file_name, file, buf, offset, n, \ 
 1358  os_file_read_no_error_handling_pfs(type, file_name, file, buf, offset, n, o) 
 1360#define os_file_read_no_error_handling(type, file_name, file, buf, offset, n, \ 
 1362  os_file_read_no_error_handling_pfs(type, file_name, file.m_file, buf,       \ 
 1366#ifdef UNIV_HOTBACKUP 
 1545#ifdef UNIV_ENABLE_UNIT_TEST_GET_PARENT_DIR 
 1547void unit_test_os_file_get_parent_dir();
 
 1550#ifdef UNIV_HOTBACKUP 
 1552void meb_free_block_cache();
 
 1685#ifndef UNIV_HOTBACKUP 
 1756                                              byte *dst, 
ulint dst_len);
 
 1767                            byte *src, 
ulint src_len, 
byte *dst,
 
 1801  template <
typename F>
 
 1802  static void walk(
const Path &basedir, 
bool recursive, F &&f) {
 
 1804    walk_win32(basedir, recursive, [&](
const Path &
path, 
size_t) { f(
path); });
 
 1833  static void walk_win32(
const Path &basedir, 
bool recursive, 
Function &&f);
 
 1899        m_n(static_cast<ssize_t>(
n)),
 
Kerberos Client Authentication nullptr
Definition: auth_kerberos_client_plugin.cc:251
 
Class to scan the directory hierarchy using a depth first scan.
Definition: os0file.h:1788
 
std::string Path
Definition: os0file.h:1790
 
static bool is_directory(const Path &path)
Check if the path is a directory.
Definition: os0file.cc:7761
 
static void walk_posix(const Path &basedir, bool recursive, Function &&f)
Depth first traversal of the directory starting from basedir.
Definition: os0file.cc:3596
 
std::function< void(const Path &, size_t)> Function
Definition: os0file.h:1826
 
static void walk(const Path &basedir, bool recursive, F &&f)
Depth first traversal of the directory starting from basedir.
Definition: os0file.h:1802
 
Encryption algorithm.
Definition: os0enc.h:54
 
void set_initial_vector(const byte *iv)
Set initial vector.
Definition: os0enc.cc:1510
 
@ NONE
No encryption.
Definition: os0enc.h:60
 
void set_key(const byte *key)
Set encryption key.
Definition: os0enc.cc:1504
 
void set_key_length(ulint klen)
Set key length.
Definition: os0enc.cc:1508
 
static const char * to_string(Type type) noexcept
Convert to a "string".
Definition: os0enc.cc:218
 
void set_type(Type type)
Set encryption type.
Definition: os0enc.cc:1502
 
Type get_type() const
Get encryption type.
Definition: os0enc.cc:1500
 
The IO Context that is passed down to the low level IO code.
Definition: os0file.h:266
 
uint32_t m_original_size
Length of the original IO size.
Definition: os0file.h:575
 
bool is_punch_hole_optimisation_disabled() const
Definition: os0file.h:390
 
void compression_algorithm(Compression::Type type)
Set compression algorithm.
Definition: os0file.h:454
 
bool is_dblwr() const
Definition: os0file.h:506
 
Compression compression_algorithm() const
Get the compression algorithm.
Definition: os0file.h:466
 
static std::string type_str(const ulint type)
Definition: os0file.cc:7799
 
bool is_partial_io_warning_disabled() const
Definition: os0file.h:372
 
void dblwr()
Note that the IO is for double write buffer page write.
Definition: os0file.h:503
 
void block_size(ulint block_size)
Set the block size for IO.
Definition: os0file.h:429
 
void clear_encrypted()
Clear all encryption related flags.
Definition: os0file.h:495
 
void clear_do_not_wake()
Clear the do not wake flag.
Definition: os0file.h:419
 
bool is_compression_enabled() const
Definition: os0file.h:476
 
bool is_encrypted() const
Definition: os0file.h:490
 
ulint block_size() const
Definition: os0file.h:425
 
void clear_punch_hole()
Clear the punch hole flag.
Definition: os0file.h:422
 
void disable_partial_io_warnings()
Disable partial read warnings.
Definition: os0file.h:378
 
@ UNSET
Definition: os0file.h:270
 
@ DBLWR
Request for a doublewrite page IO.
Definition: os0file.h:275
 
@ DISABLE_PARTIAL_IO_WARNINGS
Disable partial read warnings.
Definition: os0file.h:286
 
@ IGNORE_MISSING
Ignore failed reads of non-existent pages.
Definition: os0file.h:298
 
@ DO_NOT_WAKE
Do not to wake i/o-handler threads, but the caller will do the waking explicitly later,...
Definition: os0file.h:295
 
@ ROW_LOG
Row log used in online DDL.
Definition: os0file.h:311
 
@ LOG
Log file request.
Definition: os0file.h:283
 
@ DISABLE_PUNCH_HOLE_OPTIMISATION
We optimise cases where punch hole is not done if the compressed length of the page is the same as th...
Definition: os0file.h:316
 
@ NO_COMPRESSION
Force raw read, do not try to compress/decompress.
Definition: os0file.h:308
 
@ WRITE
Definition: os0file.h:272
 
@ READ
Definition: os0file.h:271
 
@ DATA_FILE
Enumerations below can be ORed to READ/WRITE above.
Definition: os0file.h:280
 
@ PUNCH_HOLE
Use punch hole if available, only makes sense if compression algorithm != NONE.
Definition: os0file.h:302
 
const file::Block * get_encrypted_block() const noexcept
Get the encrypted block.
Definition: os0file.h:548
 
std::string to_string() const
Definition: os0file.h:525
 
uint32_t get_original_size() const
Returns original size of the IO to make.
Definition: os0file.h:435
 
bool operator==(const IORequest &rhs) const
Compare two requests.
Definition: os0file.h:450
 
void disable_compression()
Disable transformations.
Definition: os0file.h:481
 
bool punch_hole() const
Definition: os0file.h:384
 
IORequest()
Default constructor.
Definition: os0file.h:320
 
static bool is_punch_hole_supported()
Definition: os0file.h:509
 
static bool ignore_missing(int type)
Definition: os0file.h:350
 
void set_original_size(uint32_t original_size)
Definition: os0file.h:437
 
uint32_t m_block_size
Definition: os0file.h:554
 
bool ignore_missing() const
Definition: os0file.h:381
 
Compression m_compression
Compression algorithm.
Definition: os0file.h:560
 
void set_punch_hole()
Set the punch hole flag.
Definition: os0file.h:405
 
IORequest(int type)
Definition: os0file.h:333
 
Encryption & get_encryption_info() noexcept
Get a reference to the underlying encryption information.
Definition: os0file.h:536
 
uint32_t m_elen
The length of data in encrypted block.
Definition: os0file.h:569
 
bool is_write() const
Definition: os0file.h:358
 
bool validate() const
Definition: os0file.h:398
 
Encryption encryption_algorithm() const
Get the encryption algorithm.
Definition: os0file.h:485
 
bool is_row_log() const
Definition: os0file.h:364
 
void set_encrypted_block(const file::Block *eblock) noexcept
Set the encrypted block to the given value.
Definition: os0file.h:542
 
bool is_compressed() const
Definition: os0file.h:471
 
bool is_wake() const
Definition: os0file.h:369
 
void clear_compressed()
Clear all compression related flags.
Definition: os0file.h:442
 
void disable_punch_hole_optimisation()
Set the force punch hole flag.
Definition: os0file.h:412
 
const file::Block * m_eblock
The encrypted block.
Definition: os0file.h:566
 
int m_type
Request type bit flags.
Definition: os0file.h:557
 
bool is_read() const
Definition: os0file.h:355
 
bool is_log() const
Definition: os0file.h:361
 
Encryption m_encryption
Encryption algorithm.
Definition: os0file.h:563
 
Helper class for doing synchronous file IO.
Definition: os0file.h:1889
 
~SyncFileIO()=default
Destructor.
 
os_file_t m_fh
Open file handle.
Definition: os0file.h:1935
 
dberr_t execute_with_retry(const IORequest &request, const size_t max_retries=NUM_RETRIES_ON_PARTIAL_IO)
Do the read/write with retry.
Definition: os0file.cc:2001
 
const size_t m_orig_bytes
The total number of bytes to be read/written.
Definition: os0file.h:1947
 
SyncFileIO(os_file_t fh, void *buf, ulint n, os_offset_t offset)
Constructor.
Definition: os0file.h:1896
 
ssize_t m_n
Number of bytes to read/write.
Definition: os0file.h:1941
 
os_offset_t m_offset
Offset from where to read/write.
Definition: os0file.h:1944
 
ssize_t execute(const IORequest &request)
Do the read/write.
Definition: os0file.cc:2031
 
void * m_buf
Buffer to read/write.
Definition: os0file.h:1938
 
void advance(ssize_t n_bytes)
Move the read/write offset up to where the partial IO succeeded.
Definition: os0file.h:1923
 
dberr_t
Definition: db0err.h:39
 
struct PSI_file PSI_file
Definition: psi_file_bits.h:55
 
static void start(mysql_harness::PluginFuncEnv *env)
Definition: http_auth_backend_plugin.cc:180
 
#define free(A)
Definition: lexyy.cc:915
 
#define MY_COMPILER_DIAGNOSTIC_PUSH()
save the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:285
 
#define MY_COMPILER_DIAGNOSTIC_POP()
restore the compiler's diagnostic (enabled warnings, errors, ...) state
Definition: my_compiler.h:286
 
#define DBUG_EXECUTE_IF(keyword, a1)
Definition: my_dbug.h:171
 
unsigned char uchar
Definition: my_inttypes.h:52
 
Common #defines and includes for file and socket I/O.
 
#define FN_REFLEN_SE
Definition: my_io.h:84
 
static char * path
Definition: mysqldump.cc:149
 
std::string str(const mysqlrouter::ConfigGenerator::Options::Endpoint &ep)
Definition: config_generator.cc:1087
 
Definition: buf0block_hint.cc:30
 
constexpr value_type read_only
Definition: classic_protocol_constants.h:213
 
const std::string FILE("FILE")
 
std::string file_name(Log_file_id file_id)
Provides name of the log file with the given file id, e.g.
Definition: log0pre_8_0_30.cc:94
 
size_t size(const char *const c)
Definition: base64.h:46
 
static mysql_service_status_t flush(reference_caching_cache cache) noexcept
Definition: component.cc:114
 
mode
Definition: file_handle.h:61
 
constexpr size_t INNODB_CACHE_LINE_SIZE
CPU cache line size.
Definition: ut0cpu_cache.h:41
 
std::basic_ostringstream< char, std::char_traits< char >, ut::allocator< char > > ostringstream
Specialization of basic_ostringstream which uses ut::allocator.
Definition: ut0new.h:2875
 
static int exists(node_address *name, node_list const *nodes, u_int with_uid)
Definition: node_list.cc:106
 
Macros for using atomics.
 
Page encryption infrastructure.
 
static const ulint OS_FILE_READ_ONLY
Definition: os0file.h:215
 
void os_aio_simulated_wake_handler_threads()
Wakes up simulated aio i/o-handler threads if they have something to do.
Definition: os0file.cc:6745
 
bool os_file_status(const char *path, bool *exists, os_file_type_t *type)
Check the existence and type of a given path.
Definition: os0file.cc:5720
 
constexpr uint32_t OS_FILE_MAX_PATH
Definition: os0file.h:651
 
os_file_create_t
Options for os_file_create_func.
Definition: os0file.h:195
 
@ OS_FILE_ON_ERROR_SILENT
don't print diagnostic messages to the log unless it is a fatal error, this flag is only used if ON_E...
Definition: os0file.h:209
 
@ OS_FILE_CREATE
to create new file (if exists, error)
Definition: os0file.h:198
 
@ OS_FILE_ON_ERROR_NO_EXIT
Flags that can be combined with the above values.
Definition: os0file.h:208
 
@ OS_FILE_OPEN_RETRY
open with retry
Definition: os0file.h:203
 
@ OS_FILE_CREATE_PATH
to create the directories
Definition: os0file.h:202
 
@ OS_FILE_OPEN
to open an existing file (if doesn't exist, error)
Definition: os0file.h:196
 
@ OS_FILE_OPEN_RAW
to open a raw device or disk partition
Definition: os0file.h:200
 
static const ulint OS_AIO_N_PENDING_IOS_PER_THREAD
Win NT does not allow more than 64.
Definition: os0file.h:591
 
static bool pfs_os_file_rename_func(mysql_pfs_key_t key, const char *oldpath, const char *newpath, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_rename(), not directly this function!...
 
bool os_file_scan_directory(const char *path, os_dir_cbk_t scan_cbk, bool is_drop)
This function scans the contents of a directory and invokes the callback for each entry.
Definition: os0file.cc:3060
 
ulint os_n_file_reads
Definition: os0file.cc:819
 
bool os_is_o_direct_supported()
Determine if O_DIRECT is supported.
Definition: os0file.cc:137
 
static const ulint OS_BUFFERED_FILE
Definition: os0file.h:230
 
void os_free_block(file::Block *block) noexcept
Free a page after sync IO.
Definition: os0file.cc:1023
 
dberr_t os_file_create_subdirs_if_needed(const char *path)
Create all missing subdirectories along the given path.
Definition: os0file.cc:1810
 
bool os_file_create_directory(const char *pathname, bool fail_if_exists)
This function attempts to create a directory named pathname.
Definition: os0file.cc:3037
 
static bool pfs_os_file_flush_func(pfs_os_file_t file, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_flush(), not directly this function!...
 
bool os_aio_init(ulint n_readers, ulint n_writers)
Initializes the asynchronous io system.
Definition: os0file.cc:6362
 
static const ulint OS_FILE_AIO_INTERRUPTED
Definition: os0file.h:249
 
os_file_type_t
Definition: os0file.h:617
 
@ OS_FILE_TYPE_BLOCK
Block device.
Definition: os0file.h:643
 
@ OS_FILE_PERMISSION_ERROR
stat() failed with EACCESS
Definition: os0file.h:625
 
@ OS_FILE_TYPE_MISSING
File doesn't exist.
Definition: os0file.h:628
 
@ OS_FILE_TYPE_NAME_TOO_LONG
stat() failed, with ENAMETOOLONG
Definition: os0file.h:622
 
@ OS_FILE_TYPE_UNKNOWN
File exists but type is unknown.
Definition: os0file.h:631
 
@ OS_FILE_TYPE_DIR
Directory.
Definition: os0file.h:637
 
@ OS_FILE_TYPE_FAILED
Get status failed.
Definition: os0file.h:619
 
@ OS_FILE_TYPE_LINK
Symbolic link.
Definition: os0file.h:640
 
@ OS_FILE_TYPE_FILE
Ordinary file.
Definition: os0file.h:634
 
dberr_t os_file_read_func(IORequest &type, const char *file_name, os_file_t file, void *buf, os_offset_t offset, ulint n)
NOTE! Use the corresponding macro os_file_read_first_page(), not directly this function!...
Definition: os0file.cc:5517
 
AIO_mode
Modes for aio operations.
Definition: os0file.h:594
 
@ SYNC
Asynchronous i/o where the calling thread will itself wait for the i/o to complete,...
 
@ IBUF
Asynchronous i/o for ibuf pages or ibuf bitmap pages.
 
ulint os_n_fsyncs
Definition: os0file.cc:822
 
mysql_pfs_key_t innodb_data_file_key
 
mysql_pfs_key_t innodb_dblwr_file_key
 
byte * os_file_compress_page(Compression compression, ulint block_size, byte *src, ulint src_len, byte *dst, ulint *dst_len)
Compress a data page.
Definition: os0file.cc:1299
 
os_fd_t os_file_t
File handle.
Definition: os0file.h:149
 
bool os_file_close_func(os_file_t file)
NOTE! Use the corresponding macro os_file_close(), not directly this function! Closes a file handle.
Definition: os0file.cc:3416
 
void os_file_read_string(FILE *file, char *str, ulint size)
Rewind file to its start, read at most size - 1 bytes from it to str, and NUL-terminate str.
Definition: os0file.cc:1600
 
static const ulint OS_DATA_FILE
Types for file create.
Definition: os0file.h:223
 
constexpr uint32_t OS_FILE_LOG_BLOCK_SIZE
The next value should be smaller or equal to the smallest sector size used on any disk.
Definition: os0file.h:192
 
static bool pfs_os_file_delete_func(mysql_pfs_key_t key, const char *name, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_delete(), not directly this function!...
 
void os_aio_free()
Frees the asynchronous io system.
Definition: os0file.cc:6384
 
mysql_pfs_key_t innodb_log_file_key
 
bool os_file_set_size(const char *name, pfs_os_file_t file, os_offset_t offset, os_offset_t size, bool flush)
Write the specified number of zeros to a file from specific offset.
Definition: os0file.cc:5366
 
static const ulint OS_FILE_ERROR_NOT_SPECIFIED
Definition: os0file.h:247
 
pfs_os_file_t os_file_create_func(const char *name, ulint create_mode, ulint purpose, bool read_only, bool *success)
NOTE! Use the corresponding macro os_file_create(), not directly this function! Opens an existing fil...
Definition: os0file.cc:3094
 
std::function< void(const char *path, const char *name)> os_dir_cbk_t
Callback function type to be implemented by caller.
Definition: os0file.h:695
 
void os_file_set_nocache(int fd, const char *file_name, const char *operation_name, bool on_error_silent=false)
Tries to disable OS caching on an opened file descriptor.
Definition: os0file.cc:5288
 
static const ulint OS_LOG_FILE
Definition: os0file.h:224
 
std::atomic< ulint > os_n_pending_reads
Number of pending read operations.
Definition: os0file.cc:830
 
static constexpr os_fd_t OS_FD_CLOSED
Definition: os0file.h:117
 
bool os_is_sparse_file_supported(pfs_os_file_t fh)
Check if the file system supports sparse files.
Definition: os0file.cc:5754
 
dberr_t os_file_read_no_error_handling_func(IORequest &type, const char *file_name, os_file_t file, void *buf, os_offset_t offset, ulint n, ulint *o)
NOTE! Use the corresponding macro os_file_read_no_error_handling(), not directly this function!...
Definition: os0file.cc:5682
 
dberr_t os_file_punch_hole(os_file_t fh, os_offset_t off, os_offset_t len)
Free storage space associated with a section of the file.
Definition: os0file.cc:5741
 
int os_fd_t
Raw file handle.
Definition: os0file.h:115
 
void os_create_block_cache()
Creates and initializes block_cache.
Definition: os0file.cc:6322
 
static bool pfs_os_file_delete_if_exists_func(mysql_pfs_key_t key, const char *name, bool *exist, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_delete_if_exists(), not directly this function!...
 
bool os_file_seek(const char *pathname, os_file_t file, os_offset_t offset)
Set read/write position of a file handle to specific offset.
Definition: os0file.cc:5480
 
mysql_pfs_key_t innodb_arch_file_key
 
static const ulint OS_FILE_PATH_ERROR
Definition: os0file.h:241
 
void os_aio_wait_until_no_pending_writes()
Waits until there are no pending writes in os_aio_write_array.
Definition: os0file.cc:6438
 
static const ulint OS_DBLWR_FILE
Definition: os0file.h:233
 
static dberr_t pfs_os_file_read_no_error_handling_int_fd_func(IORequest &type, const char *file_name, int file, void *buf, os_offset_t offset, ulint n, ulint *o, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_read_no_error_handling_int_fd(), not directly this f...
 
bool os_file_set_size_fast(const char *name, pfs_os_file_t file, os_offset_t offset, os_offset_t size, bool flush)
Allocate a block to file using fallocate from the given offset if fallocate is supported.
Definition: os0file.cc:5335
 
static const ulint OS_FILE_NOT_FOUND
Error codes from os_file_get_last_error.
Definition: os0file.h:238
 
static dberr_t pfs_os_file_write_func(IORequest &type, const char *name, pfs_os_file_t file, const void *buf, os_offset_t offset, ulint n, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_write(), not directly this function!...
 
void os_file_set_umask(mode_t umask)
Set the global file create umask.
Definition: os0file.cc:7750
 
dberr_t os_aio_func(IORequest &type, AIO_mode aio_mode, const char *name, pfs_os_file_t file, void *buf, os_offset_t offset, ulint n, bool read_only, fil_node_t *m1, void *m2)
NOTE! Use the corresponding macro os_aio(), not directly this function! Requests an asynchronous i/o ...
Definition: os0file.cc:6920
 
static const ulint OS_FILE_SHARING_VIOLATION
Definition: os0file.h:246
 
static pfs_os_file_t pfs_os_file_create_func(mysql_pfs_key_t key, const char *name, ulint create_mode, ulint purpose, bool read_only, bool *success, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_create(), not directly this function!...
 
std::atomic< ulint > os_n_pending_writes
Number of pending write operations.
Definition: os0file.cc:828
 
static const ulint OS_FILE_READ_ALLOW_DELETE
Used by MySQLBackup.
Definition: os0file.h:219
 
unsigned long long os_fsync_threshold
Definition: os0file.cc:114
 
void os_aio_wake_all_threads_at_shutdown()
Wakes up all async i/o threads so that they know to exit themselves in shutdown.
Definition: os0file.cc:6408
 
constexpr mode_t os_innodb_umask_default
A magic constant for the umask parameter that indicates caller wants the os_innodb_umask value to be ...
Definition: os0file.h:1721
 
static pfs_os_file_t pfs_os_file_create_simple_no_error_handling_func(mysql_pfs_key_t key, const char *name, ulint create_mode, ulint access_type, bool read_only, mode_t umask, bool *success, ut::Location src_location)
Clang on Windows warns about umask not found.
 
static const ulint OS_FILE_NAME_TOO_LONG
Definition: os0file.h:252
 
pfs_os_file_t os_file_create_simple_no_error_handling_func(const char *name, ulint create_mode, ulint access_type, bool read_only, mode_t umask, bool *success)
Clang on Windows warns about umask not found.
Definition: os0file.cc:3262
 
mysql_pfs_key_t innodb_tablespace_open_file_key
 
static dberr_t pfs_os_file_read_func(IORequest &type, const char *file_name, pfs_os_file_t file, void *buf, os_offset_t offset, ulint n, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_read(), not directly this function!...
 
dberr_t os_file_write_retry(IORequest &type, const char *name, pfs_os_file_t file, const void *buf, os_offset_t offset, ulint n)
This is a wrapper function for the os_file_write() function call.
Definition: os0file.cc:7778
 
static const ulint OS_FILE_ERROR_MAX
Definition: os0file.h:255
 
static dberr_t pfs_os_aio_func(IORequest &type, AIO_mode mode, const char *name, pfs_os_file_t file, void *buf, os_offset_t offset, ulint n, bool read_only, fil_node_t *m1, void *m2, ut::Location location)
NOTE! Please use the corresponding macro os_aio(), not directly this function! Performance schema wra...
 
bool os_file_set_eof(FILE *file)
Truncates a file at its current position.
Definition: os0file.cc:3571
 
static dberr_t pfs_os_file_copy_func(pfs_os_file_t src, os_offset_t src_offset, pfs_os_file_t dest, os_offset_t dest_offset, uint size, ut::Location src_location)
copy data from one file to another file.
 
static dberr_t pfs_os_file_write_int_fd_func(IORequest &type, const char *name, int file, const void *buf, os_offset_t offset, ulint n, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_write(), not directly this function!...
 
bool os_file_exists(const char *path)
Check the existence and usefulness of a given path.
Definition: os0file.cc:5728
 
bool os_file_flush_func(os_file_t file)
NOTE! Use the corresponding macro os_file_flush(), not directly this function! Flushes the write buff...
Definition: os0file.cc:3000
 
static const ulint OS_FILE_ALREADY_EXISTS
Definition: os0file.h:240
 
static const ulint OS_FILE_DISK_FULL
Definition: os0file.h:239
 
bool os_file_rename_func(const char *oldpath, const char *newpath)
NOTE! Use the corresponding macro os_file_rename(), not directly this function! Renames a file (can a...
Definition: os0file.cc:3385
 
void os_aio_print(FILE *file)
Prints info of the aio arrays.
Definition: os0file.cc:7610
 
static bool pfs_os_file_close_func(pfs_os_file_t file, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_close(), not directly this function!...
 
static const ulint OS_CLONE_LOG_FILE
Definition: os0file.h:232
 
bool os_has_said_disk_full
Definition: os0file.cc:833
 
byte * os_block_get_frame(const file::Block *block) noexcept
Get the sector aligned frame pointer.
Definition: os0file.cc:976
 
ulint os_n_file_writes
Definition: os0file.cc:821
 
dberr_t os_aio_handler(ulint segment, fil_node_t **m1, void **m2, IORequest *request)
Waits for an AIO operation to complete.
Definition: os0file.cc:5891
 
constexpr size_t NUM_RETRIES_ON_PARTIAL_IO
Number of retries for partial I/O's.
Definition: os0file.h:76
 
dberr_t os_file_read_first_page_func(IORequest &type, const char *file_name, os_file_t file, void *buf, ulint n)
NOTE! Use the corresponding macro os_file_read_first_page(), not directly this function!...
Definition: os0file.cc:5535
 
dberr_t os_file_get_status(const char *path, os_file_stat_t *stat_info, bool check_rw_perm, bool read_only)
This function returns information about the specified file.
Definition: os0file.cc:5788
 
mysql_pfs_key_t innodb_temp_file_key
 
bool os_aio_all_slots_free()
Checks that all slots in the system have been freed, that is, there are no pending io operations.
Definition: os0file.cc:7702
 
bool os_file_delete_func(const char *name)
Deletes a file.
Definition: os0file.cc:3364
 
static const ulint OS_FILE_READ_WRITE
Definition: os0file.h:216
 
static const ulint OS_FILE_ACCESS_VIOLATION
Definition: os0file.h:251
 
dberr_t os_get_free_space(const char *path, uint64_t &free_space)
Get available free space on disk.
Definition: os0file.cc:5769
 
file::Block * os_file_encrypt_page(const IORequest &type, void *&buf, ulint n)
Encrypt a page content when write it to disk.
Definition: os0file.cc:1924
 
void os_aio_refresh_stats()
Refreshes the statistics used to print per-second averages.
Definition: os0file.cc:7683
 
os_file_size_t os_file_get_size(const char *filename)
Gets a file size.
Definition: os0file.cc:3440
 
static const ulint OS_FILE_AIO_RESOURCES_RESERVED
wait for OS aio resources to become available again
Definition: os0file.h:244
 
static const ulint OS_CLONE_DATA_FILE
Definition: os0file.h:231
 
ulint os_file_get_last_error(bool report_all_errors)
Retrieves the last error number if an error occurs in a file io function.
Definition: os0file.cc:5167
 
static const ulint OS_FILE_OPERATION_ABORTED
Definition: os0file.h:250
 
void os_aio_simulated_put_read_threads_to_sleep()
This function can be called if one wants to post a batch of reads and prefers an i/o-handler thread t...
Definition: os0file.cc:3589
 
file::Block * os_alloc_block() noexcept
Allocate a page for sync IO.
Definition: os0file.cc:980
 
bool os_file_truncate(const char *pathname, pfs_os_file_t file, os_offset_t size)
Truncates a file to a specified size in bytes.
Definition: os0file.cc:5458
 
dberr_t os_file_decompress_page(bool dblwr_read, byte *src, byte *dst, ulint dst_len)
Decompress the page data contents.
Definition: file.cc:277
 
os_fd_t innobase_mysql_tmpfile(const char *path)
Creates a temporary file in the location specified by the parameter path.
Definition: ha_innodb.cc:2461
 
dberr_t os_file_write_zeros(pfs_os_file_t file, const char *name, ulint page_size, os_offset_t start, ulint len)
Fill the pages with NULs.
Definition: os0file.cc:5816
 
static const ulint OS_DATA_FILE_FOR_SPACE_ID_READ
Definition: os0file.h:234
 
static const ulint OS_FILE_INSUFFICIENT_RESOURCE
Definition: os0file.h:248
 
static constexpr os_fd_t OS_FILE_CLOSED
Definition: os0file.h:151
 
FILE * os_file_create_tmpfile()
Create a temporary file.
Definition: os0file.cc:1573
 
bool os_file_check_mode(const char *name, bool read_only)
Check if a file can be opened in read-write mode.
Definition: os0file.cc:5849
 
static dberr_t pfs_os_file_read_first_page_func(IORequest &type, const char *file_name, pfs_os_file_t file, void *buf, ulint n, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_read_first_page(), not directly this function!...
 
void os_aio_print_pending_io(FILE *file)
Prints all pending IO.
Definition: os0file.cc:7744
 
mysql_pfs_key_t innodb_clone_file_key
 
dberr_t os_file_copy_func(os_file_t src_file, os_offset_t src_offset, os_file_t dest_file, os_offset_t dest_offset, uint size)
Copy data from one file to another file.
Definition: os0file.cc:5671
 
char * innobase_mysql_tmpdir()
return any of the tmpdir path
Definition: ha_innodb.cc:2459
 
uint64_t os_offset_t
File offset in bytes.
Definition: os0file.h:87
 
static const ulint OS_FILE_TOO_MANY_OPENED
Definition: os0file.h:253
 
static const ulint OS_LOG_FILE_RESIZING
Definition: os0file.h:225
 
dberr_t os_file_write_func(IORequest &type, const char *name, os_file_t file, const void *buf, os_offset_t offset, ulint n)
NOTE! Use the corresponding macro os_file_write(), not directly this function! Requests a synchronous...
Definition: os0file.cc:5703
 
void os_aio_start_threads()
Starts one thread for each segment created in os_aio_init.
Definition: os0file.cc:6381
 
ulint os_file_original_page_size(const byte *buf)
If it is a compressed page return the original page data + footer size.
Definition: os0file.cc:1135
 
ulint os_file_compressed_page_size(const byte *buf)
If it is a compressed page return the compressed page data + footer size.
Definition: os0file.cc:1119
 
static dberr_t pfs_os_file_read_no_error_handling_func(IORequest &type, const char *file_name, pfs_os_file_t file, void *buf, os_offset_t offset, ulint n, ulint *o, ut::Location src_location)
NOTE! Please use the corresponding macro os_file_read_no_error_handling(), not directly this function...
 
bool os_file_delete_if_exists_func(const char *name, bool *exist)
Deletes a file if it exists.
Definition: os0file.cc:3328
 
The interface to the operating system file io.
 
const char * filename
Definition: pfs_example_component_population.cc:67
 
MY_COMPILER_CLANG_DIAGNOSTIC_IGNORE("-Winconsistent-missing-destructor-override") static Scope_guard static_guard([]()
Definition: protobuf_plugin.cc:33
 
required string key
Definition: replication_asynchronous_connection_failover.proto:60
 
required string type
Definition: replication_group_member_actions.proto:34
 
case opt name
Definition: sslopt-case.h:29
 
NOTE: The functions in this file should only use functions from other files in library.
 
Compression algorithm.
Definition: file.h:51
 
Type
Algorithm types supported.
Definition: file.h:53
 
@ NONE
No compression.
Definition: file.h:59
 
Type m_type
Compression type.
Definition: file.h:197
 
std::string to_string() const
Definition: file.h:105
 
Directory names for the depth first directory scan.
Definition: os0file.h:1812
 
Entry(const Path &path, size_t depth)
Constructor.
Definition: os0file.h:1817
 
Path m_path
Path to the directory.
Definition: os0file.h:1820
 
size_t m_depth
Relative depth of m_path.
Definition: os0file.h:1823
 
File node of a tablespace or the log data space.
Definition: fil0fil.h:158
 
Blocks for doing IO, used in the transparent compression and encryption code.
Definition: os0file.h:92
 
Block() noexcept
Default constructor.
Definition: os0file.h:94
 
static void free(file::Block *obj) noexcept
Free the given memory block.
Definition: os0file.h:1852
 
byte * m_ptr
Pointer to the memory block.
Definition: os0file.h:101
 
size_t m_size
Size of the data in memory block.
Definition: os0file.h:104
 
byte pad[ut::INNODB_CACHE_LINE_SIZE]
This padding is needed to avoid false sharing.
Definition: os0file.h:109
 
std::atomic< bool > m_in_use
Definition: os0file.h:110
 
Define for performance schema registration key.
Definition: sync0sync.h:51
 
Sparse file size information.
Definition: os0file.h:581
 
os_offset_t m_alloc_size
If it is a sparse file then this is the number of bytes actually allocated for the file.
Definition: os0file.h:587
 
os_offset_t m_total_size
Total size of file in bytes.
Definition: os0file.h:583
 
Struct used in fetching information of a file in a directory.
Definition: os0file.h:656
 
uint32_t block_size
Block size to use for IO in bytes.
Definition: os0file.h:662
 
time_t ctime
creation time
Definition: os0file.h:664
 
char name[OS_FILE_MAX_PATH]
path to a file
Definition: os0file.h:657
 
time_t atime
access time
Definition: os0file.h:666
 
bool rw_perm
true if can be opened in read-write mode.
Definition: os0file.h:667
 
os_file_type_t type
file type
Definition: os0file.h:658
 
os_offset_t size
file size in bytes
Definition: os0file.h:659
 
os_offset_t alloc_size
Allocated size for sparse files in bytes.
Definition: os0file.h:660
 
time_t mtime
modification time
Definition: os0file.h:665
 
Common file descriptor for file IO instrumentation with PFS on windows and other platforms.
Definition: os0file.h:172
 
struct PSI_file * m_psi
Definition: os0file.h:174
 
os_file_t m_file
Definition: os0file.h:182
 
Include file for Sun RPC to compile out of the box.
 
static const size_t UNIV_SECTOR_SIZE
Definition: univ.i:639
 
unsigned long int ulint
Definition: univ.i:406
 
#define ut_ad(EXPR)
Debug assertion.
Definition: ut0dbg.h:105
 
#define HANDLE
Definition: violite.h:159
 
int n
Definition: xcom_base.cc:509