• Daniele Sciascia's avatar
    MDEV-25226 Assertion when wsrep_on set OFF with SR transaction · 915983e1
    Daniele Sciascia authored
    This patch makes the following changes around variable wsrep_on:
    
    1) Variable wsrep_on can no longer be updated from a session that has
    an active transaction running. The original behavior allowed cases
    like this:
    
         BEGIN;
         INSERT INTO t1 VALUES (1);
         SET SESSION wsrep_on = OFF;
         INSERT INTO t1 VALUES (2);
         COMMIT;
    
    With regular transactions this would result in no replication
    events (not even value 1). With streaming replication it would be
    unnecessarily complex to achieve the same behavior. In the above
    example, it would be possible for value 1 to be already replicated if
    it happened to fill a separate fragment, while value 2 wouldn't.
    
    2) Global variable wsrep_on no longer affects current sessions, only
    subsequent ones. This is to avoid a similar case to the above, just
    using just by using global wsrep_on instead session wsrep_on:
    
          --connection conn_1
          BEGIN;
          INSERT INTO t1 VALUES(1);
    
          --connection conn_2
          SET GLOBAL wsrep_on = OFF;
    
          --connection conn_1
          INSERT INTO t1 VALUES(2);
          COMMIT;
    
    The above example results in the transaction to be replicated, as
    global wsrep_on will only affect the session wsrep_on of new
    connections.
    Reviewed-by: default avatarJan Lindström <jan.lindstrom@mariadb.com>
    915983e1
wsrep_mysqld.cc 86.4 KB