mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
Merge 10.2 into 10.3
This commit is contained in:
commit
c277bcd591
54 changed files with 262 additions and 316 deletions
|
@ -185,7 +185,7 @@ static uint opt_tail_lines= 0;
|
|||
|
||||
static uint opt_connect_timeout= 0;
|
||||
static uint opt_wait_for_pos_timeout= 0;
|
||||
|
||||
static const uint default_wait_for_pos_timeout= 300;
|
||||
static char delimiter[MAX_DELIMITER_LENGTH]= ";";
|
||||
static size_t delimiter_length= 1;
|
||||
|
||||
|
@ -5095,6 +5095,8 @@ void do_shutdown_server(struct st_command *command)
|
|||
};
|
||||
DBUG_ENTER("do_shutdown_server");
|
||||
|
||||
/* the wait-for-pos' default based value of 'timeout' must fit to MDEV-23511 */
|
||||
compile_time_assert(default_wait_for_pos_timeout / 5 >= 60);
|
||||
check_command_args(command, command->first_argument, shutdown_args,
|
||||
sizeof(shutdown_args)/sizeof(struct command_arg),
|
||||
' ');
|
||||
|
@ -7087,7 +7089,7 @@ static struct my_option my_long_options[] =
|
|||
{"wait_for_pos_timeout", 0,
|
||||
"Number of seconds to wait for master_pos_wait",
|
||||
&opt_wait_for_pos_timeout, &opt_wait_for_pos_timeout, 0, GET_UINT,
|
||||
REQUIRED_ARG, 300, 0, 3600 * 12, 0, 0, 0},
|
||||
REQUIRED_ARG, default_wait_for_pos_timeout, 0, 3600 * 12, 0, 0, 0},
|
||||
{"plugin_dir", 0, "Directory for client-side plugins.",
|
||||
&opt_plugin_dir, &opt_plugin_dir, 0,
|
||||
GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# ==== Usage ====
|
||||
#
|
||||
# [--let $shutdown_timeout= 30]
|
||||
# [--let $shutdown_timeout= 60]
|
||||
# [--let $allow_rpl_inited= 1]
|
||||
# --source include/restart_mysqld.inc
|
||||
|
||||
|
|
|
@ -47,8 +47,8 @@ if ($rpl_debug)
|
|||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
|
||||
# Send shutdown to the connected server and give
|
||||
# it 60 seconds to die before zapping it
|
||||
shutdown_server 60;
|
||||
# it 60 seconds (of mysqltest's default) to die before zapping it
|
||||
shutdown_server;
|
||||
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
# # Stop the server
|
||||
# let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
# --exec echo "wait" > $restart_file
|
||||
# --shutdown_server 10
|
||||
# --shutdown_server
|
||||
# --source include/wait_until_disconnected.inc
|
||||
#
|
||||
# --error 1
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
# ==== Usage ====
|
||||
#
|
||||
# [--let $shutdown_timeout= 30]
|
||||
# [--let $shutdown_timeout= 60]
|
||||
# [--let $allow_rpl_inited= 1]
|
||||
# --source include/shutdown_mysqld.inc
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
--source include/not_embedded.inc
|
||||
create server '' foreign data wrapper w2 options (host '127.0.0.1');
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ select @@global.Host_Cache_Size > 0;
|
|||
|
||||
let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
--exec echo "wait" > $restart_file
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
-- exec echo "restart:--host_cache_size=1 " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
|
@ -143,7 +143,7 @@ SELECT Host_Cache_Size = @@SESSION.Host_Cache_Size;
|
|||
|
||||
#let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
#--exec echo "wait" > $restart_file
|
||||
#--shutdown_server 10
|
||||
#--shutdown_server
|
||||
#--source include/wait_until_disconnected.inc
|
||||
#-- exec echo "restart:--bind-address=$bind_ip " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
#-- enable_reconnect
|
||||
|
|
|
@ -15,7 +15,7 @@ EOF
|
|||
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--exec echo "restart:--init-file=$MYSQLTEST_VARDIR/init.file " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
|
|
@ -31,7 +31,7 @@
|
|||
--echo # and slow query log file.
|
||||
# Restart server with fifo file as general log file.
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--shutdown_server 60
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
--enable_reconnect
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
|
|
|
@ -41,7 +41,7 @@ RESET MASTER;
|
|||
|
||||
# 1. Stop master server
|
||||
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- shutdown_server 10
|
||||
-- shutdown_server
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
||||
# 2. Prepare log and index file
|
||||
|
@ -70,7 +70,7 @@ FLUSH LOGS;
|
|||
|
||||
# 1. Stop the server
|
||||
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- shutdown_server 10
|
||||
-- shutdown_server
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
||||
# 2. Undo changes to index and log files
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
--enable_reconnect
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@ alter table t1 add primary key (pk);
|
|||
--echo # Stop the server, replace the frm with the old one and restart the server
|
||||
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--remove_file $datadir/test/t1.frm
|
||||
|
|
|
@ -50,7 +50,7 @@ SELECT * FROM bug_60196;
|
|||
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
# Send a shutdown request to the server
|
||||
-- shutdown_server 10
|
||||
-- shutdown_server
|
||||
|
||||
# Call script that will poll the server waiting for it to disapear
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
@ -124,7 +124,7 @@ SELECT * FROM Bug_60309;
|
|||
-- exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
||||
# Send a shutdown request to the server
|
||||
-- shutdown_server 10
|
||||
-- shutdown_server
|
||||
|
||||
# Call script that will poll the server waiting for it to disapear
|
||||
-- source include/wait_until_disconnected.inc
|
||||
|
|
|
@ -150,7 +150,7 @@ show all slaves status;
|
|||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.3.expect
|
||||
restart
|
||||
EOF
|
||||
--shutdown_server 60
|
||||
--shutdown_server
|
||||
--source include/wait_until_connected_again.inc
|
||||
--source include/wait_for_slave_to_start.inc
|
||||
set default_master_connection = 'MASTER 2.2';
|
||||
|
|
|
@ -10,7 +10,7 @@ flush tables;
|
|||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 60
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
--enable_reconnect
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
|
|
@ -626,7 +626,7 @@ SELECT * FROM t1 WHERE a >= 30 ORDER BY a;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
wait
|
||||
EOF
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--remove_file $datadir/master-bin.state
|
||||
|
|
|
@ -29,7 +29,7 @@ CHANGE MASTER TO master_use_gtid=current_pos;
|
|||
wait
|
||||
EOF
|
||||
FLUSH LOGS;
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--connection server_1
|
||||
|
@ -70,7 +70,7 @@ SHOW BINLOG EVENTS IN 'master-bin.000004' LIMIT 1,1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
|
@ -103,7 +103,7 @@ SELECT * FROM t1 ORDER BY a;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
|
@ -148,7 +148,7 @@ SELECT * FROM t1 ORDER BY a;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
|
@ -191,7 +191,7 @@ SET sql_log_bin= 1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
|
@ -221,7 +221,7 @@ SELECT * FROM t1 ORDER BY a;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
|
@ -237,7 +237,7 @@ SET sql_log_bin= 1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
|
@ -273,7 +273,7 @@ SELECT domain_id, COUNT(*) FROM mysql.gtid_slave_pos GROUP BY domain_id;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
|
@ -305,7 +305,7 @@ SET sql_log_bin=1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
# Let the slave mysqld server start again.
|
||||
|
|
|
@ -57,7 +57,7 @@ SET sql_log_bin=1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--connection server_1
|
||||
|
@ -96,7 +96,7 @@ SET sql_log_bin=1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--connection server_1
|
||||
|
@ -134,7 +134,7 @@ SET sql_log_bin=1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--connection server_1
|
||||
|
@ -178,7 +178,7 @@ SET sql_log_bin=1;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--connection server_1
|
||||
|
@ -275,7 +275,7 @@ while (!$done)
|
|||
wait
|
||||
EOF
|
||||
--connection server_2
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--echo *** Restart the slave server to prove 'gtid_slave_pos_innodb' autodiscovery ***
|
||||
|
|
|
@ -208,7 +208,7 @@ SELECT * FROM `db1``; select 'oops!'`.`t``1` ORDER BY 1;
|
|||
wait-rpl_mdev382.test
|
||||
EOF
|
||||
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
|
||||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
restart-rpl_mdev382.test
|
||||
|
|
|
@ -42,7 +42,7 @@ ALTER TABLE `E` REMOVE PARTITIONING;
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
--connection default
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
|
|
@ -46,7 +46,7 @@ wait
|
|||
EOF
|
||||
|
||||
--enable_reconnect
|
||||
--shutdown_server 60
|
||||
--shutdown_server
|
||||
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
restart
|
||||
EOF
|
||||
--shutdown_server 60
|
||||
--shutdown_server
|
||||
--source include/wait_until_connected_again.inc
|
||||
|
||||
|
||||
|
|
|
@ -1623,7 +1623,7 @@ dict_create_or_check_foreign_constraint_tables(void)
|
|||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
srv_file_per_table = srv_file_per_table_backup;
|
||||
|
||||
|
@ -1724,7 +1724,7 @@ dict_create_or_check_sys_virtual()
|
|||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
srv_file_per_table = srv_file_per_table_backup;
|
||||
|
||||
|
@ -2257,7 +2257,7 @@ dict_create_or_check_sys_tablespace(void)
|
|||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
srv_file_per_table = srv_file_per_table_backup;
|
||||
|
||||
|
|
|
@ -438,7 +438,7 @@ dict_table_try_drop_aborted(
|
|||
}
|
||||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
/**********************************************************************//**
|
||||
|
@ -2077,7 +2077,7 @@ dict_table_remove_from_cache_low(
|
|||
row_merge_drop_indexes_dict(trx, table->id);
|
||||
trx_commit_for_mysql(trx);
|
||||
trx->dict_operation_lock_mode = 0;
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
/* Free virtual column template if any */
|
||||
|
|
|
@ -902,7 +902,7 @@ dict_update_filepath(
|
|||
|
||||
trx_commit_for_mysql(trx);
|
||||
trx->dict_operation_lock_mode = 0;
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
if (UNIV_LIKELY(err == DB_SUCCESS)) {
|
||||
/* We just updated SYS_DATAFILES due to the contents in
|
||||
|
@ -964,7 +964,7 @@ dict_replace_tablespace_and_filepath(
|
|||
|
||||
trx_commit_for_mysql(trx);
|
||||
trx->dict_operation_lock_mode = 0;
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(err);
|
||||
}
|
||||
|
|
|
@ -326,7 +326,7 @@ dict_stats_exec_sql(
|
|||
}
|
||||
|
||||
if (trx_started) {
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
return(err);
|
||||
|
@ -2577,7 +2577,7 @@ dict_stats_save(
|
|||
trx_commit_for_mysql(trx);
|
||||
|
||||
end:
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
rw_lock_x_unlock(&dict_operation_lock);
|
||||
|
@ -3053,7 +3053,7 @@ dict_stats_fetch_from_ps(
|
|||
|
||||
trx_commit_for_mysql(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
if (!index_fetch_arg.stats_were_modified) {
|
||||
return(DB_STATS_DO_NOT_EXIST);
|
||||
|
|
|
@ -532,7 +532,7 @@ cleanup:
|
|||
}
|
||||
|
||||
que_graph_free(graph);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
ret = true;
|
||||
goto cleanup;
|
||||
}
|
||||
|
@ -2724,7 +2724,7 @@ func_exit:
|
|||
}
|
||||
}
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
@ -2799,7 +2799,7 @@ fts_update_sync_doc_id(
|
|||
|
||||
fts_sql_rollback(trx);
|
||||
}
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
return(error);
|
||||
|
@ -3029,7 +3029,7 @@ fts_commit_table(
|
|||
|
||||
fts_sql_commit(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
@ -3819,7 +3819,7 @@ fts_doc_fetch_by_doc_id(
|
|||
|
||||
error = fts_eval_sql(trx, graph);
|
||||
fts_sql_commit(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
if (!get_doc) {
|
||||
fts_que_graph_free(graph);
|
||||
|
@ -4212,9 +4212,9 @@ fts_sync_commit(
|
|||
<< " ins/sec";
|
||||
}
|
||||
|
||||
/* Avoid assertion in trx_free(). */
|
||||
/* Avoid assertion in trx_t::free(). */
|
||||
trx->dict_operation_lock_mode = 0;
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
@ -4266,9 +4266,9 @@ fts_sync_rollback(
|
|||
|
||||
fts_sql_rollback(trx);
|
||||
|
||||
/* Avoid assertion in trx_free(). */
|
||||
/* Avoid assertion in trx_t::free(). */
|
||||
trx->dict_operation_lock_mode = 0;
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
/** Run SYNC on the table, i.e., write out data from the cache to the
|
||||
|
@ -4980,7 +4980,7 @@ fts_get_rows_count(
|
|||
|
||||
fts_que_graph_free(graph);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(count);
|
||||
}
|
||||
|
@ -5006,7 +5006,7 @@ fts_update_max_cache_size(
|
|||
|
||||
fts_sql_commit(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
#endif /* FTS_CACHE_SIZE_DEBUG */
|
||||
|
||||
|
@ -6220,14 +6220,12 @@ fts_rename_aux_tables_to_hex_format_low(
|
|||
<< table->name << ". Please revert"
|
||||
" manually.";
|
||||
fts_sql_rollback(trx_bg);
|
||||
trx_free(trx_bg);
|
||||
/* Continue to clear aux tables' flags2 */
|
||||
not_rename = true;
|
||||
continue;
|
||||
} else {
|
||||
fts_sql_commit(trx_bg);
|
||||
}
|
||||
|
||||
fts_sql_commit(trx_bg);
|
||||
trx_free(trx_bg);
|
||||
trx_bg->free();
|
||||
}
|
||||
|
||||
DICT_TF2_FLAG_UNSET(parent_table, DICT_TF2_FTS_AUX_HEX_NAME);
|
||||
|
@ -6469,12 +6467,12 @@ fts_rename_aux_tables_to_hex_format(
|
|||
fts_parent_all_index_set_corrupt(trx_corrupt, parent_table);
|
||||
trx_corrupt->dict_operation_lock_mode = 0;
|
||||
fts_sql_commit(trx_corrupt);
|
||||
trx_free(trx_corrupt);
|
||||
trx_corrupt->free();
|
||||
} else {
|
||||
fts_sql_commit(trx_rename);
|
||||
}
|
||||
|
||||
trx_free(trx_rename);
|
||||
trx_rename->free();
|
||||
ib_vector_reset(aux_tables);
|
||||
}
|
||||
|
||||
|
@ -6553,7 +6551,7 @@ fts_drop_obsolete_aux_table_from_vector(
|
|||
fts_sql_commit(trx_drop);
|
||||
}
|
||||
|
||||
trx_free(trx_drop);
|
||||
trx_drop->free();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7047,7 +7045,7 @@ fts_drop_orphaned_tables(void)
|
|||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
if (heap != NULL) {
|
||||
mem_heap_free(heap);
|
||||
|
@ -7224,7 +7222,7 @@ cleanup:
|
|||
fts_sql_rollback(trx);
|
||||
}
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
if (!cache->stopword_info.cached_stopword) {
|
||||
|
|
|
@ -1008,7 +1008,7 @@ fts_table_fetch_doc_ids(
|
|||
}
|
||||
|
||||
if (alloc_bk_trx) {
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
return(error);
|
||||
|
@ -1710,7 +1710,8 @@ fts_optimize_free(
|
|||
mem_heap_t* heap = static_cast<mem_heap_t*>(optim->self_heap->arg);
|
||||
|
||||
trx_commit_for_mysql(optim->trx);
|
||||
trx_free(optim->trx);
|
||||
optim->trx->free();
|
||||
optim->trx = NULL;
|
||||
|
||||
fts_doc_ids_free(optim->to_delete);
|
||||
fts_optimize_graph_free(&optim->graph);
|
||||
|
|
|
@ -4121,7 +4121,7 @@ fts_query(
|
|||
func_exit:
|
||||
fts_query_free(&query);
|
||||
|
||||
trx_free(query_trx);
|
||||
query_trx->free();
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
|
|
@ -2739,18 +2739,6 @@ trx_is_registered_for_2pc(
|
|||
return(trx->is_registered == 1);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Note that innobase_commit_ordered() was run. */
|
||||
static inline
|
||||
void
|
||||
trx_set_active_commit_ordered(
|
||||
/*==========================*/
|
||||
trx_t* trx) /* in: transaction */
|
||||
{
|
||||
ut_a(trx_is_registered_for_2pc(trx));
|
||||
trx->active_commit_ordered = 1;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Note that a transaction has been registered with MySQL 2PC coordinator. */
|
||||
static inline
|
||||
|
@ -2760,7 +2748,7 @@ trx_register_for_2pc(
|
|||
trx_t* trx) /* in: transaction */
|
||||
{
|
||||
trx->is_registered = 1;
|
||||
ut_ad(trx->active_commit_ordered == 0);
|
||||
ut_ad(!trx->active_commit_ordered);
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
|
@ -2771,19 +2759,8 @@ trx_deregister_from_2pc(
|
|||
/*====================*/
|
||||
trx_t* trx) /* in: transaction */
|
||||
{
|
||||
trx->is_registered = 0;
|
||||
trx->active_commit_ordered = 0;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
Check whether a transaction has active_commit_ordered set */
|
||||
static inline
|
||||
bool
|
||||
trx_is_active_commit_ordered(
|
||||
/*=========================*/
|
||||
const trx_t* trx) /* in: transaction */
|
||||
{
|
||||
return(trx->active_commit_ordered == 1);
|
||||
trx->is_registered= false;
|
||||
trx->active_commit_ordered= false;
|
||||
}
|
||||
|
||||
/*********************************************************************//**
|
||||
|
@ -4280,9 +4257,8 @@ innobase_end(handlerton*, ha_panic_function)
|
|||
if (srv_was_started) {
|
||||
THD *thd= current_thd;
|
||||
if (thd) { // may be UNINSTALL PLUGIN statement
|
||||
trx_t* trx = thd_to_trx(thd);
|
||||
if (trx) {
|
||||
trx_free(trx);
|
||||
if (trx_t* trx = thd_to_trx(thd)) {
|
||||
trx->free();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4511,8 +4487,7 @@ innobase_commit_ordered(
|
|||
(!thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)));
|
||||
|
||||
innobase_commit_ordered_2(trx, thd);
|
||||
|
||||
trx_set_active_commit_ordered(trx);
|
||||
trx->active_commit_ordered = true;
|
||||
|
||||
DBUG_VOID_RETURN;
|
||||
}
|
||||
|
@ -4565,7 +4540,7 @@ innobase_commit(
|
|||
DBUG_SUICIDE(););
|
||||
|
||||
/* Run the fast part of commit if we did not already. */
|
||||
if (!trx_is_active_commit_ordered(trx)) {
|
||||
if (!trx->active_commit_ordered) {
|
||||
innobase_commit_ordered_2(trx, thd);
|
||||
|
||||
}
|
||||
|
@ -5045,7 +5020,7 @@ innobase_close_connection(
|
|||
} else {
|
||||
rollback_and_free:
|
||||
innobase_rollback_trx(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -5083,7 +5058,7 @@ static void innobase_kill_query(handlerton*, THD* thd, enum thd_kill_levels)
|
|||
|
||||
trx_t::state changes are protected by trx_t::mutex, and
|
||||
trx_sys.trx_list is protected by trx_sys.mutex, in
|
||||
both trx_create() and trx_free().
|
||||
both trx_create() and trx_t::free().
|
||||
|
||||
At this point, trx may have been reallocated for another client
|
||||
connection, or for a background operation. In that case, either
|
||||
|
@ -12726,7 +12701,7 @@ create_table_info_t::create_table_update_dict()
|
|||
if (!innobase_fts_load_stopword(innobase_table, NULL, m_thd)) {
|
||||
dict_table_close(innobase_table, FALSE, FALSE);
|
||||
srv_active_wake_master_thread();
|
||||
trx_free(m_trx);
|
||||
m_trx->free();
|
||||
DBUG_RETURN(-1);
|
||||
}
|
||||
|
||||
|
@ -12854,7 +12829,7 @@ ha_innobase::create(
|
|||
trx_rollback_for_mysql(trx);
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
if (own_trx) {
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
DBUG_RETURN(error);
|
||||
}
|
||||
|
@ -12863,7 +12838,7 @@ ha_innobase::create(
|
|||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
if (own_trx) {
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
/* Flush the log to reduce probability that the .frm files and
|
||||
|
@ -13206,7 +13181,7 @@ inline int ha_innobase::delete_table(const char* name, enum_sql_command sqlcom)
|
|||
|
||||
innobase_commit_low(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
DBUG_RETURN(convert_error_code_to_mysql(err, 0, NULL));
|
||||
}
|
||||
|
@ -13306,7 +13281,7 @@ innobase_drop_database(
|
|||
|
||||
innobase_commit_low(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
/** Rename an InnoDB table.
|
||||
|
@ -13513,7 +13488,7 @@ int ha_innobase::truncate()
|
|||
|| dict_table_is_file_per_table(ib_table), trx);
|
||||
}
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
if (!err) {
|
||||
/* Reopen the newly created table, and drop the
|
||||
|
@ -13576,7 +13551,7 @@ ha_innobase::rename_table(
|
|||
|
||||
innobase_commit_low(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
if (error == DB_SUCCESS) {
|
||||
char norm_from[MAX_FULL_NAME_LEN];
|
||||
|
@ -17172,7 +17147,7 @@ innobase_commit_by_xid(
|
|||
ut_ad(trx->mysql_thd == NULL);
|
||||
trx_deregister_from_2pc(trx);
|
||||
ut_ad(!trx->will_lock); /* trx cache requirement */
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(XA_OK);
|
||||
} else {
|
||||
|
@ -17207,7 +17182,7 @@ int innobase_rollback_by_xid(handlerton* hton, XID* xid)
|
|||
int ret = innobase_rollback_trx(trx);
|
||||
trx_deregister_from_2pc(trx);
|
||||
ut_ad(!trx->will_lock);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(ret);
|
||||
} else {
|
||||
|
|
|
@ -3095,7 +3095,7 @@ online_retry_drop_indexes(
|
|||
online_retry_drop_indexes_low(table, trx);
|
||||
trx_commit_for_mysql(trx);
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
ut_d(mutex_enter(&dict_sys->mutex));
|
||||
|
@ -6016,7 +6016,7 @@ err_exit:
|
|||
if (ctx->trx) {
|
||||
row_mysql_unlock_data_dictionary(ctx->trx);
|
||||
|
||||
trx_free(ctx->trx);
|
||||
ctx->trx->free();
|
||||
}
|
||||
trx_commit_for_mysql(ctx->prebuilt->trx);
|
||||
|
||||
|
@ -7446,7 +7446,8 @@ rollback_inplace_alter_table(
|
|||
|
||||
trx_commit_for_mysql(ctx->trx);
|
||||
row_mysql_unlock_data_dictionary(ctx->trx);
|
||||
trx_free(ctx->trx);
|
||||
ctx->trx->free();
|
||||
ctx->trx = NULL;
|
||||
|
||||
func_exit:
|
||||
#ifndef DBUG_OFF
|
||||
|
@ -9823,7 +9824,7 @@ foreign_fail:
|
|||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
if (trx != ctx0->trx) {
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
DBUG_RETURN(true);
|
||||
}
|
||||
|
@ -9842,7 +9843,8 @@ foreign_fail:
|
|||
= static_cast<ha_innobase_inplace_ctx*>(*pctx);
|
||||
|
||||
if (ctx->trx) {
|
||||
trx_free(ctx->trx);
|
||||
ctx->trx->free();
|
||||
ctx->trx = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -9878,7 +9880,7 @@ foreign_fail:
|
|||
}
|
||||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
MONITOR_ATOMIC_DEC(MONITOR_PENDING_ALTER_TABLE);
|
||||
DBUG_RETURN(false);
|
||||
}
|
||||
|
@ -10009,7 +10011,7 @@ foreign_fail:
|
|||
}
|
||||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
/* TODO: The following code could be executed
|
||||
while allowing concurrent access to the table
|
||||
|
|
|
@ -2901,7 +2901,7 @@ i_s_fts_deleted_generic_fill(
|
|||
|
||||
rw_lock_s_unlock(&dict_operation_lock);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
fields = table->field;
|
||||
|
||||
|
@ -3481,7 +3481,7 @@ i_s_fts_index_table_fill_selected(
|
|||
que_graph_free(graph);
|
||||
mutex_exit(&dict_sys->mutex);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
if (fetch.total_memory >= fts_result_cache_limit) {
|
||||
error = DB_FTS_EXCEED_RESULT_CACHE_LIMIT;
|
||||
|
@ -3968,7 +3968,7 @@ no_fts:
|
|||
|
||||
rw_lock_s_unlock(&dict_operation_lock);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
DBUG_RETURN(ret);
|
||||
}
|
||||
|
|
|
@ -566,7 +566,7 @@ public:
|
|||
Releases LF_HASH pins.
|
||||
|
||||
Must be called by thread that owns trx_t object when the latter is being
|
||||
"detached" from thread (e.g. released to the pool by trx_free()). Can be
|
||||
"detached" from thread (e.g. released to the pool by trx_t::free()). Can be
|
||||
called earlier if thread is expected not to use rw_trx_hash.
|
||||
|
||||
Since pins are not allowed to be transferred to another thread,
|
||||
|
|
|
@ -68,27 +68,18 @@ trx_get_error_info(
|
|||
/*===============*/
|
||||
const trx_t* trx); /*!< in: trx object */
|
||||
|
||||
/** @return a trx_t instance from trx_pools. */
|
||||
/** @return an allocated transaction */
|
||||
trx_t *trx_create();
|
||||
|
||||
/**
|
||||
Release a trx_t instance back to the pool.
|
||||
@param trx the instance to release.
|
||||
*/
|
||||
void trx_free(trx_t*& trx);
|
||||
|
||||
/** At shutdown, frees a transaction object. */
|
||||
void
|
||||
trx_free_at_shutdown(trx_t *trx);
|
||||
void trx_free_at_shutdown(trx_t *trx);
|
||||
|
||||
/** Disconnect a prepared transaction from MySQL.
|
||||
@param[in,out] trx transaction */
|
||||
void
|
||||
trx_disconnect_prepared(trx_t* trx);
|
||||
void trx_disconnect_prepared(trx_t *trx);
|
||||
|
||||
/** Initialize (resurrect) transactions at startup. */
|
||||
void
|
||||
trx_lists_init_at_db_start();
|
||||
void trx_lists_init_at_db_start();
|
||||
|
||||
/*************************************************************//**
|
||||
Starts the transaction if it is not yet started. */
|
||||
|
@ -464,14 +455,6 @@ Check transaction state */
|
|||
ut_ad((t)->dict_operation == TRX_DICT_OP_NONE); \
|
||||
} while(0)
|
||||
|
||||
/** Check if transaction is in-active so that it can be freed and put back to
|
||||
transaction pool.
|
||||
@param t transaction handle */
|
||||
#define assert_trx_is_inactive(t) do { \
|
||||
assert_trx_is_free((t)); \
|
||||
ut_ad((t)->dict_operation_lock_mode == 0); \
|
||||
} while(0)
|
||||
|
||||
#ifdef UNIV_DEBUG
|
||||
/*******************************************************************//**
|
||||
Assert that an autocommit non-locking select cannot be in the
|
||||
|
@ -875,7 +858,8 @@ public:
|
|||
the coordinator using the XA API, and
|
||||
is set to false after commit or
|
||||
rollback. */
|
||||
unsigned active_commit_ordered:1;/* 1 if owns prepare mutex */
|
||||
/** whether this is holding the prepare mutex */
|
||||
bool active_commit_ordered;
|
||||
/*------------------------------*/
|
||||
bool check_unique_secondary;
|
||||
/*!< normally TRUE, but if the user
|
||||
|
@ -1146,6 +1130,9 @@ public:
|
|||
ut_ad(old_n_ref > 0);
|
||||
}
|
||||
|
||||
/** Free the memory to trx_pools */
|
||||
void free();
|
||||
|
||||
|
||||
private:
|
||||
/** Assign a rollback segment for modifying temporary tables.
|
||||
|
|
|
@ -87,14 +87,6 @@ struct Pool {
|
|||
for (Element* elem = m_start; elem != m_last; ++elem) {
|
||||
|
||||
ut_ad(elem->m_pool == this);
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
/* Unpoison the memory for AddressSanitizer */
|
||||
MEM_MAKE_ADDRESSABLE(&elem->m_type,
|
||||
sizeof elem->m_type);
|
||||
#endif
|
||||
/* Declare the contents initialized;
|
||||
we checked this in mem_free(). */
|
||||
MEM_MAKE_DEFINED(&elem->m_type, sizeof elem->m_type);
|
||||
Factory::destroy(&elem->m_type);
|
||||
}
|
||||
|
||||
|
@ -129,21 +121,6 @@ struct Pool {
|
|||
elem = NULL;
|
||||
}
|
||||
|
||||
#if defined HAVE_valgrind || defined __SANITIZE_ADDRESS__
|
||||
if (elem) {
|
||||
# ifdef __SANITIZE_ADDRESS__
|
||||
/* Unpoison the memory for AddressSanitizer */
|
||||
MEM_MAKE_ADDRESSABLE(&elem->m_type,
|
||||
sizeof elem->m_type);
|
||||
# endif
|
||||
/* Declare the memory initialized.
|
||||
The trx_t that are released to the pool are
|
||||
actually initialized; we checked that by
|
||||
MEM_CHECK_DEFINED() in mem_free() below. */
|
||||
MEM_MAKE_DEFINED(&elem->m_type, sizeof elem->m_type);
|
||||
}
|
||||
#endif
|
||||
|
||||
m_lock_strategy.exit();
|
||||
return elem ? &elem->m_type : NULL;
|
||||
}
|
||||
|
@ -156,12 +133,10 @@ struct Pool {
|
|||
byte* p = reinterpret_cast<byte*>(ptr + 1);
|
||||
|
||||
elem = reinterpret_cast<Element*>(p - sizeof(*elem));
|
||||
MEM_CHECK_DEFINED(&elem->m_type, sizeof elem->m_type);
|
||||
|
||||
elem->m_pool->m_lock_strategy.enter();
|
||||
|
||||
elem->m_pool->putl(elem);
|
||||
MEM_NOACCESS(&elem->m_type, sizeof elem->m_type);
|
||||
|
||||
elem->m_pool->m_lock_strategy.exit();
|
||||
}
|
||||
|
@ -184,9 +159,6 @@ private:
|
|||
void putl(Element* elem)
|
||||
{
|
||||
ut_ad(elem >= m_start && elem < m_last);
|
||||
|
||||
ut_ad(Factory::debug(&elem->m_type));
|
||||
|
||||
m_pqueue.push(elem);
|
||||
}
|
||||
|
||||
|
|
|
@ -1801,7 +1801,7 @@ exit:
|
|||
error = ins_ctx.btr_bulk->finish(error);
|
||||
UT_DELETE(ins_ctx.btr_bulk);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
mem_heap_free(heap);
|
||||
|
||||
|
|
|
@ -2178,7 +2178,7 @@ row_import_cleanup(
|
|||
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
prebuilt->trx->op_info = "";
|
||||
|
||||
|
|
|
@ -4071,7 +4071,7 @@ row_merge_drop_temp_indexes(void)
|
|||
|
||||
trx_commit_for_mysql(trx);
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2592,7 +2592,7 @@ row_drop_table_for_mysql_in_background(
|
|||
|
||||
trx_commit_for_mysql(trx);
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
@ -2773,7 +2773,7 @@ row_mysql_drop_garbage_tables()
|
|||
btr_pcur_close(&pcur);
|
||||
mtr.commit();
|
||||
row_mysql_unlock_data_dictionary(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
mem_heap_free(heap);
|
||||
}
|
||||
|
||||
|
@ -4613,7 +4613,7 @@ funct_exit:
|
|||
|
||||
trx_bg->dict_operation_lock_mode = 0;
|
||||
trx_commit_for_mysql(trx_bg);
|
||||
trx_free(trx_bg);
|
||||
trx_bg->free();
|
||||
}
|
||||
|
||||
if (table != NULL) {
|
||||
|
|
|
@ -613,7 +613,7 @@ row_truncate_update_sys_tables_during_fix_up(
|
|||
}
|
||||
|
||||
trx_commit_for_mysql(trx);
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
|
||||
return(err);
|
||||
}
|
||||
|
|
|
@ -191,7 +191,7 @@ void purge_sys_t::close()
|
|||
ut_ad(!trx->id);
|
||||
ut_ad(trx->state == TRX_STATE_ACTIVE);
|
||||
trx->state= TRX_STATE_NOT_STARTED;
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
rw_lock_free(&latch);
|
||||
mutex_free(&pq_mutex);
|
||||
os_event_destroy(event);
|
||||
|
|
|
@ -835,7 +835,7 @@ discard:
|
|||
trx_free_at_shutdown(trx);
|
||||
}
|
||||
else
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -112,7 +112,7 @@ trx_init(
|
|||
|
||||
trx->op_info = "";
|
||||
|
||||
trx->active_commit_ordered = 0;
|
||||
trx->active_commit_ordered = false;
|
||||
|
||||
trx->isolation_level = TRX_ISO_REPEATABLE_READ;
|
||||
|
||||
|
@ -211,6 +211,15 @@ struct TrxFactory {
|
|||
@param trx the transaction for which to release resources */
|
||||
static void destroy(trx_t* trx)
|
||||
{
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
/* Unpoison the memory for AddressSanitizer */
|
||||
MEM_MAKE_ADDRESSABLE(trx, sizeof *trx);
|
||||
#else
|
||||
/* Declare the contents as initialized for Valgrind;
|
||||
we checked this in trx_t::free(). */
|
||||
MEM_MAKE_DEFINED(trx, sizeof *trx);
|
||||
#endif
|
||||
|
||||
ut_a(trx->magic_n == TRX_MAGIC_N);
|
||||
ut_ad(!trx->mysql_thd);
|
||||
|
||||
|
@ -238,36 +247,6 @@ struct TrxFactory {
|
|||
|
||||
trx->read_view.~ReadView();
|
||||
}
|
||||
|
||||
/** Enforce any invariants here, this is called before the transaction
|
||||
is added to the pool.
|
||||
@return true if all OK */
|
||||
static bool debug(const trx_t* trx)
|
||||
{
|
||||
ut_a(trx->error_state == DB_SUCCESS);
|
||||
|
||||
ut_a(trx->magic_n == TRX_MAGIC_N);
|
||||
|
||||
ut_ad(!trx->read_only);
|
||||
|
||||
ut_ad(trx->state == TRX_STATE_NOT_STARTED);
|
||||
|
||||
ut_ad(trx->dict_operation == TRX_DICT_OP_NONE);
|
||||
|
||||
ut_ad(trx->mysql_thd == 0);
|
||||
|
||||
ut_a(trx->lock.wait_thr == NULL);
|
||||
ut_a(trx->lock.wait_lock == NULL);
|
||||
ut_a(trx->dict_operation_lock_mode == 0);
|
||||
|
||||
ut_a(UT_LIST_GET_LEN(trx->lock.trx_locks) == 0);
|
||||
|
||||
ut_ad(trx->autoinc_locks == NULL);
|
||||
|
||||
ut_ad(trx->lock.table_locks.empty());
|
||||
|
||||
return(true);
|
||||
}
|
||||
};
|
||||
|
||||
/** The lock strategy for TrxPool */
|
||||
|
@ -344,11 +323,23 @@ trx_pool_close()
|
|||
trx_pools = 0;
|
||||
}
|
||||
|
||||
/** @return a trx_t instance from trx_pools. */
|
||||
/** @return an allocated transaction */
|
||||
trx_t *trx_create()
|
||||
{
|
||||
trx_t* trx = trx_pools->get();
|
||||
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
/* Unpoison the memory for AddressSanitizer.
|
||||
It may have been poisoned in trx_t::free().*/
|
||||
MEM_MAKE_ADDRESSABLE(trx, sizeof *trx);
|
||||
#else
|
||||
/* Declare the memory initialized for Valgrind.
|
||||
The trx_t that are released to the pool are
|
||||
actually initialized; we checked that by
|
||||
MEM_CHECK_DEFINED() in trx_t::free(). */
|
||||
MEM_MAKE_DEFINED(trx, sizeof *trx);
|
||||
#endif
|
||||
|
||||
assert_trx_is_free(trx);
|
||||
|
||||
mem_heap_t* heap;
|
||||
|
@ -365,14 +356,9 @@ trx_t *trx_create()
|
|||
|
||||
alloc = ib_heap_allocator_create(heap);
|
||||
|
||||
/* Remember to free the vector explicitly in trx_free(). */
|
||||
trx->autoinc_locks = ib_vector_create(alloc, sizeof(void**), 4);
|
||||
|
||||
/* Should have been either just initialized or .clear()ed by
|
||||
trx_free(). */
|
||||
ut_ad(trx->mod_tables.empty());
|
||||
ut_ad(trx->lock.table_locks.empty());
|
||||
ut_ad(UT_LIST_GET_LEN(trx->lock.trx_locks) == 0);
|
||||
ut_ad(trx->lock.n_rec_locks == 0);
|
||||
ut_ad(trx->lock.table_cached == 0);
|
||||
ut_ad(trx->lock.rec_cached == 0);
|
||||
|
@ -386,88 +372,112 @@ trx_t *trx_create()
|
|||
return(trx);
|
||||
}
|
||||
|
||||
/**
|
||||
Release a trx_t instance back to the pool.
|
||||
@param trx the instance to release.
|
||||
*/
|
||||
void trx_free(trx_t*& trx)
|
||||
/** Free the memory to trx_pools */
|
||||
void trx_t::free()
|
||||
{
|
||||
ut_ad(!trx->declared_to_be_inside_innodb);
|
||||
ut_ad(!trx->n_mysql_tables_in_use);
|
||||
ut_ad(!trx->mysql_n_tables_locked);
|
||||
ut_ad(!trx->internal);
|
||||
MEM_CHECK_DEFINED(this, sizeof *this);
|
||||
|
||||
if (UNIV_UNLIKELY(trx->declared_to_be_inside_innodb)) {
|
||||
ib::error() << "Freeing a trx ("
|
||||
<< trx_get_id_for_print(trx) << ") which is declared"
|
||||
" to be processing inside InnoDB";
|
||||
ut_ad(!n_mysql_tables_in_use);
|
||||
ut_ad(!mysql_n_tables_locked);
|
||||
ut_ad(!internal);
|
||||
ut_ad(!declared_to_be_inside_innodb);
|
||||
ut_ad(!will_lock);
|
||||
ut_ad(error_state == DB_SUCCESS);
|
||||
ut_ad(magic_n == TRX_MAGIC_N);
|
||||
ut_ad(!read_only);
|
||||
ut_ad(!lock.wait_lock);
|
||||
|
||||
trx_print(stderr, trx, 600);
|
||||
putc('\n', stderr);
|
||||
dict_operation= TRX_DICT_OP_NONE;
|
||||
trx_sys.deregister_trx(this);
|
||||
assert_trx_is_free(this);
|
||||
trx_sys.rw_trx_hash.put_pins(this);
|
||||
|
||||
/* This is an error but not a fatal error. We must keep
|
||||
the counters like srv_conc.n_active accurate. */
|
||||
srv_conc_force_exit_innodb(trx);
|
||||
}
|
||||
mysql_thd= NULL;
|
||||
mysql_log_file_name= NULL;
|
||||
|
||||
if (trx->n_mysql_tables_in_use != 0
|
||||
|| trx->mysql_n_tables_locked != 0) {
|
||||
// FIXME: We need to avoid this heap free/alloc for each commit.
|
||||
if (autoinc_locks)
|
||||
{
|
||||
ut_ad(ib_vector_is_empty(autoinc_locks));
|
||||
/* We allocated a dedicated heap for the vector. */
|
||||
ib_vector_free(autoinc_locks);
|
||||
autoinc_locks= NULL;
|
||||
}
|
||||
|
||||
ib::error() << "MySQL is freeing a thd though"
|
||||
" trx->n_mysql_tables_in_use is "
|
||||
<< trx->n_mysql_tables_in_use
|
||||
<< " and trx->mysql_n_tables_locked is "
|
||||
<< trx->mysql_n_tables_locked << ".";
|
||||
mod_tables.clear();
|
||||
|
||||
trx_print(stderr, trx, 600);
|
||||
ut_print_buf(stderr, trx, sizeof(trx_t));
|
||||
putc('\n', stderr);
|
||||
}
|
||||
|
||||
trx->dict_operation = TRX_DICT_OP_NONE;
|
||||
assert_trx_is_inactive(trx);
|
||||
|
||||
trx_sys.deregister_trx(trx);
|
||||
|
||||
assert_trx_is_free(trx);
|
||||
|
||||
trx_sys.rw_trx_hash.put_pins(trx);
|
||||
trx->mysql_thd = 0;
|
||||
trx->mysql_log_file_name = 0;
|
||||
|
||||
// FIXME: We need to avoid this heap free/alloc for each commit.
|
||||
if (trx->autoinc_locks != NULL) {
|
||||
ut_ad(ib_vector_is_empty(trx->autoinc_locks));
|
||||
/* We allocated a dedicated heap for the vector. */
|
||||
ib_vector_free(trx->autoinc_locks);
|
||||
trx->autoinc_locks = NULL;
|
||||
}
|
||||
|
||||
trx->mod_tables.clear();
|
||||
|
||||
/* trx locking state should have been reset before returning trx
|
||||
to pool */
|
||||
ut_ad(trx->will_lock == 0);
|
||||
|
||||
trx_pools->mem_free(trx);
|
||||
#ifdef __SANITIZE_ADDRESS__
|
||||
/* Unpoison the memory for innodb_monitor_set_option;
|
||||
it is operating also on the freed transaction objects. */
|
||||
MEM_MAKE_ADDRESSABLE(&trx->mutex, sizeof trx->mutex);
|
||||
/* For innobase_kill_connection() */
|
||||
MEM_MAKE_ADDRESSABLE(&trx->state, sizeof trx->state);
|
||||
MEM_MAKE_ADDRESSABLE(&trx->mysql_thd, sizeof trx->mysql_thd);
|
||||
MEM_NOACCESS(&n_ref, sizeof n_ref);
|
||||
/* do not poison mutex */
|
||||
MEM_NOACCESS(&id, sizeof id);
|
||||
MEM_NOACCESS(&no, sizeof no);
|
||||
/* state is accessed by innobase_kill_connection() */
|
||||
MEM_NOACCESS(&is_recovered, sizeof is_recovered);
|
||||
#ifdef WITH_WSREP
|
||||
MEM_NOACCESS(&wsrep, sizeof wsrep);
|
||||
#endif
|
||||
/* Unpoison the memory for innodb_monitor_set_option;
|
||||
it is operating also on the freed transaction objects.
|
||||
We checked that these were initialized in
|
||||
trx_pools->mem_free(trx). */
|
||||
MEM_MAKE_DEFINED(&trx->mutex, sizeof trx->mutex);
|
||||
/* For innobase_kill_connection() */
|
||||
MEM_MAKE_DEFINED(&trx->state, sizeof trx->state);
|
||||
MEM_MAKE_DEFINED(&trx->mysql_thd, sizeof trx->mysql_thd);
|
||||
|
||||
trx = NULL;
|
||||
MEM_NOACCESS(&read_view, sizeof read_view);
|
||||
MEM_NOACCESS(&trx_list, sizeof trx_list);
|
||||
MEM_NOACCESS(&lock, sizeof lock);
|
||||
MEM_NOACCESS(&op_info, sizeof op_info);
|
||||
MEM_NOACCESS(&isolation_level, sizeof isolation_level);
|
||||
MEM_NOACCESS(&check_foreigns, sizeof check_foreigns);
|
||||
MEM_NOACCESS(&is_registered, sizeof is_registered);
|
||||
MEM_NOACCESS(&active_commit_ordered, sizeof active_commit_ordered);
|
||||
MEM_NOACCESS(&check_unique_secondary, sizeof check_unique_secondary);
|
||||
MEM_NOACCESS(&flush_log_later, sizeof flush_log_later);
|
||||
MEM_NOACCESS(&must_flush_log_later, sizeof must_flush_log_later);
|
||||
MEM_NOACCESS(&duplicates, sizeof duplicates);
|
||||
MEM_NOACCESS(&dict_operation, sizeof dict_operation);
|
||||
MEM_NOACCESS(&declared_to_be_inside_innodb, sizeof declared_to_be_inside_innodb);
|
||||
MEM_NOACCESS(&n_tickets_to_enter_innodb, sizeof n_tickets_to_enter_innodb);
|
||||
MEM_NOACCESS(&dict_operation_lock_mode, sizeof dict_operation_lock_mode);
|
||||
MEM_NOACCESS(&start_time, sizeof start_time);
|
||||
MEM_NOACCESS(&start_time_micro, sizeof start_time_micro);
|
||||
MEM_NOACCESS(&commit_lsn, sizeof commit_lsn);
|
||||
MEM_NOACCESS(&table_id, sizeof table_id);
|
||||
/* mysql_thd is accessed by innobase_kill_connection() */
|
||||
MEM_NOACCESS(&mysql_log_file_name, sizeof mysql_log_file_name);
|
||||
MEM_NOACCESS(&mysql_log_offset, sizeof mysql_log_offset);
|
||||
MEM_NOACCESS(&n_mysql_tables_in_use, sizeof n_mysql_tables_in_use);
|
||||
MEM_NOACCESS(&mysql_n_tables_locked, sizeof mysql_n_tables_locked);
|
||||
MEM_NOACCESS(&error_state, sizeof error_state);
|
||||
MEM_NOACCESS(&error_info, sizeof error_info);
|
||||
MEM_NOACCESS(&error_key_num, sizeof error_key_num);
|
||||
MEM_NOACCESS(&graph, sizeof graph);
|
||||
MEM_NOACCESS(&trx_savepoints, sizeof trx_savepoints);
|
||||
MEM_NOACCESS(&undo_no, sizeof undo_no);
|
||||
MEM_NOACCESS(&last_sql_stat_start, sizeof last_sql_stat_start);
|
||||
MEM_NOACCESS(&rsegs, sizeof rsegs);
|
||||
MEM_NOACCESS(&roll_limit, sizeof roll_limit);
|
||||
MEM_NOACCESS(&in_rollback, sizeof in_rollback);
|
||||
MEM_NOACCESS(&pages_undone, sizeof pages_undone);
|
||||
MEM_NOACCESS(&n_autoinc_rows, sizeof n_autoinc_rows);
|
||||
MEM_NOACCESS(&autoinc_locks, sizeof autoinc_locks);
|
||||
MEM_NOACCESS(&read_only, sizeof read_only);
|
||||
MEM_NOACCESS(&auto_commit, sizeof auto_commit);
|
||||
MEM_NOACCESS(&will_lock, sizeof will_lock);
|
||||
MEM_NOACCESS(&fts_trx, sizeof fts_trx);
|
||||
MEM_NOACCESS(&fts_next_doc_id, sizeof fts_next_doc_id);
|
||||
MEM_NOACCESS(&flush_tables, sizeof flush_tables);
|
||||
MEM_NOACCESS(&ddl, sizeof ddl);
|
||||
MEM_NOACCESS(&internal, sizeof internal);
|
||||
#ifdef UNIV_DEBUG
|
||||
MEM_NOACCESS(&start_line, sizeof start_line);
|
||||
MEM_NOACCESS(&start_file, sizeof start_file);
|
||||
#endif /* UNIV_DEBUG */
|
||||
MEM_NOACCESS(&xid, sizeof xid);
|
||||
MEM_NOACCESS(&mod_tables, sizeof mod_tables);
|
||||
MEM_NOACCESS(&detailed_error, sizeof detailed_error);
|
||||
MEM_NOACCESS(&flush_observer, sizeof flush_observer);
|
||||
MEM_NOACCESS(&n_rec_lock_waits, sizeof n_rec_lock_waits);
|
||||
MEM_NOACCESS(&n_table_lock_waits, sizeof n_table_lock_waits);
|
||||
MEM_NOACCESS(&total_rec_lock_wait_time, sizeof total_rec_lock_wait_time);
|
||||
MEM_NOACCESS(&total_table_lock_wait_time, sizeof total_table_lock_wait_time);
|
||||
#ifdef WITH_WSREP
|
||||
MEM_NOACCESS(&wsrep_event, sizeof wsrep_event);
|
||||
#endif /* WITH_WSREP */
|
||||
MEM_NOACCESS(&magic_n, sizeof magic_n);
|
||||
trx_pools->mem_free(this);
|
||||
}
|
||||
|
||||
/** Transition to committed state, to release implicit locks. */
|
||||
|
@ -537,8 +547,7 @@ trx_free_at_shutdown(trx_t *trx)
|
|||
trx->state = TRX_STATE_NOT_STARTED;
|
||||
ut_ad(!UT_LIST_GET_LEN(trx->lock.trx_locks));
|
||||
trx->id = 0;
|
||||
|
||||
trx_free(trx);
|
||||
trx->free();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -15,7 +15,7 @@ if ($rpl_inited)
|
|||
|
||||
# Send shutdown to the connected server and give
|
||||
# it 10 seconds to die before zapping it
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart:$_mysqld_option" > $_expect_file_name
|
||||
|
|
|
@ -41,7 +41,7 @@ perl;
|
|||
EOF
|
||||
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
|
||||
--error 1
|
||||
--exec $MYSQLD_CMD --plugin_load=$HA_ROCKSDB_SO --rocksdb_ignore_unknown_options=0 --log-error=$error_log
|
||||
|
|
|
@ -8,7 +8,7 @@ DROP TABLE IF EXISTS t1;
|
|||
# reload with load optimized config
|
||||
let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
--exec echo "wait" > $restart_file
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
-- exec echo "restart:--rocksdb_write_disable_wal=1 --rocksdb_flush_log_at_trx_commit=0 --rocksdb_default_cf_options=write_buffer_size=16k;target_file_size_base=16k;level0_file_num_compaction_trigger=4;level0_slowdown_writes_trigger=256;level0_stop_writes_trigger=256;max_write_buffer_number=16;compression_per_level=kNoCompression;memtable=vector:1024 --rocksdb_override_cf_options=__system__={memtable=skip_list:16} --rocksdb_compaction_sequential_deletes=0 --rocksdb_compaction_sequential_deletes_window=0 --rocksdb_allow_concurrent_memtable_write=0" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
|
@ -39,7 +39,7 @@ select count(*), sum(id), sum(i1), sum(i2) from t1;
|
|||
# reload without load optimized config
|
||||
let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
--exec echo "wait" > $restart_file
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
-- exec echo "restart:--rocksdb_write_disable_wal=0 --rocksdb_default_cf_options=write_buffer_size=64k;target_file_size_base=64k;max_bytes_for_level_base=1m;compression_per_level=kNoCompression;" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
|
|
|
@ -21,7 +21,7 @@ optimize table t1;
|
|||
#wiping block cache
|
||||
let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
--exec echo "wait" > $restart_file
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
-- exec echo "restart:--rocksdb_default_cf_options=write_buffer_size=64k;target_file_size_base=64k;max_bytes_for_level_base=1m;compression_per_level=kNoCompression;disable_auto_compactions=true;level0_stop_writes_trigger=1000 " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
|
|
|
@ -32,7 +32,7 @@ while ($t <= 6) {
|
|||
# Disable auto compaction so that effects of optimize table are stable
|
||||
let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
--exec echo "wait" > $restart_file
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
-- exec echo "restart:--rocksdb_default_cf_options=write_buffer_size=64k;target_file_size_base=64k;max_bytes_for_level_base=1m;compression_per_level=kNoCompression;disable_auto_compactions=true;level0_stop_writes_trigger=1000 " > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
|
|
|
@ -10,7 +10,7 @@ DROP TABLE IF EXISTS t1;
|
|||
--exec echo "wait" >$_expect_file_name
|
||||
|
||||
# restart server with correct parameters
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
--exec echo "restart:--rocksdb_persistent_cache_path=$_cache_file_name --rocksdb_persistent_cache_size_mb=100" >$_expect_file_name
|
||||
--sleep 5
|
||||
--enable_reconnect
|
||||
|
@ -28,7 +28,7 @@ select * from t1 where a = 1;
|
|||
|
||||
# restart server to re-read cache
|
||||
--exec echo "wait" >$_expect_file_name
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
--exec echo "restart:--rocksdb_persistent_cache_path=$_cache_file_name --rocksdb_persistent_cache_size_mb=100" >$_expect_file_name
|
||||
--sleep 5
|
||||
--enable_reconnect
|
||||
|
|
|
@ -23,7 +23,7 @@ while ($i <= $max) {
|
|||
# Restart the server
|
||||
let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
|
||||
--exec echo "wait" > $restart_file
|
||||
--shutdown_server 10
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
-- exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
||||
-- enable_reconnect
|
||||
|
|
|
@ -25,7 +25,7 @@ CREATE TABLE t2 (pk int primary key) ENGINE=ROCKSDB PARTITION BY KEY(pk) PARTITI
|
|||
|
||||
# Send shutdown to the connected server and give it 10 seconds to die before
|
||||
# zapping it
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
|
||||
# Write file to make mysql-test-run.pl start up the server again
|
||||
--exec echo "restart" >$_expect_file_name
|
||||
|
@ -42,7 +42,7 @@ shutdown_server 10;
|
|||
|
||||
# Now shut down again and rename one of the .frm files
|
||||
--exec echo "wait" >$_expect_file_name
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
|
||||
# Rename the file
|
||||
--move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm.tmp
|
||||
|
@ -70,7 +70,7 @@ shutdown_server 10;
|
|||
|
||||
# Now shut down again and rename one the .frm file back and make a copy of it
|
||||
--exec echo "wait" >$_expect_file_name
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
--remove_file $LOG
|
||||
# Rename the file
|
||||
--move_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm.tmp $MYSQLTEST_VARDIR/mysqld.1/data/test/t1.frm
|
||||
|
@ -92,7 +92,7 @@ shutdown_server 10;
|
|||
|
||||
# Shut down an clean up
|
||||
--exec echo "wait" >$_expect_file_name
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
--remove_file $MYSQLTEST_VARDIR/mysqld.1/data/test/t1_dummy.frm
|
||||
--exec echo "restart" >$_expect_file_name
|
||||
--enable_reconnect
|
||||
|
|
|
@ -155,7 +155,7 @@ SHOW STATUS LIKE "%transactions%engine";
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
# Restart without binary log.
|
||||
|
|
|
@ -13,7 +13,7 @@ SET @@global.rocksdb_rate_limiter_bytes_per_sec = 10000;
|
|||
|
||||
# Send shutdown to the connected server and give it 10 seconds to die before
|
||||
# zapping it
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
|
||||
# Attempt to restart the server with the rate limiter on
|
||||
--exec echo "restart:--rocksdb_rate_limiter_bytes_per_sec=10000" >$_expect_file_name
|
||||
|
@ -53,7 +53,7 @@ SET @@global.rocksdb_rate_limiter_bytes_per_sec = -1;
|
|||
|
||||
# Restart the server without the rate limiter
|
||||
--exec echo "wait" >$_expect_file_name
|
||||
shutdown_server 10;
|
||||
shutdown_server;
|
||||
--exec echo "restart" >$_expect_file_name
|
||||
--sleep 5
|
||||
|
||||
|
|
|
@ -155,7 +155,7 @@ SHOW STATUS LIKE "%transactions%engine";
|
|||
--write_file $MYSQLTEST_VARDIR/tmp/mysqld.2.expect
|
||||
wait
|
||||
EOF
|
||||
--shutdown_server 30
|
||||
--shutdown_server
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
# Restart without binary log.
|
||||
|
|
Loading…
Reference in a new issue