diff options
author | Kristian Nielsen <knielsen@knielsen-hq.org> | 2015-03-04 13:48:28 +0100 |
---|---|---|
committer | Kristian Nielsen <knielsen@knielsen-hq.org> | 2015-03-04 13:49:37 +0100 |
commit | 95d72088596c9c58c30ab87781061094309b4460 (patch) | |
tree | 52cbad4ea5bbe4c01c5e88a9efde3a05edd37107 /sql/rpl_gtid.cc | |
parent | f4f37533a09b9776e8d5ac3f3a27957f553c9043 (diff) | |
parent | 78c74dbe30d3a22feec5d069c7424d5a8a86ea4c (diff) | |
download | mariadb-git-95d72088596c9c58c30ab87781061094309b4460.tar.gz |
Merge MDEV-6589 and MDEV-6403 into 10.1.
Conflicts:
sql/log.cc
sql/rpl_rli.cc
sql/sql_repl.cc
Diffstat (limited to 'sql/rpl_gtid.cc')
-rw-r--r-- | sql/rpl_gtid.cc | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/sql/rpl_gtid.cc b/sql/rpl_gtid.cc index 8b339e0c34e..d5a672eb854 100644 --- a/sql/rpl_gtid.cc +++ b/sql/rpl_gtid.cc @@ -1164,6 +1164,27 @@ rpl_binlog_state::load(struct rpl_gtid *list, uint32 count) } +static int rpl_binlog_state_load_cb(rpl_gtid *gtid, void *data) +{ + rpl_binlog_state *self= (rpl_binlog_state *)data; + return self->update_nolock(gtid, false); +} + + +bool +rpl_binlog_state::load(rpl_slave_state *slave_pos) +{ + bool res= false; + + mysql_mutex_lock(&LOCK_binlog_state); + reset_nolock(); + if (slave_pos->iterate(rpl_binlog_state_load_cb, this, NULL, 0)) + res= true; + mysql_mutex_unlock(&LOCK_binlog_state); + return res; +} + + rpl_binlog_state::~rpl_binlog_state() { free(); @@ -1933,6 +1954,31 @@ slave_connection_state::get_gtid_list(rpl_gtid *gtid_list, uint32 list_size) /* + Check if the GTID position has been reached, for mysql_binlog_send(). + + The position has not been reached if we have anything in the state, unless + it has either the START_ON_EMPTY_DOMAIN flag set (which means it does not + belong to this master at all), or the START_OWN_SLAVE_POS (which means that + we start on an old position from when the server was a slave with + --log-slave-updates=0). +*/ +bool +slave_connection_state::is_pos_reached() +{ + uint32 i; + + for (i= 0; i < hash.records; ++i) + { + entry *e= (entry *)my_hash_element(&hash, i); + if (!(e->flags & (START_OWN_SLAVE_POS|START_ON_EMPTY_DOMAIN))) + return false; + } + + return true; +} + + +/* Execute a MASTER_GTID_WAIT(). The position to wait for is in gtid_str in string form. The timeout in microseconds is in timeout_us, zero means no timeout. |