mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
Backport BUG#45848 Semisynchronous replication internals are visible in SHOW PROCESSLIST and logs
Semi-sync uses an extra connection from slave to master to send replies, this is a normal client connection, and used a normal SET query to set the reply information on master, which is visible to user and may cause some confusion and complaining. This problem is fixed by using the method of sending reply by using the same connection that is used by master dump thread to send binlog to slave. Since now the semi-sync plugins are integrated with the server code, it is not a problem to use the internal net interfaces to do this. The master dump thread will mark the event requires a reply and wait for the reply when the event just sent is the last event of a transaction and semi-sync status is ON; And the slave will send a reply to master when it received such an event that requires a reply.
This commit is contained in:
@@ -18,25 +18,9 @@
|
||||
#ifndef SEMISYNC_H
|
||||
#define SEMISYNC_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
#include <sys/time.h>
|
||||
#include <time.h>
|
||||
#include <stdio.h>
|
||||
#include <pthread.h>
|
||||
#include <mysql.h>
|
||||
|
||||
typedef uint32_t uint32;
|
||||
typedef unsigned long long my_off_t;
|
||||
#define FN_REFLEN 512 /* Max length of full path-name */
|
||||
void sql_print_error(const char *format, ...);
|
||||
void sql_print_warning(const char *format, ...);
|
||||
void sql_print_information(const char *format, ...);
|
||||
extern unsigned long max_connections;
|
||||
|
||||
#define MYSQL_SERVER
|
||||
#define HAVE_REPLICATION
|
||||
#include <mysql_priv.h>
|
||||
#include <my_global.h>
|
||||
#include <my_pthread.h>
|
||||
#include <mysql/plugin.h>
|
||||
@@ -92,4 +76,16 @@ public:
|
||||
static const unsigned char kPacketFlagSync;
|
||||
};
|
||||
|
||||
/* The layout of a semisync slave reply packet:
|
||||
1 byte for the magic num
|
||||
8 bytes for the binlog positon
|
||||
n bytes for the binlog filename, terminated with a '\0'
|
||||
*/
|
||||
#define REPLY_MAGIC_NUM_LEN 1
|
||||
#define REPLY_BINLOG_POS_LEN 8
|
||||
#define REPLY_BINLOG_NAME_LEN (FN_REFLEN + 1)
|
||||
#define REPLY_MAGIC_NUM_OFFSET 0
|
||||
#define REPLY_BINLOG_POS_OFFSET (REPLY_MAGIC_NUM_OFFSET + REPLY_MAGIC_NUM_LEN)
|
||||
#define REPLY_BINLOG_NAME_OFFSET (REPLY_BINLOG_POS_OFFSET + REPLY_BINLOG_POS_LEN)
|
||||
|
||||
#endif /* SEMISYNC_H */
|
||||
|
||||
Reference in New Issue
Block a user