No, the commit means that in the following case: create table t (n int, m int, unique(n), unique(m)); insert into t values (1, 1); insert into t values (2, 2); insert into t values (1, 2) on duplicate key update m = m + 10; The last statement can update different rows on master and slave and user won't get the warning that the statement is unsafe for replication. I didn't look closely into the rest of the changes bundled for some reason into the same commit. It's the changes in sql_base.cc that I'm concerned about. On Fri, Sep 26, 2014 at 10:19 AM, Roberto Spadim <roberto@spadim.com.br> wrote:
Committer: Michael Widenius
Date: 2014-09-15 21:00:47 UTC mto: This revision was merged to the branch mainline in revision 4402. Revision ID: monty@mariadb.org-20140915210047-prls1zl5gbs51hj2
Don't give warning if there are two unique keys used with INSERT .. ON DUPLICATE KEY UPDATE. We should assume that the store engine will report the first duplicate key for this case. From what i understood, if there's two unique keys that have duplicate keys (insert values (1,1); insert values(1,1);) the first key will report the first warning, the second warning isn't a problem since the first one reported a duplicate key that's what i understood (but i'm not sure) mysql-test/suite/binlog/r/binlog_unsafe.result removed this line from test cases: 2709
Warnings: 2710
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe
sql/sql_base.cc included this line:
5307 #ifdef NOT_USED_IN_MARIADB
AND SQL_CLASS.CC
6023 Auxiliary function to check if the warning for unsafe repliction statements
6024 should be thrown or suppressed.
From what i understood it's only to don't log many useless messages, and if a 'real' problem occur thrown an error instead of supress it
Old code of suppression of unsafe logging error with LIMIT didn't work, because of wrong usage of my_interval_timer().
Suppress unsafe logging errors to the error log if we get too many unsafe logging errors in a short time.
as expected at sql_class.cc
This is to not overflow the error log with meaningless errors.
- Each error code is suppressed and counted separately. - We do a 5 minute suppression of new errors if we get more than 10 errors in that time.
Only print unsafe logging errors if log_warnings > 1. I don't know what's an unsafe log erro, should be nice an explain here
2014-09-26 13:38 GMT-03:00 Pavel Ivanov <pivanof@google.com>:
Hi,
I see that in MariaDB 10.0.14 Michael disabled replication safety warning for the case of INSERT ON DUPLICATE KEY UPDATE with several unique keys with a comment "We should assume that the store engine will report the first duplicate key for this case." http://bazaar.launchpad.net/~maria-captains/maria/10.0/revision/4400.1.3 What does that mean? Which key is "the first duplicate key" and why MariaDB relies on an engine behavior which AFAIK is not guaranteed? And why this serious change in behavior wasn't mentioned in the Release Notes?
On the related note Release Notes mention the error log flood protection. Why it's not behind flag? How should I disable the feature and get back to the old behavior?
Thank you, Pavel
_______________________________________________ Mailing list: https://launchpad.net/~maria-developers Post to : maria-developers@lists.launchpad.net Unsubscribe : https://launchpad.net/~maria-developers More help : https://help.launchpad.net/ListHelp
-- Roberto Spadim SPAEmpresarial Eng. Automação e Controle