mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-13564: Replace innodb_unsafe_truncate with innodb_safe_truncate
Rename the 10.2-specific configuration option innodb_unsafe_truncate to innodb_safe_truncate, and invert its value. The default (for now) is innodb_safe_truncate=OFF, to avoid disrupting users with an undo and redo log format change within a Generally Available (GA) release series.
This commit is contained in:
@ -1 +1 @@
|
|||||||
--skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
--loose-innodb-sys-tables
|
--loose-innodb-sys-tables
|
||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
--loose-innodb-sys-tables
|
--loose-innodb-sys-tables
|
||||||
--loose-innodb-sys-tablespaces
|
--loose-innodb-sys-tablespaces
|
||||||
--loose-innodb-sys-datafiles
|
--loose-innodb-sys-datafiles
|
||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -1 +1 @@
|
|||||||
--loose-skip-innodb-unsafe-truncate
|
--loose-innodb-safe-truncate=1
|
||||||
|
@ -2400,6 +2400,20 @@ NUMERIC_BLOCK_SIZE 0
|
|||||||
ENUM_VALUE_LIST NULL
|
ENUM_VALUE_LIST NULL
|
||||||
READ_ONLY NO
|
READ_ONLY NO
|
||||||
COMMAND_LINE_ARGUMENT OPTIONAL
|
COMMAND_LINE_ARGUMENT OPTIONAL
|
||||||
|
VARIABLE_NAME INNODB_SAFE_TRUNCATE
|
||||||
|
SESSION_VALUE NULL
|
||||||
|
GLOBAL_VALUE OFF
|
||||||
|
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
||||||
|
DEFAULT_VALUE OFF
|
||||||
|
VARIABLE_SCOPE GLOBAL
|
||||||
|
VARIABLE_TYPE BOOLEAN
|
||||||
|
VARIABLE_COMMENT Use backup-safe TRUNCATE TABLE and crash-safe RENAME (incompatible with older MariaDB 10.2; OFF by default)
|
||||||
|
NUMERIC_MIN_VALUE NULL
|
||||||
|
NUMERIC_MAX_VALUE NULL
|
||||||
|
NUMERIC_BLOCK_SIZE NULL
|
||||||
|
ENUM_VALUE_LIST OFF,ON
|
||||||
|
READ_ONLY YES
|
||||||
|
COMMAND_LINE_ARGUMENT OPTIONAL
|
||||||
VARIABLE_NAME INNODB_SAVED_PAGE_NUMBER_DEBUG
|
VARIABLE_NAME INNODB_SAVED_PAGE_NUMBER_DEBUG
|
||||||
SESSION_VALUE NULL
|
SESSION_VALUE NULL
|
||||||
GLOBAL_VALUE 0
|
GLOBAL_VALUE 0
|
||||||
@ -2974,20 +2988,6 @@ NUMERIC_BLOCK_SIZE 0
|
|||||||
ENUM_VALUE_LIST NULL
|
ENUM_VALUE_LIST NULL
|
||||||
READ_ONLY YES
|
READ_ONLY YES
|
||||||
COMMAND_LINE_ARGUMENT REQUIRED
|
COMMAND_LINE_ARGUMENT REQUIRED
|
||||||
VARIABLE_NAME INNODB_UNSAFE_TRUNCATE
|
|
||||||
SESSION_VALUE NULL
|
|
||||||
GLOBAL_VALUE ON
|
|
||||||
GLOBAL_VALUE_ORIGIN COMPILE-TIME
|
|
||||||
DEFAULT_VALUE ON
|
|
||||||
VARIABLE_SCOPE GLOBAL
|
|
||||||
VARIABLE_TYPE BOOLEAN
|
|
||||||
VARIABLE_COMMENT Use backup-unsafe TRUNCATE TABLE for compatibility with xtrabackup (on by default)
|
|
||||||
NUMERIC_MIN_VALUE NULL
|
|
||||||
NUMERIC_MAX_VALUE NULL
|
|
||||||
NUMERIC_BLOCK_SIZE NULL
|
|
||||||
ENUM_VALUE_LIST OFF,ON
|
|
||||||
READ_ONLY YES
|
|
||||||
COMMAND_LINE_ARGUMENT OPTIONAL
|
|
||||||
VARIABLE_NAME INNODB_USE_ATOMIC_WRITES
|
VARIABLE_NAME INNODB_USE_ATOMIC_WRITES
|
||||||
SESSION_VALUE NULL
|
SESSION_VALUE NULL
|
||||||
GLOBAL_VALUE ON
|
GLOBAL_VALUE ON
|
||||||
|
@ -13452,7 +13452,7 @@ int ha_innobase::truncate()
|
|||||||
|
|
||||||
update_thd();
|
update_thd();
|
||||||
|
|
||||||
if (srv_57_truncate) {
|
if (!srv_safe_truncate) {
|
||||||
if (!trx_is_started(m_prebuilt->trx)) {
|
if (!trx_is_started(m_prebuilt->trx)) {
|
||||||
++m_prebuilt->trx->will_lock;
|
++m_prebuilt->trx->will_lock;
|
||||||
}
|
}
|
||||||
@ -20694,10 +20694,10 @@ static MYSQL_SYSVAR_BOOL(read_only, srv_read_only_mode,
|
|||||||
"Start InnoDB in read only mode (off by default)",
|
"Start InnoDB in read only mode (off by default)",
|
||||||
NULL, NULL, FALSE);
|
NULL, NULL, FALSE);
|
||||||
|
|
||||||
static MYSQL_SYSVAR_BOOL(unsafe_truncate, srv_57_truncate,
|
static MYSQL_SYSVAR_BOOL(safe_truncate, srv_safe_truncate,
|
||||||
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
|
PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
|
||||||
"Use backup-unsafe TRUNCATE TABLE for compatibility with xtrabackup (on by default)",
|
"Use backup-safe TRUNCATE TABLE and crash-safe RENAME (incompatible with older MariaDB 10.2; OFF by default)",
|
||||||
NULL, NULL, TRUE);
|
NULL, NULL, FALSE);
|
||||||
|
|
||||||
static MYSQL_SYSVAR_BOOL(cmp_per_index_enabled, srv_cmp_per_index_enabled,
|
static MYSQL_SYSVAR_BOOL(cmp_per_index_enabled, srv_cmp_per_index_enabled,
|
||||||
PLUGIN_VAR_OPCMDARG,
|
PLUGIN_VAR_OPCMDARG,
|
||||||
@ -21078,7 +21078,7 @@ static struct st_mysql_sys_var* innobase_system_variables[]= {
|
|||||||
MYSQL_SYSVAR(random_read_ahead),
|
MYSQL_SYSVAR(random_read_ahead),
|
||||||
MYSQL_SYSVAR(read_ahead_threshold),
|
MYSQL_SYSVAR(read_ahead_threshold),
|
||||||
MYSQL_SYSVAR(read_only),
|
MYSQL_SYSVAR(read_only),
|
||||||
MYSQL_SYSVAR(unsafe_truncate),
|
MYSQL_SYSVAR(safe_truncate),
|
||||||
MYSQL_SYSVAR(io_capacity),
|
MYSQL_SYSVAR(io_capacity),
|
||||||
MYSQL_SYSVAR(io_capacity_max),
|
MYSQL_SYSVAR(io_capacity_max),
|
||||||
MYSQL_SYSVAR(page_cleaners),
|
MYSQL_SYSVAR(page_cleaners),
|
||||||
|
@ -256,9 +256,9 @@ extern my_bool high_level_read_only;
|
|||||||
/** store to its own file each table created by an user; data
|
/** store to its own file each table created by an user; data
|
||||||
dictionary tables are in the system tablespace 0 */
|
dictionary tables are in the system tablespace 0 */
|
||||||
extern my_bool srv_file_per_table;
|
extern my_bool srv_file_per_table;
|
||||||
/** whether to use the MySQL 5.7 WL#6501 TRUNCATE TABLE implementation
|
/** whether to use backup-safe TRUNCATE and crash-safe RENAME
|
||||||
that does not work with backup */
|
instead of the MySQL 5.7 WL#6501 TRUNCATE TABLE implementation */
|
||||||
extern my_bool srv_57_truncate;
|
extern my_bool srv_safe_truncate;
|
||||||
/** Sleep delay for threads waiting to enter InnoDB. In micro-seconds. */
|
/** Sleep delay for threads waiting to enter InnoDB. In micro-seconds. */
|
||||||
extern ulong srv_thread_sleep_delay;
|
extern ulong srv_thread_sleep_delay;
|
||||||
/** Maximum sleep delay (in micro-seconds), value of 0 disables it.*/
|
/** Maximum sleep delay (in micro-seconds), value of 0 disables it.*/
|
||||||
|
@ -790,15 +790,15 @@ log_init(ulint n_files)
|
|||||||
log_group_t* group = &log_sys->log;
|
log_group_t* group = &log_sys->log;
|
||||||
|
|
||||||
group->n_files = n_files;
|
group->n_files = n_files;
|
||||||
group->subformat = !srv_57_truncate;
|
group->subformat = srv_safe_truncate;
|
||||||
if (srv_57_truncate) {
|
if (srv_safe_truncate) {
|
||||||
group->format = srv_encrypt_log
|
|
||||||
? LOG_HEADER_FORMAT_10_2 | LOG_HEADER_FORMAT_ENCRYPTED
|
|
||||||
: LOG_HEADER_FORMAT_10_2;
|
|
||||||
} else {
|
|
||||||
group->format = srv_encrypt_log
|
group->format = srv_encrypt_log
|
||||||
? LOG_HEADER_FORMAT_10_3 | LOG_HEADER_FORMAT_ENCRYPTED
|
? LOG_HEADER_FORMAT_10_3 | LOG_HEADER_FORMAT_ENCRYPTED
|
||||||
: LOG_HEADER_FORMAT_10_3;
|
: LOG_HEADER_FORMAT_10_3;
|
||||||
|
} else {
|
||||||
|
group->format = srv_encrypt_log
|
||||||
|
? LOG_HEADER_FORMAT_10_2 | LOG_HEADER_FORMAT_ENCRYPTED
|
||||||
|
: LOG_HEADER_FORMAT_10_2;
|
||||||
}
|
}
|
||||||
group->file_size = srv_log_file_size;
|
group->file_size = srv_log_file_size;
|
||||||
group->state = LOG_GROUP_OK;
|
group->state = LOG_GROUP_OK;
|
||||||
@ -881,15 +881,15 @@ log_group_file_header_flush(
|
|||||||
ut_ad(!recv_no_log_write);
|
ut_ad(!recv_no_log_write);
|
||||||
ut_a(nth_file < group->n_files);
|
ut_a(nth_file < group->n_files);
|
||||||
ut_ad((group->format & ~LOG_HEADER_FORMAT_ENCRYPTED)
|
ut_ad((group->format & ~LOG_HEADER_FORMAT_ENCRYPTED)
|
||||||
== (srv_57_truncate
|
== (srv_safe_truncate
|
||||||
? LOG_HEADER_FORMAT_10_2
|
? LOG_HEADER_FORMAT_10_3
|
||||||
: LOG_HEADER_FORMAT_10_3));
|
: LOG_HEADER_FORMAT_10_2));
|
||||||
|
|
||||||
buf = *(group->file_header_bufs + nth_file);
|
buf = *(group->file_header_bufs + nth_file);
|
||||||
|
|
||||||
memset(buf, 0, OS_FILE_LOG_BLOCK_SIZE);
|
memset(buf, 0, OS_FILE_LOG_BLOCK_SIZE);
|
||||||
mach_write_to_4(buf + LOG_HEADER_FORMAT, group->format);
|
mach_write_to_4(buf + LOG_HEADER_FORMAT, group->format);
|
||||||
mach_write_to_4(buf + LOG_HEADER_SUBFORMAT, !srv_57_truncate);
|
mach_write_to_4(buf + LOG_HEADER_SUBFORMAT, srv_safe_truncate);
|
||||||
mach_write_to_8(buf + LOG_HEADER_START_LSN, start_lsn);
|
mach_write_to_8(buf + LOG_HEADER_START_LSN, start_lsn);
|
||||||
strcpy(reinterpret_cast<char*>(buf) + LOG_HEADER_CREATOR,
|
strcpy(reinterpret_cast<char*>(buf) + LOG_HEADER_CREATOR,
|
||||||
LOG_HEADER_CREATOR_CURRENT);
|
LOG_HEADER_CREATOR_CURRENT);
|
||||||
|
@ -3769,7 +3769,7 @@ recv_recovery_rollback_active(void)
|
|||||||
/* Drop partially created indexes. */
|
/* Drop partially created indexes. */
|
||||||
row_merge_drop_temp_indexes();
|
row_merge_drop_temp_indexes();
|
||||||
/* Drop garbage tables. */
|
/* Drop garbage tables. */
|
||||||
if (!srv_57_truncate)
|
if (srv_safe_truncate)
|
||||||
row_mysql_drop_garbage_tables();
|
row_mysql_drop_garbage_tables();
|
||||||
|
|
||||||
/* Drop any auxiliary tables that were not dropped when the
|
/* Drop any auxiliary tables that were not dropped when the
|
||||||
|
@ -4403,7 +4403,7 @@ row_rename_table_for_mysql(
|
|||||||
goto funct_exit;
|
goto funct_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!table->is_temporary() && !srv_57_truncate) {
|
if (!table->is_temporary() && srv_safe_truncate) {
|
||||||
err = trx_undo_report_rename(trx, table);
|
err = trx_undo_report_rename(trx, table);
|
||||||
|
|
||||||
if (err != DB_SUCCESS) {
|
if (err != DB_SUCCESS) {
|
||||||
|
@ -152,9 +152,9 @@ my_bool srv_read_only_mode;
|
|||||||
/** store to its own file each table created by an user; data
|
/** store to its own file each table created by an user; data
|
||||||
dictionary tables are in the system tablespace 0 */
|
dictionary tables are in the system tablespace 0 */
|
||||||
my_bool srv_file_per_table;
|
my_bool srv_file_per_table;
|
||||||
/** whether to use the MySQL 5.7 WL#6501 TRUNCATE TABLE implementation
|
/** whether to use backup-safe TRUNCATE and crash-safe RENAME
|
||||||
that does not work with backup */
|
instead of the MySQL 5.7 WL#6501 TRUNCATE TABLE implementation */
|
||||||
my_bool srv_57_truncate;
|
my_bool srv_safe_truncate;
|
||||||
/** The file format to use on new *.ibd files. */
|
/** The file format to use on new *.ibd files. */
|
||||||
ulint srv_file_format;
|
ulint srv_file_format;
|
||||||
/** Whether to check file format during startup. A value of
|
/** Whether to check file format during startup. A value of
|
||||||
|
@ -1393,15 +1393,15 @@ srv_prepare_to_delete_redo_log_files(
|
|||||||
ulint pending_io = 0;
|
ulint pending_io = 0;
|
||||||
ulint count = 0;
|
ulint count = 0;
|
||||||
|
|
||||||
if (srv_57_truncate) {
|
if (srv_safe_truncate) {
|
||||||
if ((log_sys->log.format & ~LOG_HEADER_FORMAT_ENCRYPTED)
|
if ((log_sys->log.format & ~LOG_HEADER_FORMAT_ENCRYPTED)
|
||||||
!= LOG_HEADER_FORMAT_10_2) {
|
!= LOG_HEADER_FORMAT_10_3
|
||||||
|
|| log_sys->log.subformat != 1) {
|
||||||
srv_log_file_size = 0;
|
srv_log_file_size = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ((log_sys->log.format & ~LOG_HEADER_FORMAT_ENCRYPTED)
|
if ((log_sys->log.format & ~LOG_HEADER_FORMAT_ENCRYPTED)
|
||||||
!= LOG_HEADER_FORMAT_10_3
|
!= LOG_HEADER_FORMAT_10_2) {
|
||||||
|| log_sys->log.subformat != 1) {
|
|
||||||
srv_log_file_size = 0;
|
srv_log_file_size = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2399,16 +2399,16 @@ files_checked:
|
|||||||
} else if (srv_log_file_size_requested == srv_log_file_size
|
} else if (srv_log_file_size_requested == srv_log_file_size
|
||||||
&& srv_n_log_files_found == srv_n_log_files
|
&& srv_n_log_files_found == srv_n_log_files
|
||||||
&& log_sys->log.format
|
&& log_sys->log.format
|
||||||
== (srv_57_truncate
|
== (srv_safe_truncate
|
||||||
? (srv_encrypt_log
|
? (srv_encrypt_log
|
||||||
? LOG_HEADER_FORMAT_10_2
|
|
||||||
| LOG_HEADER_FORMAT_ENCRYPTED
|
|
||||||
: LOG_HEADER_FORMAT_10_2)
|
|
||||||
: (srv_encrypt_log
|
|
||||||
? LOG_HEADER_FORMAT_10_3
|
? LOG_HEADER_FORMAT_10_3
|
||||||
| LOG_HEADER_FORMAT_ENCRYPTED
|
| LOG_HEADER_FORMAT_ENCRYPTED
|
||||||
: LOG_HEADER_FORMAT_10_3))
|
: LOG_HEADER_FORMAT_10_3)
|
||||||
&& log_sys->log.subformat == !srv_57_truncate) {
|
: (srv_encrypt_log
|
||||||
|
? LOG_HEADER_FORMAT_10_2
|
||||||
|
| LOG_HEADER_FORMAT_ENCRYPTED
|
||||||
|
: LOG_HEADER_FORMAT_10_2))
|
||||||
|
&& log_sys->log.subformat == srv_safe_truncate) {
|
||||||
/* No need to add or remove encryption,
|
/* No need to add or remove encryption,
|
||||||
upgrade, downgrade, or resize. */
|
upgrade, downgrade, or resize. */
|
||||||
} else {
|
} else {
|
||||||
|
@ -1938,7 +1938,7 @@ trx_undo_report_rename(trx_t* trx, const dict_table_t* table)
|
|||||||
ut_ad(!trx->read_only);
|
ut_ad(!trx->read_only);
|
||||||
ut_ad(trx->id);
|
ut_ad(trx->id);
|
||||||
ut_ad(!table->is_temporary());
|
ut_ad(!table->is_temporary());
|
||||||
ut_ad(!srv_57_truncate);
|
ut_ad(srv_safe_truncate);
|
||||||
|
|
||||||
trx_rseg_t* rseg = trx->rsegs.m_redo.rseg;
|
trx_rseg_t* rseg = trx->rsegs.m_redo.rseg;
|
||||||
trx_undo_t** pundo = &trx->rsegs.m_redo.insert_undo;
|
trx_undo_t** pundo = &trx->rsegs.m_redo.insert_undo;
|
||||||
|
Reference in New Issue
Block a user