maria-developers team mailing list archive
-
maria-developers team
-
Mailing list archive
-
Message #13326
Re: da5a72f32d4: MDEV-31033 ER_KEY_NOT_FOUND upon online COPY ALTER on a partitioned table
Hi, Nikita,
On May 08, Nikita Malyavin wrote:
> On Fri, 5 May 2023 at 20:46, Sergei Golubchik <serg@xxxxxxxxxxx> wrote:
>
> > > #ifdef HAVE_REPLICATION
> > > - if (unlikely(!error && table->s->online_alter_binlog))
> > > + if (unlikely(!error && table->s->online_alter_binlog &&
> > > + !table->skip_online_logging))
> >
> > this doesn't need any juggling with skip_online_logging.
> > This problem is already solved for, say, long uniques. You can use
> >
> > this == table->file
> >
> > condition to filter out individual partitions and have your
> > binlog_log_row_online_alter called only for the main ha_partition
> > handler.
>
> This doesn't look reliable -- won't there be any cases when we make a
> change from another handler, not table->file?
So far, that's how it works - updates come through table->file
> If that never happens, we could add DBUG_ASSERT(this == table->file) in
> ha_innodb's/ha_myisam's ha_*_row methods.
Of course, not. That's the whole point. The server calls
ha_partition::ha_write_row, which calls, in turn,
ha_innodb::ha_write_row. For individual partitions this != table->file,
that's how we make sure that certain code (e.g. long unique checks) are
only run once and not repeated per partition.
Regards,
Sergei
VP of MariaDB Server Engineering
and security@xxxxxxxxxxx
Follow ups
References