List:Commits« Previous MessageNext Message »
From:Sven Sandberg Date:November 29 2010 11:04am
Subject:bzr commit into mysql-5.5-bugteam branch (sven.sandberg:3139) WL#5670
View as plain text  
#At file:///home/sven/bzr/w5670-show_new_master/5.5-bugteam/ based on revid:tor.didriksen@stripped

 3139 Sven Sandberg	2010-11-29
      WL#5670: Proposal: Remove SHOW NEW MASTER statement
      Removes SHOW NEW MASTER statement and all related code.
      Also removes the unused function update_slave_list from repl_failsafe.cc.
     @ sql/mysqld.cc
        Remove SQLCOM_SHOW_NEW_MASTER.
     @ sql/repl_failsafe.cc
        Remove show_new_master, which was only used by the removed SHOW NEW MASTER statement.
        Remove translate_master, which was only used by show_new_master.
        Remove find_slave_event, which was only used by translate_master.
        Remove find_target_pos, which was only used by translate_master.
        Remove cmp_master_pos, which was only used by translate_master.
        Remove update_slave_list, which was not used at all.
     @ sql/repl_failsafe.h
        Removed update_slave_list
     @ sql/sp_head.cc
        Removed SQLCOM_SHOW_NEW_MASTER
     @ sql/sql_lex.h
        Removed SQLCOM_SHOW_NEW_MASTER
     @ sql/sql_parse.cc
        Removed SQLCOM_SHOW_NEW_MASTER
     @ sql/sql_repl.cc
        Removed cmp_master_pos(char*,ulonglong,char*,ulonglong), which was
        only used by cmp_master_pos*Slave_log_event* sev, LEX_MASTER_INFO* mi) in repl_failsafe.cc,
        which has been removed.
     @ sql/sql_repl.h
        removed cmp_master_pos
     @ sql/sql_yacc.yy
        removed syntax SHOW NEW MASTER.

    modified:
      sql/mysqld.cc
      sql/repl_failsafe.cc
      sql/repl_failsafe.h
      sql/sp_head.cc
      sql/sql_lex.h
      sql/sql_parse.cc
      sql/sql_repl.cc
      sql/sql_repl.h
      sql/sql_yacc.yy
=== modified file 'sql/mysqld.cc'
--- a/sql/mysqld.cc	2010-11-21 13:32:48 +0000
+++ b/sql/mysqld.cc	2010-11-29 11:04:16 +0000
@@ -3018,7 +3018,6 @@ SHOW_VAR com_status_vars[]= {
   {"show_grants",          (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_GRANTS]), SHOW_LONG_STATUS},
   {"show_keys",            (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_KEYS]), SHOW_LONG_STATUS},
   {"show_master_status",   (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_MASTER_STAT]), SHOW_LONG_STATUS},
-  {"show_new_master",      (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_NEW_MASTER]), SHOW_LONG_STATUS},
   {"show_open_tables",     (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_OPEN_TABLES]), SHOW_LONG_STATUS},
   {"show_plugins",         (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PLUGINS]), SHOW_LONG_STATUS},
   {"show_privileges",      (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_PRIVILEGES]), SHOW_LONG_STATUS},

=== modified file 'sql/repl_failsafe.cc'
--- a/sql/repl_failsafe.cc	2010-10-11 14:50:14 +0000
+++ b/sql/repl_failsafe.cc	2010-11-29 11:04:16 +0000
@@ -56,10 +56,6 @@ const char* rpl_status_type[]=
   "RECOVERY_CAPTAIN","NULL",NullS
 };
 
-static Slave_log_event* find_slave_event(IO_CACHE* log,
-					 const char* log_file_name,
-					 char* errmsg);
-
 /*
   All of the functions defined in this file which are not used (the ones to
   handle failsafe) are not used; their code has not been updated for more than
@@ -91,13 +87,6 @@ void change_rpl_status(ulong from_status
 }\
 
 
-static inline int cmp_master_pos(Slave_log_event* sev, LEX_MASTER_INFO* mi)
-{
-  return cmp_master_pos(sev->master_log, sev->master_pos, mi->log_file_name,
-			mi->pos);
-}
-
-
 void unregister_slave(THD* thd, bool only_mine, bool need_mutex)
 {
   if (thd->server_id)
@@ -228,361 +217,6 @@ void end_slave_list()
   }
 }
 
-static int find_target_pos(LEX_MASTER_INFO *mi, IO_CACHE *log, char *errmsg)
-{
-  my_off_t log_pos =	    (my_off_t) mi->pos;
-  uint32 target_server_id = mi->server_id;
-
-  for (;;)
-  {
-    Log_event* ev;
-    if (!(ev= Log_event::read_log_event(log, (mysql_mutex_t*) 0, 0)))
-    {
-      if (log->error > 0)
-	strmov(errmsg, "Binary log truncated in the middle of event");
-      else if (log->error < 0)
-	strmov(errmsg, "I/O error reading binary log");
-      else
-	strmov(errmsg, "Could not find target event in the binary log");
-      return 1;
-    }
-
-    if (ev->log_pos >= log_pos && ev->server_id == target_server_id)
-    {
-      delete ev;
-      mi->pos = my_b_tell(log);
-      return 0;
-    }
-    delete ev;
-  }
-  /* Impossible */
-}
-
-/**
-  @details 
-  Before 4.0.15 we had a member of THD called log_pos, it was meant for
-  failsafe replication code in repl_failsafe.cc which is disabled until
-  it is reworked. Event's log_pos used to be preserved through 
-  log-slave-updates to make code in repl_failsafe.cc work (this 
-  function, SHOW NEW MASTER); but on the other side it caused unexpected
-  values in Exec_Master_Log_Pos in A->B->C replication setup, 
-  synchronization problems in master_pos_wait(), ... So we 
-  (Dmitri & Guilhem) removed it.
-  
-  So for now this function is broken. 
-*/
-
-int translate_master(THD* thd, LEX_MASTER_INFO* mi, char* errmsg)
-{
-  LOG_INFO linfo;
-  char last_log_name[FN_REFLEN];
-  IO_CACHE log;
-  File file = -1, last_file = -1;
-  mysql_mutex_t *log_lock;
-  const char* errmsg_p;
-  Slave_log_event* sev = 0;
-  my_off_t last_pos = 0;
-  int error = 1;
-  int cmp_res;
-  LINT_INIT(cmp_res);
-  DBUG_ENTER("translate_master");
-
-  if (!mysql_bin_log.is_open())
-  {
-    strmov(errmsg,"Binary log is not open");
-    DBUG_RETURN(1);
-  }
-
-  if (!server_id_supplied)
-  {
-    strmov(errmsg, "Misconfigured master - server id was not set");
-    DBUG_RETURN(1);
-  }
-
-  if (mysql_bin_log.find_log_pos(&linfo, NullS, 1))
-  {
-    strmov(errmsg,"Could not find first log");
-    DBUG_RETURN(1);
-  }
-  thd->current_linfo = &linfo;
-
-  bzero((char*) &log,sizeof(log));
-  log_lock = mysql_bin_log.get_log_lock();
-  mysql_mutex_lock(log_lock);
-
-  for (;;)
-  {
-    if ((file=open_binlog(&log, linfo.log_file_name, &errmsg_p)) < 0)
-    {
-      strmov(errmsg, errmsg_p);
-      goto err;
-    }
-
-    if (!(sev = find_slave_event(&log, linfo.log_file_name, errmsg)))
-      goto err;
-
-    cmp_res = cmp_master_pos(sev, mi);
-    delete sev;
-
-    if (!cmp_res)
-    {
-      /* Copy basename */
-      fn_format(mi->log_file_name, linfo.log_file_name, "","",1);
-      mi->pos = my_b_tell(&log);
-      goto mi_inited;
-    }
-    else if (cmp_res > 0)
-    {
-      if (!last_pos)
-      {
-	strmov(errmsg,
-	       "Slave event in first log points past the target position");
-	goto err;
-      }
-      end_io_cache(&log);
-      mysql_file_close(file, MYF(MY_WME));
-      if (init_io_cache(&log, (file = last_file), IO_SIZE, READ_CACHE, 0, 0,
-			MYF(MY_WME)))
-      {
-	errmsg[0] = 0;
-	goto err;
-      }
-      break;
-    }
-
-    strmov(last_log_name, linfo.log_file_name);
-    last_pos = my_b_tell(&log);
-
-    switch (mysql_bin_log.find_next_log(&linfo, 1)) {
-    case LOG_INFO_EOF:
-      if (last_file >= 0)
-       mysql_file_close(last_file, MYF(MY_WME));
-      last_file = -1;
-      goto found_log;
-    case 0:
-      break;
-    default:
-      strmov(errmsg, "Error reading log index");
-      goto err;
-    }
-
-    end_io_cache(&log);
-    if (last_file >= 0)
-      mysql_file_close(last_file, MYF(MY_WME));
-    last_file = file;
-  }
-
-found_log:
-  my_b_seek(&log, last_pos);
-  if (find_target_pos(mi,&log,errmsg))
-    goto err;
-  fn_format(mi->log_file_name, last_log_name, "","",1);  /* Copy basename */
-
-mi_inited:
-  error = 0;
-err:
-  mysql_mutex_unlock(log_lock);
-  end_io_cache(&log);
-  mysql_mutex_lock(&LOCK_thread_count);
-  thd->current_linfo = 0;
-  mysql_mutex_unlock(&LOCK_thread_count);
-  if (file >= 0)
-    mysql_file_close(file, MYF(MY_WME));
-  if (last_file >= 0 && last_file != file)
-    mysql_file_close(last_file, MYF(MY_WME));
-
-  DBUG_RETURN(error);
-}
-
-
-/**
-  Caller must delete result when done.
-*/
-
-static Slave_log_event* find_slave_event(IO_CACHE* log,
-					 const char* log_file_name,
-					 char* errmsg)
-{
-  Log_event* ev;
-  int i;
-  bool slave_event_found = 0;
-  LINT_INIT(ev);
-
-  for (i = 0; i < 2; i++)
-  {
-    if (!(ev= Log_event::read_log_event(log, (mysql_mutex_t*)0, 0)))
-    {
-      my_snprintf(errmsg, SLAVE_ERRMSG_SIZE,
-		  "Error reading event in log '%s'",
-		  (char*)log_file_name);
-      return 0;
-    }
-    if (ev->get_type_code() == SLAVE_EVENT)
-    {
-      slave_event_found = 1;
-      break;
-    }
-    delete ev;
-  }
-  if (!slave_event_found)
-  {
-    my_snprintf(errmsg, SLAVE_ERRMSG_SIZE,
-		"Could not find slave event in log '%s'",
-		(char*)log_file_name);
-    return 0;
-  }
-
-  return (Slave_log_event*)ev;
-}
-
-/**
-  This function is broken now. 
-
-  @seealso translate_master()
-*/
-
-bool show_new_master(THD* thd)
-{
-  Protocol *protocol= thd->protocol;
-  DBUG_ENTER("show_new_master");
-  List<Item> field_list;
-  char errmsg[SLAVE_ERRMSG_SIZE];
-  LEX_MASTER_INFO* lex_mi= &thd->lex->mi;
-
-  errmsg[0]=0;					// Safety
-  if (translate_master(thd, lex_mi, errmsg))
-  {
-    if (errmsg[0])
-      my_error(ER_ERROR_WHEN_EXECUTING_COMMAND, MYF(0),
-               "SHOW NEW MASTER", errmsg);
-    DBUG_RETURN(TRUE);
-  }
-  else
-  {
-    field_list.push_back(new Item_empty_string("Log_name", 20));
-    field_list.push_back(new Item_return_int("Log_pos", 10,
-					     MYSQL_TYPE_LONGLONG));
-    if (protocol->send_result_set_metadata(&field_list,
-                              Protocol::SEND_NUM_ROWS | Protocol::SEND_EOF))
-      DBUG_RETURN(TRUE);
-    protocol->prepare_for_resend();
-    protocol->store(lex_mi->log_file_name, &my_charset_bin);
-    protocol->store((ulonglong) lex_mi->pos);
-    if (protocol->write())
-      DBUG_RETURN(TRUE);
-    my_eof(thd);
-    DBUG_RETURN(FALSE);
-  }
-}
-
-/**
-  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.
-
-  @param mysql           pre-existing connection to the master
-  @param mi              master info
-
-  @note
-    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.
-
-  @retval
-    1           error
-  @retval
-    0           success
-*/
-
-int update_slave_list(MYSQL* mysql, Master_info* mi)
-{
-  MYSQL_RES* res=0;
-  MYSQL_ROW row;
-  const char* error=0;
-  bool have_auth_info;
-  int port_ind;
-  DBUG_ENTER("update_slave_list");
-
-  if (mysql_real_query(mysql, STRING_WITH_LEN("SHOW SLAVE HOSTS")) ||
-      !(res = mysql_store_result(mysql)))
-  {
-    error= mysql_error(mysql);
-    goto err;
-  }
-
-  switch (mysql_num_fields(res)) {
-  case 5:
-    have_auth_info = 0;
-    port_ind=2;
-    break;
-  case 7:
-    have_auth_info = 1;
-    port_ind=4;
-    break;
-  default:
-    error= "the master returned an invalid number of fields for SHOW SLAVE \
-HOSTS";
-    goto err;
-  }
-
-  mysql_mutex_lock(&LOCK_slave_list);
-
-  while ((row= mysql_fetch_row(res)))
-  {
-    uint32 log_server_id;
-    SLAVE_INFO* si, *old_si;
-    log_server_id = atoi(row[0]);
-    if ((old_si= (SLAVE_INFO*)my_hash_search(&slave_list,
-                                             (uchar*)&log_server_id,4)))
-      si = old_si;
-    else
-    {
-      if (!(si = (SLAVE_INFO*)my_malloc(sizeof(SLAVE_INFO), MYF(MY_WME))))
-      {
-	error= "the slave is out of memory";
-        mysql_mutex_unlock(&LOCK_slave_list);
-	goto err;
-      }
-      si->server_id = log_server_id;
-      if (my_hash_insert(&slave_list, (uchar*)si))
-      {
-        error= "the slave is out of memory";
-        mysql_mutex_unlock(&LOCK_slave_list);
-        goto err;
-      }
-    }
-    strmake(si->host, row[1], sizeof(si->host)-1);
-    si->port = atoi(row[port_ind]);
-    si->rpl_recovery_rank = atoi(row[port_ind+1]);
-    si->master_id = atoi(row[port_ind+2]);
-    if (have_auth_info)
-    {
-      strmake(si->user, row[2], sizeof(si->user)-1);
-      strmake(si->password, row[3], sizeof(si->password)-1);
-    }
-  }
-  mysql_mutex_unlock(&LOCK_slave_list);
-
-err:
-  if (res)
-    mysql_free_result(res);
-  if (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);
-}
-
 
 /**
   Execute a SHOW SLAVE HOSTS statement.

=== modified file 'sql/repl_failsafe.h'
--- a/sql/repl_failsafe.h	2010-10-11 14:50:14 +0000
+++ b/sql/repl_failsafe.h	2010-11-29 11:04:16 +0000
@@ -36,7 +36,6 @@ extern const char* rpl_role_type[], *rpl
 pthread_handler_t handle_failsafe_rpl(void *arg);
 void change_rpl_status(ulong from_status, ulong to_status);
 int find_recovery_captain(THD* thd, MYSQL* mysql);
-int update_slave_list(MYSQL* mysql, Master_info* mi);
 
 extern HASH slave_list;
 

=== modified file 'sql/sp_head.cc'
--- a/sql/sp_head.cc	2010-11-18 15:01:58 +0000
+++ b/sql/sp_head.cc	2010-11-29 11:04:16 +0000
@@ -237,7 +237,6 @@ sp_get_flags_for_command(LEX *lex)
   case SQLCOM_SHOW_EVENTS:
   case SQLCOM_SHOW_KEYS:
   case SQLCOM_SHOW_MASTER_STAT:
-  case SQLCOM_SHOW_NEW_MASTER:
   case SQLCOM_SHOW_OPEN_TABLES:
   case SQLCOM_SHOW_PRIVILEGES:
   case SQLCOM_SHOW_PROCESSLIST:

=== modified file 'sql/sql_lex.h'
--- a/sql/sql_lex.h	2010-11-11 17:11:05 +0000
+++ b/sql/sql_lex.h	2010-11-29 11:04:16 +0000
@@ -162,7 +162,7 @@ enum enum_sql_command {
   SQLCOM_SHOW_OPEN_TABLES,
   SQLCOM_HA_OPEN, SQLCOM_HA_CLOSE, SQLCOM_HA_READ,
   SQLCOM_SHOW_SLAVE_HOSTS, SQLCOM_DELETE_MULTI, SQLCOM_UPDATE_MULTI,
-  SQLCOM_SHOW_BINLOG_EVENTS, SQLCOM_SHOW_NEW_MASTER, SQLCOM_DO,
+  SQLCOM_SHOW_BINLOG_EVENTS, SQLCOM_DO,
   SQLCOM_SHOW_WARNS, SQLCOM_EMPTY_QUERY, SQLCOM_SHOW_ERRORS,
   SQLCOM_SHOW_STORAGE_ENGINES, SQLCOM_SHOW_PRIVILEGES,
   SQLCOM_HELP, SQLCOM_CREATE_USER, SQLCOM_DROP_USER, SQLCOM_RENAME_USER,

=== modified file 'sql/sql_parse.cc'
--- a/sql/sql_parse.cc	2010-11-18 15:01:58 +0000
+++ b/sql/sql_parse.cc	2010-11-29 11:04:16 +0000
@@ -316,7 +316,6 @@ void init_update_queries(void)
   sql_command_flags[SQLCOM_SHOW_VARIABLES]=   CF_STATUS_COMMAND | CF_REEXECUTION_FRAGILE;
   sql_command_flags[SQLCOM_SHOW_CHARSETS]=    CF_STATUS_COMMAND | CF_REEXECUTION_FRAGILE;
   sql_command_flags[SQLCOM_SHOW_COLLATIONS]=  CF_STATUS_COMMAND | CF_REEXECUTION_FRAGILE;
-  sql_command_flags[SQLCOM_SHOW_NEW_MASTER]=  CF_STATUS_COMMAND;
   sql_command_flags[SQLCOM_SHOW_BINLOGS]=     CF_STATUS_COMMAND;
   sql_command_flags[SQLCOM_SHOW_SLAVE_HOSTS]= CF_STATUS_COMMAND;
   sql_command_flags[SQLCOM_SHOW_BINLOG_EVENTS]= CF_STATUS_COMMAND;
@@ -2138,19 +2137,6 @@ case SQLCOM_PREPARE:
 #endif
     break;
   }
-  case SQLCOM_SHOW_NEW_MASTER:
-  {
-    if (check_global_access(thd, REPL_SLAVE_ACL))
-      goto error;
-    /* This query don't work now. See comment in repl_failsafe.cc */
-#ifndef WORKING_NEW_MASTER
-    my_error(ER_NOT_SUPPORTED_YET, MYF(0), "SHOW NEW MASTER");
-    goto error;
-#else
-    res = show_new_master(thd);
-    break;
-#endif
-  }
 
 #ifdef HAVE_REPLICATION
   case SQLCOM_SHOW_SLAVE_HOSTS:

=== modified file 'sql/sql_repl.cc'
--- a/sql/sql_repl.cc	2010-09-06 17:18:44 +0000
+++ b/sql/sql_repl.cc	2010-11-29 11:04:16 +0000
@@ -1664,23 +1664,6 @@ int reset_master(THD* thd)
   return 0;
 }
 
-int cmp_master_pos(const char* log_file_name1, ulonglong log_pos1,
-		   const char* log_file_name2, ulonglong log_pos2)
-{
-  int res;
-  size_t log_file_name1_len=  strlen(log_file_name1);
-  size_t log_file_name2_len=  strlen(log_file_name2);
-
-  //  We assume that both log names match up to '.'
-  if (log_file_name1_len == log_file_name2_len)
-  {
-    if ((res= strcmp(log_file_name1, log_file_name2)))
-      return res;
-    return (log_pos1 < log_pos2) ? -1 : (log_pos1 == log_pos2) ? 0 : 1;
-  }
-  return ((log_file_name1_len < log_file_name2_len) ? -1 : 1);
-}
-
 
 /**
   Execute a SHOW BINLOG EVENTS statement.

=== modified file 'sql/sql_repl.h'
--- a/sql/sql_repl.h	2010-03-31 14:05:33 +0000
+++ b/sql/sql_repl.h	2010-11-29 11:04:16 +0000
@@ -43,8 +43,6 @@ int start_slave(THD* thd, Master_info* m
 int stop_slave(THD* thd, Master_info* mi, bool net_report);
 bool change_master(THD* thd, Master_info* mi);
 bool mysql_show_binlog_events(THD* thd);
-int cmp_master_pos(const char* log_file_name1, ulonglong log_pos1,
-		   const char* log_file_name2, ulonglong log_pos2);
 int reset_slave(THD *thd, Master_info* mi);
 int reset_master(THD* thd);
 bool purge_master_logs(THD* thd, const char* to_log);

=== modified file 'sql/sql_yacc.yy'
--- a/sql/sql_yacc.yy	2010-11-11 17:11:05 +0000
+++ b/sql/sql_yacc.yy	2010-11-29 11:04:16 +0000
@@ -10921,19 +10921,6 @@ show_param:
             if (prepare_schema_table(YYTHD, lex, $4, SCH_COLUMNS))
               MYSQL_YYABORT;
           }
-        | NEW_SYM MASTER_SYM FOR_SYM SLAVE
-          WITH MASTER_LOG_FILE_SYM EQ
-          TEXT_STRING_sys /* $8 */
-          AND_SYM MASTER_LOG_POS_SYM EQ
-          ulonglong_num /* $12 */
-          AND_SYM MASTER_SERVER_ID_SYM EQ
-          ulong_num /* $16 */
-          {
-            Lex->sql_command = SQLCOM_SHOW_NEW_MASTER;
-            Lex->mi.log_file_name = $8.str;
-            Lex->mi.pos = $12;
-            Lex->mi.server_id = $16;
-          }
         | master_or_binary LOGS_SYM
           {
             Lex->sql_command = SQLCOM_SHOW_BINLOGS;


Attachment: [text/bzr-bundle] bzr/sven.sandberg@oracle.com-20101129110416-y9i91cgkqhlx4tto.bundle
Thread
bzr commit into mysql-5.5-bugteam branch (sven.sandberg:3139) WL#5670Sven Sandberg29 Nov
  • Re: bzr commit into mysql-5.5-bugteam branch (sven.sandberg:3139)WL#5670He Zhenxing15 Feb
  • Re: bzr commit into mysql-5.5-bugteam branch (sven.sandberg:3139)WL#5670Luís Soares15 Feb
    • Re: bzr commit into mysql-5.5-bugteam branch (sven.sandberg:3139)WL#5670Sven Sandberg16 Feb