Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
10.4.14, 10.2(EOL), 10.3(EOL), 10.4(EOL), 10.5
-
None
Description
One of the customers reported that WITH RECURSIVE, UNION ALL query, MariaDB is crashing.
Actually, when executing this particular CTE query it actually crashes the server, but nothing logs in the error log (stack trace) . But core dump is generated, further gdb output is captured.
MariaDB [test]> select @@version; |
+-----------------+ |
| @@version |
|
+-----------------+ |
| 10.4.14-MariaDB |
|
+-----------------+ |
1 row in set (0.000 sec) |
|
MariaDB [test]> create table foo (a bigint(10) not null auto_increment, b int(5) not null, c bigint(10) default null, primary key (`a`)); |
Query OK, 0 rows affected (0.011 sec) |
|
MariaDB [test]> insert into foo values (1,1,12); |
Query OK, 1 row affected (0.003 sec)
|
|
MariaDB [test]> WITH RECURSIVE TREE AS ( SELECT a , b , c FROM foo UNION ALL SELECT A.a , A.b , A.c FROM foo AS A INNER JOIN TREE AS B ON A.c = B.a ) SELECT 0 AS b FROM dual UNION ALL SELECT b FROM TREE; |
ERROR 2013 (HY000): Lost connection to MySQL server during query |
MariaDB [test]> exit
|
[root@localhost ~]# ls -lrth /var/lib/mysql/core.63301
|
-rw------- 1 mysql mysql 509M Aug 28 17:48 /var/lib/mysql/core.63301
|
[root@localhost ~]# sudo gdb --batch --eval-command="thread apply all bt"
|
|
/usr/sbin/mysqld /var/lib/mysql/core.63301 > mysqld_bt_all_threads.txt
|
===============================================================
Locally, I can reproduce the issue with the above steps.
Attaching the error logs, gdb output captured for this crash.
Attachments
- mariadb.err
- 4 kB
- suresh ramagiri
- mysqld_bt_all_threads.txt
- 200 kB
- suresh ramagiri
Activity
Reproducible with at least InnoDB and MyISAM. Release and debug builds crash as described, without crash reports in the log and with multi-thousand-frame stack traces in the coredump, which end in various places.
ASAN builds detect stack overflow, e.g.
10.2 ASAN 21a96581 |
=================================================================
|
==30834==ERROR: AddressSanitizer: stack-overflow on address 0x7f22da456b48 (pc 0x7f22e6402e6b bp 0x7f22da4573c0 sp 0x7f22da456b50 T5)
|
#0 0x7f22e6402e6a in __interceptor_clock_gettime (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x4be6a)
|
#1 0x55e724c6d953 in my_timer_nanoseconds /data/src/10.2/mysys/my_rdtsc.c:293
|
#2 0x55e724afb8d4 in get_timer_raw_value(enum_timer_name) /data/src/10.2/storage/perfschema/pfs_timer.cc:238
|
#3 0x55e724b4df68 in start_stage_v1 /data/src/10.2/storage/perfschema/pfs.cc:4283
|
#4 0x55e7233dc65e in inline_mysql_set_stage /data/src/10.2/include/mysql/psi/mysql_stage.h:72
|
#5 0x55e7233fc01c in THD::enter_stage(PSI_stage_info_v1 const*, char const*, char const*, unsigned int) /data/src/10.2/sql/sql_class.h:2297
|
#6 0x55e7236b1a5a in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3451
|
#7 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#8 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#9 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#10 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#11 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#12 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#13 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#14 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#15 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#16 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#17 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#18 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#19 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#20 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#21 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#22 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#23 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#24 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#25 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#26 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#27 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#28 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#29 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#30 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#31 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#32 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#33 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#34 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#35 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#36 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#37 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#38 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#39 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#40 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#41 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#42 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#43 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#44 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#45 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#46 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#47 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#48 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#49 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#50 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#51 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#52 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#53 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#54 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#55 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#56 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#57 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#58 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#59 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#60 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#61 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#62 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#63 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#64 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#65 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#66 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#67 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#68 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#69 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#70 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#71 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#72 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#73 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#74 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#75 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#76 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#77 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#78 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#79 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#80 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#81 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#82 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#83 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#84 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#85 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#86 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#87 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#88 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#89 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#90 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#91 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#92 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#93 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#94 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#95 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#96 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#97 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#98 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#99 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#100 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#101 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#102 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#103 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#104 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#105 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#106 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#107 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#108 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#109 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#110 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#111 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#112 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#113 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#114 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#115 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#116 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#117 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#118 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#119 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#120 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#121 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#122 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#123 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#124 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#125 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#126 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#127 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#128 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#129 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#130 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#131 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#132 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#133 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#134 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#135 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#136 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#137 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#138 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#139 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#140 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#141 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#142 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#143 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#144 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#145 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#146 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#147 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#148 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#149 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#150 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#151 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#152 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#153 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#154 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#155 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#156 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#157 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#158 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#159 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#160 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#161 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#162 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#163 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#164 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#165 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#166 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#167 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#168 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#169 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#170 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#171 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#172 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#173 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#174 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#175 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#176 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#177 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#178 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#179 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#180 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#181 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#182 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#183 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#184 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#185 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#186 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#187 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#188 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#189 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#190 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#191 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#192 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#193 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#194 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#195 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#196 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#197 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#198 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#199 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#200 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#201 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#202 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#203 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#204 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#205 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#206 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#207 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#208 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#209 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#210 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#211 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#212 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#213 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#214 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#215 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#216 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#217 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#218 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#219 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#220 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#221 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#222 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#223 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#224 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#225 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#226 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#227 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#228 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#229 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#230 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#231 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#232 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#233 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#234 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#235 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#236 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#237 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#238 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#239 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#240 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#241 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#242 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#243 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
#244 0x55e7237140a1 in sub_select(JOIN*, st_join_table*, bool) /data/src/10.2/sql/sql_select.cc:18824
|
#245 0x55e7237129ed in do_select /data/src/10.2/sql/sql_select.cc:18400
|
#246 0x55e7236b3910 in JOIN::exec_inner() /data/src/10.2/sql/sql_select.cc:3638
|
#247 0x55e7236b16e1 in JOIN::exec() /data/src/10.2/sql/sql_select.cc:3433
|
#248 0x55e72385099b in st_select_lex_unit::exec_recursive() /data/src/10.2/sql/sql_union.cc:1310
|
#249 0x55e7235961c9 in mysql_derived_fill(THD*, LEX*, TABLE_LIST*) /data/src/10.2/sql/sql_derived.cc:1063
|
#250 0x55e723591327 in mysql_handle_single_derived(LEX*, TABLE_LIST*, unsigned int) /data/src/10.2/sql/sql_derived.cc:198
|
#251 0x55e7236ebef6 in st_join_table::preread_init() /data/src/10.2/sql/sql_select.cc:12106
|
|
SUMMARY: AddressSanitizer: stack-overflow (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x4be6a) in __interceptor_clock_gettime
|
Thread T5 created by T0 here:
|
#0 0x7f22e63e7f59 in __interceptor_pthread_create (/usr/lib/x86_64-linux-gnu/libasan.so.3+0x30f59)
|
#1 0x55e724b4229c in spawn_thread_v1 /data/src/10.2/storage/perfschema/pfs.cc:1919
|
#2 0x55e7233d9232 in inline_mysql_thread_create /data/src/10.2/include/mysql/psi/mysql_thread.h:1246
|
#3 0x55e7233eda81 in create_thread_to_handle_connection(CONNECT*) /data/src/10.2/sql/mysqld.cc:6517
|
#4 0x55e7233ee164 in create_new_thread /data/src/10.2/sql/mysqld.cc:6587
|
#5 0x55e7233ef07e in handle_connections_sockets() /data/src/10.2/sql/mysqld.cc:6845
|
#6 0x55e7233ecfc0 in mysqld_main(int, char**) /data/src/10.2/sql/mysqld.cc:6136
|
#7 0x55e7233d7bbf in main /data/src/10.2/sql/main.cc:25
|
#8 0x7f22e420d2e0 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x202e0)
|
|
==30834==ABORTING
|
If it's of any help, this bug isn't present in 10.4.12, but it is in 10.4.14.
Also, this bug can be worked around by moving the UNION ALL into the recursive table definition. For example, having this table:
CREATE TABLE tree(id INT, parent_id INT); |
And this server-crashing query:
WITH RECURSIVE |
tree_descendants AS ( |
SELECT parent_id AS ancestor_id |
, id AS descendant_id |
, 1 AS level |
FROM tree |
UNION ALL |
SELECT td.ancestor_id AS ancestor_id |
, next_generation.id AS descendant_id |
, level + 1 AS level |
FROM tree_descendants AS td |
, tree AS next_generation |
WHERE td.descendant_id = next_generation.parent_id |
)
|
SELECT id AS ancestor_id |
, id AS descendant_id |
, 0 AS level |
FROM tree |
UNION ALL |
SELECT ancestor_id |
, descendant_id
|
, level |
FROM tree_descendants |
The crash can be avoided by rewriting like this:
WITH RECURSIVE |
tree_descendants AS ( |
SELECT id AS ancestor_id |
, id AS descendant_id |
, 0 AS level |
FROM tree |
UNION ALL |
SELECT parent_id AS ancestor_id |
, id AS descendant_id |
, 1 AS level |
FROM tree |
UNION ALL |
SELECT td.ancestor_id AS ancestor_id |
, next_generation.id AS descendant_id |
, level + 1 AS level |
FROM tree_descendants AS td |
, tree AS next_generation |
WHERE td.descendant_id = next_generation.parent_id |
AND level > 0 |
)
|
SELECT ancestor_id |
, descendant_id
|
, level |
FROM tree_descendants |
That's basically:
--- a/mariadb-crasher.sql 2020-09-28 18:14:43.958510359 -0700
|
+++ b/mariadb-crasher.sql 2020-09-28 18:14:43.956609116 -0700
|
@@ -1,5 +1,10 @@
|
WITH RECURSIVE
|
tree_descendants AS (
|
+ SELECT id AS ancestor_id
|
+ , id AS descendant_id
|
+ , 0 AS level
|
+ FROM tree
|
+ UNION ALL
|
SELECT parent_id AS ancestor_id
|
, id AS descendant_id
|
, 1 AS level
|
@@ -11,12 +16,8 @@
|
FROM tree_descendants AS td
|
, tree AS next_generation
|
WHERE td.descendant_id = next_generation.parent_id
|
+ AND level > 0
|
)
|
- SELECT id AS ancestor_id
|
- , id AS descendant_id
|
- , 0 AS level
|
- FROM tree
|
- UNION ALL
|
SELECT ancestor_id
|
, descendant_id
|
, level |
Observations:
1. The stack above shows that the execution of the query falls into an infinite loop.
2. The same problem is reported if to build the server with the following cmake command
cmake . -DCMAKE_BUILD_TYPE=Debug -DWITHOUT_MROONGA:bool=1 -DWITHOUT_TOKUDB:bool=1 -DWITH_VALGRIND:bool=1
|
3. Replacing UNION ALL with UNION does not help: we come to the same infinite loop.
4. To change the order of operands in UNION the query returns the expected result set:
MariaDB [test]> WITH RECURSIVE TREE AS
|
-> ( SELECT a , b , c FROM foo
|
-> UNION
|
-> SELECT A.a , A.b , A.c FROM foo AS A INNER JOIN TREE AS B ON A.c = B.a )
|
-> SELECT b FROM TREE UNION SELECT 0 AS b FROM dual;
|
+---+
|
| b |
|
+---+
|
| 1 |
|
| 0 |
|
+---+
|
Thanks for the report and the test case. reproducible as described – both the crash and the absence of anything in the error log.