Skip to content

Commit

Permalink
MDEV-16211 Contents of transaction_registry not replicated by Galera
Browse files Browse the repository at this point in the history
Patch fixes two bugs:
1) BEGIN_TIMESTAMP of MYSQL.TRANSACTION_REGISTY is '0-0-0' on replication record insertion
2) BEGIN_TIMESTAMP equals COMMMIT_TIMESTAMP in MYSQL.TRANSACTION_REGISTRY

Fixed by calling THD::set_time() at appropriate places
  • Loading branch information
kevgs committed Oct 1, 2018
1 parent 9556d56 commit 44016ec
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 0 deletions.
52 changes: 52 additions & 0 deletions mysql-test/suite/galera/r/versioning_trx_id.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3;
connection node_1;
create table t1 (a int, s bigint unsigned as row start, e bigint unsigned as row end, period for system_time(s,e)) engine=InnoDB with system versioning;
insert into t1 (a) values (1),(2);
connection node_2;
insert into t1 (a) values (3),(4);
select a from t1;
a
1
2
3
4
select count(*) from mysql.transaction_registry where begin_timestamp='0-0-0';
count(*)
0
select count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;
count(*)
0
connection node_3;
insert into t1 (a) values (5),(6);
select a from t1;
a
1
2
3
4
5
6
select count(*) from mysql.transaction_registry where begin_timestamp='0-0-0';
count(*)
0
select count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;
count(*)
0
connection node_1;
select a from t1;
a
1
2
3
4
5
6
select count(*) from mysql.transaction_registry where begin_timestamp='0-0-0';
count(*)
0
select count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;
count(*)
0
drop table t1;
disconnect node_2;
disconnect node_1;
1 change: 1 addition & 0 deletions mysql-test/suite/galera/t/versioning_trx_id.cnf
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!include ../galera_4nodes.cnf
28 changes: 28 additions & 0 deletions mysql-test/suite/galera/t/versioning_trx_id.test
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
--source include/galera_cluster.inc

--connect node_3, 127.0.0.1, root, , test, $NODE_MYPORT_3

--connection node_1
create table t1 (a int, s bigint unsigned as row start, e bigint unsigned as row end, period for system_time(s,e)) engine=InnoDB with system versioning;
insert into t1 (a) values (1),(2);

--connection node_2
insert into t1 (a) values (3),(4);
select a from t1;
select count(*) from mysql.transaction_registry where begin_timestamp='0-0-0';
select count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;

--connection node_3
insert into t1 (a) values (5),(6);
select a from t1;
select count(*) from mysql.transaction_registry where begin_timestamp='0-0-0';
select count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;

--connection node_1
select a from t1;
select count(*) from mysql.transaction_registry where begin_timestamp='0-0-0';
select count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;

drop table t1;

--source include/galera_end.inc
3 changes: 3 additions & 0 deletions mysql-test/suite/versioning/r/trx_id.result
Original file line number Diff line number Diff line change
Expand Up @@ -475,3 +475,6 @@ COUNT(*)
1
DROP TABLE t;
SET @@SYSTEM_VERSIONING_ALTER_HISTORY=ERROR;
SELECT count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;
count(*)
0
2 changes: 2 additions & 0 deletions mysql-test/suite/versioning/t/trx_id.test
Original file line number Diff line number Diff line change
Expand Up @@ -492,3 +492,5 @@ SELECT COUNT(*) FROM t FOR SYSTEM_TIME ALL;

DROP TABLE t;
SET @@SYSTEM_VERSIONING_ALTER_HISTORY=ERROR;

SELECT count(*) from mysql.transaction_registry where begin_timestamp>=commit_timestamp;
1 change: 1 addition & 0 deletions sql/table.cc
Original file line number Diff line number Diff line change
Expand Up @@ -8763,6 +8763,7 @@ bool TR_table::update(ulonglong start_id, ulonglong end_id)
return true;

store(FLD_BEGIN_TS, thd->transaction_time());
thd->set_time();
timeval end_time= {thd->query_start(), long(thd->query_start_sec_part())};
store(FLD_TRX_ID, start_id);
store(FLD_COMMIT_ID, end_id);
Expand Down
1 change: 1 addition & 0 deletions sql/wsrep_applier.cc
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ static wsrep_cb_status_t wsrep_apply_events(THD* thd,
/* Use the original server id for logging. */
thd->set_server_id(ev->server_id);
thd->set_time(); // time the query
thd->transaction.start_time.reset(thd);
wsrep_xid_init(&thd->transaction.xid_state.xid,
thd->wsrep_trx_meta.gtid.uuid,
thd->wsrep_trx_meta.gtid.seqno);
Expand Down

0 comments on commit 44016ec

Please sign in to comment.