MDEV-24773: slave_compressed_protocol doesn't work properly with semi-sync replication

Back port upstream fix

commit 1800b015a1d487330f7b15f2020b887be348a66b
Author: Venkatesh Duggirala <venkatesh.duggirala@oracle.com>
Date:   Fri Sep 8 20:29:22 2017 +0530

Bug#26027024    SLAVE_COMPRESSED_PROTOCOL DOESN'T WORK WITH
SEMI-SYNC REPLICATION IN MYSQL-5.7

Analysis: In mysql-5.6, dump thread (the thread that is created
on Master after Slave requested for a binlog dump) is also used
to receive acknowledgements from the Slave and act on them accordingly.
For performance reasons, a special thread called Ack Receiver thread
is added in mysql-5.7 Semi synchronous replication plugin.
This thread does not have special handling to receive acknowledgements
if Slave has enabled compression in the protocol. Hence Master is
unable to handle any slave if Slave_compressed_protocol is enabled
on it.

Fix: Enable compress flag on the communication channels if the Slave
has Slave_compressed_protocol ON.
This commit is contained in:
Sujatha 2021-02-05 16:45:35 +05:30
commit 391f1aa6ee
4 changed files with 80 additions and 0 deletions

View file

@ -268,6 +268,11 @@ void Ack_receiver::run()
net_clear(&net, 0);
net.vio= &slave->vio;
/*
Set compress flag. This is needed to support
Slave_compress_protocol flag enabled Slaves
*/
net.compress= slave->thd->net.compress;
len= my_net_read(&net);
if (likely(len != packet_error))