Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
b2838f1a
Commit
b2838f1a
authored
Mar 02, 2010
by
Mattias Jonsson
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
manual merge fix of bug#42438 in mysql-next-mr-merge
parent
d73ab35e
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
28 additions
and
10 deletions
+28
-10
mysql-test/r/partition_debug_sync.result
mysql-test/r/partition_debug_sync.result
+11
-3
mysql-test/t/disabled.def
mysql-test/t/disabled.def
+0
-1
mysql-test/t/partition_debug_sync.test
mysql-test/t/partition_debug_sync.test
+11
-3
sql/sql_base.cc
sql/sql_base.cc
+2
-0
sql/sql_table.cc
sql/sql_table.cc
+4
-3
No files found.
mysql-test/r/partition_debug_sync.result
View file @
b2838f1a
...
@@ -4,6 +4,8 @@ SET DEBUG_SYNC= 'RESET';
...
@@ -4,6 +4,8 @@ SET DEBUG_SYNC= 'RESET';
# Bug#42438: Crash ha_partition::change_table_ptr
# Bug#42438: Crash ha_partition::change_table_ptr
# Test when remove partitioning is done while drop table is waiting
# Test when remove partitioning is done while drop table is waiting
# for the table.
# for the table.
# After MDL was introduced, there is no longer any race, so test is done
# by adding a small sleep to verify that the delete waits.
# Con 1
# Con 1
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC= 'RESET';
CREATE TABLE t1
CREATE TABLE t1
...
@@ -16,21 +18,25 @@ ENGINE = MYISAM
...
@@ -16,21 +18,25 @@ ENGINE = MYISAM
PARTITION p1 VALUES LESS THAN (20),
PARTITION p1 VALUES LESS THAN (20),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p3 VALUES LESS THAN MAXVALUE ) */;
PARTITION p3 VALUES LESS THAN MAXVALUE ) */;
SET SESSION debug= "+d,sleep_before_create_table_no_lock";
SET DEBUG_SYNC= 'alter_table_before_create_table_no_lock SIGNAL removing_partitioning WAIT_FOR waiting_for_alter';
SET DEBUG_SYNC= 'alter_table_before_create_table_no_lock SIGNAL removing_partitioning WAIT_FOR waiting_for_alter';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL partitioning_removed';
SET DEBUG_SYNC= 'alter_table_before_main_binlog SIGNAL partitioning_removed';
ALTER TABLE t1 REMOVE PARTITIONING;
ALTER TABLE t1 REMOVE PARTITIONING;
# Con default
# Con default
SET DEBUG_SYNC= 'now WAIT_FOR removing_partitioning';
SET DEBUG_SYNC= 'now WAIT_FOR removing_partitioning';
SET DEBUG_SYNC= '
waiting_for_table
SIGNAL waiting_for_alter';
SET DEBUG_SYNC= '
mdl_acquire_lock_wait
SIGNAL waiting_for_alter';
SET DEBUG_SYNC= 'rm_table_part2_before_delete_table WAIT_FOR partitioning_removed';
SET DEBUG_SYNC= 'rm_table_part2_before_delete_table WAIT_FOR partitioning_removed';
DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t1;
# Con 1
# Con 1
SET SESSION debug= "-d,sleep_before_create_table_no_lock";
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC= 'RESET';
#
#
# Bug#42438: Crash ha_partition::change_table_ptr
# Bug#42438: Crash ha_partition::change_table_ptr
# Test when remove partitioning is failing due to drop table is already
# Test when remove partitioning is failing due to drop table is already
# in progress.
# in progress.
# After MDL was introduced, there is no longer any race, so test is done
# by adding a small sleep to verify that the alter waits.
CREATE TABLE t2
CREATE TABLE t2
(a INTEGER,
(a INTEGER,
b INTEGER NOT NULL,
b INTEGER NOT NULL,
...
@@ -41,14 +47,16 @@ ENGINE = MYISAM
...
@@ -41,14 +47,16 @@ ENGINE = MYISAM
PARTITION p1 VALUES LESS THAN (20),
PARTITION p1 VALUES LESS THAN (20),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p3 VALUES LESS THAN MAXVALUE ) */;
PARTITION p3 VALUES LESS THAN MAXVALUE ) */;
SET DEBUG_SYNC= '
before_lock_tables_takes_lock
SIGNAL removing_partitions WAIT_FOR waiting_for_alter';
SET DEBUG_SYNC= '
open_tables_acquire_upgradable_mdl
SIGNAL removing_partitions WAIT_FOR waiting_for_alter';
SET DEBUG_SYNC= 'alter_table_before_rename_result_table WAIT_FOR delete_done';
SET DEBUG_SYNC= 'alter_table_before_rename_result_table WAIT_FOR delete_done';
ALTER TABLE t2 REMOVE PARTITIONING;
ALTER TABLE t2 REMOVE PARTITIONING;
# Con default
# Con default
SET SESSION debug= "+d,sleep_before_part2_delete_table";
SET DEBUG_SYNC= 'now WAIT_FOR removing_partitions';
SET DEBUG_SYNC= 'now WAIT_FOR removing_partitions';
SET DEBUG_SYNC= '
waiting_for
_table SIGNAL waiting_for_alter';
SET DEBUG_SYNC= '
rm_table_part2_before_delete
_table SIGNAL waiting_for_alter';
SET DEBUG_SYNC= 'rm_table_part2_before_binlog SIGNAL delete_done';
SET DEBUG_SYNC= 'rm_table_part2_before_binlog SIGNAL delete_done';
DROP TABLE IF EXISTS t2;
DROP TABLE IF EXISTS t2;
SET SESSION debug= "-d,sleep_before_part2_delete_table";
# Con 1
# Con 1
ERROR 42S02: Table 'test.t2' doesn't exist
ERROR 42S02: Table 'test.t2' doesn't exist
SET DEBUG_SYNC= 'RESET';
SET DEBUG_SYNC= 'RESET';
...
...
mysql-test/t/disabled.def
View file @
b2838f1a
...
@@ -15,4 +15,3 @@ sp_sync : Bug#48157 2010-02-06 5.5-m3 demands a differnt soluti
...
@@ -15,4 +15,3 @@ sp_sync : Bug#48157 2010-02-06 5.5-m3 demands a differnt soluti
innodb-autoinc : Bug#49267 2009-12-02 test fails on windows because of different case mode
innodb-autoinc : Bug#49267 2009-12-02 test fails on windows because of different case mode
innodb : Bug#49396 2009-12-03 test fails in embedded mode
innodb : Bug#49396 2009-12-03 test fails in embedded mode
plugin_load : Bug#42144 2009-12-21 alik plugin_load fails
plugin_load : Bug#42144 2009-12-21 alik plugin_load fails
partition_debug_sync : 2010-03-01 alik Disable partition_debug_sync temporarily awaiting a patch from Mattias
mysql-test/t/partition_debug_sync.test
View file @
b2838f1a
...
@@ -15,6 +15,8 @@ SET DEBUG_SYNC= 'RESET';
...
@@ -15,6 +15,8 @@ SET DEBUG_SYNC= 'RESET';
--
echo
# Bug#42438: Crash ha_partition::change_table_ptr
--
echo
# Bug#42438: Crash ha_partition::change_table_ptr
--
echo
# Test when remove partitioning is done while drop table is waiting
--
echo
# Test when remove partitioning is done while drop table is waiting
--
echo
# for the table.
--
echo
# for the table.
--
echo
# After MDL was introduced, there is no longer any race, so test is done
--
echo
# by adding a small sleep to verify that the delete waits.
connect
(
con1
,
localhost
,
root
,,);
connect
(
con1
,
localhost
,
root
,,);
--
echo
# Con 1
--
echo
# Con 1
SET
DEBUG_SYNC
=
'RESET'
;
SET
DEBUG_SYNC
=
'RESET'
;
...
@@ -28,18 +30,20 @@ ENGINE = MYISAM
...
@@ -28,18 +30,20 @@ ENGINE = MYISAM
PARTITION p1 VALUES LESS THAN (20),
PARTITION p1 VALUES LESS THAN (20),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p3 VALUES LESS THAN MAXVALUE ) */
;
PARTITION p3 VALUES LESS THAN MAXVALUE ) */
;
SET
SESSION
debug
=
"+d,sleep_before_create_table_no_lock"
;
SET
DEBUG_SYNC
=
'alter_table_before_create_table_no_lock SIGNAL removing_partitioning WAIT_FOR waiting_for_alter'
;
SET
DEBUG_SYNC
=
'alter_table_before_create_table_no_lock SIGNAL removing_partitioning WAIT_FOR waiting_for_alter'
;
SET
DEBUG_SYNC
=
'alter_table_before_main_binlog SIGNAL partitioning_removed'
;
SET
DEBUG_SYNC
=
'alter_table_before_main_binlog SIGNAL partitioning_removed'
;
--
send
ALTER
TABLE
t1
REMOVE
PARTITIONING
--
send
ALTER
TABLE
t1
REMOVE
PARTITIONING
connection
default
;
connection
default
;
--
echo
# Con default
--
echo
# Con default
SET
DEBUG_SYNC
=
'now WAIT_FOR removing_partitioning'
;
SET
DEBUG_SYNC
=
'now WAIT_FOR removing_partitioning'
;
SET
DEBUG_SYNC
=
'
waiting_for_table
SIGNAL waiting_for_alter'
;
SET
DEBUG_SYNC
=
'
mdl_acquire_lock_wait
SIGNAL waiting_for_alter'
;
SET
DEBUG_SYNC
=
'rm_table_part2_before_delete_table WAIT_FOR partitioning_removed'
;
SET
DEBUG_SYNC
=
'rm_table_part2_before_delete_table WAIT_FOR partitioning_removed'
;
DROP
TABLE
IF
EXISTS
t1
;
DROP
TABLE
IF
EXISTS
t1
;
--
echo
# Con 1
--
echo
# Con 1
connection
con1
;
connection
con1
;
--
reap
--
reap
SET
SESSION
debug
=
"-d,sleep_before_create_table_no_lock"
;
connection
default
;
connection
default
;
SET
DEBUG_SYNC
=
'RESET'
;
SET
DEBUG_SYNC
=
'RESET'
;
connection
con1
;
connection
con1
;
...
@@ -49,6 +53,8 @@ SET DEBUG_SYNC= 'RESET';
...
@@ -49,6 +53,8 @@ SET DEBUG_SYNC= 'RESET';
--
echo
# Bug#42438: Crash ha_partition::change_table_ptr
--
echo
# Bug#42438: Crash ha_partition::change_table_ptr
--
echo
# Test when remove partitioning is failing due to drop table is already
--
echo
# Test when remove partitioning is failing due to drop table is already
--
echo
# in progress.
--
echo
# in progress.
--
echo
# After MDL was introduced, there is no longer any race, so test is done
--
echo
# by adding a small sleep to verify that the alter waits.
CREATE
TABLE
t2
CREATE
TABLE
t2
(
a
INTEGER
,
(
a
INTEGER
,
b
INTEGER
NOT
NULL
,
b
INTEGER
NOT
NULL
,
...
@@ -59,15 +65,17 @@ ENGINE = MYISAM
...
@@ -59,15 +65,17 @@ ENGINE = MYISAM
PARTITION p1 VALUES LESS THAN (20),
PARTITION p1 VALUES LESS THAN (20),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (100),
PARTITION p3 VALUES LESS THAN MAXVALUE ) */
;
PARTITION p3 VALUES LESS THAN MAXVALUE ) */
;
SET
DEBUG_SYNC
=
'
before_lock_tables_takes_lock
SIGNAL removing_partitions WAIT_FOR waiting_for_alter'
;
SET
DEBUG_SYNC
=
'
open_tables_acquire_upgradable_mdl
SIGNAL removing_partitions WAIT_FOR waiting_for_alter'
;
SET
DEBUG_SYNC
=
'alter_table_before_rename_result_table WAIT_FOR delete_done'
;
SET
DEBUG_SYNC
=
'alter_table_before_rename_result_table WAIT_FOR delete_done'
;
--
send
ALTER
TABLE
t2
REMOVE
PARTITIONING
--
send
ALTER
TABLE
t2
REMOVE
PARTITIONING
connection
default
;
connection
default
;
--
echo
# Con default
--
echo
# Con default
SET
SESSION
debug
=
"+d,sleep_before_part2_delete_table"
;
SET
DEBUG_SYNC
=
'now WAIT_FOR removing_partitions'
;
SET
DEBUG_SYNC
=
'now WAIT_FOR removing_partitions'
;
SET
DEBUG_SYNC
=
'
waiting_for
_table SIGNAL waiting_for_alter'
;
SET
DEBUG_SYNC
=
'
rm_table_part2_before_delete
_table SIGNAL waiting_for_alter'
;
SET
DEBUG_SYNC
=
'rm_table_part2_before_binlog SIGNAL delete_done'
;
SET
DEBUG_SYNC
=
'rm_table_part2_before_binlog SIGNAL delete_done'
;
DROP
TABLE
IF
EXISTS
t2
;
DROP
TABLE
IF
EXISTS
t2
;
SET
SESSION
debug
=
"-d,sleep_before_part2_delete_table"
;
--
echo
# Con 1
--
echo
# Con 1
connection
con1
;
connection
con1
;
--
error
ER_NO_SUCH_TABLE
--
error
ER_NO_SUCH_TABLE
...
...
sql/sql_base.cc
View file @
b2838f1a
...
@@ -4377,6 +4377,8 @@ open_tables_acquire_upgradable_mdl(THD *thd, TABLE_LIST *tables_start,
...
@@ -4377,6 +4377,8 @@ open_tables_acquire_upgradable_mdl(THD *thd, TABLE_LIST *tables_start,
MDL_request_list
mdl_requests
;
MDL_request_list
mdl_requests
;
TABLE_LIST
*
table
;
TABLE_LIST
*
table
;
DEBUG_SYNC
(
thd
,
"open_tables_acquire_upgradable_mdl"
);
for
(
table
=
tables_start
;
table
&&
table
!=
tables_end
;
for
(
table
=
tables_start
;
table
&&
table
!=
tables_end
;
table
=
table
->
next_global
)
table
=
table
->
next_global
)
{
{
...
...
sql/sql_table.cc
View file @
b2838f1a
...
@@ -1897,18 +1897,15 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
...
@@ -1897,18 +1897,15 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
mysql_ha_rm_tables
(
thd
,
tables
);
mysql_ha_rm_tables
(
thd
,
tables
);
/* Disable drop of enabled log tables, must be done before name locking */
/* Disable drop of enabled log tables, must be done before name locking */
mysql_mutex_lock
(
&
LOCK_open
);
for
(
table
=
tables
;
table
;
table
=
table
->
next_local
)
for
(
table
=
tables
;
table
;
table
=
table
->
next_local
)
{
{
if
(
check_if_log_table
(
table
->
db_length
,
table
->
db
,
if
(
check_if_log_table
(
table
->
db_length
,
table
->
db
,
table
->
table_name_length
,
table
->
table_name
,
1
))
table
->
table_name_length
,
table
->
table_name
,
1
))
{
{
mysql_mutex_unlock
(
&
LOCK_open
);
my_error
(
ER_BAD_LOG_STATEMENT
,
MYF
(
0
),
"DROP"
);
my_error
(
ER_BAD_LOG_STATEMENT
,
MYF
(
0
),
"DROP"
);
DBUG_RETURN
(
1
);
DBUG_RETURN
(
1
);
}
}
}
}
mysql_mutex_unlock
(
&
LOCK_open
);
if
(
!
drop_temporary
)
if
(
!
drop_temporary
)
{
{
...
@@ -2061,6 +2058,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
...
@@ -2061,6 +2058,8 @@ int mysql_rm_table_part2(THD *thd, TABLE_LIST *tables, bool if_exists,
Is exclusive meta-data lock enough ?
Is exclusive meta-data lock enough ?
*/
*/
DEBUG_SYNC
(
thd
,
"rm_table_part2_before_delete_table"
);
DEBUG_SYNC
(
thd
,
"rm_table_part2_before_delete_table"
);
DBUG_EXECUTE_IF
(
"sleep_before_part2_delete_table"
,
my_sleep
(
100000
););
mysql_mutex_lock
(
&
LOCK_open
);
mysql_mutex_lock
(
&
LOCK_open
);
if
(
drop_temporary
||
if
(
drop_temporary
||
((
access
(
path
,
F_OK
)
&&
((
access
(
path
,
F_OK
)
&&
...
@@ -7128,6 +7127,8 @@ view_err:
...
@@ -7128,6 +7127,8 @@ view_err:
create_info
->
data_file_name
=
create_info
->
index_file_name
=
0
;
create_info
->
data_file_name
=
create_info
->
index_file_name
=
0
;
DEBUG_SYNC
(
thd
,
"alter_table_before_create_table_no_lock"
);
DEBUG_SYNC
(
thd
,
"alter_table_before_create_table_no_lock"
);
DBUG_EXECUTE_IF
(
"sleep_before_create_table_no_lock"
,
my_sleep
(
100000
););
/*
/*
Create a table with a temporary name.
Create a table with a temporary name.
With create_info->frm_only == 1 this creates a .frm file only.
With create_info->frm_only == 1 this creates a .frm file only.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment