Kristian Nielsen <knielsen@knielsen-hq.org> writes:
andrei.elkin@pp.inet.fi writes:
Then a function to discard a domain term would do:
SET @@gtid_binlog_state=gtid_discard_domain(@@gtid_binlog_state,'d')
While this time it would be new object introduced still it's of var setting semantics and might be generally useful too.
I'm not sure I understand. Would this function magically lock the binlog until the SET gtid_binlog_state completes, to solve the race?
Or just a convenience for the user to not have to do the string replace operation manually?
The 2nd one. While it replaces p.3 SET the first p.1 SELECT into @pre_purge_state in
mysql> /* 1. */ SELECT @@global.gtid_binlog_state into mysql> @pre_purge_state; mysql> /* 2. */ PURGE LOGS to 'b.2' mysql> /* 3. */ SET mysql> @@global.gtid_binlog_state="REPLACE"(@pre_purge_state, mysql> '0-1-1', '');
is unnecessary. So the function would subtract 'd' term from the current @@gtid_binlog_state right at the point of new value SET invocation. This solves concurrent updates to other than 'd' terms which will be reflected in the new binlog file (SET handler therefore gains your version of FLUSH logics). Andrei