List:Commits« Previous MessageNext Message »
From:Luis Soares Date:March 14 2011 3:01pm
Subject:[Resend] bzr commit into mysql-trunk branch (luis.soares:3756) Bug#60082
Bug#11827392
View as plain text  
[This commit e-mail is a repeat.]

#At file:///home/lsoares/Workspace/bzr/work/bugfixing/11827392/mysql-trunk/ based on
revid:joerg.bruehe@stripped

 3756 Luis Soares	2011-03-11
      Fix for BUG#11827392 (BUG#60082).
      
      Even though the CREATE USER statement fails, it still gets
      written to the binary log.
      
      We fix this by setting the flag some_users_created correctly
      inside mysql_create_users.

    modified:
      mysql-test/suite/rpl/r/rpl_grant.result
      mysql-test/suite/rpl/t/rpl_grant.test
      sql/sql_acl.cc
=== modified file 'mysql-test/suite/rpl/r/rpl_grant.result'
--- a/mysql-test/suite/rpl/r/rpl_grant.result	2010-12-19 17:22:30 +0000
+++ b/mysql-test/suite/rpl/r/rpl_grant.result	2011-03-11 19:16:12 +0000
@@ -178,4 +178,9 @@ DROP FUNCTION b54866_f;
 DROP TABLE test.t2;
 DROP USER 'b54866_user'@'localhost';
 DROP DATABASE b54866;
+include/rpl_reset.inc
+CREATE USER foo IDENTIFIED WITH 'my_plugin';
+ERROR HY000: Plugin 'my_plugin' is not loaded
+# Search for occurrences of CREATE USER in the output from mysqlbinlog
+- Occurrences: 0
 include/rpl_end.inc

=== modified file 'mysql-test/suite/rpl/t/rpl_grant.test'
--- a/mysql-test/suite/rpl/t/rpl_grant.test	2010-12-19 17:22:30 +0000
+++ b/mysql-test/suite/rpl/t/rpl_grant.test	2011-03-11 19:16:12 +0000
@@ -242,4 +242,56 @@ DROP TABLE test.t2;
 --eval DROP DATABASE $dbname
 --sync_slave_with_master
 
+#
+# BUG#11827392: 60082: EVEN THOUGH IT FAILS, 'CREATE USER' STATEMENT SI STILL BINLOGGED. 
+#
+
+#
+# The test case is based on the one included in the
+# original report. It works as follows:
+#
+# 1. We issue a failing statement on the master
+# 2. Then we synchronize the slave
+#    - this asserts that there is no side-effect
+#      on the replication stream
+# 3. We then dump the contents of the binlog and
+#    search for the CREATE USER entry. There should
+#    not be any, so we print the # of entries found.
+#
+
+--connection master
+--source include/rpl_reset.inc
+--connection master
+
+--error ER_PLUGIN_IS_NOT_LOADED
+CREATE USER foo IDENTIFIED WITH 'my_plugin';
+--sync_slave_with_master
+
+--connection master
+
+--disable_query_log
+
+--let $MYSQLD_DATADIR= `select @@datadir`
+--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
+--let $prefix=`SELECT UUID()`
+--let $out_file=$MYSQLTEST_VARDIR/tmp/$prefix.out
+--exec $MYSQL_BINLOG --verbose $MYSQLD_DATADIR/$binlog_file > $out_file
+
+--let OUTF=$out_file
+
+--enable_query_log
+
+--echo # Search for occurrences of CREATE USER in the output from mysqlbinlog
+
+perl;
+  use strict;
+  my $outf= $ENV{'OUTF'} or die "OUTF not set";
+  open(FILE, "$outf") or die("Unable to open $outf: $!\n");
+  my $count = () = grep(/create user 'foo'/gi,<FILE>);
+  print "- Occurrences: $count\n";
+  close(FILE);
+EOF
+
+--remove_file $out_file
+
 --source include/rpl_end.inc

=== modified file 'sql/sql_acl.cc'
--- a/sql/sql_acl.cc	2011-03-09 20:54:55 +0000
+++ b/sql/sql_acl.cc	2011-03-11 19:16:12 +0000
@@ -6489,12 +6489,14 @@ bool mysql_create_user(THD *thd, List <L
       continue;
     }
 
-    some_users_created= TRUE;
     if (replace_user_table(thd, tables[0].table, *user_name, 0, 0, 1, 0))
     {
       append_user(&wrong_users, user_name, wrong_users.length() > 0);
       result= TRUE;
+      continue;
     }
+
+    some_users_created= TRUE;
   }
 
   mysql_mutex_unlock(&acl_cache->lock);


Attachment: [text/bzr-bundle] bzr/luis.soares@oracle.com-20110311191612-lzhmgcanv5au4ww5.bundle
Thread
[Resend] bzr commit into mysql-trunk branch (luis.soares:3756) Bug#60082Bug#11827392Luis Soares14 Mar