summaryrefslogtreecommitdiff
path: root/sql/log_event.cc
diff options
context:
space:
mode:
authorSeppo Jaakola <seppo.jaakola@codership.com>2012-10-24 23:13:43 +0300
committerSeppo Jaakola <seppo.jaakola@codership.com>2012-10-24 23:13:43 +0300
commit9b47a442b5452cb6c541e312f78746e7739e9f42 (patch)
tree29217d146f72f319b52e22820fbaae385e19c15b /sql/log_event.cc
parentef6f9a8250804efb047ad6f28e476c59d7223e85 (diff)
parent797082ca712f52437571e24962e26573d0723ad1 (diff)
downloadmariadb-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.cc36
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))
{