summaryrefslogtreecommitdiff
path: root/sql/repl_failsafe.cc
diff options
context:
space:
mode:
authorunknown <guilhem@mysql.com>2003-03-08 18:53:32 +0100
committerunknown <guilhem@mysql.com>2003-03-08 18:53:32 +0100
commit44c9a3893dc25de21dccd6aab7e1b1d75ec13642 (patch)
tree58f60d793557c70ab7099581f6d88634c53cb990 /sql/repl_failsafe.cc
parent20bb527b80ddf1db92ef409b8857c9038af2d7ac (diff)
downloadmariadb-git-44c9a3893dc25de21dccd6aab7e1b1d75ec13642.tar.gz
Clearer error message when one forgot to grant REPLICATION SLAVE :
now we'll have something like this : 030308 18:46:58 Slave I/O thread: connected to master 'gb@localhost:3306', replication started in log 'FIRST' at position 4 030308 18:46:58 While trying to obtain the list of slaves from the master 'localhost:3306', user 'gb' got the following error: 'Access denied. You need the REPLICATION SLAVE privilege for this operation' 030308 18:46:58 Slave I/O thread exiting, read up to log 'FIRST', position 4 instead of "Error updating slave list: Query error". This fixes bug #80. sql/repl_failsafe.cc: Clearer error message when one forgot to grant REPLICATION SLAVE sql/repl_failsafe.h: Clearer error message when one forgot to grant REPLICATION SLAVE sql/slave.cc: Updated for new syntax of update_slave_list
Diffstat (limited to 'sql/repl_failsafe.cc')
-rw-r--r--sql/repl_failsafe.cc38
1 files changed, 33 insertions, 5 deletions
diff --git a/sql/repl_failsafe.cc b/sql/repl_failsafe.cc
index e263ca7adeb..8ed002ca649 100644
--- a/sql/repl_failsafe.cc
+++ b/sql/repl_failsafe.cc
@@ -446,8 +446,33 @@ int show_new_master(THD* thd)
}
}
+/*
+ Asks the master for the list of its other connected slaves.
+ This is for failsafe replication :
+ in order for failsafe replication to work, the servers involved in replication
+ must know of each other. We accomplish this by having each slave report to the
+ master how to reach it, and on connection, each slave receives information
+ about where the other slaves are.
+
+ SYNOPSIS
+ update_slave_list()
+ mysql pre-existing connection to the master
+ mi master info
+
+ NOTES
+ mi is used only to give detailed error messages which include the
+ hostname/port of the master, the username used by the slave to connect to
+ the master.
+ If the user used by the slave to connect to the master does not have the
+ REPLICATION SLAVE privilege, it will pop in this function because SHOW SLAVE
+ HOSTS will fail on the master.
+
+ RETURN VALUES
+ 1 error
+ 0 success
+ */
-int update_slave_list(MYSQL* mysql)
+int update_slave_list(MYSQL* mysql, MASTER_INFO* mi)
{
MYSQL_RES* res=0;
MYSQL_ROW row;
@@ -459,7 +484,7 @@ int update_slave_list(MYSQL* mysql)
if (mc_mysql_query(mysql,"SHOW SLAVE HOSTS",0) ||
!(res = mc_mysql_store_result(mysql)))
{
- error = "Query error";
+ error= mc_mysql_error(mysql);
goto err;
}
@@ -473,7 +498,8 @@ int update_slave_list(MYSQL* mysql)
port_ind=4;
break;
default:
- error = "Invalid number of fields in SHOW SLAVE HOSTS";
+ error= "the master returned an invalid number of fields for SHOW SLAVE \
+HOSTS";
goto err;
}
@@ -491,7 +517,7 @@ int update_slave_list(MYSQL* mysql)
{
if (!(si = (SLAVE_INFO*)my_malloc(sizeof(SLAVE_INFO), MYF(MY_WME))))
{
- error = "Out of memory";
+ error= "the slave is out of memory";
pthread_mutex_unlock(&LOCK_slave_list);
goto err;
}
@@ -515,7 +541,9 @@ err:
mc_mysql_free_result(res);
if (error)
{
- sql_print_error("Error updating slave list: %s",error);
+ sql_print_error("While trying to obtain the list of slaves from the master \
+'%s:%d', user '%s' got the following error: '%s'",
+ mi->host, mi->port, mi->user, error);
DBUG_RETURN(1);
}
DBUG_RETURN(0);