mirror of
https://github.com/MariaDB/server.git
synced 2025-12-10 19:44:09 +03:00
Merge branch 'codership-10.4-MDEV-22666-v2' into 10.4
This commit is contained in:
@@ -70,3 +70,20 @@ a b
|
|||||||
2 1
|
2 1
|
||||||
disconnect node_2a;
|
disconnect node_2a;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2;
|
||||||
|
connection node_2a;
|
||||||
|
CREATE TABLE t1 (i int primary key);
|
||||||
|
SET DEBUG_SYNC = "before_wsrep_ordered_commit SIGNAL bwoc_reached WAIT_FOR bwoc_continue";
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
connection node_2;
|
||||||
|
SET DEBUG_SYNC = "now WAIT_FOR bwoc_reached";
|
||||||
|
SET DEBUG_SYNC = "now SIGNAL bwoc_continue";
|
||||||
|
SET DEBUG_SYNC='RESET';
|
||||||
|
connection node_2a;
|
||||||
|
connection node_2;
|
||||||
|
select * from t1;
|
||||||
|
i
|
||||||
|
1
|
||||||
|
disconnect node_2a;
|
||||||
|
connection node_2;
|
||||||
|
drop table t1;
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
|
--source include/have_debug.inc
|
||||||
|
--source include/have_debug_sync.inc
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test case 1: Start a transaction on node_2a and kill it
|
# Test case 1: Start a transaction on node_2a and kill it
|
||||||
@@ -140,4 +143,48 @@ select * from t1;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test case 7:
|
||||||
|
# run a transaction in node 2, and set a sync point to pause the transaction
|
||||||
|
# in commit phase.
|
||||||
|
# Through another connection to node 2, kill the committing transaction by
|
||||||
|
# KILL QUERY command
|
||||||
|
#
|
||||||
|
|
||||||
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
||||||
|
--connection node_2a
|
||||||
|
--let $connection_id = `SELECT CONNECTION_ID()`
|
||||||
|
|
||||||
|
CREATE TABLE t1 (i int primary key);
|
||||||
|
|
||||||
|
# Set up sync point
|
||||||
|
SET DEBUG_SYNC = "before_wsrep_ordered_commit SIGNAL bwoc_reached WAIT_FOR bwoc_continue";
|
||||||
|
|
||||||
|
# Send insert which will block in the sync point above
|
||||||
|
--send INSERT INTO t1 VALUES (1)
|
||||||
|
|
||||||
|
--connection node_2
|
||||||
|
SET DEBUG_SYNC = "now WAIT_FOR bwoc_reached";
|
||||||
|
|
||||||
|
--disable_query_log
|
||||||
|
--disable_result_log
|
||||||
|
# victim has passed the point of no return, kill is not possible anymore
|
||||||
|
--eval KILL QUERY $connection_id
|
||||||
|
--enable_result_log
|
||||||
|
--enable_query_log
|
||||||
|
|
||||||
|
SET DEBUG_SYNC = "now SIGNAL bwoc_continue";
|
||||||
|
SET DEBUG_SYNC='RESET';
|
||||||
|
--connection node_2a
|
||||||
|
--error 0,1213
|
||||||
|
--reap
|
||||||
|
|
||||||
|
--connection node_2
|
||||||
|
# victim was able to complete the INSERT
|
||||||
|
select * from t1;
|
||||||
|
|
||||||
|
--disconnect node_2a
|
||||||
|
|
||||||
|
--connection node_2
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
--source include/galera_cluster.inc
|
--source include/galera_cluster.inc
|
||||||
|
--source include/have_innodb.inc
|
||||||
--source include/big_test.inc
|
--source include/big_test.inc
|
||||||
|
|
||||||
--connection node_1
|
--connection node_1
|
||||||
|
|||||||
@@ -299,6 +299,7 @@ extern "C" void wsrep_commit_ordered(THD *thd)
|
|||||||
thd->wsrep_trx().state() == wsrep::transaction::s_committing &&
|
thd->wsrep_trx().state() == wsrep::transaction::s_committing &&
|
||||||
!wsrep_commit_will_write_binlog(thd))
|
!wsrep_commit_will_write_binlog(thd))
|
||||||
{
|
{
|
||||||
|
DEBUG_SYNC(thd, "before_wsrep_ordered_commit");
|
||||||
thd->wsrep_cs().ordered_commit();
|
thd->wsrep_cs().ordered_commit();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1511,12 +1511,6 @@ inline void trx_t::commit_in_memory(const mtr_t *mtr)
|
|||||||
if (fts_trx)
|
if (fts_trx)
|
||||||
trx_finalize_for_fts(this, undo_no != 0);
|
trx_finalize_for_fts(this, undo_no != 0);
|
||||||
|
|
||||||
trx_mutex_enter(this);
|
|
||||||
dict_operation= TRX_DICT_OP_NONE;
|
|
||||||
|
|
||||||
DBUG_LOG("trx", "Commit in memory: " << this);
|
|
||||||
state= TRX_STATE_NOT_STARTED;
|
|
||||||
|
|
||||||
#ifdef WITH_WSREP
|
#ifdef WITH_WSREP
|
||||||
/* Serialization history has been written and the transaction is
|
/* Serialization history has been written and the transaction is
|
||||||
committed in memory, which makes this commit ordered. Release commit
|
committed in memory, which makes this commit ordered. Release commit
|
||||||
@@ -1528,6 +1522,11 @@ inline void trx_t::commit_in_memory(const mtr_t *mtr)
|
|||||||
}
|
}
|
||||||
lock.was_chosen_as_wsrep_victim= false;
|
lock.was_chosen_as_wsrep_victim= false;
|
||||||
#endif /* WITH_WSREP */
|
#endif /* WITH_WSREP */
|
||||||
|
trx_mutex_enter(this);
|
||||||
|
dict_operation= TRX_DICT_OP_NONE;
|
||||||
|
|
||||||
|
DBUG_LOG("trx", "Commit in memory: " << this);
|
||||||
|
state= TRX_STATE_NOT_STARTED;
|
||||||
|
|
||||||
assert_freed();
|
assert_freed();
|
||||||
trx_init(this);
|
trx_init(this);
|
||||||
|
|||||||
Reference in New Issue
Block a user