mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
BUG#27216817: INNODB: FAILING ASSERTION: PREBUILT->TABLE->N_MYSQL_HANDLES_OPENED == 1
disable online alter add primary key for innodb, if the table is opened/locked more than once in the current connection (see assert in ha_innobase::add_index())
This commit is contained in:
24
mysql-test/suite/innodb/r/innodb_bug27216817.result
Normal file
24
mysql-test/suite/innodb/r/innodb_bug27216817.result
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
create table t1 (a int not null, b int not null) engine=innodb;
|
||||||
|
insert t1 values (1,2),(3,4);
|
||||||
|
lock table t1 write, t1 tr read;
|
||||||
|
flush status;
|
||||||
|
alter table t1 add primary key (b);
|
||||||
|
show status like 'Handler_read_rnd_next';
|
||||||
|
Variable_name Value
|
||||||
|
Handler_read_rnd_next 3
|
||||||
|
unlock tables;
|
||||||
|
alter table t1 drop primary key;
|
||||||
|
lock table t1 write;
|
||||||
|
flush status;
|
||||||
|
alter table t1 add primary key (b);
|
||||||
|
show status like 'Handler_read_rnd_next';
|
||||||
|
Variable_name Value
|
||||||
|
Handler_read_rnd_next 0
|
||||||
|
unlock tables;
|
||||||
|
alter table t1 drop primary key;
|
||||||
|
flush status;
|
||||||
|
alter table t1 add primary key (b);
|
||||||
|
show status like 'Handler_read_rnd_next';
|
||||||
|
Variable_name Value
|
||||||
|
Handler_read_rnd_next 0
|
||||||
|
drop table t1;
|
28
mysql-test/suite/innodb/t/innodb_bug27216817.test
Normal file
28
mysql-test/suite/innodb/t/innodb_bug27216817.test
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
#
|
||||||
|
# BUG#27216817: INNODB: FAILING ASSERTION:
|
||||||
|
# PREBUILT->TABLE->N_MYSQL_HANDLES_OPENED == 1
|
||||||
|
#
|
||||||
|
|
||||||
|
source include/have_innodb.inc;
|
||||||
|
create table t1 (a int not null, b int not null) engine=innodb;
|
||||||
|
insert t1 values (1,2),(3,4);
|
||||||
|
|
||||||
|
lock table t1 write, t1 tr read;
|
||||||
|
flush status;
|
||||||
|
alter table t1 add primary key (b);
|
||||||
|
show status like 'Handler_read_rnd_next';
|
||||||
|
unlock tables;
|
||||||
|
alter table t1 drop primary key;
|
||||||
|
|
||||||
|
lock table t1 write;
|
||||||
|
flush status;
|
||||||
|
alter table t1 add primary key (b);
|
||||||
|
show status like 'Handler_read_rnd_next';
|
||||||
|
unlock tables;
|
||||||
|
alter table t1 drop primary key;
|
||||||
|
|
||||||
|
flush status;
|
||||||
|
alter table t1 add primary key (b);
|
||||||
|
show status like 'Handler_read_rnd_next';
|
||||||
|
|
||||||
|
drop table t1;
|
@@ -11147,6 +11147,17 @@ ha_innobase::check_if_incompatible_data(
|
|||||||
return(COMPATIBLE_DATA_YES);
|
return(COMPATIBLE_DATA_YES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UNIV_INTERN
|
||||||
|
uint
|
||||||
|
ha_innobase::alter_table_flags(uint flags)
|
||||||
|
{
|
||||||
|
uint mask = 0;
|
||||||
|
if (prebuilt->table->n_mysql_handles_opened > 1) {
|
||||||
|
mask = HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE;
|
||||||
|
}
|
||||||
|
return innobase_alter_table_flags(flags) & ~mask;
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************//**
|
/************************************************************//**
|
||||||
Validate the file format name and return its corresponding id.
|
Validate the file format name and return its corresponding id.
|
||||||
@return valid file format id */
|
@return valid file format id */
|
||||||
|
@@ -228,6 +228,7 @@ class ha_innobase: public handler
|
|||||||
/** @} */
|
/** @} */
|
||||||
bool check_if_incompatible_data(HA_CREATE_INFO *info,
|
bool check_if_incompatible_data(HA_CREATE_INFO *info,
|
||||||
uint table_changes);
|
uint table_changes);
|
||||||
|
uint alter_table_flags(uint flags);
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Some accessor functions which the InnoDB plugin needs, but which
|
/* Some accessor functions which the InnoDB plugin needs, but which
|
||||||
|
@@ -12480,6 +12480,17 @@ ha_innobase::check_if_incompatible_data(
|
|||||||
DBUG_RETURN(COMPATIBLE_DATA_YES);
|
DBUG_RETURN(COMPATIBLE_DATA_YES);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UNIV_INTERN
|
||||||
|
uint
|
||||||
|
ha_innobase::alter_table_flags(uint flags)
|
||||||
|
{
|
||||||
|
uint mask = 0;
|
||||||
|
if (prebuilt->table->n_mysql_handles_opened > 1) {
|
||||||
|
mask = HA_INPLACE_ADD_PK_INDEX_NO_READ_WRITE;
|
||||||
|
}
|
||||||
|
return innobase_alter_table_flags(flags) & ~mask;
|
||||||
|
}
|
||||||
|
|
||||||
/************************************************************//**
|
/************************************************************//**
|
||||||
Validate the file format name and return its corresponding id.
|
Validate the file format name and return its corresponding id.
|
||||||
@return valid file format id */
|
@return valid file format id */
|
||||||
|
@@ -230,6 +230,7 @@ class ha_innobase: public handler
|
|||||||
/** @} */
|
/** @} */
|
||||||
bool check_if_incompatible_data(HA_CREATE_INFO *info,
|
bool check_if_incompatible_data(HA_CREATE_INFO *info,
|
||||||
uint table_changes);
|
uint table_changes);
|
||||||
|
uint alter_table_flags(uint flags);
|
||||||
bool check_if_supported_virtual_columns(void) { return TRUE; }
|
bool check_if_supported_virtual_columns(void) { return TRUE; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Reference in New Issue
Block a user