Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
MDEV-19338 InnoDB: Failing assertion: !cursor->index->is_committed()
Call mark_columns_per_binlog_row_image before find_row() to set up table->vcol_set early,
so the virtual column value will be updated after record read (ha_rnd_pos/ha_index_next/etc)
by table->update_virtual_fields() call
  • Loading branch information
FooBarrior committed Jul 31, 2020
1 parent 8a61231 commit 91ebf18
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 7 deletions.
20 changes: 20 additions & 0 deletions mysql-test/suite/rpl/r/rpl_row_virt.result
@@ -0,0 +1,20 @@
include/master-slave.inc
[connection master]
connection master;
create table t1 (
id int auto_increment,
data varchar(32),
virt tinyint as (1),
primary key (id),
key virt (virt)
) engine=innodb default charset=utf8mb4;
insert into t1 (data) values ('broken');
update t1 set data='more broken';
connection slave;
select * from t1;
id data virt
1 more broken 1
connection master;
drop table t1;
connection slave;
include/rpl_end.inc
27 changes: 27 additions & 0 deletions mysql-test/suite/rpl/t/rpl_row_virt.test
@@ -0,0 +1,27 @@
--source include/have_binlog_format_row.inc
--source include/master-slave.inc
--source include/have_innodb.inc
connection master;

create table t1 (
id int auto_increment,
data varchar(32),
virt tinyint as (1),
primary key (id),
key virt (virt)
) engine=innodb default charset=utf8mb4;

insert into t1 (data) values ('broken');

update t1 set data='more broken';

--sync_slave_with_master

select * from t1;

--connection master
drop table t1;

--sync_slave_with_master

--source include/rpl_end.inc
14 changes: 7 additions & 7 deletions sql/log_event.cc
Expand Up @@ -13614,7 +13614,6 @@ int Rows_log_event::find_row(rpl_group_info *rgi)
if (is_table_scan || is_index_scan)
issue_long_find_row_warning(get_general_type_code(), m_table->alias.c_ptr(),
is_index_scan, rgi);
table->default_column_bitmaps();
DBUG_RETURN(error);
}

Expand Down Expand Up @@ -13928,6 +13927,12 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
#endif /* WSREP_PROC_INFO */

thd_proc_info(thd, message);
// Temporary fix to find out why it fails [/Matz]
memcpy(m_table->read_set->bitmap, m_cols.bitmap, (m_table->read_set->n_bits + 7) / 8);
memcpy(m_table->write_set->bitmap, m_cols_ai.bitmap, (m_table->write_set->n_bits + 7) / 8);

m_table->mark_columns_per_binlog_row_image();

int error= find_row(rgi);
if (error)
{
Expand Down Expand Up @@ -13997,12 +14002,7 @@ Update_rows_log_event::do_exec_row(rpl_group_info *rgi)
error= HA_ERR_GENERIC; // in case if error is not set yet
goto err;
}

// Temporary fix to find out why it fails [/Matz]
memcpy(m_table->read_set->bitmap, m_cols.bitmap, (m_table->read_set->n_bits + 7) / 8);
memcpy(m_table->write_set->bitmap, m_cols_ai.bitmap, (m_table->write_set->n_bits + 7) / 8);

m_table->mark_columns_per_binlog_row_image();

error= m_table->file->ha_update_row(m_table->record[1], m_table->record[0]);
if (error == HA_ERR_RECORD_IS_THE_SAME)
error= 0;
Expand Down

0 comments on commit 91ebf18

Please sign in to comment.