mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
- Removes useless call to wsrep_xid_init() in wsrep_apply_events(). Transaction's xid is already initialized at that point. - Adds call to wsrep_set_SE_checkpoint() for committing TOI events in the applier side. - Includes test case that reproduced the issue.
This commit is contained in:
parent
0ec457b0de
commit
c0dac420e5
3 changed files with 58 additions and 10 deletions
10
mysql-test/suite/galera/r/mysql-wsrep#31.result
Normal file
10
mysql-test/suite/galera/r/mysql-wsrep#31.result
Normal file
|
@ -0,0 +1,10 @@
|
|||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES('test');
|
||||
CREATE DATABASE db;
|
||||
Shutting down server 2 ...
|
||||
Recovering server 2 ...
|
||||
Performing --wsrep-recover ...
|
||||
Restarting server ...
|
||||
Using --wsrep-start-position when starting mysqld ...
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE db;
|
39
mysql-test/suite/galera/t/mysql-wsrep#31.test
Normal file
39
mysql-test/suite/galera/t/mysql-wsrep#31.test
Normal file
|
@ -0,0 +1,39 @@
|
|||
--source include/galera_cluster.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--connection node_1
|
||||
|
||||
CREATE TABLE t1 (f1 CHAR(255)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES('test');
|
||||
CREATE DATABASE db;
|
||||
|
||||
--connection node_2
|
||||
--let $expected_position_uuid = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_state_uuid'`
|
||||
--let $expected_position_seqno = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_last_committed'`
|
||||
|
||||
--let $expected_position = $expected_position_uuid:$expected_position_seqno
|
||||
|
||||
--echo Shutting down server 2 ...
|
||||
--source include/shutdown_mysqld.inc
|
||||
|
||||
--echo Recovering server 2 ...
|
||||
--let $galera_wsrep_recover_server_id=2
|
||||
--source suite/galera/include/galera_wsrep_recover.inc
|
||||
|
||||
if ($galera_wsrep_start_position != $expected_position)
|
||||
{
|
||||
die(Expected position: $expected_position, found $galera_wsrep_start_position);
|
||||
}
|
||||
|
||||
--echo Restarting server ...
|
||||
--source include/start_mysqld.inc
|
||||
|
||||
--let $wait_condition = SELECT VARIABLE_VALUE = 2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_cluster_size'
|
||||
--source include/wait_condition.inc
|
||||
--source include/galera_wait_ready.inc
|
||||
|
||||
--connection node_1
|
||||
DROP TABLE t1;
|
||||
DROP DATABASE db;
|
||||
|
||||
|
|
@ -150,9 +150,6 @@ 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
|
||||
wsrep_xid_init(&thd->transaction.xid_state.xid,
|
||||
thd->wsrep_trx_meta.gtid.uuid,
|
||||
thd->wsrep_trx_meta.gtid.seqno);
|
||||
thd->lex->current_select= 0;
|
||||
if (!ev->when)
|
||||
{
|
||||
|
@ -281,8 +278,7 @@ wsrep_cb_status_t wsrep_apply_cb(void* const ctx,
|
|||
return rcode;
|
||||
}
|
||||
|
||||
static wsrep_cb_status_t wsrep_commit(THD* const thd,
|
||||
wsrep_seqno_t const global_seqno)
|
||||
static wsrep_cb_status_t wsrep_commit(THD* const thd)
|
||||
{
|
||||
#ifdef WSREP_PROC_INFO
|
||||
snprintf(thd->wsrep_info, sizeof(thd->wsrep_info) - 1,
|
||||
|
@ -301,7 +297,11 @@ static wsrep_cb_status_t wsrep_commit(THD* const thd,
|
|||
#ifdef GTID_SUPPORT
|
||||
thd->variables.gtid_next.set_automatic();
|
||||
#endif /* GTID_SUPPORT */
|
||||
// TODO: mark snapshot with global_seqno.
|
||||
if (thd->wsrep_apply_toi)
|
||||
{
|
||||
wsrep_set_SE_checkpoint(thd->wsrep_trx_meta.gtid.uuid,
|
||||
thd->wsrep_trx_meta.gtid.seqno);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef WSREP_PROC_INFO
|
||||
|
@ -315,8 +315,7 @@ static wsrep_cb_status_t wsrep_commit(THD* const thd,
|
|||
return rcode;
|
||||
}
|
||||
|
||||
static wsrep_cb_status_t wsrep_rollback(THD* const thd,
|
||||
wsrep_seqno_t const global_seqno)
|
||||
static wsrep_cb_status_t wsrep_rollback(THD* const thd)
|
||||
{
|
||||
#ifdef WSREP_PROC_INFO
|
||||
snprintf(thd->wsrep_info, sizeof(thd->wsrep_info) - 1,
|
||||
|
@ -353,9 +352,9 @@ wsrep_cb_status_t wsrep_commit_cb(void* const ctx,
|
|||
wsrep_cb_status_t rcode;
|
||||
|
||||
if (commit)
|
||||
rcode = wsrep_commit(thd, meta->gtid.seqno);
|
||||
rcode = wsrep_commit(thd);
|
||||
else
|
||||
rcode = wsrep_rollback(thd, meta->gtid.seqno);
|
||||
rcode = wsrep_rollback(thd);
|
||||
|
||||
wsrep_set_apply_format(thd, NULL);
|
||||
thd->mdl_context.release_transactional_locks();
|
||||
|
|
Loading…
Reference in a new issue