mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-28344:sys.ps_setup_save and dependent procedures fail with ER_ILLEGAL_HA_CREATE_OPTION
- The problem: ============== - Commitf7216fa63d
created the check function for default temporary storage engine and in case the SE doesn't support temporary tables the error `ER_ILLEGAL_HA_CREATE_OPTION` is raised. Before that commit in such cases temporary tables were created by silently substituting default SE (RocksDB, Connect, PerfSchema) with MyISAM. - The test `pr_diagnostics.test` was modified in that commit with raising the error, since I didn't check the root cause of test itself. - The solution: =============== - This commit update the root case: procedure `ps_setup_save()` that uses temporary tables created from performance schema tables definition using `LIKE`, what is not supported. The suggested fix is to use InnoDB table by using `AS SELECT`. - Note that test `pr_diagnostics` will raise this error for `medium/full` third argument, but not for `current` value of third argument. - Additionally this patch updates the test case of commitf7216fa
, by adding missing relation between temporary tables and Performance schema in `perfschema.misc` test. - Reviewed by: <wlad@mariadb.com>
This commit is contained in:
@ -174,3 +174,16 @@ select object_type, object_schema, object_name
|
|||||||
from performance_schema.objects_summary_global_by_type
|
from performance_schema.objects_summary_global_by_type
|
||||||
where object_schema="test";
|
where object_schema="test";
|
||||||
object_type object_schema object_name
|
object_type object_schema object_name
|
||||||
|
#
|
||||||
|
# MDEV-28344: sys.ps_setup_save and dependent procedures fail
|
||||||
|
# with ER_ILLEGAL_HA_CREATE_OPTION
|
||||||
|
#
|
||||||
|
CREATE TEMPORARY TABLE t1 (t int) ENGINE = PERFORMANCE_SCHEMA;
|
||||||
|
ERROR HY000: Table storage engine 'PERFORMANCE_SCHEMA' does not support the create option 'TEMPORARY'
|
||||||
|
CREATE TEMPORARY TABLE t1 LIKE performance_schema.setup_actors;
|
||||||
|
ERROR HY000: Table storage engine 'PERFORMANCE_SCHEMA' does not support the create option 'TEMPORARY'
|
||||||
|
SET @default_storage_engine_old = @@default_storage_engine;
|
||||||
|
SET default_storage_engine = performance_schema;
|
||||||
|
CREATE TEMPORARY TABLE t1 (t int);
|
||||||
|
ERROR HY000: Table storage engine 'PERFORMANCE_SCHEMA' does not support the create option 'TEMPORARY'
|
||||||
|
SET @@default_storage_engine = @default_storage_engine_old;
|
||||||
|
@ -298,3 +298,23 @@ drop tables t1;
|
|||||||
select object_type, object_schema, object_name
|
select object_type, object_schema, object_name
|
||||||
from performance_schema.objects_summary_global_by_type
|
from performance_schema.objects_summary_global_by_type
|
||||||
where object_schema="test";
|
where object_schema="test";
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-28344: sys.ps_setup_save and dependent procedures fail
|
||||||
|
--echo # with ER_ILLEGAL_HA_CREATE_OPTION
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# It is not allowed to create temporary tables with performance schema
|
||||||
|
--error ER_ILLEGAL_HA_CREATE_OPTION
|
||||||
|
CREATE TEMPORARY TABLE t1 (t int) ENGINE = PERFORMANCE_SCHEMA;
|
||||||
|
|
||||||
|
--error ER_ILLEGAL_HA_CREATE_OPTION
|
||||||
|
CREATE TEMPORARY TABLE t1 LIKE performance_schema.setup_actors;
|
||||||
|
|
||||||
|
SET @default_storage_engine_old = @@default_storage_engine;
|
||||||
|
SET default_storage_engine = performance_schema;
|
||||||
|
|
||||||
|
--error ER_ILLEGAL_HA_CREATE_OPTION
|
||||||
|
CREATE TEMPORARY TABLE t1 (t int);
|
||||||
|
|
||||||
|
SET @@default_storage_engine = @default_storage_engine_old;
|
@ -6,6 +6,8 @@ SET @sys.debug = 'OFF',
|
|||||||
@sys.diagnostics.allow_i_s_tables = 'OFF',
|
@sys.diagnostics.allow_i_s_tables = 'OFF',
|
||||||
@sys.diagnostics.include_raw = 'OFF';
|
@sys.diagnostics.include_raw = 'OFF';
|
||||||
CALL sys.diagnostics(0, 0, 'full');
|
CALL sys.diagnostics(0, 0, 'full');
|
||||||
|
summary
|
||||||
|
Disabled 1 thread
|
||||||
ERROR 45000: in_max_runtime must be greater than 0
|
ERROR 45000: in_max_runtime must be greater than 0
|
||||||
CALL sys.diagnostics(2, 0, 'full');
|
CALL sys.diagnostics(2, 0, 'full');
|
||||||
ERROR 45000: in_interval must be greater than 0
|
ERROR 45000: in_interval must be greater than 0
|
||||||
|
@ -19,7 +19,6 @@ SET @sys.debug = 'ON',
|
|||||||
@sys.diagnostics.allow_i_s_tables = 'ON',
|
@sys.diagnostics.allow_i_s_tables = 'ON',
|
||||||
@sys.diagnostics.include_raw = 'ON';
|
@sys.diagnostics.include_raw = 'ON';
|
||||||
|
|
||||||
--error ER_ILLEGAL_HA_CREATE_OPTION
|
|
||||||
CALL sys.diagnostics(4, 2, 'full');
|
CALL sys.diagnostics(4, 2, 'full');
|
||||||
|
|
||||||
SET @sys.debug = 'OFF',
|
SET @sys.debug = 'OFF',
|
||||||
|
@ -80,14 +80,11 @@ BEGIN
|
|||||||
DROP TEMPORARY TABLE IF EXISTS tmp_setup_instruments;
|
DROP TEMPORARY TABLE IF EXISTS tmp_setup_instruments;
|
||||||
DROP TEMPORARY TABLE IF EXISTS tmp_threads;
|
DROP TEMPORARY TABLE IF EXISTS tmp_threads;
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE tmp_setup_actors LIKE performance_schema.setup_actors;
|
CREATE TEMPORARY TABLE tmp_setup_actors AS SELECT * FROM performance_schema.setup_actors;
|
||||||
CREATE TEMPORARY TABLE tmp_setup_consumers LIKE performance_schema.setup_consumers;
|
CREATE TEMPORARY TABLE tmp_setup_consumers AS SELECT * FROM performance_schema.setup_consumers;
|
||||||
CREATE TEMPORARY TABLE tmp_setup_instruments LIKE performance_schema.setup_instruments;
|
CREATE TEMPORARY TABLE tmp_setup_instruments AS SELECT * FROM performance_schema.setup_instruments;
|
||||||
CREATE TEMPORARY TABLE tmp_threads (THREAD_ID bigint unsigned NOT NULL PRIMARY KEY, INSTRUMENTED enum('YES','NO') NOT NULL);
|
CREATE TEMPORARY TABLE tmp_threads (THREAD_ID bigint unsigned NOT NULL PRIMARY KEY, INSTRUMENTED enum('YES','NO') NOT NULL);
|
||||||
|
|
||||||
INSERT INTO tmp_setup_actors SELECT * FROM performance_schema.setup_actors;
|
|
||||||
INSERT INTO tmp_setup_consumers SELECT * FROM performance_schema.setup_consumers;
|
|
||||||
INSERT INTO tmp_setup_instruments SELECT * FROM performance_schema.setup_instruments;
|
|
||||||
INSERT INTO tmp_threads SELECT THREAD_ID, INSTRUMENTED FROM performance_schema.threads;
|
INSERT INTO tmp_threads SELECT THREAD_ID, INSTRUMENTED FROM performance_schema.threads;
|
||||||
ELSE
|
ELSE
|
||||||
SIGNAL SQLSTATE VALUE '90000'
|
SIGNAL SQLSTATE VALUE '90000'
|
||||||
|
Reference in New Issue
Block a user