Done here: https://github.com/MariaDB/server/commit/4835ca3d5800ce981e3454fd9ce1c9b1706... On Thu, 10 Aug 2023 at 19:08, Nikita Malyavin <nikitamalyavin@gmail.com> wrote:
Oh! I like this one more, too. Alright!
On Thu, 10 Aug 2023 at 18:53, Sergei Golubchik <serg@mariadb.org> wrote:
Hi, Nikita,
diff --git a/sql/log_event.cc b/sql/log_event.cc index 10180a95d99..0c4c284a40f 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -761,16 +761,21 @@ Log_event::Log_event(const uchar *buf,
int Log_event::read_log_event(IO_CACHE* file, String* packet, const Format_description_log_event *fdle, - enum enum_binlog_checksum_alg checksum_alg_arg) + enum enum_binlog_checksum_alg checksum_alg_arg, + size_t max_allowed_packet) { ulong data_len; char buf[LOG_EVENT_MINIMAL_HEADER_LEN]; uchar ev_offset= packet->length(); #if !defined(MYSQL_CLIENT) - THD *thd=current_thd; - ulong max_allowed_packet= thd ? thd->slave_thread ? slave_max_allowed_packet - :
On Aug 09, Nikita Malyavin wrote: thd->variables.max_allowed_packet
- : ~(uint)0; + if (max_allowed_packet == 0)
may be better pass THD as an argument? or even correct value of max_allowed_packet. As
ulong max_allowed_packet(THD *thd) { return thd ? ... : ~(uint)0; }
I thought about it, but let me avoid it this time. There are ~15 calls of both read_log_event functions, and it's hard to say what's called from where. I'd better leave this insane knot as it is now.
Also as a bonus mysql_bin_log will not depend on an external max_allowed_packet, which is fixed as 1GiB.
still, I don't like a run-time condition for what should be a compile-time thing. Another way of solving it is
static int read_log_event(IO_CACHE* file, String* packet, const Format_description_log_event *fdle, enum enum_binlog_checksum_alg checksum_alg_arg) { size_t max_packet= thd ? ... : ~0U; return read_log_event(file, packet, fdle, checksum_alg_arg, max_packet); }
static int read_log_event(IO_CACHE* file, String* packet, const Format_description_log_event *fdle, enum enum_binlog_checksum_alg checksum_alg_arg, size_t max_allowed_packet);
on the second thought, do you need to ignore max_allowed_packet here for online ALTER? Is there no event size limit when the event is written into binlog?
+ { + THD *thd=current_thd; + max_allowed_packet= thd ? thd->slave_thread + ? slave_max_allowed_packet + : thd->variables.max_allowed_packet + : ~(uint)0; + } #endif DBUG_ENTER("Log_event::read_log_event(IO_CACHE*,String*...)");
Regards, Sergei VP of MariaDB Server Engineering and security@mariadb.org
-- Yours truly, Nikita Malyavin
-- Yours truly, Nikita Malyavin