Bug#21226 FLUSH PRIVILEGES does not provided feedback when it fails.
If during a FLUSH PRIVILEGES the server fails to load the new privilege tables, the error message is lost. This patch is a back port from 5.1 which adresses this issue by setting the server in an error state if a failure occurrs. This patch also corrects an incorrect variable assignment which might cause an error state to be reverted by coincidence.
This commit is contained in:
parent
889a669f68
commit
ccd534c3ea
@ -7054,11 +7054,23 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
|
|||||||
thd->thread_stack= (char*) &tmp_thd;
|
thd->thread_stack= (char*) &tmp_thd;
|
||||||
thd->store_globals();
|
thd->store_globals();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (thd)
|
if (thd)
|
||||||
{
|
{
|
||||||
(void)acl_reload(thd);
|
bool reload_acl_failed= acl_reload(thd);
|
||||||
(void)grant_reload(thd);
|
bool reload_grants_failed= grant_reload(thd);
|
||||||
|
|
||||||
|
if (reload_acl_failed || reload_grants_failed)
|
||||||
|
{
|
||||||
|
result= 1;
|
||||||
|
/*
|
||||||
|
When an error is returned, my_message may have not been called and
|
||||||
|
the client will hang waiting for a response.
|
||||||
|
*/
|
||||||
|
my_error(ER_UNKNOWN_ERROR, MYF(0), "FLUSH PRIVILEGES failed");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (tmp_thd)
|
if (tmp_thd)
|
||||||
{
|
{
|
||||||
delete tmp_thd;
|
delete tmp_thd;
|
||||||
@ -7144,8 +7156,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
|
|||||||
tmp_write_to_binlog= 0;
|
tmp_write_to_binlog= 0;
|
||||||
if (lock_global_read_lock(thd))
|
if (lock_global_read_lock(thd))
|
||||||
return 1; // Killed
|
return 1; // Killed
|
||||||
result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1,
|
if (close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1,
|
||||||
tables);
|
tables))
|
||||||
|
result= 1;
|
||||||
|
|
||||||
if (make_global_read_lock_block_commit(thd)) // Killed
|
if (make_global_read_lock_block_commit(thd)) // Killed
|
||||||
{
|
{
|
||||||
/* Don't leave things in a half-locked state */
|
/* Don't leave things in a half-locked state */
|
||||||
@ -7154,7 +7168,10 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
result=close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, tables);
|
{
|
||||||
|
if (close_cached_tables(thd,(options & REFRESH_FAST) ? 0 : 1, tables))
|
||||||
|
result= 1;
|
||||||
|
}
|
||||||
my_dbopt_cleanup();
|
my_dbopt_cleanup();
|
||||||
}
|
}
|
||||||
if (options & REFRESH_HOSTS)
|
if (options & REFRESH_HOSTS)
|
||||||
@ -7178,8 +7195,8 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables,
|
|||||||
#ifdef OPENSSL
|
#ifdef OPENSSL
|
||||||
if (options & REFRESH_DES_KEY_FILE)
|
if (options & REFRESH_DES_KEY_FILE)
|
||||||
{
|
{
|
||||||
if (des_key_file)
|
if (des_key_file && load_des_key_file(des_key_file))
|
||||||
result=load_des_key_file(des_key_file);
|
result= 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef HAVE_REPLICATION
|
#ifdef HAVE_REPLICATION
|
||||||
|
Loading…
x
Reference in New Issue
Block a user