summaryrefslogtreecommitdiff
path: root/mysql-test/r/sp-destruct.result
diff options
context:
space:
mode:
authorJon Olav Hauglid <jon.hauglid@sun.com>2010-03-03 10:24:53 +0100
committerJon Olav Hauglid <jon.hauglid@sun.com>2010-03-03 10:24:53 +0100
commitb0ab907b4290cd3aa24a9305387ed5aaeaf5d213 (patch)
tree2ed7d716d0bc5e01e03f30e506158c1bc8eaff8c /mysql-test/r/sp-destruct.result
parentc843f58f0470b8be4228adaf97f628e2342e73f2 (diff)
downloadmariadb-git-b0ab907b4290cd3aa24a9305387ed5aaeaf5d213.tar.gz
Bug #51376 Assert `! is_set()' failed in
Diagnostics_area::set_ok_status on DROP FUNCTION This assert tests that the server is not trying to send "ok" to the client if an error has occured during statement processing. In this case, the assert was triggered by lock timeout errors when accessing system tables to do an implicit REVOKE after executing DROP FUNCTION/PROCEDURE. In practice, this was only likely to happen with very low values for "lock_wait_timeout" (in the bug report 1 second was used). These errors were ignored and the server tried to send "ok" to the client, triggering the assert. The patch for Bug#45225 introduced lock timeouts for metadata locks. This made it possible to get timeouts when accessing system tables. Note that a followup patch for Bug#45225 pushed after this bug was reported, changed accessing of system tables such that the user-supplied timeout value is ignored and the maximum timeout value is used instead. This exact bug was therefore only noticeable in the period between the initial Bug#45225 patch and the followup patch. However, the same problem could occur for any errors during revoking of privileges - not just timeouts. This patch fixes the problem by making sure that any errors during revoking of privileges are reported to the client. Test case added to sp-destruct.test. Since the original bug is not reproducable now that system tables are accessed using a a long timeout value, this test instead calls DROP FUNCTION with a grant system table missing.
Diffstat (limited to 'mysql-test/r/sp-destruct.result')
-rw-r--r--mysql-test/r/sp-destruct.result18
1 files changed, 18 insertions, 0 deletions
diff --git a/mysql-test/r/sp-destruct.result b/mysql-test/r/sp-destruct.result
index b6891df2420..a4933ee9800 100644
--- a/mysql-test/r/sp-destruct.result
+++ b/mysql-test/r/sp-destruct.result
@@ -116,3 +116,21 @@ ERROR HY000: Cannot load from mysql.proc. The table is probably corrupted
DROP TABLE mysql.proc;
RENAME TABLE proc_backup TO mysql.proc;
FLUSH TABLE mysql.proc;
+#
+# Bug#51376 Assert `! is_set()' failed in
+# Diagnostics_area::set_ok_status on DROP FUNCTION
+#
+DROP FUNCTION IF EXISTS f1;
+CREATE FUNCTION f1() RETURNS INT RETURN 1;
+# Backup the procs_priv table
+RENAME TABLE mysql.procs_priv TO procs_priv_backup;
+FLUSH TABLE mysql.procs_priv;
+DROP FUNCTION f1;
+ERROR 42S02: Table 'mysql.procs_priv' doesn't exist
+SHOW WARNINGS;
+Level Code Message
+Error 1146 Table 'mysql.procs_priv' doesn't exist
+Warning 1405 Failed to revoke all privileges to dropped routine
+# Restore the procs_priv table
+RENAME TABLE procs_priv_backup TO mysql.procs_priv;
+FLUSH TABLE mysql.procs_priv;