• Marko Mäkelä's avatar
    MDEV-11520 after-merge fix for 10.1: Use sparse files. · ec4cf111
    Marko Mäkelä authored
    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.
    ec4cf111
os0file.cc 162 KB