List:Commits« Previous MessageNext Message »
From:He Zhenxing Date:September 14 2009 5:45am
Subject:bzr commit into mysql-pe branch (zhenxing.he:3599) Bug#47298
View as plain text  
#At file:///media/sdb2/hezx/work/mysql/bzrwork/b47298/pe/ based on revid:alik@stripped

 3599 He Zhenxing	2009-09-14
      BUG#47298 Semisync: always wait until timeout if no semi-sync slave available
      
      Add an option to control whether the master should keep waiting
      until timeout when it detected that there is no semi-sync slave
      available.
      
      The bool option 'rpl_semi_sync_master_wait_no_slave' is 1 by
      defalt, and will keep waiting until timeout. When set to 0, the
      master will switch to asynchronous replication immediately when
      no semi-sync slave is available.
     @ plugin/semisync/semisync_master.cc
        Turn off semi-sync immediately on master if no semi-sync slave available
     @ plugin/semisync/semisync_master.h
        Add variable to control if should keep waiting when no semisync slave is available
     @ plugin/semisync/semisync_master_plugin.cc
        Add option to control if should keep waiting when no semisync slave is available

    M  plugin/semisync/semisync_master.cc
    M  plugin/semisync/semisync_master.h
    M  plugin/semisync/semisync_master_plugin.cc
=== modified file 'plugin/semisync/semisync_master.cc'
--- a/plugin/semisync/semisync_master.cc	2009-07-16 09:03:48 +0000
+++ b/plugin/semisync/semisync_master.cc	2009-09-14 05:44:59 +0000
@@ -41,6 +41,8 @@ unsigned long rpl_semi_sync_master_clien
 unsigned long long rpl_semi_sync_master_net_wait_total_time = 0;
 unsigned long long rpl_semi_sync_master_trx_wait_total_time = 0;
 
+char rpl_semi_sync_master_wait_no_slave = 1;
+
 
 static int getWaitTime(const struct timeval& start_tv);
 
@@ -535,6 +537,14 @@ void ReplSemiSyncMaster::remove_slave()
 {
   lock();
   rpl_semi_sync_master_clients--;
+
+  /* If user choose to not wait if no semi-sync slave available and
+     the last semi-sync slave exits, turn off semi-sync on master
+     immediately.
+   */
+  if (!rpl_semi_sync_master_wait_no_slave &&
+      rpl_semi_sync_master_clients == 0)
+    switch_off();
   unlock();
 }
 
@@ -679,7 +689,7 @@ int ReplSemiSyncMaster::commitTrx(const 
                             "Waiting for semi-sync ACK from slave");
 
     /* This is the real check inside the mutex. */
-    if (!getMasterEnabled() || !is_on() || !rpl_semi_sync_master_clients)
+    if (!getMasterEnabled() || !is_on())
       goto l_end;
 
     if (trace_level_ & kTraceDetail)

=== modified file 'plugin/semisync/semisync_master.h'
--- a/plugin/semisync/semisync_master.h	2009-06-15 13:30:20 +0000
+++ b/plugin/semisync/semisync_master.h	2009-09-14 05:44:59 +0000
@@ -363,4 +363,12 @@ extern unsigned long long rpl_semi_sync_
 extern unsigned long long rpl_semi_sync_master_trx_wait_total_time;
 extern unsigned long rpl_semi_sync_master_clients;
 
+/*
+  This indicates whether we should keep waiting if no semi-sync slave
+  is available.
+     0           : stop waiting if detected no avaialable semi-sync slave.
+     1 (default) : keep waiting until timeout even no available semi-sync slave.
+*/
+extern char rpl_semi_sync_master_wait_no_slave;
+
 #endif /* SEMISYNC_MASTER_H */

=== modified file 'plugin/semisync/semisync_master_plugin.cc'
--- a/plugin/semisync/semisync_master_plugin.cc	2009-07-16 08:59:59 +0000
+++ b/plugin/semisync/semisync_master_plugin.cc	2009-09-14 05:44:59 +0000
@@ -161,6 +161,13 @@ static MYSQL_SYSVAR_ULONG(timeout, rpl_s
   fix_rpl_semi_sync_master_timeout,	// update
   10000, 0, ~0L, 1);
 
+static MYSQL_SYSVAR_BOOL(wait_no_slave, rpl_semi_sync_master_wait_no_slave,
+  PLUGIN_VAR_OPCMDARG,
+ "Wait until timeout when no semi-synchronous replication slave available (enabled by default). ",
+  NULL, 			// check
+  NULL,                         // update
+  1);
+
 static MYSQL_SYSVAR_ULONG(trace_level, rpl_semi_sync_master_trace_level,
   PLUGIN_VAR_OPCMDARG,
  "The tracing level for semi-sync replication.",
@@ -182,6 +189,7 @@ static MYSQL_THDVAR_STR(reply_log_file_p
 static SYS_VAR* semi_sync_master_system_vars[]= {
   MYSQL_SYSVAR(enabled),
   MYSQL_SYSVAR(timeout),
+  MYSQL_SYSVAR(wait_no_slave),
   MYSQL_SYSVAR(trace_level),
   MYSQL_SYSVAR(reply_log_file_pos),
   NULL,


Attachment: [text/bzr-bundle] bzr/zhenxing.he@sun.com-20090914054459-2b9ita8rmvkwa3gk.bundle
Thread
bzr commit into mysql-pe branch (zhenxing.he:3599) Bug#47298He Zhenxing14 Sep
  • Re: bzr commit into mysql-pe branch (zhenxing.he:3599) Bug#47298Luís Soares17 Sep