mirror of
https://github.com/MariaDB/server.git
synced 2025-11-25 17:25:02 +03:00
75 lines
2.0 KiB
PHP
75 lines
2.0 KiB
PHP
#
|
|
# This file should be included from tests for MW-369 to run concurrent
|
|
# transaction from node_1 with autocommit query from node_2.
|
|
#
|
|
# The parameters:
|
|
# * $mw_369_parent_query - the parent query to be run inside transaction
|
|
# * $mw_369_child_query - the child query
|
|
#
|
|
# The operations are the following:
|
|
#
|
|
# node_1:
|
|
# START TRANSACTION;
|
|
# $mw_369_parent_query
|
|
# node_2
|
|
# $mw_369_child_query - will be blocked on node_1 in apply monitor
|
|
# node_1:
|
|
# COMMIT; - will be blocked on node_1 in local monitor
|
|
#
|
|
# The $mw_369_child_query is always expected to succeed. The caller is
|
|
# responsible for checking if the final COMMIT on connection node_1
|
|
# succeeds.
|
|
#
|
|
|
|
--connection node_1
|
|
SET AUTOCOMMIT=ON;
|
|
START TRANSACTION;
|
|
--eval $mw_369_parent_query
|
|
|
|
#
|
|
# Block the $mw_369_child_query from node_2
|
|
#
|
|
# --connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
|
--connection node_1a
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
--let $galera_sync_point = apply_monitor_slave_enter_sync
|
|
--source include/galera_set_sync_point.inc
|
|
|
|
#
|
|
# insert client row, which will make it impossible to replay the
|
|
# delete on parent
|
|
#
|
|
--connection node_2
|
|
--eval $mw_369_child_query
|
|
|
|
#
|
|
# Wait until $mw_369_child_query from node_2 reaches the sync point and
|
|
# block the 'COMMIT' from node_1 before it certifies.
|
|
#
|
|
--connection node_1a
|
|
--source include/galera_wait_sync_point.inc
|
|
--source include/galera_clear_sync_point.inc
|
|
|
|
--let $galera_sync_point = local_monitor_master_enter_sync
|
|
--source include/galera_set_sync_point.inc
|
|
|
|
--connection node_1
|
|
--send COMMIT
|
|
|
|
#
|
|
# Wait until both sync points have been reached
|
|
#
|
|
--connection node_1a
|
|
--let $galera_sync_point = apply_monitor_slave_enter_sync local_monitor_master_enter_sync
|
|
--source include/galera_wait_sync_point.inc
|
|
|
|
#
|
|
# both threads are now parked in sync points, signal them to continue
|
|
#
|
|
--let $galera_sync_point = apply_monitor_slave_enter_sync
|
|
--source include/galera_signal_sync_point.inc
|
|
|
|
--let $galera_sync_point = local_monitor_master_enter_sync
|
|
--source include/galera_signal_sync_point.inc
|
|
--source include/galera_clear_sync_point.inc
|