[MDEV-18249] ASSERT_COLUMN_MARKED_FOR_READ failed in ANALYZE TABLE Created: 2019-01-15  Updated: 2021-10-03  Resolved: 2021-07-16

Status: Closed
Project: MariaDB Server
Component/s: Virtual Columns
Affects Version/s: 10.4, 10.5, 10.6
Fix Version/s: 10.2.40, 10.3.31, 10.4.21, 10.5.12, 10.6.4

Type: Bug Priority: Critical
Reporter: Alice Sherepa Assignee: Nikita Malyavin
Resolution: Fixed Votes: 0
Labels: bitmaps


 Description   

create table t1 (c varchar(3) not null, v varchar(4) as (c) virtual);
insert into t1 (c) values ('a'),('b');
analyze table t1 persistent for columns (v) indexes ();

10.4 890e0278706768e18

assert/assert.c:92(__assert_fail_base)[0x7fd3d85fabd7]
/lib/x86_64-linux-gnu/libc.so.6(+0x2dc82)[0x7fd3d85fac82]
sql/field.cc:7575(Field_varstring::val_str(String*, String*))[0x5637532a5c58]
sql/field.h:834(Field::val_str(String*))[0x56375299e196]
sql/field.h:608(Field::save_in_field_str(Field*))[0x5637532cae0c]
sql/field.h:1825(Field_str::save_in_field(Field*))[0x5637532cdecd]
sql/field.h:770(Field::store_field(Field*))[0x5637532cb42f]
sql/field_conv.cc:852(field_conv_incompatible(Field*, Field*))[0x5637532e2504]
sql/field_conv.cc:865(field_conv(Field*, Field*))[0x5637532e25a1]
sql/item.cc:6352(save_field_in_field(Field*, bool*, Field*, bool))[0x56375336200a]
sql/item.cc:6404(Item_field::save_in_field(Field*, bool))[0x563753362667]
sql/table.cc:7798(TABLE::update_virtual_fields(handler*, enum_vcol_update_mode))[0x563752eaa72f]
sql/handler.cc:2817(handler::ha_rnd_next(unsigned char*))[0x563753307f84]
sql/sql_statistics.cc:2751(collect_statistics_for_table(THD*, TABLE*))[0x563752db8856]
sql/sql_admin.cc:882(mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, char const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*)))[0x563752f65a60]
sql/sql_admin.cc:1315(Sql_cmd_analyze_table::execute(THD*))[0x563752f695c2]
sql/sql_parse.cc:6314(mysql_execute_command(THD*))[0x563752c04338]
sql/sql_parse.cc:8116(mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool))[0x563752c0eb8c]
sql/sql_parse.cc:1854(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool))[0x563752be9907]
sql/sql_parse.cc:1397(do_command(THD*))[0x563752be6a9f]
sql/sql_connect.cc:1402(do_handle_one_connection(CONNECT*))[0x563752f3e721]
sql/sql_connect.cc:1309(handle_one_connection)[0x563752f3e0fe]
perfschema/pfs.cc:1864(pfs_spawn_thread)[0x563754293f2e]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba)[0x7fd3d923f6ba]
x86_64/clone.S:111(clone)[0x7fd3d86d441d]

//similar for all data types, e.g. datetime, char:

sql/field.cc:6890(Field_datetimef::get_TIME(st_mysql_time*, unsigned char const*, date_mode_t) const)[0x55c733b1e270]
sql/field.h:3410(Field_datetimef::get_date(st_mysql_time*, date_mode_t))[0x55c733b54273]
sql/field.h:2664(Field_temporal::save_in_field(Field*))[0x55c733b51c66]
sql/field.h:770(Field::store_field(Field*))[0x55c733b4b42f]
sql/field_conv.cc:852(field_conv_incompatible(Field*, Field*))[0x55c733b62504]
sql/field_conv.cc:865(field_conv(Field*, Field*))[0x55c733b625a1]
sql/item.cc:6352(save_field_in_field(Field*, bool*, Field*, bool))[0x55c733be200a]
sql/item.cc:6404(Item_field::save_in_field(Field*, bool))[0x55c733be2667]
sql/table.cc:7798(TABLE::update_virtual_fields(handler*, enum_vcol_update_mode))[0x55c73372a72f]
sql/handler.cc:2817(handler::ha_rnd_next(unsigned char*))[0x55c733b87f84]
sql/sql_statistics.cc:2751(collect_statistics_for_table(THD*, TABLE*))[0x55c733638856]
sql/sql_admin.cc:882(mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, char const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*)))[0x55c7337e5a60]
sql/sql_admin.cc:1315(Sql_cmd_analyze_table::execute(THD*))[0x55c7337e95c2]
sql/sql_parse.cc:6314(mysql_execute_command(THD*))[0x55c733484338]
sql/sql_parse.cc:8116(mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool))[0x55c73348eb8c]
sql/sql_parse.cc:1854(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool))[0x55c733469907]
sql/sql_parse.cc:1397(do_command(THD*))[0x55c733466a9f]
sql/sql_connect.cc:1402(do_handle_one_connection(CONNECT*))[0x55c7337be721]
sql/sql_connect.cc:1309(handle_one_connection)[0x55c7337be0fe]
perfschema/pfs.cc:1864(pfs_spawn_thread)[0x55c734b13f2e]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba)[0x7f381b0776ba]
x86_64/clone.S:111(clone)[0x7f381a50c41d]



 Comments   
Comment by Alice Sherepa [ 2019-03-12 ]

10.4 6d68a3464e9a93baecc2

mysqld: /10.4/sql/field.cc:8361: virtual String* Field_blob::val_str(String*, String*): Assertion `!table || (!table->read_set || bitmap_is_set(table->read_set, field_index) || (!(ptr >= table->record[0] && ptr < table->record[0] + table->s->reclength)))' failed.
190312 13:52:51 [ERROR] mysqld got signal 6 ;
 
assert/assert.c:92(__assert_fail_base)[0x7f240da6ebd7]
/lib/x86_64-linux-gnu/libc.so.6(+0x2dc82)[0x7f240da6ec82]
/10.4/sql/mysqld(_ZN10Field_blob7val_strEP6StringS1_+0x565)[0x562aa89726a1]
sql/field.cc:8363(Field_blob::val_str(String*, String*))[0x562aa8a15f76]
sql/item.cc:3125(Item_field::val_str(String*))[0x562aa8b73eb5]
sql/item_strfunc.cc:1612(Item_func_left::val_str(String*))[0x562aa83b7c61]
sql/item.h:899(Item::val_str())[0x562aa8afb1f2]
sql/item_func.cc:1736(Item_func_hash::val_int())[0x562aa8a2edc7]
sql/item.cc:6480(Item::save_int_in_field(Field*, bool))[0x562aa8700af4]
sql/sql_type.cc:3588(Type_handler_int_result::Item_save_in_field(Item*, Field*, bool) const)[0x562aa8a2efa3]
sql/item.cc:6490(Item::save_in_field(Field*, bool))[0x562aa852a8ad]
sql/table.cc:8191(TABLE::update_virtual_fields(handler*, enum_vcol_update_mode))[0x562aa89cffee]
sql/handler.cc:2999(handler::ha_rnd_next(unsigned char*))[0x562aa8430a6b]
sql/sql_statistics.cc:2828(collect_statistics_for_table(THD*, TABLE*))[0x562aa85ef65c]
sql/sql_admin.cc:882(mysql_admin_table(THD*, TABLE_LIST*, st_ha_check_opt*, char const*, thr_lock_type, bool, bool, unsigned int, int (*)(THD*, TABLE_LIST*, st_ha_check_opt*), int (handler::*)(THD*, st_ha_check_opt*), int (*)(THD*, TABLE_LIST*, st_ha_check_opt*)))[0x562aa85f3224]
sql/sql_admin.cc:1315(Sql_cmd_analyze_table::execute(THD*))[0x562aa826d99e]
sql/sql_parse.cc:6393(mysql_execute_command(THD*))[0x562aa827818d]
sql/sql_parse.cc:8204(mysql_parse(THD*, char*, unsigned int, Parser_state*, bool, bool))[0x562aa82509bb]
sql/sql_parse.cc:1831(dispatch_command(enum_server_command, THD*, char*, unsigned int, bool, bool))[0x562aa824d906]
sql/sql_parse.cc:1358(do_command(THD*))[0x562aa85c1f0d]
sql/sql_connect.cc:1399(do_handle_one_connection(CONNECT*))[0x562aa85c18d7]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x76ba)[0x7f240e8b76ba]
x86_64/clone.S:111(clone)[0x7f240db4841d]

--grammar=conf/mariadb/optimizer.yy --notnull --views=MERGE --gendata-advanced --no-mask --queries=100M --duration=400 --threads=2 --seed=1552395148 --views --vcols --reporters=Backtrace,ErrorLog,Deadlock --validator=TransformerNoComparator --transformer=ConvertTablesToDerived,ConvertTablesToViews,DisableJoinCache,ExecuteAsWhereSubquery,LimitDecrease,LimitIncrease,NullIf,ExecuteAsCTE,ExecuteAsCTE2,ExecuteAsDeleteReturning,ExecuteAsExcept,ExecuteAsExecuteImmediate,ExecuteAsInsertSelect,ExecuteAsIntersect,ExecuteAsUnion,ExecuteAsUpdateDelete,ExecuteAsView,ExecuteAsPreparedTwice,ExecuteAsSPTwice --redefine=conf/mariadb/general-workarounds.yy --redefine=conf/mariadb/versioning.yy --redefine=conf/mariadb/alter_table.yy --redefine=conf/mariadb/instant_add.yy --redefine=conf/mariadb/sequences.yy --redefine=conf/mariadb/redefine_temporary_tables.yy --redefine=conf/mariadb/sp.yy --redefine=conf/mariadb/modules/sql_mode.yy --redefine=conf/mariadb/redefine_random_keys.yy --redefine=conf/mariadb/analyze-tables-at-start.yy --mysqld=--log_output=FILE --mysqld=--log-bin --mysqld=--log_bin_trust_function_creators=1 --mysqld=--loose-max-statement-time=30 --mysqld=--loose-debug_assert_on_not_freed_memory=0 --mysqld=--lock-wait-timeout=10 --mysqld=--innodb-lock-wait-timeout=5 --genconfig=conf/mariadb/10.4.cnf.template --mysqld=--optimizer_switch=condition_pushdown_from_having=off --engine=MyISAM --mtr-build-thread=302 --basedir=/git/10.4

Comment by Nikita Malyavin [ 2021-06-25 ]

midenok please review the patch on `bb-10.2-nikita`:
c1227119 MDEV-18249 ASSERT_COLUMN_MARKED_FOR_READ failed in ANALYZE TABLE

Comment by Nikita Malyavin [ 2021-07-06 ]

the minimal test case failing on 10.3+:

-- source include/have_innodb.inc
set use_stat_tables=PREFERABLY;
CREATE TABLE `configurations` (
  `id` int(3) NOT NULL AUTO_INCREMENT,
  `property` text DEFAULT NULL,
  `value` text DEFAULT NULL,
  `active` tinyint(1) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `property` (`property`) USING HASH
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;
insert configurations(property) values('a'), ('b'), ('c'), ('d'), ('e'), ('f');
analyze table `configurations`;
drop table configurations;

The patch is updated a little: link

unfortunately the test can't be included in the commit, because long unique was introduced only in 10.3.

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