#At file:///build/bzr/next-replication/ based on revid:pstoev@stripped
2818 Philip Stoev 2009-09-17 [merge]
bogus
modified:
plugin/semisync/semisync_master.cc
plugin/semisync/semisync_master.h
plugin/semisync/semisync_master_plugin.cc
=== modified file 'plugin/semisync/semisync_master.cc'
--- a/plugin/semisync/semisync_master.cc 2009-09-17 09:10:42 +0000
+++ b/plugin/semisync/semisync_master.cc 2009-09-17 12:28:39 +0000
@@ -41,6 +41,8 @@ unsigned long rpl_semi_sync_master_clien
unsigned long long rpl_semi_sync_master_net_wait_time = 0;
unsigned long long rpl_semi_sync_master_trx_wait_time = 0;
+char rpl_semi_sync_master_wait_no_slave = 1;
+
static int getWaitTime(const struct timeval& start_tv);
@@ -525,6 +527,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();
}
@@ -669,7 +679,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-09-17 09:10:42 +0000
+++ b/plugin/semisync/semisync_master.h 2009-09-17 12:28:39 +0000
@@ -352,4 +352,12 @@ extern unsigned long long rpl_semi_sync_
extern unsigned long long rpl_semi_sync_master_net_wait_time;
extern unsigned long long rpl_semi_sync_master_trx_wait_time;
+/*
+ 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-09-17 09:10:42 +0000
+++ b/plugin/semisync/semisync_master_plugin.cc 2009-09-17 12:28:39 +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/pstoev@mysql.com-20090917122839-z0xgcc8wgrqqsboq.bundle
| Thread |
|---|
| • bzr commit into mysql-5.4 branch (pstoev:2818) | Philip Stoev | 17 Sep |