Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
91e043c3
Commit
91e043c3
authored
Feb 15, 2013
by
Pedro Gomes
Browse files
Options
Browse Files
Download
Plain Diff
BUG#13545447: RPL_ROTATE_LOGS FAILS DUE TO CONCURRENCY ISSUES IN REP. CODE
Merge from mysql 5.1 to mysql 5.5
parents
776b5697
7e8c8877
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
52 additions
and
7 deletions
+52
-7
sql/log_event.cc
sql/log_event.cc
+7
-1
sql/log_event.h
sql/log_event.h
+28
-2
sql/sql_repl.cc
sql/sql_repl.cc
+17
-4
No files found.
sql/log_event.cc
View file @
91e043c3
...
...
@@ -1029,7 +1029,9 @@ bool Log_event::write_header(IO_CACHE* file, ulong event_data_length)
*/
int
Log_event
::
read_log_event
(
IO_CACHE
*
file
,
String
*
packet
,
mysql_mutex_t
*
log_lock
)
mysql_mutex_t
*
log_lock
,
const
char
*
log_file_name_arg
,
bool
*
is_binlog_active
)
{
ulong
data_len
;
int
result
=
0
;
...
...
@@ -1038,6 +1040,10 @@ int Log_event::read_log_event(IO_CACHE* file, String* packet,
if
(
log_lock
)
mysql_mutex_lock
(
log_lock
);
if
(
log_file_name_arg
)
*
is_binlog_active
=
mysql_bin_log
.
is_active
(
log_file_name_arg
);
if
(
my_b_read
(
file
,
(
uchar
*
)
buf
,
sizeof
(
buf
)))
{
/*
...
...
sql/log_event.h
View file @
91e043c3
/* Copyright (c) 2000, 201
2
, Oracle and/or its affiliates. All rights reserved.
/* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -997,8 +997,34 @@ public:
mysql_mutex_t
*
log_lock
,
const
Format_description_log_event
*
description_event
);
/**
Reads an event from a binlog or relay log. Used by the dump thread
this method reads the event into a raw buffer without parsing it.
@Note If mutex is 0, the read will proceed without mutex.
@Note If a log name is given than the method will check if the
given binlog is still active.
@param[in] file log file to be read
@param[out] packet packet to hold the event
@param[in] lock the lock to be used upon read
@param[in] log_file_name_arg the log's file name
@param[out] is_binlog_active is the current log still active
@retval 0 success
@retval LOG_READ_EOF end of file, nothing was read
@retval LOG_READ_BOGUS malformed event
@retval LOG_READ_IO io error while reading
@retval LOG_READ_MEM packet memory allocation failed
@retval LOG_READ_TRUNC only a partial event could be read
@retval LOG_READ_TOO_LARGE event too large
*/
static
int
read_log_event
(
IO_CACHE
*
file
,
String
*
packet
,
mysql_mutex_t
*
log_lock
);
mysql_mutex_t
*
log_lock
,
const
char
*
log_file_name_arg
=
NULL
,
bool
*
is_binlog_active
=
false
);
/*
init_show_field_list() prepares the column names and types for the
output of SHOW BINLOG EVENTS; it is used only by SHOW BINLOG
...
...
sql/sql_repl.cc
View file @
91e043c3
/* Copyright (c) 2000, 201
2
, Oracle and/or its affiliates. All rights reserved.
/* Copyright (c) 2000, 201
3
, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
...
...
@@ -676,7 +676,10 @@ impossible position";
if
(
reset_transmit_packet
(
thd
,
flags
,
&
ev_offset
,
&
errmsg
))
goto
err
;
while
(
!
(
error
=
Log_event
::
read_log_event
(
&
log
,
packet
,
log_lock
)))
bool
is_active_binlog
=
false
;
while
(
!
(
error
=
Log_event
::
read_log_event
(
&
log
,
packet
,
log_lock
,
log_file_name
,
&
is_active_binlog
)))
{
#ifndef DBUG_OFF
if
(
max_binlog_dump_events
&&
!
left_events
--
)
...
...
@@ -757,6 +760,13 @@ impossible position";
goto
err
;
}
DBUG_EXECUTE_IF
(
"wait_after_binlog_EOF"
,
{
const
char
act
[]
=
"now wait_for signal.rotate_finished"
;
DBUG_ASSERT
(
!
debug_sync_set_action
(
current_thd
,
STRING_WITH_LEN
(
act
)));
};);
/*
TODO: now that we are logging the offset, check to make sure
the recorded offset and the actual match.
...
...
@@ -767,8 +777,11 @@ impossible position";
if
(
test_for_non_eof_log_read_errors
(
error
,
&
errmsg
))
goto
err
;
if
(
!
(
flags
&
BINLOG_DUMP_NON_BLOCK
)
&&
mysql_bin_log
.
is_active
(
log_file_name
))
/*
We should only move to the next binlog when the last read event
came from a already deactivated binlog.
*/
if
(
!
(
flags
&
BINLOG_DUMP_NON_BLOCK
)
&&
is_active_binlog
)
{
/*
Block until there is more data in the log
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment