Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
42743de6
Commit
42743de6
authored
Oct 23, 2009
by
He Zhenxing
Browse files
Options
Browse Files
Download
Plain Diff
Auto merge 5.1-rep-semisync to 5.1-rep+2-delivery1
parents
c1584c98
f09129c6
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
110 additions
and
28 deletions
+110
-28
CMakeLists.txt
CMakeLists.txt
+4
-0
mysql-test/include/have_semisync_plugin.inc
mysql-test/include/have_semisync_plugin.inc
+7
-0
mysql-test/mysql-test-run.pl
mysql-test/mysql-test-run.pl
+33
-19
mysql-test/suite/rpl/r/rpl_semi_sync.result
mysql-test/suite/rpl/r/rpl_semi_sync.result
+2
-2
mysql-test/suite/rpl/t/rpl_semi_sync.test
mysql-test/suite/rpl/t/rpl_semi_sync.test
+6
-5
plugin/semisync/CMakeLists.txt
plugin/semisync/CMakeLists.txt
+35
-0
plugin/semisync/Makefile.am
plugin/semisync/Makefile.am
+2
-0
plugin/semisync/semisync_master.cc
plugin/semisync/semisync_master.cc
+18
-0
plugin/semisync/semisync_master_plugin.cc
plugin/semisync/semisync_master_plugin.cc
+3
-2
No files found.
CMakeLists.txt
View file @
42743de6
...
...
@@ -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.
...
...
mysql-test/include/have_semisync_plugin.inc
View file @
42743de6
...
...
@@ -13,3 +13,10 @@ if (`select LENGTH('$SEMISYNC_MASTER_PLUGIN') = 0`)
{
skip
Need
semisync
plugins
;
}
#
# Check if --plugin-dir was setup for semisync
#
if
(
`SELECT CONCAT('--plugin-dir=', @@plugin_dir) != '$SEMISYNC_PLUGIN_OPT'`
)
{
--
skip
SEMISYNC
plugin
requires
that
--
plugin
-
dir
is
set
to
the
semisync
plugin
dir
(
either
the
.
opt
file
does
not
contain
\
$SEMISYNC_PLUGIN_OPT
or
another
plugin
is
in
use
)
}
mysql-test/mysql-test-run.pl
View file @
42743de6
...
...
@@ -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=
";
}
}
# ----------------------------------------------------
...
...
mysql-test/suite/rpl/r/rpl_semi_sync.result
View file @
42743de6
...
...
@@ -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_status';
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
...
...
mysql-test/suite/rpl/t/rpl_semi_sync.test
View file @
42743de6
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 variables like 'rpl_semi_sync_master_enabled',
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 variables like 'rpl_semi_sync_slave_enabled', V
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_status';
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_status';
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'
;
...
...
plugin/semisync/CMakeLists.txt
0 → 100644
View file @
42743de6
# Copyright (C) 2006 MySQL AB
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# This is CMakeLists.txt for semi-sync replication plugins
SET
(
CMAKE_CXX_FLAGS_DEBUG
"
${
CMAKE_CXX_FLAGS_DEBUG
}
-DSAFEMALLOC -DSAFE_MUTEX"
)
SET
(
CMAKE_C_FLAGS_DEBUG
"
${
CMAKE_C_FLAGS_DEBUG
}
-DSAFEMALLOC -DSAFE_MUTEX"
)
# Add common include directories
INCLUDE_DIRECTORIES
(
${
CMAKE_SOURCE_DIR
}
/include
${
CMAKE_SOURCE_DIR
}
/zlib
${
CMAKE_SOURCE_DIR
}
/sql
${
CMAKE_SOURCE_DIR
}
/regex
${
CMAKE_SOURCE_DIR
}
/extra/yassl/include
)
SET
(
SEMISYNC_MASTER_SOURCES semisync.cc semisync_master.cc semisync_master_plugin.cc
)
SET
(
SEMISYNC_SLAVE_SOURCES semisync.cc semisync_slave.cc semisync_slave_plugin.cc
)
ADD_DEFINITIONS
(
-DMYSQL_DYNAMIC_PLUGIN
)
ADD_LIBRARY
(
semisync_master SHARED
${
SEMISYNC_MASTER_SOURCES
}
)
TARGET_LINK_LIBRARIES
(
semisync_master mysqld
)
ADD_LIBRARY
(
semisync_slave SHARED
${
SEMISYNC_SLAVE_SOURCES
}
)
TARGET_LINK_LIBRARIES
(
semisync_slave mysqld
)
MESSAGE
(
"build SEMISYNC as DLL"
)
plugin/semisync/Makefile.am
View file @
42743de6
...
...
@@ -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
plugin/semisync/semisync_master.cc
View file @
42743de6
...
...
@@ -45,6 +45,18 @@ char rpl_semi_sync_master_wait_no_slave = 1;
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 char* trx_wait_binlog_name,
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 char* trx_wait_binlog_name,
}
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
...
...
plugin/semisync/semisync_master_plugin.cc
View file @
42743de6
...
...
@@ -278,6 +278,7 @@ Binlog_transmit_observer transmit_observer = {
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_vars[]= {
(
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
},
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment