Merge lp:~sergei.glushchenko/percona-server/56-bug1133926 into lp:percona-server/5.6

Proposed by Sergei Glushchenko
Status: Merged
Approved by: Stewart Smith
Approved revision: no longer in the source branch.
Merged at revision: 325
Proposed branch: lp:~sergei.glushchenko/percona-server/56-bug1133926
Merge into: lp:percona-server/5.6
Diff against target: 82 lines (+44/-3)
3 files modified
Percona-Server/mysql-test/suite/innodb/r/percona_bug_1133926.result (+4/-0)
Percona-Server/mysql-test/suite/innodb/t/percona_bug_1133926.test (+19/-0)
Percona-Server/sql/sql_table.cc (+21/-3)
To merge this branch: bzr merge lp:~sergei.glushchenko/percona-server/56-bug1133926
Reviewer Review Type Date Requested Status
Stewart Smith (community) Approve
Review via email: mp+151526@code.launchpad.net

Description of the change

percona_bug_999147 fails on debug builds.
Following can be found in server logs:
handler0alter.cc:368: virtual enum_alter_inplace_result ha_innobase::check_if_supported_inplace_alter(TABLE*, Alter_inplace_info*): Assertion `key_part->fieldnr < altered_table->s->fields' failed.
The reason is that key parts with 1-based fieldnr been passed to
check_if_supported_inplace_alter but 0-based are expected.
Solution is to transform keyparts with 1-based fieldnr (obtained from
table->key_info) to keyparts with 0-based fieldnr.

http://jenkins.percona.com/view/PS%205.6/job/percona-server-5.6-param/49/

To post a comment you must log in.
Revision history for this message
Stewart Smith (stewart) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== added file 'Percona-Server/mysql-test/suite/innodb/r/percona_bug_1133926.result'
2--- Percona-Server/mysql-test/suite/innodb/r/percona_bug_1133926.result 1970-01-01 00:00:00 +0000
3+++ Percona-Server/mysql-test/suite/innodb/r/percona_bug_1133926.result 2013-03-04 14:51:25 +0000
4@@ -0,0 +1,4 @@
5+DROP TABLE IF EXISTS t1;
6+SET SESSION expand_fast_index_creation=ON;
7+CREATE TEMPORARY TABLE t1 (a INT, b INT, INDEX z(a));
8+ALTER TABLE t1 ADD INDEX y(b);
9
10=== added file 'Percona-Server/mysql-test/suite/innodb/t/percona_bug_1133926.test'
11--- Percona-Server/mysql-test/suite/innodb/t/percona_bug_1133926.test 1970-01-01 00:00:00 +0000
12+++ Percona-Server/mysql-test/suite/innodb/t/percona_bug_1133926.test 2013-03-04 14:51:25 +0000
13@@ -0,0 +1,19 @@
14+# Test for Percona Server bug 1133926 (A crash that leaves behind an
15+# InnoDB temporary table with indexes results in an unbootable server)
16+# https://bugs.launchpad.net/percona-server/+bug/1133926
17+
18+-- source include/not_embedded.inc
19+-- source include/not_valgrind.inc
20+-- source include/not_crashrep.inc
21+-- source include/have_debug.inc
22+-- source include/have_innodb.inc
23+
24+--disable_warnings
25+DROP TABLE IF EXISTS t1;
26+--enable_warnings
27+
28+SET SESSION expand_fast_index_creation=ON;
29+
30+CREATE TEMPORARY TABLE t1 (a INT, b INT, INDEX z(a));
31+
32+ALTER TABLE t1 ADD INDEX y(b);
33
34=== modified file 'Percona-Server/sql/sql_table.cc'
35--- Percona-Server/sql/sql_table.cc 2013-02-12 07:47:19 +0000
36+++ Percona-Server/sql/sql_table.cc 2013-03-04 14:51:25 +0000
37@@ -7555,7 +7555,6 @@
38 DBUG_RETURN(error != 0);
39 }
40
41-
42 /*
43 Temporarily remove secondary keys previously stored in
44 alter_info->delayed_key_info.
45@@ -7576,7 +7575,7 @@
46
47 /*
48 Create Alter_info for the table and fill create_list with fields
49- definitions. Not that fields not changed, so we set field==ogrig_field.
50+ definitions. Note that fields not changed, so we set field==ogrig_field.
51 */
52 Alter_info alter_info_new;
53 Field **f_ptr, *field;
54@@ -7587,8 +7586,27 @@
55 alter_info_new.create_list.push_back(new_field);
56 }
57
58+ /* table->key_info cannot be passed to ha_alter_info constructor,
59+ because it has 1-based fieldnr in key_parts while ha_alter_info
60+ expect them to be 0-based */
61+ KEY* key_buf= (KEY*) thd->alloc(sizeof(KEY) * table->s->keys);
62+ for (uint key_idx= 0; key_idx < table->s->keys; key_idx++) {
63+ KEY* key = table->key_info + key_idx;
64+ KEY_PART_INFO* key_parts_buf=
65+ (KEY_PART_INFO*) thd->alloc(sizeof(KEY_PART_INFO) *
66+ key->user_defined_key_parts);
67+ for (uint key_part_idx= 0;
68+ key_part_idx < key->user_defined_key_parts;
69+ key_part_idx++) {
70+ key_parts_buf[key_part_idx]= key->key_part[key_part_idx];
71+ key_parts_buf[key_part_idx].fieldnr--;
72+ }
73+ key_buf[key_idx]= *key;
74+ key_buf[key_idx].key_part= key_parts_buf;
75+ }
76+
77 Alter_inplace_info ha_alter_info(create_info, &alter_info_new,
78- table->key_info, table->s->keys,
79+ key_buf, table->s->keys,
80 #ifdef WITH_PARTITION_STORAGE_ENGINE
81 thd->work_part_info,
82 #else

Subscribers

People subscribed via source and target branches