MDEV-33441 Do not deinit plugin variables when retry requested
After MDEV-31400, plugins are allowed to ask for retries when failing initialisation. However, such failures also cause plugin system variables to be deleted (plugin_variables_deinit()) before retrying and are not re-added during retry. We fix this by checking that if the plugin has requested a retry the variables are not deleted. Because plugin_deinitialize() also calls plugin_variables_deinit(), if the retry fails, the variables will still be deleted. Alternatives considered: - remove the plugin_variables_deinit() from plugin_initialize() error handling altogether. We decide to take a more conservative approach here. - re-add the system variables during retry. It is more complicated than simply iterating over plugin->system_vars and call my_hash_insert(). For example we will need to assign values to the test_load field and extract more code from test_plugin_options(), if that is possible.
This commit is contained in:
parent
d21cb43db1
commit
068a6819eb
@ -1505,7 +1505,7 @@ static int plugin_initialize(MEM_ROOT *tmp_root, struct st_plugin_int *plugin,
|
|||||||
else
|
else
|
||||||
ret= plugin_do_initialize(plugin, state);
|
ret= plugin_do_initialize(plugin, state);
|
||||||
|
|
||||||
if (ret)
|
if (ret && ret != HA_ERR_RETRY_INIT)
|
||||||
plugin_variables_deinit(plugin);
|
plugin_variables_deinit(plugin);
|
||||||
|
|
||||||
mysql_mutex_lock(&LOCK_plugin);
|
mysql_mutex_lock(&LOCK_plugin);
|
||||||
@ -1786,6 +1786,7 @@ int plugin_init(int *argc, char **argv, int flags)
|
|||||||
uint state= plugin_ptr->state;
|
uint state= plugin_ptr->state;
|
||||||
mysql_mutex_unlock(&LOCK_plugin);
|
mysql_mutex_unlock(&LOCK_plugin);
|
||||||
error= plugin_do_initialize(plugin_ptr, state);
|
error= plugin_do_initialize(plugin_ptr, state);
|
||||||
|
DBUG_EXECUTE_IF("fail_spider_init_retry", error= 1;);
|
||||||
mysql_mutex_lock(&LOCK_plugin);
|
mysql_mutex_lock(&LOCK_plugin);
|
||||||
plugin_ptr->state= state;
|
plugin_ptr->state= state;
|
||||||
if (error == HA_ERR_RETRY_INIT)
|
if (error == HA_ERR_RETRY_INIT)
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
#
|
||||||
|
# MDEV-33441 No spider variables available is Spider is loaded upon server startup
|
||||||
|
#
|
||||||
|
set spider_same_server_link=0;
|
||||||
|
#
|
||||||
|
# end of test mdev_33441
|
||||||
|
#
|
@ -0,0 +1,10 @@
|
|||||||
|
#
|
||||||
|
# MDEV-33441 No spider variables available is Spider is loaded upon server startup
|
||||||
|
#
|
||||||
|
select * from mysql.plugin;
|
||||||
|
name dl
|
||||||
|
show variables like 'spider%';
|
||||||
|
Variable_name Value
|
||||||
|
#
|
||||||
|
# end of test mdev_33441_fail
|
||||||
|
#
|
1
storage/spider/mysql-test/spider/bugfix/t/mdev_33441.opt
Normal file
1
storage/spider/mysql-test/spider/bugfix/t/mdev_33441.opt
Normal file
@ -0,0 +1 @@
|
|||||||
|
--plugin-load-add=ha_spider
|
10
storage/spider/mysql-test/spider/bugfix/t/mdev_33441.test
Normal file
10
storage/spider/mysql-test/spider/bugfix/t/mdev_33441.test
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
--echo #
|
||||||
|
--echo # MDEV-33441 No spider variables available is Spider is loaded upon server startup
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
# We test that at least one spider variable exists.
|
||||||
|
set spider_same_server_link=0;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # end of test mdev_33441
|
||||||
|
--echo #
|
@ -0,0 +1,2 @@
|
|||||||
|
--plugin-load-add=ha_spider
|
||||||
|
--debug-dbug=d,fail_spider_init_retry
|
@ -0,0 +1,10 @@
|
|||||||
|
--source include/have_debug.inc
|
||||||
|
--echo #
|
||||||
|
--echo # MDEV-33441 No spider variables available is Spider is loaded upon server startup
|
||||||
|
--echo #
|
||||||
|
# We test that when retry fails, spider variables are deleted.
|
||||||
|
select * from mysql.plugin;
|
||||||
|
show variables like 'spider%';
|
||||||
|
--echo #
|
||||||
|
--echo # end of test mdev_33441_fail
|
||||||
|
--echo #
|
Loading…
x
Reference in New Issue
Block a user