List:Commits« Previous MessageNext Message »
From:He Zhenxing Date:October 23 2009 7:01am
Subject:bzr commit into mysql-5.1-rep+2 branch (zhenxing.he:3138)
View as plain text  
#At file:///media/sdb2/hezx/work/mysql/bzrwork/semisync/5.1-rep%2B2/ based on revid:li-bing.song@stripped

 3138 He Zhenxing	2009-10-23 [merge]
      Auto merge from 5.1-rep-semisync

    M  CMakeLists.txt
    M  mysql-test/mysql-test-run.pl
    M  mysql-test/suite/rpl/r/rpl_semi_sync.result
    M  mysql-test/suite/rpl/t/rpl_semi_sync.test
    M  plugin/semisync/Makefile.am
    M  plugin/semisync/semisync_master.cc
    M  plugin/semisync/semisync_master_plugin.cc
      3106.1.14 He Zhenxing	2009-10-23
                Add semi-sync support for Windows
         @ CMakeLists.txt
            Add plugin/semisync subdirectory
         @ mysql-test/mysql-test-run.pl
            Check for semisync dll for Windows
         @ mysql-test/suite/rpl/r/rpl_semi_sync.result
            Update result file
         @ mysql-test/suite/rpl/t/rpl_semi_sync.test
            Test semi-sync on Windows
         @ plugin/semisync/semisync_master.cc
            Define gettimeofday for Windows

        M  CMakeLists.txt
        M  mysql-test/mysql-test-run.pl
        M  mysql-test/suite/rpl/r/rpl_semi_sync.result
        M  mysql-test/suite/rpl/t/rpl_semi_sync.test
        M  plugin/semisync/Makefile.am
        M  plugin/semisync/semisync_master.cc
      3106.1.13 He Zhenxing	2009-10-18
                Postfix of bug#45674
                
                rpl_semi_sync_master_wait_sessions was reset by FLUSH STATUS,
                which could cause the master fail to wake up waiting sessions and
                result in master timeout waiting for slave reply.
                
                rpl_semi_sync_master_wait_session should not be reset, this 
                problem is fixed by this patch.
         @ plugin/semisync/semisync_master_plugin.cc
            Change wait_sessions from SHOW_LONG back to SHOW_FUNC so that it will not be reset by FLUSH STATUS.

        M  plugin/semisync/semisync_master_plugin.cc
=== modified file 'CMakeLists.txt'
--- a/CMakeLists.txt	2009-08-14 15:18:52 +0000
+++ b/CMakeLists.txt	2009-10-23 04:56:30 +0000
@@ -276,6 +276,10 @@ FOREACH(DIR ${DYNAMIC_ENGINE_DIRECTORIES
   ADD_SUBDIRECTORY(${DIR})
 ENDFOREACH(DIR ${DYNAMIC_ENGINE_DIRECTORIES})
 
+# Add subdirectories for semisync plugin
+IF(NOT WITHOUT_DYNAMIC_PLUGINS)
+  ADD_SUBDIRECTORY(plugin/semisync)
+ENDIF(NOT WITHOUT_DYNAMIC_PLUGINS)
 
 # FIXME "debug" only needed if build type is "Debug", but
 # CMAKE_BUILD_TYPE is not set during configure time.

=== modified file 'mysql-test/mysql-test-run.pl'
--- a/mysql-test/mysql-test-run.pl	2009-10-02 11:16:06 +0000
+++ b/mysql-test/mysql-test-run.pl	2009-10-23 04:56:30 +0000
@@ -1818,25 +1818,39 @@ sub environment_setup {
   # --------------------------------------------------------------------------
   # Add the path where mysqld will find semisync plugins
   # --------------------------------------------------------------------------
-  my $lib_semisync_master_plugin=
-      mtr_file_exists(vs_config_dirs('plugin/semisync',"libsemisync_master.so"),
-		      "$basedir/plugin/semisync/.libs/libsemisync_master.so",
-                      "$basedir/lib/mysql/plugin/libsemisync_master.so");
-  my $lib_semisync_slave_plugin=
-      mtr_file_exists(vs_config_dirs('plugin/semisync',"libsemisync_slave.so"),
-		      "$basedir/plugin/semisync/.libs/libsemisync_slave.so",
-                      "$basedir/lib/mysql/plugin/libsemisync_slave.so");
-  if ($lib_semisync_master_plugin && $lib_semisync_slave_plugin)
-  {
-    $ENV{'SEMISYNC_MASTER_PLUGIN'}= basename($lib_semisync_master_plugin);
-    $ENV{'SEMISYNC_SLAVE_PLUGIN'}= basename($lib_semisync_slave_plugin);
-    $ENV{'SEMISYNC_PLUGIN_OPT'}= "--plugin-dir=".dirname($lib_semisync_master_plugin);
-  }
-  else
-  {
-    $ENV{'SEMISYNC_MASTER_PLUGIN'}= "";
-    $ENV{'SEMISYNC_SLAVE_PLUGIN'}= "";
-    $ENV{'SEMISYNC_PLUGIN_OPT'}="--plugin-dir=";
+  if (!$opt_embedded_server) {
+    my $semisync_master_filename;
+    my $semisync_slave_filename;
+    if (IS_WINDOWS)
+    {
+       $semisync_master_filename = "semisync_master.dll";
+       $semisync_slave_filename = "semisync_slave.dll";
+    }
+    else
+    {
+       $semisync_master_filename = "libsemisync_master.so";
+       $semisync_slave_filename = "libsemisync_slave.so";
+    }
+    my $lib_semisync_master_plugin=
+      mtr_file_exists(vs_config_dirs('plugin/semisync',$semisync_master_filename),
+		      "$basedir/plugin/semisync/.libs/" . $semisync_master_filename,
+                      "$basedir/lib/mysql/plugin/" . $semisync_master_filename);
+    my $lib_semisync_slave_plugin=
+      mtr_file_exists(vs_config_dirs('plugin/semisync',$semisync_slave_filename),
+		      "$basedir/plugin/semisync/.libs/" . $semisync_slave_filename,
+                      "$basedir/lib/mysql/plugin/" . $semisync_slave_filename);
+    if ($lib_semisync_master_plugin && $lib_semisync_slave_plugin)
+    {
+      $ENV{'SEMISYNC_MASTER_PLUGIN'}= basename($lib_semisync_master_plugin);
+      $ENV{'SEMISYNC_SLAVE_PLUGIN'}= basename($lib_semisync_slave_plugin);
+      $ENV{'SEMISYNC_PLUGIN_OPT'}= "--plugin-dir=".dirname($lib_semisync_master_plugin);
+    }
+    else
+    {
+      $ENV{'SEMISYNC_MASTER_PLUGIN'}= "";
+      $ENV{'SEMISYNC_SLAVE_PLUGIN'}= "";
+      $ENV{'SEMISYNC_PLUGIN_OPT'}="--plugin-dir=";
+    }
   }
 
   # ----------------------------------------------------

=== modified file 'mysql-test/suite/rpl/r/rpl_semi_sync.result'
--- a/mysql-test/suite/rpl/r/rpl_semi_sync.result	2009-10-12 13:15:32 +0000
+++ b/mysql-test/suite/rpl/r/rpl_semi_sync.result	2009-10-23 04:56:30 +0000
@@ -397,7 +397,7 @@ Rpl_semi_sync_slave_status	OFF
 # Test non-semi-sync slave connect to semi-sync master
 #
 set sql_log_bin=0;
-INSTALL PLUGIN rpl_semi_sync_master SONAME 'libsemisync_master.so';
+INSTALL PLUGIN rpl_semi_sync_master SONAME 'SEMISYNC_MASTER_PLUGIN';
 set global rpl_semi_sync_master_timeout= 5000;
 /* 5s */
 set sql_log_bin=1;
@@ -416,7 +416,7 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_st
 Variable_name	Value
 include/stop_slave.inc
 [ reinstall semi-sync slave plugin and disable semi-sync ]
-INSTALL PLUGIN rpl_semi_sync_slave SONAME 'libsemisync_slave.so';
+INSTALL PLUGIN rpl_semi_sync_slave SONAME 'SEMISYNC_SLAVE_PLUGIN';
 set global rpl_semi_sync_slave_enabled= 0;
 SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
 Variable_name	Value

=== modified file 'mysql-test/suite/rpl/t/rpl_semi_sync.test'
--- a/mysql-test/suite/rpl/t/rpl_semi_sync.test	2009-10-12 13:21:13 +0000
+++ b/mysql-test/suite/rpl/t/rpl_semi_sync.test	2009-10-23 04:56:30 +0000
@@ -1,6 +1,5 @@
 source include/have_semisync_plugin.inc;
 source include/not_embedded.inc;
-source include/not_windows.inc;
 source include/have_innodb.inc;
 source include/master-slave.inc;
 
@@ -61,7 +60,7 @@ let $value = query_get_value(show variab
 if (`select '$value' = 'No such row'`)
 {
     set sql_log_bin=0;
-    INSTALL PLUGIN rpl_semi_sync_master SONAME 'libsemisync_master.so';
+    eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN';
     set global rpl_semi_sync_master_timeout= 5000; /* 5s */
     set sql_log_bin=1;
 }
@@ -126,7 +125,7 @@ let $value= query_get_value(show variabl
 if (`select '$value' = 'No such row'`)
 {
     set sql_log_bin=0;
-    INSTALL PLUGIN rpl_semi_sync_slave SONAME 'libsemisync_slave.so';
+    eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN';
     set sql_log_bin=1;
 }
 enable_query_log;
@@ -536,7 +535,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_st
 
 connection master;
 set sql_log_bin=0;
-INSTALL PLUGIN rpl_semi_sync_master SONAME 'libsemisync_master.so';
+replace_result $SEMISYNC_MASTER_PLUGIN SEMISYNC_MASTER_PLUGIN;
+eval INSTALL PLUGIN rpl_semi_sync_master SONAME '$SEMISYNC_MASTER_PLUGIN';
 set global rpl_semi_sync_master_timeout= 5000; /* 5s */
 set sql_log_bin=1;
 set global rpl_semi_sync_master_enabled= 1;
@@ -554,7 +554,8 @@ SHOW STATUS LIKE 'Rpl_semi_sync_slave_st
 source include/stop_slave.inc;
 
 echo [ reinstall semi-sync slave plugin and disable semi-sync ];
-INSTALL PLUGIN rpl_semi_sync_slave SONAME 'libsemisync_slave.so';
+replace_result $SEMISYNC_SLAVE_PLUGIN SEMISYNC_SLAVE_PLUGIN;
+eval INSTALL PLUGIN rpl_semi_sync_slave SONAME '$SEMISYNC_SLAVE_PLUGIN';
 set global rpl_semi_sync_slave_enabled= 0;
 SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
 SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';

=== modified file 'plugin/semisync/Makefile.am'
--- a/plugin/semisync/Makefile.am	2009-10-12 12:55:01 +0000
+++ b/plugin/semisync/Makefile.am	2009-10-23 04:56:30 +0000
@@ -34,3 +34,5 @@ libsemisync_slave_la_LDFLAGS =	-module
 libsemisync_slave_la_CXXFLAGS=	$(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
 libsemisync_slave_la_CFLAGS =	$(AM_CFLAGS) -DMYSQL_DYNAMIC_PLUGIN
 libsemisync_slave_la_SOURCES = semisync.cc semisync_slave.cc semisync_slave_plugin.cc
+
+EXTRA_DIST=		CMakeLists.txt plug.in

=== modified file 'plugin/semisync/semisync_master.cc'
--- a/plugin/semisync/semisync_master.cc	2009-10-12 13:15:32 +0000
+++ b/plugin/semisync/semisync_master.cc	2009-10-23 04:56:30 +0000
@@ -45,6 +45,18 @@ char rpl_semi_sync_master_wait_no_slave 
 
 static int getWaitTime(const struct timeval& start_tv);
 
+#ifdef __WIN__
+static int gettimeofday(struct timeval *tv, void *tz)
+{
+  unsigned int ticks;
+  ticks= GetTickCount();
+  tv->tv_usec= ticks*1000;
+  tv->tv_sec= ticks/1000;
+
+  return 0;
+}
+#endif /* __WIN__ */
+
 /*******************************************************************************
  *
  * <ActiveTranx> class : manage all active transaction nodes
@@ -728,6 +740,11 @@ int ReplSemiSyncMaster::commitTrx(const 
         int diff_usecs = start_tv.tv_usec + wait_timeout_ * TIME_THOUSAND;
 
         /* Calcuate the waiting period. */
+#ifdef __WIN__
+        abstime.tv.i64 = (__int64)start_tv.tv_sec * TIME_MILLION * 10;
+        abstime.tv.i64 += (__int64)diff_usecs * 10;
+        abstime.max_timeout_msec= (long)wait_timeout_;
+#else
         abstime.tv_sec = start_tv.tv_sec;
         if (diff_usecs < TIME_MILLION)
 	{
@@ -742,6 +759,7 @@ int ReplSemiSyncMaster::commitTrx(const 
           }
           abstime.tv_nsec = diff_usecs * TIME_THOUSAND;
         }
+#endif /* __WIN__ */
 
         /* In semi-synchronous replication, we wait until the binlog-dump
          * thread has received the reply on the relevant binlog segment from the

=== modified file 'plugin/semisync/semisync_master_plugin.cc'
--- a/plugin/semisync/semisync_master_plugin.cc	2009-10-12 13:15:32 +0000
+++ b/plugin/semisync/semisync_master_plugin.cc	2009-10-18 12:29:03 +0000
@@ -278,6 +278,7 @@ Binlog_transmit_observer transmit_observ
 
 DEF_SHOW_FUNC(status, SHOW_BOOL)
 DEF_SHOW_FUNC(clients, SHOW_LONG)
+DEF_SHOW_FUNC(wait_sessions, SHOW_LONG)
 DEF_SHOW_FUNC(trx_wait_time, SHOW_LONGLONG)
 DEF_SHOW_FUNC(trx_wait_num, SHOW_LONGLONG)
 DEF_SHOW_FUNC(net_wait_time, SHOW_LONGLONG)
@@ -301,8 +302,8 @@ static SHOW_VAR semi_sync_master_status_
    (char*) &rpl_semi_sync_master_no_transactions,
    SHOW_LONG},
   {"Rpl_semi_sync_master_wait_sessions",
-   (char*) &rpl_semi_sync_master_wait_sessions,
-   SHOW_LONG},
+   (char*) &SHOW_FNAME(wait_sessions),
+   SHOW_FUNC},
   {"Rpl_semi_sync_master_no_times",
    (char*) &rpl_semi_sync_master_off_times,
    SHOW_LONG},


Attachment: [text/bzr-bundle] bzr/zhenxing.he@sun.com-20091023070046-efz9eunbrcl2mof5.bundle
Thread
bzr commit into mysql-5.1-rep+2 branch (zhenxing.he:3138) He Zhenxing23 Oct