diff options
author | Seppo Jaakola <seppo.jaakola@codership.com> | 2012-10-24 23:13:43 +0300 |
---|---|---|
committer | Seppo Jaakola <seppo.jaakola@codership.com> | 2012-10-24 23:13:43 +0300 |
commit | 9b47a442b5452cb6c541e312f78746e7739e9f42 (patch) | |
tree | 29217d146f72f319b52e22820fbaae385e19c15b /sql/log_event.cc | |
parent | ef6f9a8250804efb047ad6f28e476c59d7223e85 (diff) | |
parent | 797082ca712f52437571e24962e26573d0723ad1 (diff) | |
download | mariadb-git-9b47a442b5452cb6c541e312f78746e7739e9f42.tar.gz |
References lp:1066784 - bzr merge lp:maria/5.5 (rev: 3562)
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r-- | sql/log_event.cc | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc index 90d517f5ecd..edb89fb85fe 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -1089,6 +1089,9 @@ bool Log_event::write_header(IO_CACHE* file, ulong event_data_length) ulong now; bool ret; DBUG_ENTER("Log_event::write_header"); + DBUG_PRINT("enter", ("filepos: %lld length: %lu type: %d", + (longlong) my_b_tell(file), event_data_length, + (int) get_type_code())); /* Store number of bytes that will be written by this event */ data_written= event_data_length + sizeof(header); @@ -3517,6 +3520,34 @@ int Query_log_event::do_apply_event(Relay_log_info const *rli) return do_apply_event(rli, query, q_len); } +/** + Compare if two errors should be regarded as equal. + This is to handle the case when you can get slightly different errors + on master and slave for the same thing. + @param + expected_error Error we got on master + actual_error Error we got on slave + + @return + 1 Errors are equal + 0 Errors are different +*/ + +bool test_if_equal_repl_errors(int expected_error, int actual_error) +{ + if (expected_error == actual_error) + return 1; + switch (expected_error) { + case ER_DUP_ENTRY: + case ER_AUTOINC_READ_FAILED: + return (actual_error == ER_AUTOINC_READ_FAILED || + actual_error == HA_ERR_AUTOINC_ERANGE); + default: + break; + } + return 0; +} + /** @todo @@ -3829,7 +3860,8 @@ compare_errors: DBUG_PRINT("info",("expected_error: %d sql_errno: %d", expected_error, actual_error)); - if ((expected_error && expected_error != actual_error && + if ((expected_error && + !test_if_equal_repl_errors(expected_error, actual_error) && !concurrency_error_code(expected_error)) && !ignored_error_code(actual_error) && !ignored_error_code(expected_error)) @@ -3851,7 +3883,7 @@ Default database: '%s'. Query: '%s'", If we get the same error code as expected and it is not a concurrency issue, or should be ignored. */ - else if ((expected_error == actual_error && + else if ((test_if_equal_repl_errors(expected_error, actual_error) && !concurrency_error_code(expected_error)) || ignored_error_code(actual_error)) { |