mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 04:22:27 +01:00
Merge 10.6 into 10.7
This commit is contained in:
commit
cac6f0a8c4
6 changed files with 47 additions and 24 deletions
|
@ -32,7 +32,7 @@ a
|
||||||
connection con1;
|
connection con1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
connection default;
|
connection default;
|
||||||
SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
|
SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info where table_name not like "innodb_%";
|
||||||
LOCK_MODE LOCK_TYPE TABLE_SCHEMA TABLE_NAME
|
LOCK_MODE LOCK_TYPE TABLE_SCHEMA TABLE_NAME
|
||||||
MDL_SHARED_HIGH_PRIO Table metadata lock test t1
|
MDL_SHARED_HIGH_PRIO Table metadata lock test t1
|
||||||
MDL_INTENTION_EXCLUSIVE Schema metadata lock test
|
MDL_INTENTION_EXCLUSIVE Schema metadata lock test
|
||||||
|
|
|
@ -39,7 +39,7 @@ let $wait_condition=
|
||||||
select count(*) = 1 from information_schema.processlist
|
select count(*) = 1 from information_schema.processlist
|
||||||
where state = "Waiting for table metadata lock";
|
where state = "Waiting for table metadata lock";
|
||||||
--source include/wait_condition.inc
|
--source include/wait_condition.inc
|
||||||
SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info;
|
SELECT LOCK_MODE, LOCK_TYPE, TABLE_SCHEMA, TABLE_NAME FROM information_schema.metadata_lock_info where table_name not like "innodb_%";
|
||||||
--error ER_LOCK_DEADLOCK
|
--error ER_LOCK_DEADLOCK
|
||||||
select * from t1;
|
select * from t1;
|
||||||
backup unlock;
|
backup unlock;
|
||||||
|
|
|
@ -5,6 +5,9 @@ call mtr.add_suppression("InnoDB: Plugin initialization aborted");
|
||||||
call mtr.add_suppression("Plugin 'InnoDB' init function returned error\\.");
|
call mtr.add_suppression("Plugin 'InnoDB' init function returned error\\.");
|
||||||
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
||||||
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=[1-9][0-9]*, page number=0\\] of corrupted file '.*test.t[1-5]\\.ibd'");
|
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=[1-9][0-9]*, page number=0\\] of corrupted file '.*test.t[1-5]\\.ibd'");
|
||||||
|
call mtr.add_suppression("InnoDB: Failed to read page .* from file '.*'");
|
||||||
|
call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch");
|
||||||
|
call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1 to ignore corruption");
|
||||||
# restart: --file-key-management-filename=MYSQL_TEST_DIR/std_data/keys2.txt
|
# restart: --file-key-management-filename=MYSQL_TEST_DIR/std_data/keys2.txt
|
||||||
SET GLOBAL innodb_file_per_table = ON;
|
SET GLOBAL innodb_file_per_table = ON;
|
||||||
create table t1(a int not null primary key auto_increment, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes encryption_key_id=20;
|
create table t1(a int not null primary key auto_increment, c char(200), b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes encryption_key_id=20;
|
||||||
|
|
|
@ -10,6 +10,9 @@ call mtr.add_suppression("InnoDB: Plugin initialization aborted");
|
||||||
call mtr.add_suppression("Plugin 'InnoDB' init function returned error\\.");
|
call mtr.add_suppression("Plugin 'InnoDB' init function returned error\\.");
|
||||||
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
call mtr.add_suppression("Plugin 'InnoDB' registration as a STORAGE ENGINE failed.");
|
||||||
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=[1-9][0-9]*, page number=0\\] of corrupted file '.*test.t[1-5]\\.ibd'");
|
call mtr.add_suppression("InnoDB: Cannot apply log to \\[page id: space=[1-9][0-9]*, page number=0\\] of corrupted file '.*test.t[1-5]\\.ibd'");
|
||||||
|
call mtr.add_suppression("InnoDB: Failed to read page .* from file '.*'");
|
||||||
|
call mtr.add_suppression("InnoDB: OPT_PAGE_CHECKSUM mismatch");
|
||||||
|
call mtr.add_suppression("InnoDB: Set innodb_force_recovery=1 to ignore corruption");
|
||||||
|
|
||||||
-- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt
|
-- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt
|
||||||
-- source include/restart_mysqld.inc
|
-- source include/restart_mysqld.inc
|
||||||
|
|
|
@ -515,7 +515,7 @@ public:
|
||||||
Sql_condition ** cond_hdl)
|
Sql_condition ** cond_hdl)
|
||||||
{
|
{
|
||||||
*cond_hdl= NULL;
|
*cond_hdl= NULL;
|
||||||
if (sql_errno == ER_OPEN_AS_READONLY)
|
if (sql_errno == ER_OPEN_AS_READONLY || sql_errno == ER_LOCK_WAIT_TIMEOUT)
|
||||||
{
|
{
|
||||||
handled_errors++;
|
handled_errors++;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -598,6 +598,23 @@ bool flush_tables(THD *thd, flush_tables_type flag)
|
||||||
tc_release_table(table);
|
tc_release_table(table);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
No free TABLE instances available. We have to open a new one.
|
||||||
|
|
||||||
|
Try to take a MDL lock to ensure we can open a new table instance.
|
||||||
|
If the lock fails, it means that some DDL operation or flush tables
|
||||||
|
with read lock is ongoing.
|
||||||
|
In this case we cannot sending the HA_EXTRA_FLUSH signal.
|
||||||
|
*/
|
||||||
|
|
||||||
|
MDL_request mdl_request;
|
||||||
|
MDL_REQUEST_INIT(&mdl_request, MDL_key::TABLE,
|
||||||
|
share->db.str,
|
||||||
|
share->table_name.str,
|
||||||
|
MDL_SHARED, MDL_EXPLICIT);
|
||||||
|
|
||||||
|
if (!thd->mdl_context.acquire_lock(&mdl_request, 0))
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
HA_OPEN_FOR_FLUSH is used to allow us to open the table even if
|
HA_OPEN_FOR_FLUSH is used to allow us to open the table even if
|
||||||
|
@ -619,6 +636,8 @@ bool flush_tables(THD *thd, flush_tables_type flag)
|
||||||
*/
|
*/
|
||||||
closefrm(tmp_table);
|
closefrm(tmp_table);
|
||||||
}
|
}
|
||||||
|
thd->mdl_context.release_lock(mdl_request.ticket);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
tdc_release_share(share);
|
tdc_release_share(share);
|
||||||
}
|
}
|
||||||
|
|
|
@ -946,17 +946,13 @@ bool recv_sys_t::recover_deferred(recv_sys_t::map::iterator &p,
|
||||||
(fil_space_t::zip_size(flags),
|
(fil_space_t::zip_size(flags),
|
||||||
page), size);
|
page), size);
|
||||||
if (!space)
|
if (!space)
|
||||||
{
|
goto release_and_fail;
|
||||||
block->page.lock.x_unlock();
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
space->free_limit= fsp_header_get_field(page, FSP_FREE_LIMIT);
|
space->free_limit= fsp_header_get_field(page, FSP_FREE_LIMIT);
|
||||||
space->free_len= flst_get_len(FSP_HEADER_OFFSET + FSP_FREE + page);
|
space->free_len= flst_get_len(FSP_HEADER_OFFSET + FSP_FREE + page);
|
||||||
block->page.lock.x_unlock();
|
|
||||||
fil_node_t *node= UT_LIST_GET_FIRST(space->chain);
|
fil_node_t *node= UT_LIST_GET_FIRST(space->chain);
|
||||||
node->deferred= true;
|
node->deferred= true;
|
||||||
if (!space->acquire())
|
if (!space->acquire())
|
||||||
goto fail;
|
goto release_and_fail;
|
||||||
fil_names_dirty(space);
|
fil_names_dirty(space);
|
||||||
const bool is_compressed= fil_space_t::is_compressed(flags);
|
const bool is_compressed= fil_space_t::is_compressed(flags);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
|
@ -973,14 +969,16 @@ bool recv_sys_t::recover_deferred(recv_sys_t::map::iterator &p,
|
||||||
~4095ULL, is_sparse))
|
~4095ULL, is_sparse))
|
||||||
{
|
{
|
||||||
space->release();
|
space->release();
|
||||||
goto fail;
|
goto release_and_fail;
|
||||||
}
|
}
|
||||||
node->deferred= false;
|
node->deferred= false;
|
||||||
space->release();
|
space->release();
|
||||||
it->second.space= space;
|
it->second.space= space;
|
||||||
|
block->page.lock.x_unlock();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
release_and_fail:
|
||||||
block->page.lock.x_unlock();
|
block->page.lock.x_unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue