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
29af14af
Commit
29af14af
authored
Sep 04, 2007
by
tomas@whalegate.ndb.mysql.com
Browse files
Options
Browse Files
Download
Plain Diff
Merge whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-target-5.1.22
into whalegate.ndb.mysql.com:/home/tomas/mysql-5.1-new-ndb
parents
9b913a19
58ecaaa8
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
75 additions
and
31 deletions
+75
-31
mysql-test/suite/rpl_ndb/t/disabled.def
mysql-test/suite/rpl_ndb/t/disabled.def
+1
-0
sql/slave.cc
sql/slave.cc
+64
-27
sql/slave.h
sql/slave.h
+0
-4
storage/innobase/row/row0sel.c
storage/innobase/row/row0sel.c
+10
-0
No files found.
mysql-test/suite/rpl_ndb/t/disabled.def
View file @
29af14af
...
...
@@ -13,6 +13,7 @@
rpl_ndb_2innodb : BUG#19227 2006-04-20 pekka pk delete apparently not replicated
rpl_ndb_2myisam : BUG#19227 Seems to pass currently
rpl_ndb_2other : BUG#21842 2007-08-30 tsmith test has never worked on bigendian (sol10-sparc-a, powermacg5
rpl_ndb_dd_partitions : BUG#19259 2006-04-21 rpl_ndb_dd_partitions fails on s/AMD
rpl_ndb_innodb2ndb : Bug#29549 rpl_ndb_myisam2ndb,rpl_ndb_innodb2ndb failed on Solaris for pack_length issue
rpl_ndb_myisam2ndb : Bug#29549 rpl_ndb_myisam2ndb,rpl_ndb_innodb2ndb failed on Solaris for pack_length issue
...
...
sql/slave.cc
View file @
29af14af
...
...
@@ -132,6 +132,11 @@ static int create_table_from_dump(THD* thd, MYSQL *mysql, const char* db,
const
char
*
table_name
,
bool
overwrite
);
static
int
get_master_version_and_clock
(
MYSQL
*
mysql
,
MASTER_INFO
*
mi
);
static
Log_event
*
next_event
(
RELAY_LOG_INFO
*
rli
);
static
int
terminate_slave_thread
(
THD
*
thd
,
pthread_mutex_t
*
term_lock
,
pthread_cond_t
*
term_cond
,
volatile
uint
*
slave_running
,
bool
skip_lock
);
/*
Find out which replications threads are running
...
...
@@ -312,35 +317,26 @@ int terminate_slave_threads(MASTER_INFO* mi,int thread_mask,bool skip_lock)
DBUG_RETURN
(
0
);
/* successfully do nothing */
int
error
,
force_all
=
(
thread_mask
&
SLAVE_FORCE_ALL
);
pthread_mutex_t
*
sql_lock
=
&
mi
->
rli
.
run_lock
,
*
io_lock
=
&
mi
->
run_lock
;
pthread_mutex_t
*
sql_cond_lock
,
*
io_cond_lock
;
sql_cond_lock
=
sql_lock
;
io_cond_lock
=
io_lock
;
if
(
skip_lock
)
{
sql_lock
=
io_lock
=
0
;
}
if
((
thread_mask
&
(
SLAVE_IO
|
SLAVE_FORCE_ALL
))
&&
mi
->
slave_running
)
if
((
thread_mask
&
(
SLAVE_IO
|
SLAVE_FORCE_ALL
)))
{
DBUG_PRINT
(
"info"
,(
"Terminating IO thread"
));
mi
->
abort_slave
=
1
;
if
((
error
=
terminate_slave_thread
(
mi
->
io_thd
,
io_lock
,
io_cond_lock
,
&
mi
->
stop_cond
,
&
mi
->
slave_running
))
&&
&
mi
->
slave_running
,
skip_lock
))
&&
!
force_all
)
DBUG_RETURN
(
error
);
}
if
((
thread_mask
&
(
SLAVE_SQL
|
SLAVE_FORCE_ALL
))
&&
mi
->
rli
.
slave_running
)
if
((
thread_mask
&
(
SLAVE_SQL
|
SLAVE_FORCE_ALL
)))
{
DBUG_PRINT
(
"info"
,(
"Terminating SQL thread"
));
DBUG_ASSERT
(
mi
->
rli
.
sql_thd
!=
0
)
;
mi
->
rli
.
abort_slave
=
1
;
if
((
error
=
terminate_slave_thread
(
mi
->
rli
.
sql_thd
,
sql_lock
,
sql_cond_lock
,
&
mi
->
rli
.
stop_cond
,
&
mi
->
rli
.
slave_running
))
&&
&
mi
->
rli
.
slave_running
,
skip_lock
))
&&
!
force_all
)
DBUG_RETURN
(
error
);
}
...
...
@@ -348,23 +344,60 @@ int terminate_slave_threads(MASTER_INFO* mi,int thread_mask,bool skip_lock)
}
int
terminate_slave_thread
(
THD
*
thd
,
pthread_mutex_t
*
term_lock
,
pthread_mutex_t
*
cond_lock
,
/**
Wait for a slave thread to terminate.
This function is called after requesting the thread to terminate
(by setting @c abort_slave member of @c Relay_log_info or @c
Master_info structure to 1). Termination of the thread is
controlled with the the predicate <code>*slave_running</code>.
Function will acquire @c term_lock before waiting on the condition
unless @c skip_lock is true in which case the mutex should be owned
by the caller of this function and will remain acquired after
return from the function.
@param term_lock
Associated lock to use when waiting for @c term_cond
@param term_cond
Condition that is signalled when the thread has terminated
@param slave_running
Pointer to predicate to check for slave thread termination
@param skip_lock
If @c true the lock will not be acquired before waiting on
the condition. In this case, it is assumed that the calling
function acquires the lock before calling this function.
@retval 0 All OK
*/
static
int
terminate_slave_thread
(
THD
*
thd
,
pthread_mutex_t
*
term_lock
,
pthread_cond_t
*
term_cond
,
volatile
uint
*
slave_running
)
volatile
uint
*
slave_running
,
bool
skip_lock
)
{
int
error
;
DBUG_ENTER
(
"terminate_slave_thread"
);
if
(
term_lock
)
{
if
(
!
skip_lock
)
pthread_mutex_lock
(
term_lock
);
safe_mutex_assert_owner
(
term_lock
);
if
(
!*
slave_running
)
{
if
(
!
skip_lock
)
pthread_mutex_unlock
(
term_lock
);
DBUG_RETURN
(
ER_SLAVE_NOT_RUNNING
);
}
}
DBUG_ASSERT
(
thd
!=
0
);
THD_CHECK_SENTRY
(
thd
);
/*
Is is critical to test if the slave is running. Otherwise, we might
be referening freed memory trying to kick it
...
...
@@ -380,9 +413,13 @@ int terminate_slave_thread(THD* thd, pthread_mutex_t* term_lock,
*/
struct
timespec
abstime
;
set_timespec
(
abstime
,
2
);
pthread_cond_timedwait
(
term_cond
,
cond_lock
,
&
abstime
);
error
=
pthread_cond_timedwait
(
term_cond
,
term_lock
,
&
abstime
);
DBUG_ASSERT
(
error
==
ETIMEDOUT
||
error
==
0
);
}
if
(
term_lock
)
DBUG_ASSERT
(
*
slave_running
==
0
);
if
(
!
skip_lock
)
pthread_mutex_unlock
(
term_lock
);
DBUG_RETURN
(
0
);
}
...
...
sql/slave.h
View file @
29af14af
...
...
@@ -133,10 +133,6 @@ bool flush_relay_log_info(RELAY_LOG_INFO* rli);
int
register_slave_on_master
(
MYSQL
*
mysql
);
int
terminate_slave_threads
(
MASTER_INFO
*
mi
,
int
thread_mask
,
bool
skip_lock
=
0
);
int
terminate_slave_thread
(
THD
*
thd
,
pthread_mutex_t
*
term_mutex
,
pthread_mutex_t
*
cond_lock
,
pthread_cond_t
*
term_cond
,
volatile
uint
*
slave_running
);
int
start_slave_threads
(
bool
need_slave_mutex
,
bool
wait_for_start
,
MASTER_INFO
*
mi
,
const
char
*
master_info_fname
,
const
char
*
slave_info_fname
,
int
thread_mask
);
...
...
storage/innobase/row/row0sel.c
View file @
29af14af
...
...
@@ -4555,6 +4555,15 @@ row_search_autoinc_read_column(
ut_a
(
len
!=
UNIV_SQL_NULL
);
ut_a
(
len
<=
sizeof
value
);
#ifdef WORDS_BIGENDIAN
/* Copy integer data and restore sign bit */
memcpy
((
ptr
=
dest
),
data
,
len
);
if
(
!
unsigned_type
)
{
dest
[
0
]
^=
128
;
}
#else
/* Convert integer data from Innobase to a little-endian format,
sign bit restored to normal */
...
...
@@ -4566,6 +4575,7 @@ row_search_autoinc_read_column(
if
(
!
unsigned_type
)
{
dest
[
len
-
1
]
^=
128
;
}
#endif
/* The assumption here is that the AUTOINC value can't be negative.*/
switch
(
len
)
{
...
...
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