summaryrefslogtreecommitdiff
path: root/sql/rpl_parallel.h
diff options
context:
space:
mode:
authorunknown <knielsen@knielsen-hq.org>2014-05-08 14:20:18 +0200
committerKristian Nielsen <knielsen@knielsen-hq.org>2014-05-08 14:20:18 +0200
commitb0b60f249807b6c2d423313350d9ad66693c2d1e (patch)
treebb8fadff8a4425a04c03af264872991ee36f7fd0 /sql/rpl_parallel.h
parent2b4b857d51469c5fd974186ba8219e367c2019ec (diff)
downloadmariadb-git-b0b60f249807b6c2d423313350d9ad66693c2d1e.tar.gz
MDEV-5262: Missing retry after temp error in parallel replication
Start implementing that an event group can be re-tried in parallel replication if it fails with a temporary error (like deadlock). Patch is very incomplete, just some very basic retry works. Stuff still missing (not complete list): - Handle moving to the next relay log file, if event group to be retried spans multiple relay log files. - Handle refcounting of relay log files, to ensure that we do not purge a relay log file and then later attempt to re-execute events out of it. - Handle description_event_for_exec - we need to save this somehow for the possible retry - and use the correct one in case it differs between relay logs. - Do another retry attempt in case the first retry also fails. - Limit the max number of retries. - Lots of testing will be needed for the various edge cases.
Diffstat (limited to 'sql/rpl_parallel.h')
-rw-r--r--sql/rpl_parallel.h6
1 files changed, 5 insertions, 1 deletions
diff --git a/sql/rpl_parallel.h b/sql/rpl_parallel.h
index 1808efd0926..3b6641523f6 100644
--- a/sql/rpl_parallel.h
+++ b/sql/rpl_parallel.h
@@ -106,11 +106,15 @@ struct rpl_parallel_thread {
queued_size-= dequeue_size;
}
+ queued_event *get_qev_common(Log_event *ev, ulonglong event_size);
queued_event *get_qev(Log_event *ev, ulonglong event_size,
Relay_log_info *rli);
+ queued_event *retry_get_qev(Log_event *ev, queued_event *orig_qev,
+ const char *relay_log_name,
+ ulonglong event_pos, ulonglong event_size);
void free_qev(queued_event *qev);
rpl_group_info *get_rgi(Relay_log_info *rli, Gtid_log_event *gtid_ev,
- rpl_parallel_entry *e);
+ rpl_parallel_entry *e, ulonglong event_size);
void free_rgi(rpl_group_info *rgi);
group_commit_orderer *get_gco(uint64 wait_count, group_commit_orderer *prev);
void free_gco(group_commit_orderer *gco);