lp:~maria-captains/maria/10.0-mdev6676

Created by Kristian Nielsen on 2014-11-13 and last modified on 2014-12-05
Get this branch:
bzr branch lp:~maria-captains/maria/10.0-mdev6676
Members of Maria-captains can upload to this branch. Log in for directions.

Branch merges

Related bugs

Related blueprints

Branch information

Owner:
Maria-captains
Project:
MariaDB
Status:
Development

Recent revisions

4517. By Kristian Nielsen on 2014-12-05

MDEV-6676: Optimistic parallel replication.

Fix that --slave-parallel-mode does not appear twice in mysqld --help
output.

(Also fix small typo in help message).

4516. By Kristian Nielsen on 2014-12-04

MDEV-6676: Optimistic parallel replication

Update test suite to pass all tests, reflection code changes.

4515. By Kristian Nielsen on 2014-12-03

MDEV-6676: Optimistic parallel replication.

Change back to @@slave_parallel_mode being a command line option (instead of
CHANGE MASTER option saved in master.info).

Implement that @@slave_parallel_mode can be set per multi-source connection,
both from command line and with SET.

Change option name 'groupcommit' to 'follow_master_commit' following
discussions on maria-developers@.

4514. By Kristian Nielsen on 2014-10-15

MDEV-6676: Speculative parallel replication: Intermediate commit.

Fix embedded server build.

4513. By Kristian Nielsen on 2014-10-15

MDEV-6676: Speculative parallel replication: Intermediate commit.

Preserve the value of @@replicate_allow_parallel from the master in the
slave's binlog, so that it will be used correctly on deeper-level slaves as
well.

Also preserve the FL_DDL and FL_WAITED flags from the master's GTID event in
the slave's binlog.

4512. By Kristian Nielsen on 2014-10-15

MDEV-6676: Speculative parallel replication: Intermediate commit

Fix embarrasing "brown paper bag" bug with reverse test for DDL.

4511. By Kristian Nielsen on 2014-10-14

MDEV-6775: Wrong binlog order in parallel replication: Intermediate commit

Marked-for: 10.0

The code in binlog group commit around wait_for_commit that controls commit
order, did the wakeup of subsequent commits early, as soon as a following
transaction is put into the group commit queue, but before any such commit has
actually taken place. This causes problems with too early wakeup of
transactions that need to wait for prior to commit, but do not take part in
the binlog group commit for one reason or the other.

This patch solves the problem, by moving the wakeup to happen only after the
binlog group commit is completed.

This requires a new solution to ensure that transactions that arrive later
than the leader are still able to participate in group commit. This patch
introduces a flag wait_for_commit::commit_started. When this is set, a waiter
can queue up itself in the group commit queue.

This way, effectively the wait_for_prior_commit() is skipped only for
transactions that participate in group commit, so that skipping the wait is
safe. Other transactions still wait as needed for correctness.

4510. By Kristian Nielsen on 2014-10-14

MDEV-6775: Wrong binlog order in parallel replication: Intermediate commit

Marked-for: 10.0

This just adds a test case that demonstrates the problem.

4509. By Kristian Nielsen on 2014-10-08

MDEV-6676: Speculative parallel replication: Intermediate commit.

Add an extra flag FL_DDL to the GTID event created on the master.

This allows the parallel slave to distinguish between DDL and
non-transactional DML.

In case of DDL, it is not safe to run anything in parallel speculatively,
neither prior or following transactions. Not prior, because DDL cannot be
rolled back in case of conflicts. And not following, for example the DDL might
convert a non-transactional table into a transactional one, so this conversion
must be completed before a later transaction can be safely rolled back in case
of conflicts.

In case of non-transactional DML, it is also not safe to run it in parallel
with earlier transactions, since in case of conflicts it can not be rolled
back. But it _is_ safe to run it in parallel with later transactions.

Relaxing the requirements for non-transactional DML is beneficial when a few
non-transactional events occur in a stream of transactional DML, as would be a
typical use case. This way, the parallel apply of the transactional DML is not
disturbed or hindered. Before this commit, every non-transactional DML would
require first all running transactions to reach their commit phase, and only
then could following transactions start. With this commit, now following
transactions can be freely applied in parallel optimistically. Only the single
thread for which the non-transactional DML is scheduled needs to wait.

The non-transactional DML will not be able to grup-commit together with the
prior transaction, as the wait is done with wait_for_prior_commit().

4508. By Kristian Nielsen on 2014-10-07

MDEV-6676: Speculative parallel replication.

Better syntax for configuring the parallel mode. Now it is a CHANGE MASTER
option instead of a system variable, which makes it possible to configure
differently for different multi-source replication masters.

Now also the domain-based replication mode can be disabled.

Branch metadata

Branch format:
Branch format 7
Repository format:
Bazaar repository format 2a (needs bzr 1.16 or later)
Stacked on:
lp:maria
This branch contains Public information 
Everyone can see this information.

Subscribers