mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-4506: Parallel replication of group-committed transactions: Intermediate commit
First very rough sketch. We spawn and retire a pool of slave threads. Test main.alias works, most likely not much else does.
This commit is contained in:
74
sql/rpl_parallel.h
Normal file
74
sql/rpl_parallel.h
Normal file
@@ -0,0 +1,74 @@
|
||||
#ifndef RPL_PARALLEL_H
|
||||
#define RPL_PARALLEL_H
|
||||
|
||||
#include "log_event.h"
|
||||
|
||||
|
||||
struct rpl_parallel;
|
||||
struct rpl_parallel_entry;
|
||||
struct rpl_parallel_thread_pool;
|
||||
|
||||
class Relay_log_info;
|
||||
struct rpl_parallel_thread {
|
||||
bool delay_start;
|
||||
bool running;
|
||||
bool stop;
|
||||
bool free;
|
||||
mysql_mutex_t LOCK_rpl_thread;
|
||||
mysql_cond_t COND_rpl_thread;
|
||||
struct rpl_parallel_thread *next; /* For free list. */
|
||||
struct rpl_parallel_thread_pool *pool;
|
||||
THD *thd;
|
||||
struct rpl_parallel_entry *current_entry;
|
||||
struct queued_event {
|
||||
queued_event *next;
|
||||
Log_event *ev;
|
||||
Relay_log_info *rli;
|
||||
} *event_queue, *last_in_queue;
|
||||
rpl_parallel_thread *wait_for; /* ToDo: change this ... */
|
||||
};
|
||||
|
||||
|
||||
struct rpl_parallel_thread_pool {
|
||||
uint32 count;
|
||||
struct rpl_parallel_thread **threads;
|
||||
struct rpl_parallel_thread *free_list;
|
||||
mysql_mutex_t LOCK_rpl_thread_pool;
|
||||
mysql_cond_t COND_rpl_thread_pool;
|
||||
bool changing;
|
||||
bool inited;
|
||||
|
||||
rpl_parallel_thread_pool();
|
||||
int init(uint32 size);
|
||||
void destroy();
|
||||
struct rpl_parallel_thread *get_thread(rpl_parallel_entry *entry);
|
||||
};
|
||||
|
||||
|
||||
struct rpl_parallel_entry {
|
||||
uint32 domain_id;
|
||||
uint32 last_server_id;
|
||||
uint64 last_seq_no;
|
||||
uint64 last_commit_id;
|
||||
bool active;
|
||||
rpl_parallel_thread *rpl_thread;
|
||||
};
|
||||
struct rpl_parallel {
|
||||
HASH domain_hash;
|
||||
rpl_parallel_entry *current;
|
||||
|
||||
rpl_parallel();
|
||||
~rpl_parallel();
|
||||
rpl_parallel_entry *find(uint32 domain_id);
|
||||
bool do_event(Relay_log_info *rli, Log_event *ev, THD *thd);
|
||||
};
|
||||
|
||||
|
||||
extern struct rpl_parallel_thread_pool global_rpl_thread_pool;
|
||||
|
||||
|
||||
extern int rpl_parallel_change_thread_count(rpl_parallel_thread_pool *pool,
|
||||
uint32 new_count,
|
||||
bool skip_check= false);
|
||||
|
||||
#endif /* RPL_PARALLEL_H */
|
Reference in New Issue
Block a user