mariadb/mysql-test/suite/galera_sr/t/MDEV-35281.test
Daniele Sciascia e821c9fa7c MDEV-35281 SR transaction crashes with innodb_snapshot_isolation
Ignore snapshot isolation conflict during fragment removal, before
streaming transaction commits. This happens when a streaming
transaction creates a read view that precedes the INSERTion of
fragments into the streaming_log table. Fragments are INSERTed
using a different transaction. These fragment are then removed
as part of COMMIT of the streaming transaction. This fragment
removal operation could fail when the fragments were not part
the transaction's read view, thus violating snapshot isolation.
2024-11-29 08:06:32 +01:00

37 lines
1.3 KiB
Text

#
# MDEV-35281 - SR transaction crashes with innodb_snapshot_isolation
#
# Test outline: a simple SR transaction fails to remove
# its fragments from streaming_log table, with error
# HA_ERR_RECORD_CHANGED.
# This happens with the following sequence of events:
# 1. Start a streaming replication transaction
# 2. The transaction creates a read view in InnoDB
# (this must happen before a fragment is replicated)
# 3. The transaction replicates a fragment.
# Internally, a new transaction is created to INSERT
# a row representing the fragment into the streaming_log
# table and is committed immediately.
# 4. The streaming replication transaction COMMITs.
# Before committing, the transaction replicates
# a commit fragment and DELETEs its fragments that
# were created in the streaming_log table.
# If bug is present, fragment removal from the
# streaming_log table violates snapshot isolation,
# thus the operation fails with HA_ERR_RECORD_CHANGED.
# (One or more records from the streaming_log table
# are removed, while these were not visible to
# the transaction).
--source include/galera_cluster.inc
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY);
SET SESSION wsrep_trx_fragment_size=1;
SET SESSION innodb_snapshot_isolation=ON;
START TRANSACTION WITH CONSISTENT SNAPSHOT;
INSERT INTO t1 VALUES (1);
COMMIT;
DROP TABLE t1;