[MDEV-13867] gcol.gcol_non_stored_columns_innodb, gcol.main_alter_table failed in buildbot, dict0dict.ic:399: ulint dict_table_get_n_user_cols(const dict_table_t*): Assertion `table->n_cols > 3' failed. Created: 2017-09-22  Updated: 2018-07-25  Resolved: 2018-07-25

Status: Closed
Project: MariaDB Server
Component/s: Storage Engine - InnoDB, Tests
Affects Version/s: 10.2, 10.3
Fix Version/s: 10.3.2

Type: Bug Priority: Major
Reporter: Alice Sherepa Assignee: Thirunarayanan Balathandayuthapani
Resolution: Fixed Votes: 0
Labels: None


 Description   

http://buildbot.askmonty.org/buildbot/builders/kvm-fulltest2/builds/9709/steps/test_3/logs/stdio

gcol.gcol_non_stored_columns_innodb 'innodb' w1 [ fail ]
        Test ended at 2017-09-21 19:08:00
 
CURRENT_TEST: gcol.gcol_non_stored_columns_innodb
mysqltest: In included file "./suite/gcol/inc/gcol_non_stored_columns.inc": 
included from /mnt/buildbot/build/mariadb-10.3.2/mysql-test/suite/gcol/t/gcol_non_stored_columns_innodb.test at line 42:
At line 19: query 'insert into t1 values (default)' failed: 2013: Lost connection to MySQL server during query
 
The result from queries just before the failure was:
SET @@session.default_storage_engine = 'InnoDB';
# Case 1. All non-stored columns.
create  table t1 (a int generated always as (2+3) virtual);
insert into t1 values (default);
 
Server [mysqld.1 - pid: 25269, winpid: 25269, exit: 256] failed during test run
Server log from this test:
----------SERVER LOG START-----------
mysqld: /home/buildbot/buildbot/build/mariadb-10.3.2/storage/innobase/include/dict0dict.ic:399: ulint dict_table_get_n_user_cols(const dict_table_t*): Assertion `table->n_cols > 3' failed.
170921 19:07:58 [ERROR] mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
 
To report this bug, see https://mariadb.com/kb/en/reporting-bugs
 
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.
 
Server version: 10.3.2-MariaDB-debug-log
key_buffer_size=1048576
read_buffer_size=131072
max_used_connections=4
max_threads=153
thread_count=10
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 61908 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.
 
Thread pointer: 0xac909730
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0xb04c12a0 thread_stack 0x49000
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(my_print_stacktrace+0x3b)[0x8de9803]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(handle_fatal_signal+0x3cf)[0x863b43f]
[0xb77cd400]
[0xb77cd424]
/lib/i386-linux-gnu/libc.so.6(gsignal+0x4f)[0xb72a91ef]
/lib/i386-linux-gnu/libc.so.6(abort+0x175)[0xb72ac835]
/lib/i386-linux-gnu/libc.so.6(+0x27095)[0xb72a2095]
/lib/i386-linux-gnu/libc.so.6(+0x27147)[0xb72a2147]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x894d642]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x894d703]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x8958aa6]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_ZN7handler7ha_openEP5TABLEPKcijP11st_mem_root+0x1f7)[0x8641927]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z21open_table_from_shareP3THDP11TABLE_SHAREPKcjjjP5TABLEb+0xe8d)[0x8483529]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z10open_tableP3THDP10TABLE_LISTP18Open_table_context+0xeda)[0x830c2ea]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x830ed58]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z11open_tablesP3THDRK14DDL_options_stPP10TABLE_LISTPjjP19Prelocking_strategy+0x299)[0x830fcb5]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x8308b63]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z30open_normal_and_derived_tablesP3THDP10TABLE_LISTjj+0xd4)[0x8311483]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x83aae6a]
mysys/stacktrace.c:269(my_print_stacktrace)[0x83ad29a]
sql/signal_handler.cc:168(handle_fatal_signal)[0x83b0945]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z19mysqld_stmt_prepareP3THDPKcj+0x11e)[0x83ad977]
include/dict0dict.ic:400(dict_table_get_n_user_cols)[0x8382fea]
sql/handler.cc:2515(handler::ha_open(TABLE*, char const*, int, unsigned int, st_mem_root*))[0x8381de1]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z24do_handle_one_connectionP7CONNECT+0x1bf)[0x84ca2c9]
sql/table.cc:3344(open_table_from_share(THD*, TABLE_SHARE*, char const*, unsigned int, unsigned int, unsigned int, TABLE*, bool))[0x84ca057]
sql/sql_base.cc:1881(open_table(THD*, TABLE_LIST*, Open_table_context*))[0x885b4fd]
sql/sql_prepare.cc:1328(mysql_test_insert)[0xb7555d4c]
sql/sql_parse.cc:1777(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool))[0xb7365ace]
 
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (0xac99fd40): insert into t1 values (default)
Connection ID (thread ID): 230
Status: NOT_KILLED
 
Optimizer switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=on,condition_pushdown_for_derived=on,split_grouping_derived=on

gcol.main_alter_table 'innodb'           w1 [ fail ]
        Test ended at 2017-09-21 19:08:38
 
CURRENT_TEST: gcol.main_alter_table
mysqltest: At line 16: query 'SELECT * FROM t1' failed: 2013: Lost connection to MySQL server during query
 
The result from queries just before the failure was:
#
# Bug#22017616: ASSERTION FAILED: TABLE_SHARE->IS_MISSING_PRIMARY_KEY()
# == M_PREBUILT->CLUST_IND
#
# Ensure that adding indexes with virtual columns are not promoted to
# primary keys
#
# Base line with normal column - should be promoted
CREATE TABLE t0(a INT NOT NULL) ENGINE=INNODB;
ALTER TABLE t0 ADD UNIQUE INDEX (a);
# Case a: Create table with virtual unique not null column
CREATE TABLE t1(a POINT GENERATED ALWAYS AS (POINT(1,1)) VIRTUAL UNIQUE) ENGINE=INNODB;
SELECT * FROM t1;
 
 
Server [mysqld.1 - pid: 26825, winpid: 26825, exit: 256] failed during test run
Server log from this test:
----------SERVER LOG START-----------
mysqld: /home/buildbot/buildbot/build/mariadb-10.3.2/storage/innobase/include/dict0dict.ic:399: ulint dict_table_get_n_user_cols(const dict_table_t*): Assertion `table->n_cols > 3' failed.
170921 19:08:36 [ERROR] mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
 
To report this bug, see https://mariadb.com/kb/en/reporting-bugs
 
We will try our best to scrape up some info that will hopefully help
diagnose the problem, but since we have already crashed, 
something is definitely wrong and this may fail.
 
Server version: 10.3.2-MariaDB-debug-log
key_buffer_size=1048576
read_buffer_size=131072
max_used_connections=2
max_threads=153
thread_count=8
It is possible that mysqld could use up to 
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 61908 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.
 
Thread pointer: 0xa82006f8
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0xacab82a0 thread_stack 0x49000
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(my_print_stacktrace+0x3b)[0x8de9803]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(handle_fatal_signal+0x3cf)[0x863b43f]
[0xb76f5400]
[0xb76f5424]
/lib/i386-linux-gnu/libc.so.6(gsignal+0x4f)[0xb71d11ef]
/lib/i386-linux-gnu/libc.so.6(abort+0x175)[0xb71d4835]
/lib/i386-linux-gnu/libc.so.6(+0x27095)[0xb71ca095]
/lib/i386-linux-gnu/libc.so.6(+0x27147)[0xb71ca147]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x894d642]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x894d703]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x8958aa6]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_ZN7handler7ha_openEP5TABLEPKcijP11st_mem_root+0x1f7)[0x8641927]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z21open_table_from_shareP3THDP11TABLE_SHAREPKcjjjP5TABLEb+0xe8d)[0x8483529]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z10open_tableP3THDP10TABLE_LISTP18Open_table_context+0xeda)[0x830c2ea]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x830ed58]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z11open_tablesP3THDRK14DDL_options_stPP10TABLE_LISTPjjP19Prelocking_strategy+0x299)[0x830fcb5]
mysys/stacktrace.c:269(my_print_stacktrace)[0x8308b63]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld(_Z30open_normal_and_derived_tablesP3THDP10TABLE_LISTjj+0xd4)[0x8311483]
sql/signal_handler.cc:168(handle_fatal_signal)[0x83ab88e]
/mnt/buildbot/build/mariadb-10.3.2/sql/mysqld[0x83ad31e]
include/dict0dict.ic:400(dict_table_get_n_user_cols)[0x83b0945]
sql/handler.cc:2515(handler::ha_open(TABLE*, char const*, int, unsigned int, st_mem_root*))[0x83ad977]
sql/table.cc:3344(open_table_from_share(THD*, TABLE_SHARE*, char const*, unsigned int, unsigned int, unsigned int, TABLE*, bool))[0x8382fea]
sql/sql_base.cc:3418(open_and_process_table)[0x8381de1]
sql/sql_parse.cc:1777(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool))[0x84ca2c9]
sql/sql_connect.cc:1418(do_handle_one_connection(CONNECT*))[0x84ca057]
perfschema/pfs.cc:1864(pfs_spawn_thread)[0x885b4fd]
/lib/i386-linux-gnu/libpthread.so.0(+0x6d4c)[0xb747dd4c]
/lib/i386-linux-gnu/libc.so.6(clone+0x5e)[0xb728dace]
 
Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (0xa82796b8): SELECT * FROM t1
Connection ID (thread ID): 26
Status: NOT_KILLED
 
Optimizer switch: index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,index_merge_sort_intersection=off,engine_condition_pushdown=off,index_condition_pushdown=on,derived_merge=on,derived_with_keys=on,firstmatch=on,loosescan=on,materialization=on,in_to_exists=on,semijoin=on,partial_match_rowid_merge=on,partial_match_table_scan=on,subquery_cache=on,mrr=off,mrr_cost_based=off,mrr_sort_keys=off,outer_join_with_cache=on,semijoin_with_cache=on,join_cache_incremental=on,join_cache_hashed=on,join_cache_bka=on,optimize_join_buffer_size=off,table_elimination=on,extended_keys=on,exists_to_in=on,orderby_uses_equalities=on,condition_pushdown_for_derived=on,split_grouping_derived=on



 Comments   
Comment by Marko Mäkelä [ 2018-04-06 ]

I wonder if this always fails. This should affect 10.2 as well.
The assertion may be bogus, requiring a table to contain a user-specified stored column. The statement

CREATE TABLE t1(a INT GENERATED ALWAYS AS (2+3) VIRTUAL);

is not generating any stored columns, so there would only be the 3 hidden system columns DB_ROW_ID,DB_TRX_ID,DB_ROLL_PTR.

Comment by Thirunarayanan Balathandayuthapani [ 2018-07-25 ]

The following commit already fixed the issue by relaxing the strict assertion:

commit e62b57e4d003891574ba81d29377fc23f449f004
Author: Marko Mäkelä <marko.makela@mariadb.com>
Date: Sat Sep 23 20:34:53 2017 +0300

Relax a too strict debug assertion

In 10.2, there was no assert in dict_table_get_n_user_cols().

Generated at Thu Feb 08 08:08:59 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.