Hi,

On Mon, Jun 23, 2025 at 7:30 PM Sergei Golubchik via developers <
developers@lists.mariadb.org> wrote:

> Hi, Aleksey,
>
> On Jun 23, Aleksey Midenkov wrote:
> > commit 0ddb9744cea
> > Author: Aleksey Midenkov <mide...@mariadb.com>
> > Date:   Sun May 25 23:23:29 2025 +0300
> >
> >     MDEV-33957 UPDATE fails on replica replicating blob virtual column in
> >                NOBLOB mode when replica logging is off
>
> please, put the whole commit subject in one line. various tools
> assume the subject is one line only and don't handle line wrapping
>

Done.


>
> >
> >     The sequence that causes the issue:
> >
> >     1. file->row_logging is false because slave-bin was not open;
> >     2. TABLE::mark_columns_per_binlog_row_image() didn't mark column for
> >        read because file->row_logginbg is false. This was implemented in
> >        e53ad95b733 (MDEV-6877);
> >     3. TABLE::update_virtual_fields() didn't update virtual field value
> >        because column is not marked for read;
> >     4. calc_row_difference() sees o_len as UNIV_SQL_NULL, but new row
> >        value is "1". The virtual column is added to update vector;
> >     5. row_upd() tries to update secondary index, but row_upd_sec_step()
> >        doesn't see old value in the index.
> >
> >     The patch does mark_virtual_column_with_deps() in case of rgi_slave
> in
> >     mark_columns_per_binlog_row_image() so that non-stored virtual
> columns
> >     are marked for update in slave thread.
> >
> > diff --git a/sql/ha_partition.h b/sql/ha_partition.h
> > index 01d15ca70ac..d926bd03137 100644
> > --- a/sql/ha_partition.h
> > +++ b/sql/ha_partition.h
> > @@ -576,6 +576,17 @@ class ha_partition final :public handler
> >    {
> >      m_file[part_id]->update_create_info(create_info);
> >    }
> > +
> > +  void column_bitmaps_signal() override
> > +  {
> > +    for (uint i= bitmap_get_first_set(&m_opened_partitions);
> > +        i < m_tot_parts;
> > +        i= bitmap_get_next_set(&m_opened_partitions, i))
> > +    {
> > +      m_file[i]->column_bitmaps_signal();
> > +    }
> > +  }
>
> That's a good one. Although it's not really related to the bug in question.
> Please at least mention this in the commit comment, like "also fixed..."
>

Done.


>
> > +
> >  private:
> >    int copy_partitions(ulonglong * const copied, ulonglong * const
> deleted);
> >    void cleanup_new_partition(uint part_count);
> > diff --git a/sql/table.cc b/sql/table.cc
> > index 3a51228d1f3..b48aaadb6e1 100644
> > --- a/sql/table.cc
> > +++ b/sql/table.cc
> > @@ -8019,6 +8024,12 @@ void TABLE::mark_columns_per_binlog_row_image()
> >      }
> >      file->column_bitmaps_signal();
> >    }
> > +#if MYSQL_VERSION_ID<110201
> > +  else if (thd->rgi_slave)
> > +  {
> > +    file->column_bitmaps_signal();
> > +  }
>
> 1. This doesn't match the commit comment, please update the latter to
> describe the actual code change.
>

No, mark_virtual_column_with_deps() is what the patch does (via
column_bitmaps_signal()). Updated the comment to improve clarity.


>
> 2. why MYSQL_VERSION_ID<110201 ?
>

Because 11.2 has another fix 9545eb969 which does not fit 11.1 (as it
depends on Online Alter).


>
> 3. you can also move `rpl_write_set= write_set` from the beginning
> of the function here, inside the else branch. This makes the code
> clearer: rpl_write_set was changed, so we have to signal it.
>

I should remove MYSQL_VERSION_ID and rgi_slave then. That really looks more
clear.

New version:

1ffbee16e86 (HEAD -> bb-10.11-midenok3, mariadb/bb-10.11-midenok3)
MDEV-33957 UPDATE fails on replica replicating blob virtual column in
NOBLOB mode when replica logging is off


> > +#endif
> >
> >    DBUG_VOID_RETURN;
> >  }
>
> Regards,
> Sergei
> Chief Architect, MariaDB Server
> and secur...@mariadb.org
> _______________________________________________
> developers mailing list -- developers@lists.mariadb.org
> To unsubscribe send an email to developers-le...@lists.mariadb.org
>


-- 
@midenok
_______________________________________________
developers mailing list -- developers@lists.mariadb.org
To unsubscribe send an email to developers-le...@lists.mariadb.org

Reply via email to