mirror of
https://github.com/MariaDB/server.git
synced 2025-02-12 00:15:35 +01:00
![Daniele Sciascia](/assets/img/avatar_default.png)
This patch fixes cases where a transaction caused empty writeset to be replicated. This could happen in the case where a transaction executes a statement that initially manages to modify some data and therefore appended keys some for certification. The statement is however rolled back at some later stage due to some error (for example, a duplicate key error). After statement rollback the transaction is still alive, has no other changes. When committing such transaction, an empty writeset was replicated through Galera. The fix is to avoid calling into commit hook only when transaction has appended one or keys for certification *and* has some data in binlog cache to replicate. Otherwise, the commit is considered empty, and goes through usual empty commit path. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
36 lines
708 B
Text
36 lines
708 B
Text
connection node_2;
|
|
connection node_1;
|
|
connection node_1;
|
|
CREATE TABLE t1 (f1 int primary key, f2 int);
|
|
INSERT INTO t1 VALUES (1,0);
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (2,4),(1,1);
|
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
|
COMMIT;
|
|
Writesets replicated (expect 0)
|
|
0
|
|
connection node_1;
|
|
SELECT * FROM t1;
|
|
f1 f2
|
|
1 0
|
|
connection node_2;
|
|
SELECT * FROM t1;
|
|
f1 f2
|
|
1 0
|
|
DROP TABLE t1;
|
|
connection node_1;
|
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 INTEGER);
|
|
INSERT INTO t1 VALUES (1,0);
|
|
INSERT INTO t1 VALUES (2,4), (1,1);
|
|
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
|
Writesets replicated (expect 0)
|
|
0
|
|
connection node_1;
|
|
SELECT * FROM t1;
|
|
f1 f2
|
|
1 0
|
|
connection node_2;
|
|
SELECT * FROM t1;
|
|
f1 f2
|
|
1 0
|
|
DROP TABLE t1;
|