[MDEV-5196] Server hangs or assertion `!thd->wait_for_commit_ptr' fails on MASTER_POS_WAIT with slave-parallel-threads > 0 Created: 2013-10-26  Updated: 2013-10-30  Resolved: 2013-10-30

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: None
Fix Version/s: 10.0.5

Type: Bug Priority: Major
Reporter: Elena Stepanova Assignee: Kristian Nielsen
Resolution: Fixed Votes: 0
Labels: None

Issue Links:
Relates
relates to MDEV-4506 MWL#184: Parallel replication of grou... Closed

 Description   

The following test case, if it's run with slave-parallel-threads=1 or greater, either hangs on SELECT MASTER_POS_WAIT, or causes an assertion failure (sometimes it passes, then it might crash with MDEV-5195, so try it several times).

--source include/master-slave.inc
--source include/have_binlog_format_row.inc
 
--connection slave
--source include/stop_slave.inc
 
--connection master
 
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 (i INT);
INSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8);
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
INSERT INTO t1 SELECT * FROM t1;
DROP TABLE t1;
FLUSH LOGS;
 
let $file = query_get_value(SHOW BINARY LOGS,Log_name,1);
let $pos = query_get_value(SHOW BINARY LOGS,File_size,1);
 
--connection slave
--source include/start_slave.inc
eval SELECT MASTER_POS_WAIT('$file',$pos);
 
--source include/rpl_end.inc

Assertion failure:

mysqld: /home/elenst/bzr/10.0-knielsen/sql/rpl_parallel.cc:205: void* handle_rpl_parallel_thread(void*): Assertion `!thd->wait_for_commit_ptr' failed.
131026 23:56:41 [ERROR] mysqld got signal 6 ;
 
#0  __pthread_kill (threadid=<optimized out>, signo=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/pthread_kill.c:63
#1  0x0000000000cefe78 in my_write_core (sig=6) at /home/elenst/bzr/10.0-knielsen/mysys/stacktrace.c:457
#2  0x00000000007f2e70 in handle_fatal_signal (sig=6) at /home/elenst/bzr/10.0-knielsen/sql/signal_handler.cc:262
#3  <signal handler called>
#4  0x00007ffea31da425 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#5  0x00007ffea31ddb8b in __GI_abort () at abort.c:91
#6  0x00007ffea31d30ee in __assert_fail_base (fmt=<optimized out>, assertion=0xda1db9 "!thd->wait_for_commit_ptr", file=0xda1d38 "/home/elenst/bzr/10.0-knielsen/sql/rpl_parallel.cc", line=<optimized out>, function=<optimized out>) at assert.c:94
#7  0x00007ffea31d3192 in __GI___assert_fail (assertion=0xda1db9 "!thd->wait_for_commit_ptr", file=0xda1d38 "/home/elenst/bzr/10.0-knielsen/sql/rpl_parallel.cc", line=205, function=0xda1f00 "void* handle_rpl_parallel_thread(void*)") at assert.c:103
#8  0x00000000007871d7 in handle_rpl_parallel_thread (arg=0x3033c68) at /home/elenst/bzr/10.0-knielsen/sql/rpl_parallel.cc:205
#9  0x000000000099204e in pfs_spawn_thread (arg=0x3033e10) at /home/elenst/bzr/10.0-knielsen/storage/perfschema/pfs.cc:1015
#10 0x00007ffea3fa3e9a in start_thread (arg=0x7ffe993b8700) at pthread_create.c:308
#11 0x00007ffea3297cbd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
#12 0x0000000000000000 in ?? ()

bzr version-info
revision-id: knielsen@knielsen-hq.org-20131025191714-lclqx9vuu5jrh24z
revno: 3687
branch-nick: 10.0-knielsen
BUILD/compile-pentium-debug-max-no-ndb



 Comments   
Comment by Kristian Nielsen [ 2013-10-30 ]

I fixed the following:

  • Missing mysql_cond_signal(), which could cause hangs.
  • Fix incorrect update of old-style replication position.
  • Change assertion to error handling (can trigger on manipulated/
    corrupt binlog).
Generated at Thu Feb 08 07:02:26 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.