# # This test checks that innodb_disallow_writes works as expected # # Note that we need to enable binlog for this test: If the commit # to InnoDB is done in one phase, the transaction is committed in # memory before it is persisted to disk. This means that the # innodb_disallow_writes=ON may not prevent transaction to # become visible to other readers. On the other hand, if the # commit is two phase (as it is with binlog), the transaction # will be blocked in prepare phase. # --source include/galera_cluster.inc --source include/have_innodb.inc --let $datadir= `SELECT @@datadir` # Open a separate connection to be used to run SHOW PROCESSLIST --let $galera_connection_name = node_1a --let $galera_server_number = 1 --source include/galera_connect.inc --connection node_1a SET SESSION wsrep_sync_wait = 0; --connection node_1 CREATE TABLE t1 (f1 INTEGER, f2 varchar(1024)) Engine=InnoDB; CREATE TABLE ten (f1 INTEGER) ENGINE=InnoDB; INSERT INTO ten VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10); SET GLOBAL innodb_disallow_writes=ON; --exec find $datadir -type f-exec md5sum {} \; | md5sum >$MYSQLTEST_VARDIR/tmp/innodb_before # # This insert has no effect before innodb_disallow_writes is OFF # --send INSERT INTO t1 (f2) SELECT 'abcde ' FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; --connection node_2 INSERT INTO t1 (f2) SELECT 'fghij ' FROM ten AS a1, ten AS a2, ten AS a3, ten AS a4; SELECT COUNT(*) AS EXPECT_10000 FROM t1; --connection node_1a --sleep 5 --exec find $datadir -type f-exec md5sum {} \; | md5sum >$MYSQLTEST_VARDIR/tmp/innodb_after SET GLOBAL innodb_disallow_writes=OFF; --connection node_1 --reap --let $wait_condition = SELECT COUNT(*) = 20000 FROM t1; --source include/wait_condition.inc SELECT COUNT(*) AS EXPECT_20000 FROM t1; --connection node_2 --let $wait_condition = SELECT COUNT(*) = 20000 FROM t1; --source include/wait_condition.inc SELECT COUNT(*) AS EXPECT_20000 FROM t1; --connection node_1 --diff_files $MYSQLTEST_VARDIR/tmp/innodb_before $MYSQLTEST_VARDIR/tmp/innodb_after --connection node_2 DROP TABLE t1; DROP TABLE ten; --disconnect node_1a