WL#10479: Defaults: Enable Replication Chains

Affects: Server-8.0   —   Status: Complete

Rationale
----------------
This option ensures correct behavior in various replication chain setups, which
have become the norm today. This is also required for Group Replication.


Server Changes:
----------------
log-slave-updates = ON : This causes a slave to log replicated events into its
own binary log


User Override
----------------
log-slave-updates = OFF : This will disable the setting and match 5.x behavior

When user has explicitly passes skip-log-bin on the command line with this
worklog, It generates a warning.
"[Warning] You need to use --log-bin to make --log-slave-updates work."
So we can use skip-log-slave-updates option with skip-log-bin to avoid this
warning. 


Upgrade Story
----------------
There are no special upgrade considerations. 


Acceptance Criteria 
----------------
1. This setting should not cause any instability/failures in our automated tests. 
2. This setting should not cause more than an average 10% regression in SysQA
write perf tests (on slaves).
FR1. It must be possible to run all the rpl tests (Ex : rpl,rpl_gtid,rpl_nogtid
etc) with log-slave-updates enabled and
     all the tests must pass.

FR2. It must be possible to run all the binlog tests (Ex :
binlog,binlog_gtid,binlog_nogtid etc) with log-slave-updates enabled and
     all the tests must pass.

FR3. It must be possible to run the group_replication suite with
log-slave-updates enabled and
     all the tests must pass.

FR4. It must be possible to run all the topology (circular, chained, async,
semisync, msr) mtr/jet tests with log-slave-updates enabled and
     all the tests must pass.(These tests are part of different rpl suites itself)

FR5. It must be possible to run failover, crash mtr tests with log-slave-updates
enabled and
     all the tests must pass.(These tests are part of different rpl suites itself)

FR6. All the tests, apart from the FR5,FR6,FR7 should pass with
log-slave-updates disabled also

FR7. It must be possible to run all the group_replication and replication tests
in JET with log-slave-updates enabled and
     all the tests must pass.

FR8. All the cross version JET tests with log-slave-updates option enabled (ON)
must pass

Implied requirements:

FR9. Tests that are failing by test case design that can be slightly
      redesigned or should be fixed to pass, irrespective of log-slave-updates being
      enabled or disabled.

FR10. Tests that do not make sense to run with log-slave-updates enabled
      should be skipped for such runs.

Non Functional Requirements :

FR11. This setting should not cause more than an average 10% regression in SysQA
      write perf tests (on slaves).
There is no additional features need to implemented, on the mysql_test_run.pl
script in order to fulfill this worklog requirements.

So, the following needs to be done:

 1. There is already a config file being used in rpl tests, "rpl_1slave_base.cnf".
    at mysql-test/suite/rpl directory, with the following [mysqld.2] options:
    "log-slave-updates"
    That means, by default in rpl tests log-slave-updates already enabled and the
    tests are running with log-slave-updates option enabled.

    This is the list of suites which should be run with log-slave-updates=ON (To
have log-slave-updates working log-bin must be ON):
    --suite=rpl
    --suite=rpl_gtid
    --suite=rpl_nogtid
    --suite=binlog
    --suite=binlog_gtid
    --suite=binlog_nogtid
    --suite=group_replication

    The following section contains mention of some internal tests, please remove
when publishing :
    --suite=i_rpl
    --suite=i_rpl_gtid
    --suite=i_rpl_largedata
    --suite=i_rpl_nogtid
    --suite=i_binlog
    --suite=i_binlog_gtid
    --suite=i_binlog_nogtid
    Apart from this, now due to this default option, all the other suites also
will be running with log-slave-updates ON. So if there are any failures due to
this option, that needs to be analyzed.
    Just have a look on the runs and analyse the failures and fix tests where
applicable / report product bugs if it does not work as expected.

 2. While in JET you can see the replication and group replications tests here.
    Test file                                      => xml file
    ====================			   ==============================
    com.sun.mysql.jet.testcases.replication        ->
com.sun.mysql.jet.tests.replication
    com.sun.mysql.jet.testcases.replication.wl9426 ->
com.sun.mysql.jet.tests.replication.wl9426

    All these jet tests must pass, with these log-slave-updates enabled.
    Already in most of the tests log-slave-updates are enabled, so the failures
needs to be analysed
    if there is any, once the default option is changed.

    There is also one load replication test which will be executed by sys-qa.

 3. All the cross version JET tests with log-slave-updates option enabled (ON)
must pass and check the behavior with log-slave-updates(ON/OFF)
    across master and slave (Async/Semisynch).

 4. All the topology tests in MTR and JET must pass with log-slave-updates
enabled and check the need for new tests
    4.1 circular
    4.2 chain replication with different combinations
    4.3 MSR
    4.4 Async
    4.5 Semi-Sync

 5. Upgrade and Downgrades
    There must not be any impact.
    - For GR this is transparent. GR already requires log-slave-updates
      to be set, so no real change here;
    - For those with log-slave-updates, this will also be transparent,no
      real change here;
    - For those that do not set log-slave-updates, they will see changes
      being written to the binary log, if they do not explicitly turn
      it off. If they absolutely do not want events from the applier to
      be written to the binary log, then they must *explicitly* turn it off..

 6. Remove the log-slave-updates set explicitly in cnf files, since default
value is going to be "ON".

Items 1 to 2 of this HLS should be performed first using Hudson custom jobs.
After finishing fixing and reporting issues, this worklog will be
considered ready to be pushed. Hudson changes should be done only after
pushing this worklog.