- 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:
Daniele Sciascia 2015-10-05 09:42:03 +02:00 committed by Nirbhay Choubey
parent 0ec457b0de
commit c0dac420e5
3 changed files with 58 additions and 10 deletions

View 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;

View 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;

View file

@ -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();