From: Akhila Maddukuri Date: September 25 2012 11:22am Subject: bzr push into mysql-trunk branch (akhila.x.maddukuri:4549 to 4550) List-Archive: http://lists.mysql.com/commits/144885 Message-Id: <20120925112230.3430.57378.4550@akhila-ThinkPad-T420> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 4550 Akhila Maddukuri 2012-09-25 Description: ------------ sys_vars.all_vars fails on Windows 32 and 64 bit on daily trunk commercial branch with multiple combinations. Failure snippet- sys_vars.all_vars w1 [ fail ] Test ended at 2012-08-22 09:20:13 CURRENT_TEST: sys_vars.all_vars 'diff' is not recognized as an internal or external command, operable program or batch file. --- G:/pb2/test/sb_1-6672625-1345599364.71/mysql-advanced-5.7.0-m10-winx64/mysql-t est/suite/sys_vars/r/all_vars.result 2012-08-22 01:05:07.000000000 +0300 +++ G:\pb2\test\sb_1-6672625-1345599364.71\mysql-advanced-5.7.0-m10-winx64\mysql-t est\suite\sys_vars\r\all_vars.reject 2012-08-22 10:20:13.251978100 +0300 @@ -12,5 +12,7 @@ select variable_name as `There should be *no* variables listed below:` from t2 left join t1 on variable_name=test_name where test_name is null ORDER BY variable_name; There should be *no* variables listed below: +LOG_THROTTLE_QUERIES_NOT_USING_INDEXES +LOG_THROTTLE_QUERIES_NOT_USING_INDEXES drop table t1; drop table t2; mysqltest: Result length mismatch How to repeat: -------------- Seen on daily trunk commercial. mysql-test-run.pl --timer --force --parallel=8 --comment=n_mix_4k_size --vardir=var-n_mix --mysqld=--binlog-format=mixed --experimental=collections/default.experimental --skip-ndb --skip-test-list=collections/disabled-per-push.list --mysqld=--innodb-page-size=4k --skip-test=innodb_ignore_builtin Suggested fix: -------------- The purpose of all_vars.test is to make sure that there are tests for all system variables. In daily trunk commercial it is failing because it could find test for a system variable called log_throttle_queries_not_using_indexes. In windows platform the test-name is truncated to log_throttle_queries_not_using_indexes_basic.tes Hence all_vars.test couldn't find a .test file for the above variable. Inorder to get rid of the truncation, suggested fix is to change the name of the test to a smaller name which is log_throttle_qni_basic.test Also changing the file-name must happen in conjunction with another alias-rewrite: update t2 set variable_name= replace(variable_name, "_THROTTLE_QUERIES_NOT_USING_INDEXES", "_THROTTLE_QNI"); renamed: mysql-test/suite/sys_vars/r/log_throttle_queries_not_using_indexes_basic.result => mysql-test/suite/sys_vars/r/log_throttle_qni_basic.result mysql-test/suite/sys_vars/t/log_throttle_queries_not_using_indexes_basic.test => mysql-test/suite/sys_vars/t/log_throttle_qni_basic.test modified: mysql-test/suite/sys_vars/r/all_vars.result mysql-test/suite/sys_vars/t/all_vars.test 4549 Raghav Kapoor 2012-09-25 [merge] BUG#13864642: DROP/CREATE USER BEHAVING ODDLY BACKGROUND: In certain situations DROP USER fails to remove all privileges belonging to user being dropped from in-memory structures. Current workaround is to do DROP USER twice in scenario below OR doing FLUSH PRIVILEGES after doing DROP USER. ANALYSIS: In MySQL, When we grant some stored routines privileges to a user they are stored in their respective hash. When doing DROP USER all the stored routine privilege entries associated with that user has to be deleted from its respective hash. The root cause for this bug is some entries from the hash are not getting deleted. The problem is that code that deletes entries from the hash tries to do so while iterating over it, without taking enough measures to address the fact that such deletion can reshuffle elements in the hash. If the user/administrator creates the same user again he is thrown an error 'Error 1396 ER_CANNOT_USER' from MySQL. This prompts the user to either do FLUSH PRIVILEGES or do DROP USER again. This behaviour is not desirable as it is a workaround and does not solves the problem mentioned above. FIX: This bug is fixed by introducing a dynamic array to store the pointersto all stored routine privilege objects that either have to be deleted or updated. This is done in 3 steps. Step 1: Fetching the element from the hash and checking whether it is to be deleted or updated. Step 2: Storing the pointer to that privilege object in dynamic array. Step 3: Traversing the dynamic array to perform the appropriate action either delete or update. This is a much cleaner way to delete or update the privilege entries associated with some user and solves the problem mentioned above. Also the code has been refactored a bit by introducing an enum instead of hard coded numbers used for respective dynamic arrays and hashes in handle_grant_struct() function. modified: internal/mysql-test/suite/i_main/r/grant.result internal/mysql-test/suite/i_main/t/grant.test sql/sql_acl.cc === modified file 'mysql-test/suite/sys_vars/r/all_vars.result' --- a/mysql-test/suite/sys_vars/r/all_vars.result 2012-07-05 09:48:23 +0000 +++ b/mysql-test/suite/sys_vars/r/all_vars.result 2012-09-25 11:19:40 +0000 @@ -6,6 +6,7 @@ insert into t2 select variable_name from update t2 set variable_name= replace(variable_name, "PERFORMANCE_SCHEMA_", "PFS_"); update t2 set variable_name= replace(variable_name, "_HISTORY_LONG_", "_HL_"); update t2 set variable_name= replace(variable_name, "_HISTORY_", "_H_"); +update t2 set variable_name= replace(variable_name, "_THROTTLE_QUERIES_NOT_USING_INDEXES", "_THROTTLE_QNI"); select variable_name as `There should be *no* long test name listed below:` from t2 where length(variable_name) > 50; There should be *no* long test name listed below: === renamed file 'mysql-test/suite/sys_vars/r/log_throttle_queries_not_using_indexes_basic.result' => 'mysql-test/suite/sys_vars/r/log_throttle_qni_basic.result' === modified file 'mysql-test/suite/sys_vars/t/all_vars.test' --- a/mysql-test/suite/sys_vars/t/all_vars.test 2012-07-05 09:48:23 +0000 +++ b/mysql-test/suite/sys_vars/t/all_vars.test 2012-09-25 11:19:40 +0000 @@ -61,6 +61,7 @@ insert into t2 select variable_name from update t2 set variable_name= replace(variable_name, "PERFORMANCE_SCHEMA_", "PFS_"); update t2 set variable_name= replace(variable_name, "_HISTORY_LONG_", "_HL_"); update t2 set variable_name= replace(variable_name, "_HISTORY_", "_H_"); +update t2 set variable_name= replace(variable_name, "_THROTTLE_QUERIES_NOT_USING_INDEXES", "_THROTTLE_QNI"); --sorted_result select variable_name as `There should be *no* long test name listed below:` from t2 === renamed file 'mysql-test/suite/sys_vars/t/log_throttle_queries_not_using_indexes_basic.test' => 'mysql-test/suite/sys_vars/t/log_throttle_qni_basic.test' No bundle (reason: useless for push emails).