summaryrefslogtreecommitdiff
path: root/mysql-test/suite/gcol
diff options
context:
space:
mode:
authorMarko Mäkelä <marko.makela@mariadb.com>2017-08-07 23:14:56 +0300
committerMarko Mäkelä <marko.makela@mariadb.com>2017-08-08 09:44:38 +0300
commit03f3bdce5f7a8e5a71878a8837f7b40a9e7ef6d9 (patch)
tree0ec2bfb7c8adc70e18c91d28066b83b8bf42d784 /mysql-test/suite/gcol
parent6f623907cd5a066aac7164d7e88772ec891d5473 (diff)
downloadmariadb-git-03f3bdce5f7a8e5a71878a8837f7b40a9e7ef6d9.tar.gz
Deterministically wait for purge using wait_all_purged.inc
Diffstat (limited to 'mysql-test/suite/gcol')
-rw-r--r--mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result27
-rw-r--r--mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test26
2 files changed, 31 insertions, 22 deletions
diff --git a/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result b/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result
index e2d9be445da..7d1d1d30198 100644
--- a/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result
+++ b/mysql-test/suite/gcol/r/innodb_virtual_debug_purge.result
@@ -1,5 +1,7 @@
set default_storage_engine=innodb;
set @old_dbug=@@global.debug_dbug;
+SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency;
+SET GLOBAL innodb_purge_rseg_truncate_frequency = 1;
CREATE TABLE `t` (
`a` BLOB,
`b` BLOB,
@@ -12,9 +14,7 @@ INSERT INTO t VALUES (REPEAT('a', 16000), REPEAT('b', 16000), DEFAULT, "mm", 2);
CREATE INDEX idx ON t(c(100));
SET global debug_dbug="+d,ib_purge_virtual_index_callback";
UPDATE t SET a = REPEAT('m', 16000) WHERE a like "aaa%";
-select sleep(3);
-sleep(3)
-0
+InnoDB 0 transactions not purged
SET global debug_dbug=@old_dbug;
DROP TABLE t;
CREATE TABLE t (
@@ -29,9 +29,7 @@ INSERT INTO t VALUES (REPEAT('a', 100), REPEAT('b', 100), DEFAULT, "mm", 2);
CREATE INDEX idx ON t(c(100));
SET global debug_dbug="+d,ib_purge_virtual_index_callback";
UPDATE t SET a = REPEAT('m', 100) WHERE a like "aaa%";
-select sleep(3);
-sleep(3)
-0
+InnoDB 0 transactions not purged
SET global debug_dbug=@old_dbug;
DROP TABLE t;
CREATE TABLE t1 (
@@ -52,9 +50,7 @@ insert into t1 values(4, 18, default);
CREATE INDEX idx ON t1(x);
SET global debug_dbug="+d,ib_purge_virtual_index_callback";
UPDATE t1 SET id = 10 WHERE id = 1;
-select sleep(3);
-sleep(3)
-0
+InnoDB 0 transactions not purged
SET global debug_dbug=@old_dbug;
DROP TABLE t1;
connect con1,localhost,root,,;
@@ -80,7 +76,7 @@ SET DEBUG_SYNC= 'now WAIT_FOR uncommitted';
# enable purge
COMMIT;
# wait for purge to process the deleted records.
-Timeout in wait_innodb_all_purged.inc for INNODB_PURGE_TRX_ID_AGE = 4
+InnoDB 0 transactions not purged
SET DEBUG_SYNC= 'now SIGNAL purged';
connection default;
/* connection default */ ALTER TABLE t1 ADD COLUMN c INT GENERATED ALWAYS AS(a+b), ADD INDEX idx (c), ALGORITHM=INPLACE, LOCK=SHARED;
@@ -119,6 +115,7 @@ INSERT INTO t1(a, b) VALUES (8, 8);
# enable purge
COMMIT;
# wait for purge to process the deleted/updated records.
+InnoDB 1 transactions not purged
SET DEBUG_SYNC= 'now SIGNAL purged';
disconnect con1;
connection default;
@@ -141,20 +138,26 @@ DROP TABLE t0, t1;
create table t (a blob, b blob, c blob as (concat(a,b)), h varchar(10), index (c(100)));
insert t(a,b,h) values (repeat('g', 16000), repeat('x', 16000), "kk");
insert t(a,b,h) values (repeat('a', 16000), repeat('b', 16000), "mm");
-set global innodb_purge_stop_now = 1;
set global debug_dbug="+d,ib_purge_virtual_index_callback";
+connect prevent_purge, localhost, root;
+start transaction with consistent snapshot;
+connection default;
update t set a = repeat('m', 16000) where a like "aaa%";
connect con1, localhost, root;
lock table t write;
+disconnect prevent_purge;
connection default;
-set global innodb_purge_run_now=1;
select variable_value>1 from information_schema.global_status where variable_name='innodb_purge_trx_id_age';
variable_value>1
1
disconnect con1;
+start transaction with consistent snapshot;
+commit;
+InnoDB 0 transactions not purged
select variable_value>1 from information_schema.global_status where variable_name='innodb_purge_trx_id_age';
variable_value>1
0
set global debug_dbug=@old_dbug;
drop table t;
set debug_sync=reset;
+SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency;
diff --git a/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test b/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test
index 1e6cd44d0aa..2668e26c976 100644
--- a/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test
+++ b/mysql-test/suite/gcol/t/innodb_virtual_debug_purge.test
@@ -5,6 +5,9 @@
set default_storage_engine=innodb;
set @old_dbug=@@global.debug_dbug;
+# Ensure that the history list length will actually be decremented by purge.
+SET @saved_frequency = @@GLOBAL.innodb_purge_rseg_truncate_frequency;
+SET GLOBAL innodb_purge_rseg_truncate_frequency = 1;
CREATE TABLE `t` (
`a` BLOB,
@@ -21,11 +24,10 @@ CREATE INDEX idx ON t(c(100));
SET global debug_dbug="+d,ib_purge_virtual_index_callback";
UPDATE t SET a = REPEAT('m', 16000) WHERE a like "aaa%";
-select sleep(3);
+--source ../../innodb/include/wait_all_purged.inc
SET global debug_dbug=@old_dbug;
DROP TABLE t;
-
CREATE TABLE t (
a TINYBLOB,
b TINYBLOB,
@@ -41,7 +43,7 @@ CREATE INDEX idx ON t(c(100));
SET global debug_dbug="+d,ib_purge_virtual_index_callback";
UPDATE t SET a = REPEAT('m', 100) WHERE a like "aaa%";
-select sleep(3);
+--source ../../innodb/include/wait_all_purged.inc
SET global debug_dbug=@old_dbug;
DROP TABLE t;
@@ -68,7 +70,7 @@ CREATE INDEX idx ON t1(x);
SET global debug_dbug="+d,ib_purge_virtual_index_callback";
UPDATE t1 SET id = 10 WHERE id = 1;
-select sleep(3);
+--source ../../innodb/include/wait_all_purged.inc
SET global debug_dbug=@old_dbug;
DROP TABLE t1;
@@ -109,7 +111,7 @@ SET DEBUG_SYNC= 'now WAIT_FOR uncommitted';
COMMIT;
--echo # wait for purge to process the deleted records.
---source include/wait_innodb_all_purged.inc
+--source ../../innodb/include/wait_all_purged.inc
SET DEBUG_SYNC= 'now SIGNAL purged';
@@ -154,7 +156,7 @@ INSERT INTO t1(a, b) VALUES (8, 8);
COMMIT;
--echo # wait for purge to process the deleted/updated records.
---source include/wait_innodb_all_purged.inc
+--source ../../innodb/include/wait_all_purged.inc
SET DEBUG_SYNC= 'now SIGNAL purged';
@@ -175,20 +177,24 @@ DROP TABLE t0, t1;
create table t (a blob, b blob, c blob as (concat(a,b)), h varchar(10), index (c(100)));
insert t(a,b,h) values (repeat('g', 16000), repeat('x', 16000), "kk");
insert t(a,b,h) values (repeat('a', 16000), repeat('b', 16000), "mm");
-set global innodb_purge_stop_now = 1;
set global debug_dbug="+d,ib_purge_virtual_index_callback";
+connect(prevent_purge, localhost, root);
+start transaction with consistent snapshot;
+connection default;
update t set a = repeat('m', 16000) where a like "aaa%";
connect(con1, localhost, root);
lock table t write;
+disconnect prevent_purge;
connection default;
-set global innodb_purge_run_now=1;
-sleep 3;
select variable_value>1 from information_schema.global_status where variable_name='innodb_purge_trx_id_age';
disconnect con1;
-sleep 3;
+start transaction with consistent snapshot;
+commit;
+--source ../../innodb/include/wait_all_purged.inc
select variable_value>1 from information_schema.global_status where variable_name='innodb_purge_trx_id_age';
set global debug_dbug=@old_dbug;
drop table t;
--source include/wait_until_count_sessions.inc
set debug_sync=reset;
+SET GLOBAL innodb_purge_rseg_truncate_frequency = @saved_frequency;