From ea74aa294f7ed14b3300a55f6a6f9127ff4ba2f6 Mon Sep 17 00:00:00 2001 From: Georg Richter Date: Mon, 27 Feb 2023 10:13:57 +0100 Subject: [PATCH] fix for replication/binlog api: If flag BINLOG_DUMP_NON_BLOCK was set, we need to check the replica_id. If it was not specified, a default value of 1 will be used. --- include/mariadb_rpl.h | 2 +- libmariadb/mariadb_rpl.c | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/include/mariadb_rpl.h b/include/mariadb_rpl.h index ecada5e7..59c9d95b 100644 --- a/include/mariadb_rpl.h +++ b/include/mariadb_rpl.h @@ -321,7 +321,7 @@ typedef struct st_mariadb_rpl { uint32_t filename_length; uint32_t server_id; unsigned long start_position; - uint32_t flags; + uint16_t flags; uint8_t fd_header_len; /* header len from last format description event */ uint8_t use_checksum; uint8_t artificial_checksun; diff --git a/libmariadb/mariadb_rpl.c b/libmariadb/mariadb_rpl.c index e274b3eb..e2796291 100644 --- a/libmariadb/mariadb_rpl.c +++ b/libmariadb/mariadb_rpl.c @@ -791,14 +791,17 @@ int STDCALL mariadb_rpl_open(MARIADB_RPL *rpl) } if (rpl->mysql) - { + { + uint32_t replica_id= rpl->server_id; ptr= buf= (unsigned char *)alloca(rpl->filename_length + 11); int4store(ptr, (unsigned int)rpl->start_position); ptr+= 4; int2store(ptr, rpl->flags); ptr+= 2; - int4store(ptr, rpl->server_id); + if ((rpl->flags & MARIADB_RPL_BINLOG_DUMP_NON_BLOCK) && !replica_id) + replica_id= 1; + int4store(ptr, replica_id); ptr+= 4; memcpy(ptr, rpl->filename, rpl->filename_length); ptr+= rpl->filename_length;