Details
-
Bug
-
Status: Closed (View Workflow)
-
Blocker
-
Resolution: Fixed
-
10.3.8
-
None
Description
The server would crash when has configs rpl_semi_sync_master_enabled = OFF rpl_semi_sync_master_wait_no_slave =OFF
How to repeat:
./mysqld --rpl_semi_sync_master_enabled=OFF --rpl_semi_sync_master_wait_no_slave=OFF
Dies with:
mysqld: /my/maria-10.3/sql/semisync_master.cc:973: int Repl_semi_sync_master::switch_off(): Assertion `m_active_tranxs != NULL' failed.
From original bug report:
stack_bottom = 0x0 thread_stack 0x40000
|
*** buffer overflow detected ***: /u01/mariadb/bin/mysqld terminated
|
======= Backtrace: =========
|
/lib64/libc.so.6(__fortify_fail+0x37)[0x7f6f9059c597]
|
/lib64/libc.so.6(+0x10c750)[0x7f6f9059a750]
|
/lib64/libc.so.6(+0x10e507)[0x7f6f9059c507]
|
/u01/mariadb/bin/mysqld(my_addr_resolve+0xda)[0x7f6f9327932a]
|
/u01/mariadb/bin/mysqld(my_print_stacktrace+0x1c2)[0x7f6f93262a22]
|
/u01/mariadb/bin/mysqld(handle_fatal_signal+0x357)[0x7f6f92cf04b7]
|
/lib64/libpthread.so.0(+0xf100)[0x7f6f9213d100]
|
/u01/mariadb/bin/mysqld(_ZN12Active_tranx24clear_active_tranx_nodesEPKcy+0xc6)[0x7f6f92c3f7d6]
|
/u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master10switch_offEv+0x1e)[0x7f6f92c3fcae]
|
/u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master11init_objectEv+0xd4)[0x7f6f92c3fe64]
|
/u01/mariadb/bin/mysqld(+0x4f2b3f)[0x7f6f92a60b3f]
|
/u01/mariadb/bin/mysqld(_Z11mysqld_mainiPPc+0x4b7)[0x7f6f92a67287]
|
/lib64/libc.so.6(__libc_start_main+0xf5)[0x7f6f904afb15]
|
/u01/mariadb/bin/mysqld(+0x4ec7ed)[0x7f6f92a5a7ed]
|
|
353 int Repl_semi_sync_master::init_object()
|
354 {
|
355 int result;
|
356
|
357 m_init_done = true;
|
358
|
359 /* References to the parameter works after set_options(). */
|
360 set_wait_timeout(rpl_semi_sync_master_timeout);
|
361 set_trace_level(rpl_semi_sync_master_trace_level);
|
362 set_wait_point(rpl_semi_sync_master_wait_point);
|
363
|
364 /* Mutex initialization can only be done after MY_INIT(). */
|
365 mysql_mutex_init(key_LOCK_binlog,
|
366 &LOCK_binlog, MY_MUTEX_INIT_FAST);
|
367 mysql_cond_init(key_COND_binlog_send,
|
368 &COND_binlog_send, NULL);
|
369
|
370 if (rpl_semi_sync_master_enabled)
|
371 {
|
372 result = enable_master();
|
373 if (!result)**
|
374 result= ack_receiver.start(); /* Start the ACK thread. */
|
375 }
|
376 else
|
377 {
|
378 result = disable_master();
|
379 }
|
380
|
381 /*
|
382 If rpl_semi_sync_master_wait_no_slave is disabled, let's temporarily
|
383 switch off semisync to avoid hang if there's none active slave.
|
384 */
|
385 if (!rpl_semi_sync_master_wait_no_slave)
|
386 switch_off();
|
387
|
388 return result;
|
389 }
|
|
391 int Repl_semi_sync_master::enable_master()
|
392 {
|
393 int result = 0;
|
394
|
395 /* Must have the lock when we do enable of disable. */
|
396 lock();
|
397
|
398 if (!get_master_enabled())
|
399 {
|
400 m_active_tranxs = new Active_tranx(&LOCK_binlog, m_trace_level);
|
401 if (m_active_tranxs != NULL)
|
|
|
964 int Repl_semi_sync_master::switch_off()
|
965 {
|
966 int result;
|
967
|
968 DBUG_ENTER("Repl_semi_sync_master::switch_off");
|
969
|
970 m_state = false;
|
971
|
972 /* Clear the active transaction list. */
|
973 assert(m_active_tranxs != NULL);
|
974 result = m_active_tranxs->clear_active_tranx_nodes(NULL, 0);
|
975
|
976 rpl_semi_sync_master_off_times++;
|
If get rpl_semi_sync_master_enabled off, the enable_master function would not called. the m_active_tranxs would be NULL. And as rpl_semi_sync_master_wait_no_slave is off, the switch_off func called, the assert false.
Attachments
Activity
Field | Original Value | New Value |
---|---|---|
Assignee | Sachin Setiya [ sachin.setiya.007 ] |
Description |
The server would crash when has configs rpl_semi_sync_master_enabled = OFF rpl_semi_sync_master_wait_no_slave =OFF
stack_bottom = 0x0 thread_stack 0x40000 *** buffer overflow detected ***: /u01/mariadb/bin/mysqld terminated ======= Backtrace: ========= /lib64/libc.so.6(__fortify_fail+0x37)[0x7f6f9059c597] /lib64/libc.so.6(+0x10c750)[0x7f6f9059a750] /lib64/libc.so.6(+0x10e507)[0x7f6f9059c507] /u01/mariadb/bin/mysqld(my_addr_resolve+0xda)[0x7f6f9327932a] /u01/mariadb/bin/mysqld(my_print_stacktrace+0x1c2)[0x7f6f93262a22] /u01/mariadb/bin/mysqld(handle_fatal_signal+0x357)[0x7f6f92cf04b7] /lib64/libpthread.so.0(+0xf100)[0x7f6f9213d100] /u01/mariadb/bin/mysqld(_ZN12Active_tranx24clear_active_tranx_nodesEPKcy+0xc6)[0x7f6f92c3f7d6] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master10switch_offEv+0x1e)[0x7f6f92c3fcae] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master11init_objectEv+0xd4)[0x7f6f92c3fe64] /u01/mariadb/bin/mysqld(+0x4f2b3f)[0x7f6f92a60b3f] /u01/mariadb/bin/mysqld(_Z11mysqld_mainiPPc+0x4b7)[0x7f6f92a67287] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f6f904afb15] /u01/mariadb/bin/mysqld(+0x4ec7ed)[0x7f6f92a5a7ed] 353 int Repl_semi_sync_master::init_object() 354 { 355 int result; 356 357 m_init_done = true; 358 359 /* References to the parameter works after set_options(). */ 360 set_wait_timeout(rpl_semi_sync_master_timeout); 361 set_trace_level(rpl_semi_sync_master_trace_level); 362 set_wait_point(rpl_semi_sync_master_wait_point); 363 364 /* Mutex initialization can only be done after MY_INIT(). */ 365 mysql_mutex_init(key_LOCK_binlog, 366 &LOCK_binlog, MY_MUTEX_INIT_FAST); 367 mysql_cond_init(key_COND_binlog_send, 368 &COND_binlog_send, NULL); 369 370 if (rpl_semi_sync_master_enabled) 371 { 372 result = enable_master(); 373 if (!result)** 374 result= ack_receiver.start(); /* Start the ACK thread. */ 375 } 376 else 377 { 378 result = disable_master(); 379 } 380 381 /* 382 If rpl_semi_sync_master_wait_no_slave is disabled, let's temporarily 383 switch off semisync to avoid hang if there's none active slave. 384 */ 385 if (!rpl_semi_sync_master_wait_no_slave) 386 switch_off(); 387 388 return result; 389 } 391 int Repl_semi_sync_master::enable_master() 392 { 393 int result = 0; 394 395 /* Must have the lock when we do enable of disable. */ 396 lock(); 397 398 if (!get_master_enabled()) 399 { 400 m_active_tranxs = new Active_tranx(&LOCK_binlog, m_trace_level); 401 if (m_active_tranxs != NULL) 964 int Repl_semi_sync_master::switch_off() 965 { 966 int result; 967 968 DBUG_ENTER("Repl_semi_sync_master::switch_off"); 969 970 m_state = false; 971 972 /* Clear the active transaction list. */ 973 assert(m_active_tranxs != NULL); 974 result = m_active_tranxs->clear_active_tranx_nodes(NULL, 0); 975 976 rpl_semi_sync_master_off_times++; If get rpl_semi_sync_master_enabled off, the enable_master function would not called. the m_active_tranxs would be NULL. And as rpl_semi_sync_master_wait_no_slave is off, the switch_off func called, the assert false. |
The server would crash when has configs rpl_semi_sync_master_enabled = OFF rpl_semi_sync_master_wait_no_slave =OFF
{noformat} stack_bottom = 0x0 thread_stack 0x40000 *** buffer overflow detected ***: /u01/mariadb/bin/mysqld terminated ======= Backtrace: ========= /lib64/libc.so.6(__fortify_fail+0x37)[0x7f6f9059c597] /lib64/libc.so.6(+0x10c750)[0x7f6f9059a750] /lib64/libc.so.6(+0x10e507)[0x7f6f9059c507] /u01/mariadb/bin/mysqld(my_addr_resolve+0xda)[0x7f6f9327932a] /u01/mariadb/bin/mysqld(my_print_stacktrace+0x1c2)[0x7f6f93262a22] /u01/mariadb/bin/mysqld(handle_fatal_signal+0x357)[0x7f6f92cf04b7] /lib64/libpthread.so.0(+0xf100)[0x7f6f9213d100] /u01/mariadb/bin/mysqld(_ZN12Active_tranx24clear_active_tranx_nodesEPKcy+0xc6)[0x7f6f92c3f7d6] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master10switch_offEv+0x1e)[0x7f6f92c3fcae] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master11init_objectEv+0xd4)[0x7f6f92c3fe64] /u01/mariadb/bin/mysqld(+0x4f2b3f)[0x7f6f92a60b3f] /u01/mariadb/bin/mysqld(_Z11mysqld_mainiPPc+0x4b7)[0x7f6f92a67287] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f6f904afb15] /u01/mariadb/bin/mysqld(+0x4ec7ed)[0x7f6f92a5a7ed] 353 int Repl_semi_sync_master::init_object() 354 { 355 int result; 356 357 m_init_done = true; 358 359 /* References to the parameter works after set_options(). */ 360 set_wait_timeout(rpl_semi_sync_master_timeout); 361 set_trace_level(rpl_semi_sync_master_trace_level); 362 set_wait_point(rpl_semi_sync_master_wait_point); 363 364 /* Mutex initialization can only be done after MY_INIT(). */ 365 mysql_mutex_init(key_LOCK_binlog, 366 &LOCK_binlog, MY_MUTEX_INIT_FAST); 367 mysql_cond_init(key_COND_binlog_send, 368 &COND_binlog_send, NULL); 369 370 if (rpl_semi_sync_master_enabled) 371 { 372 result = enable_master(); 373 if (!result)** 374 result= ack_receiver.start(); /* Start the ACK thread. */ 375 } 376 else 377 { 378 result = disable_master(); 379 } 380 381 /* 382 If rpl_semi_sync_master_wait_no_slave is disabled, let's temporarily 383 switch off semisync to avoid hang if there's none active slave. 384 */ 385 if (!rpl_semi_sync_master_wait_no_slave) 386 switch_off(); 387 388 return result; 389 } 391 int Repl_semi_sync_master::enable_master() 392 { 393 int result = 0; 394 395 /* Must have the lock when we do enable of disable. */ 396 lock(); 397 398 if (!get_master_enabled()) 399 { 400 m_active_tranxs = new Active_tranx(&LOCK_binlog, m_trace_level); 401 if (m_active_tranxs != NULL) 964 int Repl_semi_sync_master::switch_off() 965 { 966 int result; 967 968 DBUG_ENTER("Repl_semi_sync_master::switch_off"); 969 970 m_state = false; 971 972 /* Clear the active transaction list. */ 973 assert(m_active_tranxs != NULL); 974 result = m_active_tranxs->clear_active_tranx_nodes(NULL, 0); 975 976 rpl_semi_sync_master_off_times++; {noformat} If get rpl_semi_sync_master_enabled off, the enable_master function would not called. the m_active_tranxs would be NULL. And as rpl_semi_sync_master_wait_no_slave is off, the switch_off func called, the assert false. |
Fix Version/s | 10.3 [ 22126 ] |
Fix Version/s | 10.4 [ 22408 ] |
Priority | Major [ 3 ] | Blocker [ 1 ] |
Status | Open [ 1 ] | Confirmed [ 10101 ] |
Description |
The server would crash when has configs rpl_semi_sync_master_enabled = OFF rpl_semi_sync_master_wait_no_slave =OFF
{noformat} stack_bottom = 0x0 thread_stack 0x40000 *** buffer overflow detected ***: /u01/mariadb/bin/mysqld terminated ======= Backtrace: ========= /lib64/libc.so.6(__fortify_fail+0x37)[0x7f6f9059c597] /lib64/libc.so.6(+0x10c750)[0x7f6f9059a750] /lib64/libc.so.6(+0x10e507)[0x7f6f9059c507] /u01/mariadb/bin/mysqld(my_addr_resolve+0xda)[0x7f6f9327932a] /u01/mariadb/bin/mysqld(my_print_stacktrace+0x1c2)[0x7f6f93262a22] /u01/mariadb/bin/mysqld(handle_fatal_signal+0x357)[0x7f6f92cf04b7] /lib64/libpthread.so.0(+0xf100)[0x7f6f9213d100] /u01/mariadb/bin/mysqld(_ZN12Active_tranx24clear_active_tranx_nodesEPKcy+0xc6)[0x7f6f92c3f7d6] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master10switch_offEv+0x1e)[0x7f6f92c3fcae] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master11init_objectEv+0xd4)[0x7f6f92c3fe64] /u01/mariadb/bin/mysqld(+0x4f2b3f)[0x7f6f92a60b3f] /u01/mariadb/bin/mysqld(_Z11mysqld_mainiPPc+0x4b7)[0x7f6f92a67287] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f6f904afb15] /u01/mariadb/bin/mysqld(+0x4ec7ed)[0x7f6f92a5a7ed] 353 int Repl_semi_sync_master::init_object() 354 { 355 int result; 356 357 m_init_done = true; 358 359 /* References to the parameter works after set_options(). */ 360 set_wait_timeout(rpl_semi_sync_master_timeout); 361 set_trace_level(rpl_semi_sync_master_trace_level); 362 set_wait_point(rpl_semi_sync_master_wait_point); 363 364 /* Mutex initialization can only be done after MY_INIT(). */ 365 mysql_mutex_init(key_LOCK_binlog, 366 &LOCK_binlog, MY_MUTEX_INIT_FAST); 367 mysql_cond_init(key_COND_binlog_send, 368 &COND_binlog_send, NULL); 369 370 if (rpl_semi_sync_master_enabled) 371 { 372 result = enable_master(); 373 if (!result)** 374 result= ack_receiver.start(); /* Start the ACK thread. */ 375 } 376 else 377 { 378 result = disable_master(); 379 } 380 381 /* 382 If rpl_semi_sync_master_wait_no_slave is disabled, let's temporarily 383 switch off semisync to avoid hang if there's none active slave. 384 */ 385 if (!rpl_semi_sync_master_wait_no_slave) 386 switch_off(); 387 388 return result; 389 } 391 int Repl_semi_sync_master::enable_master() 392 { 393 int result = 0; 394 395 /* Must have the lock when we do enable of disable. */ 396 lock(); 397 398 if (!get_master_enabled()) 399 { 400 m_active_tranxs = new Active_tranx(&LOCK_binlog, m_trace_level); 401 if (m_active_tranxs != NULL) 964 int Repl_semi_sync_master::switch_off() 965 { 966 int result; 967 968 DBUG_ENTER("Repl_semi_sync_master::switch_off"); 969 970 m_state = false; 971 972 /* Clear the active transaction list. */ 973 assert(m_active_tranxs != NULL); 974 result = m_active_tranxs->clear_active_tranx_nodes(NULL, 0); 975 976 rpl_semi_sync_master_off_times++; {noformat} If get rpl_semi_sync_master_enabled off, the enable_master function would not called. the m_active_tranxs would be NULL. And as rpl_semi_sync_master_wait_no_slave is off, the switch_off func called, the assert false. |
The server would crash when has configs rpl_semi_sync_master_enabled = OFF rpl_semi_sync_master_wait_no_slave =OFF
How to repeat: ./mysqld --rpl_semi_sync_master_enabled=OFF --rpl_semi_sync_master_wait_no_slave=OFF Dies with: mysqld: /my/maria-10.3/sql/semisync_master.cc:973: int Repl_semi_sync_master::switch_off(): Assertion `m_active_tranxs != NULL' failed. From original bug report: {noformat} stack_bottom = 0x0 thread_stack 0x40000 *** buffer overflow detected ***: /u01/mariadb/bin/mysqld terminated ======= Backtrace: ========= /lib64/libc.so.6(__fortify_fail+0x37)[0x7f6f9059c597] /lib64/libc.so.6(+0x10c750)[0x7f6f9059a750] /lib64/libc.so.6(+0x10e507)[0x7f6f9059c507] /u01/mariadb/bin/mysqld(my_addr_resolve+0xda)[0x7f6f9327932a] /u01/mariadb/bin/mysqld(my_print_stacktrace+0x1c2)[0x7f6f93262a22] /u01/mariadb/bin/mysqld(handle_fatal_signal+0x357)[0x7f6f92cf04b7] /lib64/libpthread.so.0(+0xf100)[0x7f6f9213d100] /u01/mariadb/bin/mysqld(_ZN12Active_tranx24clear_active_tranx_nodesEPKcy+0xc6)[0x7f6f92c3f7d6] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master10switch_offEv+0x1e)[0x7f6f92c3fcae] /u01/mariadb/bin/mysqld(_ZN21Repl_semi_sync_master11init_objectEv+0xd4)[0x7f6f92c3fe64] /u01/mariadb/bin/mysqld(+0x4f2b3f)[0x7f6f92a60b3f] /u01/mariadb/bin/mysqld(_Z11mysqld_mainiPPc+0x4b7)[0x7f6f92a67287] /lib64/libc.so.6(__libc_start_main+0xf5)[0x7f6f904afb15] /u01/mariadb/bin/mysqld(+0x4ec7ed)[0x7f6f92a5a7ed] 353 int Repl_semi_sync_master::init_object() 354 { 355 int result; 356 357 m_init_done = true; 358 359 /* References to the parameter works after set_options(). */ 360 set_wait_timeout(rpl_semi_sync_master_timeout); 361 set_trace_level(rpl_semi_sync_master_trace_level); 362 set_wait_point(rpl_semi_sync_master_wait_point); 363 364 /* Mutex initialization can only be done after MY_INIT(). */ 365 mysql_mutex_init(key_LOCK_binlog, 366 &LOCK_binlog, MY_MUTEX_INIT_FAST); 367 mysql_cond_init(key_COND_binlog_send, 368 &COND_binlog_send, NULL); 369 370 if (rpl_semi_sync_master_enabled) 371 { 372 result = enable_master(); 373 if (!result)** 374 result= ack_receiver.start(); /* Start the ACK thread. */ 375 } 376 else 377 { 378 result = disable_master(); 379 } 380 381 /* 382 If rpl_semi_sync_master_wait_no_slave is disabled, let's temporarily 383 switch off semisync to avoid hang if there's none active slave. 384 */ 385 if (!rpl_semi_sync_master_wait_no_slave) 386 switch_off(); 387 388 return result; 389 } 391 int Repl_semi_sync_master::enable_master() 392 { 393 int result = 0; 394 395 /* Must have the lock when we do enable of disable. */ 396 lock(); 397 398 if (!get_master_enabled()) 399 { 400 m_active_tranxs = new Active_tranx(&LOCK_binlog, m_trace_level); 401 if (m_active_tranxs != NULL) 964 int Repl_semi_sync_master::switch_off() 965 { 966 int result; 967 968 DBUG_ENTER("Repl_semi_sync_master::switch_off"); 969 970 m_state = false; 971 972 /* Clear the active transaction list. */ 973 assert(m_active_tranxs != NULL); 974 result = m_active_tranxs->clear_active_tranx_nodes(NULL, 0); 975 976 rpl_semi_sync_master_off_times++; {noformat} If get rpl_semi_sync_master_enabled off, the enable_master function would not called. the m_active_tranxs would be NULL. And as rpl_semi_sync_master_wait_no_slave is off, the switch_off func called, the assert false. |
Assignee | Sachin Setiya [ sachin.setiya.007 ] | Andrei Elkin [ elkin ] |
Status | Confirmed [ 10101 ] | In Progress [ 3 ] |
Assignee | Andrei Elkin [ elkin ] | Lixun Peng [ plinux ] |
Status | In Progress [ 3 ] | In Review [ 10002 ] |
Assignee | Lixun Peng [ plinux ] | Andrei Elkin [ elkin ] |
issue.field.resolutiondate | 2019-04-19 19:51:56.0 | 2019-04-19 19:51:56.481 |
Component/s | Replication [ 10100 ] | |
Fix Version/s | 10.3.15 [ 23309 ] | |
Fix Version/s | 10.3 [ 22126 ] | |
Fix Version/s | 10.4 [ 22408 ] | |
Resolution | Fixed [ 1 ] | |
Status | In Review [ 10002 ] | Closed [ 6 ] |
Workflow | MariaDB v3 [ 91422 ] | MariaDB v4 [ 155417 ] |
A patch is ready for review. It's pushed to test in BB: 63119277b47 HEAD -> bb-10.3-andrei.