diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2017-02-22 17:17:00 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2017-02-22 22:29:56 +0200 |
commit | ec4cf111c0d8599c63c486dd96b180d5e7cff8ea (patch) | |
tree | 7e23c566d0b4579b0df6d766f6ad5994b481467b /storage/innobase/include/os0file.h | |
parent | e1e920bf63550304eccee057edc568479ecf79ac (diff) | |
download | mariadb-git-ec4cf111c0d8599c63c486dd96b180d5e7cff8ea.tar.gz |
MDEV-11520 after-merge fix for 10.1: Use sparse files.
If page_compression (introduced in MariaDB Server 10.1) is enabled,
the logical action is to not preallocate space to the data files,
but to only logically extend the files with zeroes.
fil_create_new_single_table_tablespace(): Create smaller files for
ROW_FORMAT=COMPRESSED tables, but adhere to the minimum file size of
4*innodb_page_size.
fil_space_extend_must_retry(), os_file_set_size(): On Windows,
use SetFileInformationByHandle() and FILE_END_OF_FILE_INFO,
which depends on bumping _WIN32_WINNT to 0x0600.
FIXME: The files are not yet set up as sparse, so
this will currently end up physically extending (preallocating)
the files, wasting storage for unused pages.
os_file_set_size(): Add the parameter "bool sparse=false" to declare
that the file is to be extended logically, instead of being preallocated.
The only caller with sparse=true is
fil_create_new_single_table_tablespace().
(The system tablespace cannot be created with page_compression.)
fil_space_extend_must_retry(), os_file_set_size(): Outside Windows,
use ftruncate() to extend files that are supposed to be sparse.
On systems where ftruncate() is limited to files less than 4GiB
(if there are any), fil_space_extend_must_retry() retains the
old logic of physically extending the file.
Diffstat (limited to 'storage/innobase/include/os0file.h')
-rw-r--r-- | storage/innobase/include/os0file.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h index 23276c5b471..af3961d9f82 100644 --- a/storage/innobase/include/os0file.h +++ b/storage/innobase/include/os0file.h @@ -881,17 +881,19 @@ os_file_get_size( /*=============*/ os_file_t file) /*!< in: handle to a file */ MY_ATTRIBUTE((warn_unused_result)); -/***********************************************************************//** -Write the specified number of zeros to a newly created file. -@return TRUE if success */ +/** Set the size of a newly created file. +@param[in] name file name +@param[in] file file handle +@param[in] size desired file size +@param[in] sparse whether to create a sparse file (no preallocating) +@return whether the operation succeeded */ UNIV_INTERN -ibool +bool os_file_set_size( -/*=============*/ - const char* name, /*!< in: name of the file or path as a - null-terminated string */ - os_file_t file, /*!< in: handle to a file */ - os_offset_t size) /*!< in: file size */ + const char* name, + os_file_t file, + os_offset_t size, + bool is_sparse = false) MY_ATTRIBUTE((nonnull, warn_unused_result)); /***********************************************************************//** Truncates a file at its current position. |