Skip to content

Commit 3294f6c

Browse files
committed
MDEV-14085 Merge new release of InnoDB MySQL 5.7.20 to 10.2
2 parents 3bc094d + 59d3ba0 commit 3294f6c

File tree

6 files changed

+108
-2
lines changed

6 files changed

+108
-2
lines changed
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
#
2+
# Bug#25053705 - INVALID I/O ON TABLE AFTER TRUNCATE
3+
#
4+
CREATE TABLE t1 (a INT, d INT, b VARCHAR(198), c CHAR(158), FULLTEXT fts1(c,b),
5+
FULLTEXT fts2(c));
6+
TRUNCATE TABLE t1;
7+
INSERT INTO t1 (a,d,b,c) VALUES (
8+
'79795','6',repeat('uololoaroolccaaruolraloouuoocorrcorurlu','1'),
9+
repeat('orouculcaocuocloooolooloooaorlroclouulrrucclulalouaulrluorooaclllluuorc
10+
cuullucocraloracurooulrooauuar','1'));
11+
CREATE TABLE t2 (a INT, d INT, b VARCHAR(198), c CHAR(158), FULLTEXT fts1(c,b));
12+
INSERT INTO t2 VALUES (1, 1, repeat('uololoaroolccaaruolraloouuoocorrcorurlu','1'),
13+
repeat('orouculcaocuocloooolooloooaorlroclouulrrucclulalouaulrluorooaclllluuorccuullucocraloracurooulrooauuar','1'));
14+
create procedure insert_t2(IN total int)
15+
begin
16+
declare i int default 1;
17+
while (i <= total) DO
18+
insert into t2 select * from t2;
19+
set i = i + 1;
20+
end while;
21+
end|
22+
CALL insert_t2(15);
23+
SET @save_dbug = @@SESSION.DEBUG_DBUG;
24+
SET DEBUG_DBUG = '+d,innodb_invalid_read_after_truncate';
25+
INSERT INTO t1 (a,d,b,c) VALUES (
26+
'7795','6',repeat('uololoaroolccaaruolraloouuoocorrcorurlu','1'),
27+
repeat('orouculcaocuocloooolooloooaorlroclouulrrucclulalouaulrluorooaclllluuorc
28+
cuullucocraloracurooulrooauuar','1'));
29+
SET DEBUG_DBUG = @save_dbug;
30+
DROP PROCEDURE insert_t2;
31+
DROP TABLE t1,t2;
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
--innodb-random-read-ahead=1
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
--source include/have_innodb.inc
2+
--source include/have_debug.inc
3+
4+
--echo #
5+
--echo # Bug#25053705 - INVALID I/O ON TABLE AFTER TRUNCATE
6+
--echo #
7+
8+
CREATE TABLE t1 (a INT, d INT, b VARCHAR(198), c CHAR(158), FULLTEXT fts1(c,b),
9+
FULLTEXT fts2(c));
10+
11+
TRUNCATE TABLE t1;
12+
13+
INSERT INTO t1 (a,d,b,c) VALUES (
14+
'79795','6',repeat('uololoaroolccaaruolraloouuoocorrcorurlu','1'),
15+
repeat('orouculcaocuocloooolooloooaorlroclouulrrucclulalouaulrluorooaclllluuorc
16+
cuullucocraloracurooulrooauuar','1'));
17+
18+
# The following CREATE TABLE and INSERTs are used to remove the pages related to table t1
19+
# from the buffer pool.
20+
CREATE TABLE t2 (a INT, d INT, b VARCHAR(198), c CHAR(158), FULLTEXT fts1(c,b));
21+
22+
INSERT INTO t2 VALUES (1, 1, repeat('uololoaroolccaaruolraloouuoocorrcorurlu','1'),
23+
repeat('orouculcaocuocloooolooloooaorlroclouulrrucclulalouaulrluorooaclllluuorccuullucocraloracurooulrooauuar','1'));
24+
25+
delimiter |;
26+
create procedure insert_t2(IN total int)
27+
begin
28+
declare i int default 1;
29+
while (i <= total) DO
30+
insert into t2 select * from t2;
31+
set i = i + 1;
32+
end while;
33+
end|
34+
delimiter ;|
35+
36+
CALL insert_t2(15);
37+
38+
SET @save_dbug = @@SESSION.DEBUG_DBUG;
39+
SET DEBUG_DBUG = '+d,innodb_invalid_read_after_truncate';
40+
41+
INSERT INTO t1 (a,d,b,c) VALUES (
42+
'7795','6',repeat('uololoaroolccaaruolraloouuoocorrcorurlu','1'),
43+
repeat('orouculcaocuocloooolooloooaorlroclouulrrucclulalouaulrluorooaclllluuorc
44+
cuullucocraloracurooulrooauuar','1'));
45+
46+
SET DEBUG_DBUG = @save_dbug;
47+
48+
DROP PROCEDURE insert_t2;
49+
50+
DROP TABLE t1,t2;

mysql-test/suite/sys_vars/r/sysvars_innodb.result

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3046,7 +3046,7 @@ READ_ONLY NO
30463046
COMMAND_LINE_ARGUMENT OPTIONAL
30473047
VARIABLE_NAME INNODB_VERSION
30483048
SESSION_VALUE NULL
3049-
GLOBAL_VALUE 5.7.19
3049+
GLOBAL_VALUE 5.7.20
30503050
GLOBAL_VALUE_ORIGIN COMPILE-TIME
30513051
DEFAULT_VALUE NULL
30523052
VARIABLE_SCOPE GLOBAL

storage/innobase/buf/buf0rea.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,17 @@ buf_read_page_low(
176176
dst = ((buf_block_t*) bpage)->frame;
177177
}
178178

179+
DBUG_EXECUTE_IF(
180+
"innodb_invalid_read_after_truncate",
181+
if (fil_space_t* space = fil_space_acquire(page_id.space())) {
182+
if (!strcmp(space->name, "test/t1")
183+
&& page_id.page_no() == space->size - 1) {
184+
type = 0;
185+
sync = true;
186+
}
187+
fil_space_release(space);
188+
});
189+
179190
IORequest request(type | IORequest::READ);
180191

181192
*err = fil_io(
@@ -321,6 +332,19 @@ buf_read_ahead_random(
321332
that is, reside near the start of the LRU list. */
322333

323334
for (i = low; i < high; i++) {
335+
DBUG_EXECUTE_IF(
336+
"innodb_invalid_read_after_truncate",
337+
if (fil_space_t* space = fil_space_acquire(
338+
page_id.space())) {
339+
bool skip = !strcmp(space->name, "test/t1");
340+
fil_space_release(space);
341+
if (skip) {
342+
high = space->size;
343+
buf_pool_mutex_exit(buf_pool);
344+
goto read_ahead;
345+
}
346+
});
347+
324348
const buf_page_t* bpage = buf_page_hash_get(
325349
buf_pool, page_id_t(page_id.space(), i));
326350

storage/innobase/include/univ.i

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Created 1/20/1994 Heikki Tuuri
4141

4242
#define INNODB_VERSION_MAJOR 5
4343
#define INNODB_VERSION_MINOR 7
44-
#define INNODB_VERSION_BUGFIX 19
44+
#define INNODB_VERSION_BUGFIX 20
4545

4646
/* The following is the InnoDB version as shown in
4747
SELECT plugin_version FROM information_schema.plugins;

0 commit comments

Comments
 (0)