mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
MDEV-162 Enhanced semisync replication
Implement --semi-sync-master-wait-point=AFTER_SYNC|AFTER_COMMIT. When AFTER_SYNC, the semi-sync wait will be done earlier, before the storage engine commit rather than after. This means that a transaction will not be visible on the master until at least one slave has received it.
This commit is contained in:
committed by
Kristian Nielsen
parent
4d8b346e07
commit
0b87de124d
@ -252,12 +252,18 @@ int Trans_delegate::after_rollback(THD *thd, bool all)
|
||||
int Binlog_storage_delegate::after_flush(THD *thd,
|
||||
const char *log_file,
|
||||
my_off_t log_pos,
|
||||
bool synced)
|
||||
bool synced,
|
||||
bool first_in_group,
|
||||
bool last_in_group)
|
||||
{
|
||||
Binlog_storage_param param;
|
||||
uint32 flags=0;
|
||||
if (synced)
|
||||
flags |= BINLOG_STORAGE_IS_SYNCED;
|
||||
if (first_in_group)
|
||||
flags|= BINLOG_GROUP_COMMIT_LEADER;
|
||||
if (last_in_group)
|
||||
flags|= BINLOG_GROUP_COMMIT_TRAILER;
|
||||
|
||||
Trans_binlog_info *log_info=
|
||||
my_pthread_getspecific_ptr(Trans_binlog_info*, RPL_TRANS_BINLOG_INFO);
|
||||
@ -279,6 +285,27 @@ int Binlog_storage_delegate::after_flush(THD *thd,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int Binlog_storage_delegate::after_sync(THD *thd,
|
||||
const char *log_file,
|
||||
my_off_t log_pos,
|
||||
bool first_in_group,
|
||||
bool last_in_group)
|
||||
{
|
||||
Binlog_storage_param param;
|
||||
uint32 flags=0;
|
||||
|
||||
if (first_in_group)
|
||||
flags|= BINLOG_GROUP_COMMIT_LEADER;
|
||||
if (last_in_group)
|
||||
flags|= BINLOG_GROUP_COMMIT_TRAILER;
|
||||
|
||||
int ret= 0;
|
||||
FOREACH_OBSERVER(ret, after_sync, thd,
|
||||
(¶m, log_file+dirname_length(log_file), log_pos, flags));
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#ifdef HAVE_REPLICATION
|
||||
int Binlog_transmit_delegate::transmit_start(THD *thd, ushort flags,
|
||||
const char *log_file,
|
||||
|
Reference in New Issue
Block a user