mirror of
https://github.com/MariaDB/server.git
synced 2026-05-16 20:07:13 +02:00
MDEV-6246: Merge 10.0.10-FusionIO to 10.1.
This commit is contained in:
commit
d12dbe77e2
105 changed files with 8437 additions and 743 deletions
|
|
@ -1,6 +1,7 @@
|
|||
/*****************************************************************************
|
||||
|
||||
Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.
|
||||
Copyright (c) 2013, 2014, SkySQL Ab. 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
|
||||
|
|
@ -537,9 +538,25 @@ dict_tf_is_valid(
|
|||
ulint zip_ssize = DICT_TF_GET_ZIP_SSIZE(flags);
|
||||
ulint atomic_blobs = DICT_TF_HAS_ATOMIC_BLOBS(flags);
|
||||
ulint unused = DICT_TF_GET_UNUSED(flags);
|
||||
ulint page_compression = DICT_TF_GET_PAGE_COMPRESSION(flags);
|
||||
ulint page_compression_level = DICT_TF_GET_PAGE_COMPRESSION_LEVEL(flags);
|
||||
ulint data_dir = DICT_TF_HAS_DATA_DIR(flags);
|
||||
ulint atomic_writes = DICT_TF_GET_ATOMIC_WRITES(flags);
|
||||
|
||||
/* Make sure there are no bits that we do not know about. */
|
||||
if (unused != 0) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: table unused flags are %ld"
|
||||
" in the data dictionary and are corrupted\n"
|
||||
"InnoDB: Error: data dictionary flags are\n"
|
||||
"InnoDB: compact %ld atomic_blobs %ld\n"
|
||||
"InnoDB: unused %ld data_dir %ld zip_ssize %ld\n"
|
||||
"InnoDB: page_compression %ld page_compression_level %ld\n"
|
||||
"InnoDB: atomic_writes %ld\n",
|
||||
unused,
|
||||
compact, atomic_blobs, unused, data_dir, zip_ssize,
|
||||
page_compression, page_compression_level, atomic_writes
|
||||
);
|
||||
|
||||
return(false);
|
||||
|
||||
|
|
@ -550,12 +567,34 @@ dict_tf_is_valid(
|
|||
data stored off-page in the clustered index. */
|
||||
|
||||
if (!compact) {
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: table compact flags are %ld"
|
||||
" in the data dictionary and are corrupted\n"
|
||||
"InnoDB: Error: data dictionary flags are\n"
|
||||
"InnoDB: compact %ld atomic_blobs %ld\n"
|
||||
"InnoDB: unused %ld data_dir %ld zip_ssize %ld\n"
|
||||
"InnoDB: page_compression %ld page_compression_level %ld\n"
|
||||
"InnoDB: atomic_writes %ld\n",
|
||||
compact, compact, atomic_blobs, unused, data_dir, zip_ssize,
|
||||
page_compression, page_compression_level, atomic_writes
|
||||
);
|
||||
return(false);
|
||||
}
|
||||
|
||||
} else if (zip_ssize) {
|
||||
|
||||
/* Antelope does not support COMPRESSED row format. */
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: table flags are %ld"
|
||||
" in the data dictionary and are corrupted\n"
|
||||
"InnoDB: Error: data dictionary flags are\n"
|
||||
"InnoDB: compact %ld atomic_blobs %ld\n"
|
||||
"InnoDB: unused %ld data_dir %ld zip_ssize %ld\n"
|
||||
"InnoDB: page_compression %ld page_compression_level %ld\n"
|
||||
"InnoDB: atomic_writes %ld\n",
|
||||
flags, compact, atomic_blobs, unused, data_dir, zip_ssize,
|
||||
page_compression, page_compression_level, atomic_writes
|
||||
);
|
||||
return(false);
|
||||
}
|
||||
|
||||
|
|
@ -568,6 +607,58 @@ dict_tf_is_valid(
|
|||
|| !atomic_blobs
|
||||
|| zip_ssize > PAGE_ZIP_SSIZE_MAX) {
|
||||
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: table compact flags are %ld in the data dictionary and are corrupted\n"
|
||||
"InnoDB: Error: data dictionary flags are\n"
|
||||
"InnoDB: compact %ld atomic_blobs %ld\n"
|
||||
"InnoDB: unused %ld data_dir %ld zip_ssize %ld\n"
|
||||
"InnoDB: page_compression %ld page_compression_level %ld\n"
|
||||
"InnoDB: atomic_writes %ld\n",
|
||||
flags,
|
||||
compact, atomic_blobs, unused, data_dir, zip_ssize,
|
||||
page_compression, page_compression_level, atomic_writes
|
||||
|
||||
);
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (page_compression || page_compression_level) {
|
||||
/* Page compression format must have compact and
|
||||
atomic_blobs and page_compression_level requires
|
||||
page_compression */
|
||||
if (!compact
|
||||
|| !page_compression
|
||||
|| !atomic_blobs) {
|
||||
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: table flags are %ld in the data dictionary and are corrupted\n"
|
||||
"InnoDB: Error: data dictionary flags are\n"
|
||||
"InnoDB: compact %ld atomic_blobs %ld\n"
|
||||
"InnoDB: unused %ld data_dir %ld zip_ssize %ld\n"
|
||||
"InnoDB: page_compression %ld page_compression_level %ld\n"
|
||||
"InnoDB: atomic_writes %ld\n",
|
||||
flags, compact, atomic_blobs, unused, data_dir, zip_ssize,
|
||||
page_compression, page_compression_level, atomic_writes
|
||||
);
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
|
||||
if (atomic_writes) {
|
||||
|
||||
if(atomic_writes < 0 || atomic_writes > ATOMIC_WRITES_OFF) {
|
||||
|
||||
fprintf(stderr,
|
||||
"InnoDB: Error: table flags are %ld in the data dictionary and are corrupted\n"
|
||||
"InnoDB: Error: data dictionary flags are\n"
|
||||
"InnoDB: compact %ld atomic_blobs %ld\n"
|
||||
"InnoDB: unused %ld data_dir %ld zip_ssize %ld\n"
|
||||
"InnoDB: page_compression %ld page_compression_level %ld\n"
|
||||
"InnoDB: atomic_writes %ld\n",
|
||||
flags, compact, atomic_blobs, unused, data_dir, zip_ssize,
|
||||
page_compression, page_compression_level, atomic_writes
|
||||
);
|
||||
return(false);
|
||||
}
|
||||
}
|
||||
|
|
@ -594,6 +685,11 @@ dict_sys_tables_type_validate(
|
|||
ulint zip_ssize = DICT_TF_GET_ZIP_SSIZE(type);
|
||||
ulint atomic_blobs = DICT_TF_HAS_ATOMIC_BLOBS(type);
|
||||
ulint unused = DICT_TF_GET_UNUSED(type);
|
||||
ulint page_compression = DICT_TF_GET_PAGE_COMPRESSION(type);
|
||||
ulint page_compression_level = DICT_TF_GET_PAGE_COMPRESSION_LEVEL(type);
|
||||
ulint atomic_writes = DICT_TF_GET_ATOMIC_WRITES(type);
|
||||
|
||||
ut_a(atomic_writes >= 0 && atomic_writes <= ATOMIC_WRITES_OFF);
|
||||
|
||||
/* The low order bit of SYS_TABLES.TYPE is always set to 1.
|
||||
If the format is UNIV_FORMAT_B or higher, this field is the same
|
||||
|
|
@ -604,12 +700,16 @@ dict_sys_tables_type_validate(
|
|||
|
||||
if (redundant) {
|
||||
if (zip_ssize || atomic_blobs) {
|
||||
fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=Redundant, zip_ssize %lu atomic_blobs %lu\n",
|
||||
zip_ssize, atomic_blobs);
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
}
|
||||
|
||||
/* Make sure there are no bits that we do not know about. */
|
||||
if (unused) {
|
||||
fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=%lu, unused %lu\n",
|
||||
type, unused);
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
|
||||
|
|
@ -624,6 +724,8 @@ dict_sys_tables_type_validate(
|
|||
|
||||
} else if (zip_ssize) {
|
||||
/* Antelope does not support COMPRESSED format. */
|
||||
fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=%lu, zip_ssize %lu\n",
|
||||
type, zip_ssize);
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
|
||||
|
|
@ -633,11 +735,15 @@ dict_sys_tables_type_validate(
|
|||
should be in N_COLS, but we already know about the
|
||||
low_order_bit and DICT_N_COLS_COMPACT flags. */
|
||||
if (!atomic_blobs) {
|
||||
fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=%lu, zip_ssize %lu atomic_blobs %lu\n",
|
||||
type, zip_ssize, atomic_blobs);
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
|
||||
/* Validate that the number is within allowed range. */
|
||||
if (zip_ssize > PAGE_ZIP_SSIZE_MAX) {
|
||||
fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=%lu, zip_ssize %lu max %d\n",
|
||||
type, zip_ssize, PAGE_ZIP_SSIZE_MAX);
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
}
|
||||
|
|
@ -647,6 +753,27 @@ dict_sys_tables_type_validate(
|
|||
format, so the DATA_DIR flag is compatible with any other
|
||||
table flags. However, it is not used with TEMPORARY tables.*/
|
||||
|
||||
if (page_compression || page_compression_level) {
|
||||
/* page compressed row format must have low_order_bit and
|
||||
atomic_blobs bits set and the DICT_N_COLS_COMPACT flag
|
||||
should be in N_COLS, but we already know about the
|
||||
low_order_bit and DICT_N_COLS_COMPACT flags. */
|
||||
|
||||
if (!atomic_blobs || !page_compression) {
|
||||
fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=%lu, page_compression %lu page_compression_level %lu\n"
|
||||
"InnoDB: Error: atomic_blobs %lu\n",
|
||||
type, page_compression, page_compression_level, atomic_blobs);
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
}
|
||||
|
||||
/* Validate that the atomic writes number is within allowed range. */
|
||||
if (atomic_writes < 0 || atomic_writes > ATOMIC_WRITES_OFF) {
|
||||
fprintf(stderr, "InnoDB: Error: SYS_TABLES::TYPE=%lu, atomic_writes %lu\n",
|
||||
type, atomic_writes);
|
||||
return(ULINT_UNDEFINED);
|
||||
}
|
||||
|
||||
/* Return the validated SYS_TABLES.TYPE. */
|
||||
return(type);
|
||||
}
|
||||
|
|
@ -719,8 +846,16 @@ dict_tf_set(
|
|||
ulint* flags, /*!< in/out: table flags */
|
||||
rec_format_t format, /*!< in: file format */
|
||||
ulint zip_ssize, /*!< in: zip shift size */
|
||||
bool use_data_dir) /*!< in: table uses DATA DIRECTORY */
|
||||
bool use_data_dir, /*!< in: table uses DATA DIRECTORY
|
||||
*/
|
||||
bool page_compressed,/*!< in: table uses page compressed
|
||||
pages */
|
||||
ulint page_compression_level, /*!< in: table page compression
|
||||
level */
|
||||
ulint atomic_writes) /*!< in: table atomic writes setup */
|
||||
{
|
||||
atomic_writes_t awrites = (atomic_writes_t)atomic_writes;
|
||||
|
||||
switch (format) {
|
||||
case REC_FORMAT_REDUNDANT:
|
||||
*flags = 0;
|
||||
|
|
@ -742,6 +877,19 @@ dict_tf_set(
|
|||
break;
|
||||
}
|
||||
|
||||
if (page_compressed) {
|
||||
*flags |= (1 << DICT_TF_POS_ATOMIC_BLOBS)
|
||||
| (1 << DICT_TF_POS_PAGE_COMPRESSION)
|
||||
| (page_compression_level << DICT_TF_POS_PAGE_COMPRESSION_LEVEL);
|
||||
|
||||
ut_ad(zip_ssize == 0);
|
||||
ut_ad(dict_tf_get_page_compression(*flags) == TRUE);
|
||||
ut_ad(dict_tf_get_page_compression_level(*flags) == page_compression_level);
|
||||
}
|
||||
|
||||
*flags |= (atomic_writes << DICT_TF_POS_ATOMIC_WRITES);
|
||||
ut_a(dict_tf_get_atomic_writes(*flags) == awrites);
|
||||
|
||||
if (use_data_dir) {
|
||||
*flags |= (1 << DICT_TF_POS_DATA_DIR);
|
||||
}
|
||||
|
|
@ -765,6 +913,9 @@ dict_tf_to_fsp_flags(
|
|||
ulint table_flags) /*!< in: dict_table_t::flags */
|
||||
{
|
||||
ulint fsp_flags;
|
||||
ulint page_compression = DICT_TF_GET_PAGE_COMPRESSION(table_flags);
|
||||
ulint page_compression_level = DICT_TF_GET_PAGE_COMPRESSION_LEVEL(table_flags);
|
||||
ulint atomic_writes = DICT_TF_GET_ATOMIC_WRITES(table_flags);
|
||||
|
||||
DBUG_EXECUTE_IF("dict_tf_to_fsp_flags_failure",
|
||||
return(ULINT_UNDEFINED););
|
||||
|
|
@ -783,7 +934,20 @@ dict_tf_to_fsp_flags(
|
|||
fsp_flags |= DICT_TF_HAS_DATA_DIR(table_flags)
|
||||
? FSP_FLAGS_MASK_DATA_DIR : 0;
|
||||
|
||||
/* In addition, tablespace flags also contain if the page
|
||||
compression is used for this table. */
|
||||
fsp_flags |= FSP_FLAGS_SET_PAGE_COMPRESSION(fsp_flags, page_compression);
|
||||
|
||||
/* In addition, tablespace flags also contain page compression level
|
||||
if page compression is used for this table. */
|
||||
fsp_flags |= FSP_FLAGS_SET_PAGE_COMPRESSION_LEVEL(fsp_flags, page_compression_level);
|
||||
|
||||
/* In addition, tablespace flags also contain flag if atomic writes
|
||||
is used for this table */
|
||||
fsp_flags |= FSP_FLAGS_SET_ATOMIC_WRITES(fsp_flags, atomic_writes);
|
||||
|
||||
ut_a(fsp_flags_is_valid(fsp_flags));
|
||||
ut_a(dict_tf_verify_flags(table_flags, fsp_flags));
|
||||
|
||||
return(fsp_flags);
|
||||
}
|
||||
|
|
@ -811,10 +975,15 @@ dict_sys_tables_type_to_tf(
|
|||
/* Adjust bit zero. */
|
||||
flags = redundant ? 0 : 1;
|
||||
|
||||
/* ZIP_SSIZE, ATOMIC_BLOBS & DATA_DIR are the same. */
|
||||
/* ZIP_SSIZE, ATOMIC_BLOBS, DATA_DIR, PAGE_COMPRESSION,
|
||||
PAGE_COMPRESSION_LEVEL, ATOMIC_WRITES are the same. */
|
||||
flags |= type & (DICT_TF_MASK_ZIP_SSIZE
|
||||
| DICT_TF_MASK_ATOMIC_BLOBS
|
||||
| DICT_TF_MASK_DATA_DIR);
|
||||
| DICT_TF_MASK_DATA_DIR
|
||||
| DICT_TF_MASK_PAGE_COMPRESSION
|
||||
| DICT_TF_MASK_PAGE_COMPRESSION_LEVEL
|
||||
| DICT_TF_MASK_ATOMIC_WRITES
|
||||
);
|
||||
|
||||
return(flags);
|
||||
}
|
||||
|
|
@ -842,10 +1011,14 @@ dict_tf_to_sys_tables_type(
|
|||
/* Adjust bit zero. It is always 1 in SYS_TABLES.TYPE */
|
||||
type = 1;
|
||||
|
||||
/* ZIP_SSIZE, ATOMIC_BLOBS & DATA_DIR are the same. */
|
||||
/* ZIP_SSIZE, ATOMIC_BLOBS, DATA_DIR, PAGE_COMPRESSION,
|
||||
PAGE_COMPRESSION_LEVEL, ATOMIC_WRITES are the same. */
|
||||
type |= flags & (DICT_TF_MASK_ZIP_SSIZE
|
||||
| DICT_TF_MASK_ATOMIC_BLOBS
|
||||
| DICT_TF_MASK_DATA_DIR);
|
||||
| DICT_TF_MASK_DATA_DIR
|
||||
| DICT_TF_MASK_PAGE_COMPRESSION
|
||||
| DICT_TF_MASK_PAGE_COMPRESSION_LEVEL
|
||||
| DICT_TF_MASK_ATOMIC_WRITES);
|
||||
|
||||
return(type);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue