mirror of
https://github.com/MariaDB/server.git
synced 2025-02-09 23:24:11 +01:00
![Jan Lindström](/assets/img/avatar_default.png)
Problem for Galera is the fact that sequences are not really transactional. Sequence operation is committed immediately in sql_sequence.cd and later Galera could find out that we have changes but actual statement is not there anymore. Therefore, we must make some restrictions what kind of sequences Galera can support. (1) Galera cluster supports only sequences implemented by InnoDB storage engine. This is because Galera replication supports currently only InnoDB. (2) We do not allow LOCK TABLE on sequence object and we do not allow sequence creation under LOCK TABLE, instead lock is released and we issue warning. (3) We allow sequences with NOCACHE definition or with INCREMEMENT BY 0 CACHE=n definition. This makes sure that sequence values are unique accross Galera cluster. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
49 lines
977 B
Text
49 lines
977 B
Text
connection node_2;
|
|
connection node_1;
|
|
connection node_1;
|
|
CREATE SEQUENCE seq NOCACHE ENGINE=InnoDB;
|
|
SELECT NEXTVAL(seq) = 1;
|
|
NEXTVAL(seq) = 1
|
|
1
|
|
connection node_2;
|
|
SELECT NEXTVAL(seq) = 2;
|
|
NEXTVAL(seq) = 2
|
|
1
|
|
connection node_1;
|
|
SELECT NEXTVAL(seq) = 3;
|
|
NEXTVAL(seq) = 3
|
|
1
|
|
SELECT SETVAL(seq, 100);
|
|
SETVAL(seq, 100)
|
|
100
|
|
connection node_2;
|
|
SELECT NEXTVAL(seq) = 101;
|
|
NEXTVAL(seq) = 101
|
|
1
|
|
connection node_1;
|
|
SELECT NEXTVAL(seq) = 102;
|
|
NEXTVAL(seq) = 102
|
|
1
|
|
DROP SEQUENCE seq;
|
|
CREATE TABLE t1(f1 INT);
|
|
CREATE SEQUENCE seq_transaction NOCACHE ENGINE=InnoDB;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (0);
|
|
SELECT NEXTVAL(seq_transaction);
|
|
NEXTVAL(seq_transaction)
|
|
1
|
|
INSERT INTO t1 VALUES (NEXTVAL(seq_transaction));
|
|
COMMIT;
|
|
connection node_2;
|
|
SELECT COUNT(*) = 2 FROM t1;
|
|
COUNT(*) = 2
|
|
1
|
|
SELECT NEXTVAL(seq_transaction) = 3;
|
|
NEXTVAL(seq_transaction) = 3
|
|
1
|
|
connection node_1;
|
|
SELECT NEXTVAL(seq_transaction) = 4;
|
|
NEXTVAL(seq_transaction) = 4
|
|
1
|
|
DROP SEQUENCE seq_transaction;
|
|
DROP TABLE t1;
|