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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
2685513c
Commit
2685513c
authored
Mar 08, 2002
by
unknown
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fixed replication assert failure ( found by Jeremy Zawodny)
sql/slave.cc: fixed wrong invocation of safe_sleep()
parent
a96dc72e
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
35 additions
and
27 deletions
+35
-27
sql/slave.cc
sql/slave.cc
+35
-27
No files found.
sql/slave.cc
View file @
2685513c
...
...
@@ -29,6 +29,8 @@
bool
use_slave_mask
=
0
;
MY_BITMAP
slave_error_mask
;
typedef
bool
(
*
CHECK_KILLED_FUNC
)(
THD
*
,
void
*
);
volatile
bool
slave_sql_running
=
0
,
slave_io_running
=
0
;
char
*
slave_load_tmpdir
=
0
;
MASTER_INFO
main_mi
;
...
...
@@ -58,14 +60,15 @@ static int process_io_rotate(MASTER_INFO* mi, Rotate_log_event* rev);
static
int
process_io_create_file
(
MASTER_INFO
*
mi
,
Create_file_log_event
*
cev
);
static
int
queue_old_event
(
MASTER_INFO
*
mi
,
const
char
*
buf
,
uint
event_len
);
static
inline
bool
slave_killed
(
THD
*
thd
,
MASTER_INFO
*
mi
);
static
inline
bool
slave_killed
(
THD
*
thd
,
RELAY_LOG_INFO
*
rli
);
static
inline
bool
io_
slave_killed
(
THD
*
thd
,
MASTER_INFO
*
mi
);
static
inline
bool
s
ql_s
lave_killed
(
THD
*
thd
,
RELAY_LOG_INFO
*
rli
);
static
int
init_slave_thread
(
THD
*
thd
,
SLAVE_THD_TYPE
thd_type
);
static
int
safe_connect
(
THD
*
thd
,
MYSQL
*
mysql
,
MASTER_INFO
*
mi
);
static
int
safe_reconnect
(
THD
*
thd
,
MYSQL
*
mysql
,
MASTER_INFO
*
mi
);
static
int
connect_to_master
(
THD
*
thd
,
MYSQL
*
mysql
,
MASTER_INFO
*
mi
,
bool
reconnect
);
static
int
safe_sleep
(
THD
*
thd
,
MASTER_INFO
*
mi
,
int
sec
);
static
int
safe_sleep
(
THD
*
thd
,
int
sec
,
CHECK_KILLED_FUNC
thread_killed
,
void
*
thread_killed_arg
);
static
int
request_table_dump
(
MYSQL
*
mysql
,
const
char
*
db
,
const
char
*
table
);
static
int
create_table_from_dump
(
THD
*
thd
,
NET
*
net
,
const
char
*
db
,
const
char
*
table_name
);
...
...
@@ -605,14 +608,14 @@ void end_slave()
free_string_array
(
&
replicate_wild_ignore_table
);
}
static
inline
bool
slave_killed
(
THD
*
thd
,
MASTER_INFO
*
mi
)
static
bool
io_
slave_killed
(
THD
*
thd
,
MASTER_INFO
*
mi
)
{
DBUG_ASSERT
(
mi
->
io_thd
==
thd
);
DBUG_ASSERT
(
mi
->
slave_running
==
1
);
// tracking buffer overrun
return
mi
->
abort_slave
||
abort_loop
||
thd
->
killed
;
}
static
inline
bool
slave_killed
(
THD
*
thd
,
RELAY_LOG_INFO
*
rli
)
static
bool
sql_
slave_killed
(
THD
*
thd
,
RELAY_LOG_INFO
*
rli
)
{
DBUG_ASSERT
(
rli
->
sql_thd
==
thd
);
DBUG_ASSERT
(
rli
->
slave_running
==
1
);
// tracking buffer overrun
...
...
@@ -1375,7 +1378,8 @@ static int init_slave_thread(THD* thd, SLAVE_THD_TYPE thd_type)
DBUG_RETURN
(
0
);
}
static
int
safe_sleep
(
THD
*
thd
,
MASTER_INFO
*
mi
,
int
sec
)
static
int
safe_sleep
(
THD
*
thd
,
int
sec
,
CHECK_KILLED_FUNC
thread_killed
,
void
*
thread_killed_arg
)
{
thr_alarm_t
alarmed
;
thr_alarm_init
(
&
alarmed
);
...
...
@@ -1398,7 +1402,7 @@ static int safe_sleep(THD* thd, MASTER_INFO* mi, int sec)
if
(
thr_alarm_in_use
(
&
alarmed
))
thr_end_alarm
(
&
alarmed
);
if
(
slave_killed
(
thd
,
mi
))
if
(
(
*
thread_killed
)(
thd
,
thread_killed_arg
))
return
1
;
start_time
=
time
((
time_t
*
)
0
);
}
...
...
@@ -1528,7 +1532,7 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli)
DBUG_ASSERT
(
rli
->
sql_thd
==
thd
);
Log_event
*
ev
=
next_event
(
rli
);
DBUG_ASSERT
(
rli
->
sql_thd
==
thd
);
if
(
slave_killed
(
thd
,
rli
))
if
(
s
ql_s
lave_killed
(
thd
,
rli
))
return
1
;
if
(
ev
)
{
...
...
@@ -1661,13 +1665,13 @@ pthread_handler_decl(handle_slave_io,arg)
goto
err
;
}
while
(
!
slave_killed
(
thd
,
mi
))
while
(
!
io_
slave_killed
(
thd
,
mi
))
{
thd
->
proc_info
=
"Requesting binlog dump"
;
if
(
request_dump
(
mysql
,
mi
))
{
sql_print_error
(
"Failed on request_dump()"
);
if
(
slave_killed
(
thd
,
mi
))
if
(
io_
slave_killed
(
thd
,
mi
))
{
sql_print_error
(
"Slave I/O thread killed while requesting master \
dump"
);
...
...
@@ -1682,11 +1686,12 @@ dump");
hopefuly the admin can fix the problem sometime
*/
if
(
retried_once
)
safe_sleep
(
thd
,
mi
,
mi
->
connect_retry
);
safe_sleep
(
thd
,
mi
->
connect_retry
,(
CHECK_KILLED_FUNC
)
io_slave_killed
,
(
void
*
)
mi
);
else
retried_once
=
1
;
if
(
slave_killed
(
thd
,
mi
))
if
(
io_
slave_killed
(
thd
,
mi
))
{
sql_print_error
(
"Slave I/O thread killed while retrying master \
dump"
);
...
...
@@ -1697,7 +1702,7 @@ dump");
sql_print_error
(
"Slave I/O thread: failed dump request, \
reconnecting to try again, log '%s' at postion %s"
,
IO_RPL_LOG_NAME
,
llstr
(
mi
->
master_log_pos
,
llbuff
));
if
(
safe_reconnect
(
thd
,
mysql
,
mi
)
||
slave_killed
(
thd
,
mi
))
if
(
safe_reconnect
(
thd
,
mysql
,
mi
)
||
io_
slave_killed
(
thd
,
mi
))
{
sql_print_error
(
"Slave I/O thread killed during or \
after reconnect"
);
...
...
@@ -1707,11 +1712,11 @@ after reconnect");
goto
connected
;
}
while
(
!
slave_killed
(
thd
,
mi
))
while
(
!
io_
slave_killed
(
thd
,
mi
))
{
thd
->
proc_info
=
"Reading master update"
;
ulong
event_len
=
read_event
(
mysql
,
mi
);
if
(
slave_killed
(
thd
,
mi
))
if
(
io_
slave_killed
(
thd
,
mi
))
{
sql_print_error
(
"Slave I/O thread killed while reading event"
);
goto
err
;
...
...
@@ -1731,11 +1736,12 @@ is correct, restart the server with a higher value of max_allowed_packet",
thd
->
proc_info
=
"Waiting to reconnect after a failed read"
;
mc_end_server
(
mysql
);
if
(
retried_once
)
// punish repeat offender with sleep
safe_sleep
(
thd
,
mi
,
mi
->
connect_retry
);
safe_sleep
(
thd
,
mi
->
connect_retry
,(
CHECK_KILLED_FUNC
)
io_slave_killed
,
(
void
*
)
mi
);
else
retried_once
=
1
;
if
(
slave_killed
(
thd
,
mi
))
if
(
io_
slave_killed
(
thd
,
mi
))
{
sql_print_error
(
"Slave I/O thread killed while waiting to \
reconnect after a failed read"
);
...
...
@@ -1745,7 +1751,7 @@ reconnect after a failed read");
sql_print_error
(
"Slave I/O thread: Failed reading log event, \
reconnecting to retry, log '%s' position %s"
,
IO_RPL_LOG_NAME
,
llstr
(
mi
->
master_log_pos
,
llbuff
));
if
(
safe_reconnect
(
thd
,
mysql
,
mi
)
||
slave_killed
(
thd
,
mi
))
if
(
safe_reconnect
(
thd
,
mysql
,
mi
)
||
io_
slave_killed
(
thd
,
mi
))
{
sql_print_error
(
"Slave I/O thread killed during or after a \
reconnect done to recover from failed read"
);
...
...
@@ -1771,8 +1777,8 @@ from master");
goto
err
;
}
#endif
}
// while(!slave_killed(thd,mi)) - read/exec loop
}
// while(!slave_killed(thd,mi)) - slave loop
}
}
// error = 0;
err:
...
...
@@ -1874,14 +1880,14 @@ pthread_handler_decl(handle_slave_sql,arg)
log '%s' at position %s,relay log: name='%s',pos='%s'"
,
RPL_LOG_NAME
,
llstr
(
rli
->
master_log_pos
,
llbuff
),
rli
->
relay_log_name
,
llstr
(
rli
->
relay_log_pos
,
llbuff1
));
while
(
!
slave_killed
(
thd
,
rli
))
while
(
!
s
ql_s
lave_killed
(
thd
,
rli
))
{
thd
->
proc_info
=
"Processing master log event"
;
DBUG_ASSERT
(
rli
->
sql_thd
==
thd
);
if
(
exec_relay_log_event
(
thd
,
rli
))
{
// do not scare the user if SQL thread was simply killed or stopped
if
(
!
slave_killed
(
thd
,
rli
))
if
(
!
s
ql_s
lave_killed
(
thd
,
rli
))
sql_print_error
(
"\
Error running query, slave SQL thread aborted. Fix the problem, and restart \
the slave SQL thread with
\"
SLAVE START
\"
. We stopped at log \
...
...
@@ -1889,7 +1895,7 @@ the slave SQL thread with \"SLAVE START\". We stopped at log \
RPL_LOG_NAME
,
llstr
(
rli
->
master_log_pos
,
llbuff
));
goto
err
;
}
}
// while(!slave_killed(thd,rli)) - read/exec loop
}
// while(!s
ql_s
lave_killed(thd,rli)) - read/exec loop
// error = 0;
err:
...
...
@@ -2224,7 +2230,7 @@ static int connect_to_master(THD* thd, MYSQL* mysql, MASTER_INFO* mi,
#ifndef DBUG_OFF
events_till_disconnect
=
disconnect_slave_event_count
;
#endif
while
(
!
(
slave_was_killed
=
slave_killed
(
thd
,
mi
))
&&
while
(
!
(
slave_was_killed
=
io_
slave_killed
(
thd
,
mi
))
&&
(
reconnect
?
mc_mysql_reconnect
(
mysql
)
!=
0
:
!
mc_mysql_connect
(
mysql
,
mi
->
host
,
mi
->
user
,
mi
->
password
,
0
,
mi
->
port
,
0
,
0
)))
...
...
@@ -2238,7 +2244,8 @@ static int connect_to_master(THD* thd, MYSQL* mysql, MASTER_INFO* mi,
mc_mysql_error
(
mysql
),
last_errno
=
mc_mysql_errno
(
mysql
),
mi
->
connect_retry
);
}
safe_sleep
(
thd
,
mi
,
mi
->
connect_retry
);
safe_sleep
(
thd
,
mi
->
connect_retry
,(
CHECK_KILLED_FUNC
)
io_slave_killed
,
(
void
*
)
mi
);
/*
By default we try forever. The reason is that failure will trigger
master election, so if the user did not set master_retry_count we
...
...
@@ -2333,7 +2340,7 @@ Log_event* next_event(RELAY_LOG_INFO* rli)
*/
pthread_mutex_lock
(
&
rli
->
data_lock
);
for
(;
!
(
was_killed
=
slave_killed
(
thd
,
rli
))
;)
for
(;
!
(
was_killed
=
s
ql_s
lave_killed
(
thd
,
rli
))
;)
{
/*
We can have two kinds of log reading:
...
...
@@ -2465,7 +2472,8 @@ event(errno=%d,cur_log->error=%d)",
my_errno
,
cur_log
->
error
);
// no need to hog the mutex while we sleep
pthread_mutex_unlock
(
&
rli
->
data_lock
);
safe_sleep
(
rli
->
sql_thd
,
rli
->
mi
,
1
);
safe_sleep
(
rli
->
sql_thd
,
1
,(
CHECK_KILLED_FUNC
)
sql_slave_killed
,
(
void
*
)
rli
);
pthread_mutex_lock
(
&
rli
->
data_lock
);
}
}
...
...
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