mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
b05bf8ff0f
Most notably, this includes MDEV-11623, which includes a fix and an upgrade procedure for the InnoDB file format incompatibility that is present in MariaDB Server 10.1.0 through 10.1.20. In other words, this merge should address MDEV-11202 InnoDB 10.1 -> 10.2 migration does not work
197 lines
5.8 KiB
Text
197 lines
5.8 KiB
Text
/*****************************************************************************
|
|
|
|
Copyright (C) 2013, 2017, MariaDB Corporation. All Rights Reserved.
|
|
|
|
This program is free software; you can redistribute it and/or modify it under
|
|
the terms of the GNU General Public License as published by the Free Software
|
|
Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License along with
|
|
this program; if not, write to the Free Software Foundation, Inc.,
|
|
51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
*****************************************************************************/
|
|
|
|
/******************************************************************//**
|
|
@file include/fsp0pagecompress.ic
|
|
Implementation for helper functions for extracting/storing page
|
|
compression and atomic writes information to file space.
|
|
|
|
Created 11/12/2013 Jan Lindström jan.lindstrom@mariadb.com
|
|
|
|
***********************************************************************/
|
|
|
|
/********************************************************************//**
|
|
Determine the tablespace is page compression level from dict_table_t::flags.
|
|
@return page compression level or 0 if not compressed*/
|
|
UNIV_INLINE
|
|
ulint
|
|
fsp_flags_get_page_compression_level(
|
|
/*=================================*/
|
|
ulint flags) /*!< in: tablespace flags */
|
|
{
|
|
return(FSP_FLAGS_GET_PAGE_COMPRESSION_LEVEL(flags));
|
|
}
|
|
|
|
|
|
/*******************************************************************//**
|
|
Find out wheather the page is index page or not
|
|
@return true if page type index page, false if not */
|
|
UNIV_INLINE
|
|
bool
|
|
fil_page_is_index_page(
|
|
/*===================*/
|
|
byte* buf) /*!< in: page */
|
|
{
|
|
return(mach_read_from_2(buf+FIL_PAGE_TYPE) == FIL_PAGE_INDEX);
|
|
}
|
|
|
|
/*******************************************************************//**
|
|
Find out wheather the page is page compressed
|
|
@return true if page is page compressed, false if not */
|
|
UNIV_INLINE
|
|
bool
|
|
fil_page_is_compressed(
|
|
/*===================*/
|
|
const byte* buf) /*!< in: page */
|
|
{
|
|
return(mach_read_from_2(buf+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED);
|
|
}
|
|
|
|
/*******************************************************************//**
|
|
Find out wheather the page is page compressed
|
|
@return true if page is page compressed, false if not */
|
|
UNIV_INLINE
|
|
bool
|
|
fil_page_is_compressed_encrypted(
|
|
/*=============================*/
|
|
const byte* buf) /*!< in: page */
|
|
{
|
|
return(mach_read_from_2(buf+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED);
|
|
}
|
|
|
|
#ifndef UNIV_INNOCHECKSUM
|
|
/*******************************************************************//**
|
|
Returns the page compression level of the space, or 0 if the space
|
|
is not compressed. The tablespace must be cached in the memory cache.
|
|
@return page compression level, 0 if space not found */
|
|
UNIV_INLINE
|
|
ulint
|
|
fil_space_get_page_compression_level(
|
|
/*=================================*/
|
|
ulint id) /*!< in: space id */
|
|
{
|
|
ulint flags;
|
|
|
|
flags = fil_space_get_flags(id);
|
|
|
|
if (flags && flags != ULINT_UNDEFINED) {
|
|
|
|
return(fsp_flags_get_page_compression_level(flags));
|
|
}
|
|
|
|
return(0);
|
|
}
|
|
|
|
/*******************************************************************//**
|
|
Extract the page compression from space.
|
|
@return true if space is page compressed, false if space is not found
|
|
or space is not page compressed. */
|
|
UNIV_INLINE
|
|
bool
|
|
fil_space_is_page_compressed(
|
|
/*=========================*/
|
|
ulint id) /*!< in: space id */
|
|
{
|
|
ulint flags = fil_space_get_flags(id);
|
|
|
|
return(flags != ULINT_UNDEFINED
|
|
&& FSP_FLAGS_HAS_PAGE_COMPRESSION(flags));
|
|
}
|
|
|
|
#endif /* UNIV_INNOCHECKSUM */
|
|
|
|
/****************************************************************//**
|
|
Get the name of the compression algorithm used for page
|
|
compression.
|
|
@return compression algorithm name or "UNKNOWN" if not known*/
|
|
UNIV_INLINE
|
|
const char*
|
|
fil_get_compression_alg_name(
|
|
/*=========================*/
|
|
ulint comp_alg) /*!<in: compression algorithm number */
|
|
{
|
|
switch(comp_alg) {
|
|
case PAGE_UNCOMPRESSED:
|
|
return ("uncompressed");
|
|
break;
|
|
case PAGE_ZLIB_ALGORITHM:
|
|
return ("ZLIB");
|
|
break;
|
|
case PAGE_LZ4_ALGORITHM:
|
|
return ("LZ4");
|
|
break;
|
|
case PAGE_LZO_ALGORITHM:
|
|
return ("LZO");
|
|
break;
|
|
case PAGE_LZMA_ALGORITHM:
|
|
return ("LZMA");
|
|
break;
|
|
case PAGE_BZIP2_ALGORITHM:
|
|
return ("BZIP2");
|
|
break;
|
|
case PAGE_SNAPPY_ALGORITHM:
|
|
return ("SNAPPY");
|
|
break;
|
|
/* No default to get compiler warning */
|
|
}
|
|
|
|
return ("NULL");
|
|
}
|
|
|
|
#ifndef UNIV_INNOCHECKSUM
|
|
/*******************************************************************//**
|
|
Returns the atomic writes flag of the space, or false if the space
|
|
is not using atomic writes. The tablespace must be cached in the memory cache.
|
|
@return 1 if atomic writes can be used for the file */
|
|
UNIV_INLINE
|
|
bool
|
|
fil_space_get_atomic_writes(
|
|
/*========================*/
|
|
ulint id) /*!< in: space id */
|
|
{
|
|
struct fil_space_t* space;
|
|
bool ret= 0;
|
|
|
|
ut_ad(fil_system);
|
|
|
|
mutex_enter(&fil_system->mutex);
|
|
|
|
if ((space = fil_space_get_by_id(id)))
|
|
ret= space->atomic_write_supported;
|
|
|
|
mutex_exit(&fil_system->mutex);
|
|
return(ret);
|
|
}
|
|
|
|
|
|
/*******************************************************************//**
|
|
Find out wheather the page is page compressed with lzo method
|
|
@return true if page is page compressed with lzo method, false if not */
|
|
UNIV_INLINE
|
|
bool
|
|
fil_page_is_lzo_compressed(
|
|
/*=======================*/
|
|
byte* buf) /*!< in: page */
|
|
{
|
|
return((mach_read_from_2(buf+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED &&
|
|
mach_read_from_8(buf+FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION) == PAGE_LZO_ALGORITHM) ||
|
|
(mach_read_from_2(buf+FIL_PAGE_TYPE) == FIL_PAGE_PAGE_COMPRESSED_ENCRYPTED &&
|
|
mach_read_from_2(buf+FIL_PAGE_DATA+FIL_PAGE_COMPRESSED_SIZE) == PAGE_LZO_ALGORITHM));
|
|
}
|
|
|
|
#endif /* UNIV_INNOCHECKSUM */
|