List:Internals« Previous MessageNext Message »
From:guilhem Date:March 24 2005 2:32pm
Subject:bk commit into 5.0 tree (gbichot:1.1838)
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of gbichot. When gbichot 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
  1.1838 05/03/24 14:32:40 gbichot@stripped +9 -0
  merge from 4.1

  sql/sql_show.cc
    1.227 05/03/24 14:32:31 gbichot@stripped +13 -13
    merge

  sql/slave.h
    1.87 05/03/24 14:32:31 gbichot@stripped +0 -0
    merge

  sql/slave.cc
    1.244 05/03/24 14:32:30 gbichot@stripped +0 -1
    merge

  sql/structs.h
    1.45 05/03/24 11:28:27 gbichot@stripped +0 -0
    Auto merged

  sql/mysqld.cc
    1.441 05/03/24 11:28:26 gbichot@stripped +0 -0
    Auto merged

  mysql-test/t/rpl_deadlock.test
    1.4 05/03/24 11:28:25 gbichot@stripped +0 -0
    Auto merged

  mysql-test/r/rpl_deadlock.result
    1.4 05/03/24 11:28:25 gbichot@stripped +0 -0
    Auto merged

  libmysql/Makefile.shared
    1.60 05/03/24 11:28:25 gbichot@stripped +0 -0
    Auto merged

  BitKeeper/etc/logging_ok
    1.307 05/03/24 11:27:49 gbichot@stripped +0 -1
    auto-union

# 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:	gbichot
# Host:	quadita2.mysql.com
# Root:	/nfstmp1/guilhem/mysql-5.0-4ita/RESYNC

--- 1.440/sql/mysqld.cc	2005-03-21 22:41:21 +01:00
+++ 1.441/sql/mysqld.cc	2005-03-24 11:28:26 +01:00
@@ -3134,8 +3134,17 @@
 #endif
   if (opt_bootstrap) /* If running with bootstrap, do not start replication. */
     opt_skip_slave_start= 1;
-  /* init_slave() must be called after the thread keys are created */
-  init_slave();
+  /*
+    init_slave() must be called after the thread keys are created.
+    Some parts of the code (e.g. SHOW STATUS LIKE 'slave_running' and other
+    places) assume that active_mi != 0, so let's fail if it's 0 (out of
+    memory); a message has already been printed.
+  */
+  if (init_slave() && !active_mi)
+  {
+    end_thr_alarm(1);				// Don't allow alarms
+    unireg_abort(1);
+  }
 
   if (opt_bootstrap)
   {
@@ -5689,7 +5698,8 @@
   {"Select_range_check",       (char*) offsetof(STATUS_VAR, select_range_check_count),
SHOW_LONG_STATUS},
   {"Select_scan",	       (char*) offsetof(STATUS_VAR, select_scan_count),
SHOW_LONG_STATUS},
   {"Slave_open_temp_tables",   (char*) &slave_open_temp_tables, SHOW_LONG},
-  {"Slave_running",            (char*) 0, SHOW_SLAVE_RUNNING},
+  {"Slave_running",            (char*) 0,                       SHOW_SLAVE_RUNNING},
+  {"Slave_retried_transactions",(char*) 0,                     
SHOW_SLAVE_RETRIED_TRANS},
   {"Slow_launch_threads",      (char*) &slow_launch_threads,    SHOW_LONG},
   {"Slow_queries",             (char*) offsetof(STATUS_VAR, long_query_count),
SHOW_LONG_STATUS},
   {"Sort_merge_passes",	       (char*) offsetof(STATUS_VAR, filesort_merge_passes),
SHOW_LONG_STATUS},

--- 1.243/sql/slave.cc	2005-03-22 11:37:26 +01:00
+++ 1.244/sql/slave.cc	2005-03-24 14:32:30 +01:00
@@ -27,6 +27,7 @@
 #include <my_dir.h>
 #include <sql_common.h>
 
+#define MAX_SLAVE_RETRY_PAUSE 5
 bool use_slave_mask = 0;
 MY_BITMAP slave_error_mask;
 
@@ -2528,7 +2529,7 @@
    ignore_log_space_limit(0), last_master_timestamp(0), slave_skip_counter(0),
    abort_pos_wait(0), slave_run_id(0), sql_thd(0), last_slave_errno(0),
    inited(0), abort_slave(0), slave_running(0), until_condition(UNTIL_NONE),
-   until_log_pos(0)
+   until_log_pos(0), retried_trans(0)
 {
   group_relay_log_name[0]= event_relay_log_name[0]=
     group_master_log_name[0]= 0;
@@ -3261,9 +3262,8 @@
           init_master_info()).
           b) init_relay_log_pos(), because the BEGIN may be an older relay log.
         */
-        if (rli->trans_retries--)
+        if (rli->trans_retries < slave_trans_retries)
         {
-          sql_print_information("Slave SQL thread retries transaction");
           if (init_master_info(rli->mi, 0, 0, 0, SLAVE_SQL))
             sql_print_error("Failed to initialize the master info structure");
           else if (init_relay_log_pos(rli,
@@ -3275,8 +3275,16 @@
           else
           {
             exec_res= 0;
-            sleep(2); // chance for concurrent connection to get more locks
-          }
+	    /* chance for concurrent connection to get more locks */
+            safe_sleep(thd, min(rli->trans_retries, MAX_SLAVE_RETRY_PAUSE),
+		       (CHECK_KILLED_FUNC)sql_slave_killed, (void*)rli);
+            pthread_mutex_lock(&rli->data_lock); // because of SHOW STATUS
+	    rli->trans_retries++;
+            rli->retried_trans++;
+            pthread_mutex_unlock(&rli->data_lock);
+            DBUG_PRINT("info", ("Slave retries transaction "
+                                "rli->trans_retries: %lu", rli->trans_retries));
+	  }
         }
         else
           sql_print_error("Slave SQL thread retried transaction %lu time(s) "
@@ -3285,8 +3293,8 @@
                           slave_trans_retries);
       }
       if (!((thd->options & OPTION_BEGIN) && opt_using_transactions))
-        rli->trans_retries= slave_trans_retries; // restart from fresh
-    }
+         rli->trans_retries= 0; // restart from fresh
+     }
     return exec_res;
   }
   else
@@ -3701,7 +3709,7 @@
   pthread_mutex_lock(&rli->log_space_lock);
   rli->ignore_log_space_limit= 0;
   pthread_mutex_unlock(&rli->log_space_lock);
-  rli->trans_retries= slave_trans_retries; // start from "no error"
+  rli->trans_retries= 0; // start from "no error"
 
   if (init_relay_log_pos(rli,
 			 rli->group_relay_log_name,

--- 1.226/sql/sql_show.cc	2005-03-22 15:46:12 +01:00
+++ 1.227/sql/sql_show.cc	2005-03-24 14:32:31 +01:00
@@ -1331,6 +1331,19 @@
           pthread_mutex_unlock(&LOCK_active_mi);
           break;
         }
+        case SHOW_SLAVE_RETRIED_TRANS:
+        {
+          /*
+            TODO: in 5.1 with multimaster, have one such counter per line in SHOW
+            SLAVE STATUS, and have the sum over all lines here.
+          */
+	  pthread_mutex_lock(&LOCK_active_mi);
+          pthread_mutex_lock(&active_mi->rli.data_lock);
+	  end= int10_to_str(active_mi->rli.retried_trans, buff, 10);
+          pthread_mutex_unlock(&active_mi->rli.data_lock);
+	  pthread_mutex_unlock(&LOCK_active_mi);
+	  break;
+        }
 #endif /* HAVE_REPLICATION */
         case SHOW_OPENTABLES:
           end= int10_to_str((long) cached_tables(), buff, 10);

--- 1.44/sql/structs.h	2004-12-29 19:56:19 +01:00
+++ 1.45/sql/structs.h	2005-03-24 11:28:27 +01:00
@@ -182,7 +182,7 @@
   SHOW_SSL_CTX_SESS_TIMEOUTS, SHOW_SSL_CTX_SESS_CACHE_FULL,
   SHOW_SSL_GET_CIPHER_LIST,
 #endif /* HAVE_OPENSSL */
-  SHOW_RPL_STATUS, SHOW_SLAVE_RUNNING,
+  SHOW_RPL_STATUS, SHOW_SLAVE_RUNNING, SHOW_SLAVE_RETRIED_TRANS,
   SHOW_KEY_CACHE_LONG, SHOW_KEY_CACHE_CONST_LONG,
   SHOW_LONG_STATUS, SHOW_LONG_CONST_STATUS
 };

--- 1.3/mysql-test/r/rpl_deadlock.result	2005-03-16 02:32:40 +01:00
+++ 1.4/mysql-test/r/rpl_deadlock.result	2005-03-24 11:28:25 +01:00
@@ -8,6 +8,9 @@
 create table t2 (a int not null, key(a)) engine=innodb;
 create table t3 (a int) engine=innodb;
 create table t4 (a int) engine=innodb;
+show variables like 'slave_transaction_retries';
+Variable_name	Value
+slave_transaction_retries	0
 show create table t1;
 Table	Create Table
 t1	CREATE TABLE `t1` (
@@ -20,6 +23,9 @@
   `a` int(11) NOT NULL,
   KEY `a` (`a`)
 ) ENGINE=InnoDB DEFAULT CHARSET=latin1
+show variables like 'slave_transaction_retries';
+Variable_name	Value
+slave_transaction_retries	2
 stop slave;
 begin;
 insert into t3 select * from t2 for update;

--- 1.3/mysql-test/t/rpl_deadlock.test	2005-03-16 02:32:41 +01:00
+++ 1.4/mysql-test/t/rpl_deadlock.test	2005-03-24 11:28:25 +01:00
@@ -7,6 +7,8 @@
 # (Guilhem) have seen the test manage to provoke lock wait timeout
 # error but not deadlock error; that is ok as code deals with the two
 # errors in exactly the same way.
+# We don't 'show status like 'slave_retried_transactions'' because this
+# is not repeatable (depends on sleeps).
 
 source include/have_innodb.inc;
 source include/master-slave.inc;
@@ -16,10 +18,12 @@
 create table t2 (a int not null, key(a)) engine=innodb;
 create table t3 (a int) engine=innodb;
 create table t4 (a int) engine=innodb;
+show variables like 'slave_transaction_retries';
 sync_slave_with_master;
 
 show create table t1;
 show create table t2;
+show variables like 'slave_transaction_retries';
 stop slave;
 
 # 1) Test deadlock

--- 1.86/sql/slave.h	2005-03-22 00:24:59 +01:00
+++ 1.87/sql/slave.h	2005-03-24 14:32:31 +01:00
@@ -293,7 +293,14 @@
   } until_log_names_cmp_result;
 
   char cached_charset[6];
-  ulong trans_retries;
+  /*
+    trans_retries varies between 0 to slave_transaction_retries and counts how
+    many times the slave has retried the present transaction; gets reset to 0
+    when the transaction finally succeeds. retried_trans is a cumulative
+    counter: how many times the slave has retried a transaction (any) since
+    slave started.
+  */
+  ulong trans_retries, retried_trans;
 
   st_relay_log_info();
   ~st_relay_log_info();

--- 1.59/libmysql/Makefile.shared	2005-01-25 17:32:05 +01:00
+++ 1.60/libmysql/Makefile.shared	2005-03-24 11:28:25 +01:00
@@ -96,7 +96,8 @@
 	      `echo $(sql_cmn_objects) | sed "s;\.lo;.c;g"` \
 	       $(CHARSET_SRCS) $(CHARSET_OBJS) \
 	       $(mystringsextra) $(mysysheaders) $(vioheaders)\
-	       ../linked_client_sources net.c
+	       ../linked_libmysql_sources ../linked_libmysql_r_sources \
+               net.c
 
 conf_to_src_SOURCES = conf_to_src.c
 conf_to_src_LDADD=
Thread
bk commit into 5.0 tree (gbichot:1.1838)guilhem24 Mar