List:Commits« Previous MessageNext Message »
From:Mats Kindahl Date:June 20 2007 2:24pm
Subject:bk commit into 5.0 tree (mats:1.2494) BUG#29030
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of mats. When mats does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-06-20 14:24:31+02:00, mats@stripped +3 -0
  BUG#29030 (DROP USER command that errors still gets written to binary log
  and replicated):
  
  A DROP USER statement with a non-existing user was correctly written to
  the binary log (there might be users that were removed, but not all),
  but the error code was not set, which caused the slave to stop with an
  error.
  
  The error reporting code was moved to before the statement was logged
  to ensure that the error information for the thread was correctly set
  up. This works since my_error() will set the fields net.last_errno and
  net.last_error for the thread that is reporting the error, and this
  will then be picked up when the Query_log_event is created and written
  to the binary log.

  mysql-test/r/rpl_grant.result@stripped, 2007-06-20 14:24:28+02:00,
mats@stripped +77 -0
    New BitKeeper file ``mysql-test/r/rpl_grant.result''

  mysql-test/r/rpl_grant.result@stripped, 2007-06-20 14:24:28+02:00,
mats@stripped +0 -0

  mysql-test/t/rpl_grant.test@stripped, 2007-06-20 14:24:28+02:00,
mats@stripped +38 -0
    New BitKeeper file ``mysql-test/t/rpl_grant.test''

  mysql-test/t/rpl_grant.test@stripped, 2007-06-20 14:24:28+02:00,
mats@stripped +0 -0

  sql/sql_acl.cc@stripped, 2007-06-20 14:24:27+02:00, mats@stripped +6 -2
    Moving error reporting code to ensure that thd->net.last_err{or,no} is
    set and adding debug printout.

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	mats
# Host:	kindahl-laptop.dnsalias.net
# Root:	/home/bk/b29030-mysql-5.0-rpl

--- 1.221/sql/sql_acl.cc	2007-06-20 14:24:38 +02:00
+++ 1.222/sql/sql_acl.cc	2007-06-20 14:24:38 +02:00
@@ -5378,6 +5378,12 @@
 
   VOID(pthread_mutex_unlock(&acl_cache->lock));
 
+  if (result)
+    my_error(ER_CANNOT_USER, MYF(0), "DROP USER", wrong_users.c_ptr_safe());
+
+  DBUG_PRINT("info", ("thd->net.last_errno: %d", thd->net.last_errno));
+  DBUG_PRINT("info", ("thd->net.last_error: %s", thd->net.last_error));
+
   if (mysql_bin_log.is_open())
   {
     Query_log_event qinfo(thd, thd->query, thd->query_length, 0, FALSE);
@@ -5386,8 +5392,6 @@
 
   rw_unlock(&LOCK_grant);
   close_thread_tables(thd);
-  if (result)
-    my_error(ER_CANNOT_USER, MYF(0), "DROP USER", wrong_users.c_ptr_safe());
   DBUG_RETURN(result);
 }
 
--- New file ---
+++ mysql-test/r/rpl_grant.result	07/06/20 14:24:28
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
**** On Master ****
CREATE USER dummy@localhost;
CREATE USER dummy1@localhost, dummy2@localhost;
SELECT user, host FROM mysql.user;
user	host
root	127.0.0.1
dummy	localhost
dummy1	localhost
dummy2	localhost
root	localhost
root	romeo.kindahl.net
**** On Slave ****
SELECT user,host FROM mysql.user;
user	host
root	127.0.0.1
dummy	localhost
dummy1	localhost
dummy2	localhost
root	localhost
root	romeo.kindahl.net
**** On Master ****
DROP USER nonexisting@localhost;
ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
DROP USER nonexisting@localhost, dummy@localhost;
ERROR HY000: Operation DROP USER failed for 'nonexisting'@'localhost'
DROP USER dummy1@localhost, dummy2@localhost;
SELECT user, host FROM mysql.user;
user	host
root	127.0.0.1
root	localhost
root	romeo.kindahl.net
**** On Slave ****
SELECT user,host FROM mysql.user;
user	host
root	127.0.0.1
root	localhost
root	romeo.kindahl.net
SHOW SLAVE STATUS;
Slave_IO_State	#
Master_Host	127.0.0.1
Master_User	root
Master_Port	MASTER_PORT
Connect_Retry	1
Master_Log_File	master-bin.000001
Read_Master_Log_Pos	609
Relay_Log_File	#
Relay_Log_Pos	#
Relay_Master_Log_File	master-bin.000001
Slave_IO_Running	Yes
Slave_SQL_Running	Yes
Replicate_Do_DB	
Replicate_Ignore_DB	
Replicate_Do_Table	
Replicate_Ignore_Table	
Replicate_Wild_Do_Table	
Replicate_Wild_Ignore_Table	
Last_Errno	0
Last_Error	
Skip_Counter	0
Exec_Master_Log_Pos	609
Relay_Log_Space	#
Until_Condition	None
Until_Log_File	
Until_Log_Pos	0
Master_SSL_Allowed	No
Master_SSL_CA_File	
Master_SSL_CA_Path	
Master_SSL_Cert	
Master_SSL_Cipher	
Master_SSL_Key	
Seconds_Behind_Master	#

--- New file ---
+++ mysql-test/t/rpl_grant.test	07/06/20 14:24:28
# Tests of grants and users

source include/master-slave.inc;
source include/not_embedded.inc;

--echo **** On Master ****
connection master;

CREATE USER dummy@localhost;
CREATE USER dummy1@localhost, dummy2@localhost;

SELECT user, host FROM mysql.user;
sync_slave_with_master;
--echo **** On Slave ****
SELECT user,host FROM mysql.user;

--echo **** On Master ****
connection master;

# No user exists
error ER_CANNOT_USER;
DROP USER nonexisting@localhost;

# At least one user exists, but not all
error ER_CANNOT_USER;
DROP USER nonexisting@localhost, dummy@localhost;

# All users exist
DROP USER dummy1@localhost, dummy2@localhost;

SELECT user, host FROM mysql.user;
sync_slave_with_master;
--echo **** On Slave ****
SELECT user,host FROM mysql.user;

--replace_result $MASTER_MYPORT MASTER_PORT
--replace_column 1 # 8 # 9 # 23 # 33 #
query_vertical SHOW SLAVE STATUS;

Thread
bk commit into 5.0 tree (mats:1.2494) BUG#29030Mats Kindahl20 Jun