Merge lp:~laurynas-biveinis/percona-server/bug890404-5.5 into lp:percona-server/5.5

Proposed by Laurynas Biveinis
Status: Merged
Approved by: Stewart Smith
Approved revision: no longer in the source branch.
Merged at revision: 337
Proposed branch: lp:~laurynas-biveinis/percona-server/bug890404-5.5
Merge into: lp:percona-server/5.5
Diff against target: 286 lines (+1/-105)
3 files modified
Percona-Server/mysql-test/r/percona_innodb_fake_changes.result (+0/-55)
Percona-Server/mysql-test/t/percona_innodb_fake_changes.test (+0/-49)
Percona-Server/storage/innobase/btr/btr0cur.c (+1/-1)
To merge this branch: bzr merge lp:~laurynas-biveinis/percona-server/bug890404-5.5
Reviewer Review Type Date Requested Status
Sergei Glushchenko (community) g2 Approve
Stewart Smith (community) Approve
Review via email: mp+129413@code.launchpad.net

Description of the change

Merge bug 890404 fix from 5.1. An automerge with fileid resolution

http://jenkins.percona.com/job/percona-server-5.5-param/542/

26611

To post a comment you must log in.
Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote :

Hi Laurynas,
It seems that something wrong with this MP. Instead of modifying testcase, patch removes old one and adds new one. Is it OK?

review: Needs Information
Revision history for this message
Stewart Smith (stewart) :
review: Approve
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote :

Sergei -

The fileid resolution (which must happen by removing the old file and recreating it again with the correct fileid) makes it seem this way.

Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote :

Laurynas, thank you for the information.

review: Approve (g2)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== added file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes.result'
--- Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 1970-01-01 00:00:00 +0000
+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 2012-10-12 12:45:16 +0000
@@ -0,0 +1,75 @@
1DROP TABLE IF EXISTS t1, t2, t3;
2# Checking variables
3SHOW VARIABLES LIKE 'innodb_fake_changes';
4Variable_name Value
5innodb_fake_changes OFF
6SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
7VARIABLE_VALUE
8OFF
9SET innodb_fake_changes=1;
10SHOW VARIABLES LIKE 'innodb_fake_changes';
11Variable_name Value
12innodb_fake_changes ON
13SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
14VARIABLE_VALUE
15ON
16SET innodb_fake_changes=default;
17SHOW VARIABLES LIKE 'innodb_fake_changes';
18Variable_name Value
19innodb_fake_changes OFF
20SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
21VARIABLE_VALUE
22OFF
23# Explicit COMMIT should fail when innodb_fake_changes is enabled
24# DML should be fine
25CREATE TABLE t1 (a INT) ENGINE=InnoDB;
26INSERT INTO t1 VALUES (1);
27SET autocommit=0;
28SET innodb_fake_changes=1;
29BEGIN;
30INSERT INTO t1 VALUES (2);
31UPDATE t1 SET a=0;
32DELETE FROM t1 LIMIT 1;
33SELECT * FROM t1;
34a
351
36COMMIT;
37ERROR HY000: Got error 131 during COMMIT
38SET innodb_fake_changes=default;
39# Verify that the fake changes to t1 did not leak through
40CHECK TABLE t1;
41Table Op Msg_type Msg_text
42test.t1 check status OK
43should_be_1
441
45DROP TABLE t1;
46# DDL must result in error
47CREATE TABLE t1 (a INT) ENGINE=InnoDB;
48SET autocommit=0;
49SET innodb_fake_changes=1;
50BEGIN;
51CREATE TABLE t2 (a INT) ENGINE=InnoDB;
52ERROR HY000: Can't create table 'test.t2' (errno: 131)
53DROP TABLE t1;
54ERROR 42S02: Unknown table 't1'
55TRUNCATE TABLE t1;
56ERROR HY000: Got error 131 during COMMIT
57ALTER TABLE t1 ENGINE=MyISAM;
58ERROR HY000: Got error 131 during COMMIT
59ROLLBACK;
60SET innodb_fake_changes=0;
61CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;
62INSERT INTO t3 VALUES (1,'');
63COMMIT;
64SET innodb_fake_changes=1;
65UPDATE t3 set b=lpad('b',11000,'c') where a=1;
66COMMIT;
67ERROR HY000: Got error 131 during COMMIT
68SET innodb_fake_changes=default;
69# Verify that the fake changes to t3 did not leak through
70CHECK TABLE t3;
71Table Op Msg_type Msg_text
72test.t3 check status OK
73should_be_1
741
75DROP TABLE t1, t3;
076
=== removed file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes.result'
--- Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 2012-04-18 23:25:36 +0000
+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 1970-01-01 00:00:00 +0000
@@ -1,55 +0,0 @@
1DROP TABLE IF EXISTS t1;
2# Checking variables
3SHOW VARIABLES LIKE 'innodb_fake_changes';
4Variable_name Value
5innodb_fake_changes OFF
6SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
7VARIABLE_VALUE
8OFF
9SET innodb_fake_changes=1;
10SHOW VARIABLES LIKE 'innodb_fake_changes';
11Variable_name Value
12innodb_fake_changes ON
13SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
14VARIABLE_VALUE
15ON
16SET innodb_fake_changes=default;
17SHOW VARIABLES LIKE 'innodb_fake_changes';
18Variable_name Value
19innodb_fake_changes OFF
20SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
21VARIABLE_VALUE
22OFF
23# Explicit COMMIT should fail when innodb_fake_changes is enabled
24# DML should be fine
25CREATE TABLE t1 (a INT) ENGINE=InnoDB;
26INSERT INTO t1 VALUES (1);
27SET autocommit=0;
28SET innodb_fake_changes=1;
29BEGIN;
30INSERT INTO t1 VALUES (2);
31UPDATE t1 SET a=0;
32DELETE FROM t1 LIMIT 1;
33SELECT * FROM t1;
34a
351
36COMMIT;
37ERROR HY000: Got error 131 during COMMIT
38SET innodb_fake_changes=default;
39DROP TABLE t1;
40# DDL must result in error
41CREATE TABLE t1 (a INT) ENGINE=InnoDB;
42SET autocommit=0;
43SET innodb_fake_changes=1;
44BEGIN;
45CREATE TABLE t2 (a INT) ENGINE=InnoDB;
46ERROR HY000: Can't create table 'test.t2' (errno: 131)
47DROP TABLE t1;
48ERROR 42S02: Unknown table 't1'
49TRUNCATE TABLE t1;
50ERROR HY000: Got error 131 during COMMIT
51ALTER TABLE t1 ENGINE=MyISAM;
52ERROR HY000: Got error 131 during COMMIT
53ROLLBACK;
54SET innodb_fake_changes=default;
55DROP TABLE t1;
560
=== added file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes.test'
--- Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 1970-01-01 00:00:00 +0000
+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 2012-10-12 12:45:16 +0000
@@ -0,0 +1,75 @@
1--source include/have_innodb.inc
2
3--disable_warnings
4DROP TABLE IF EXISTS t1, t2, t3;
5--enable_warnings
6
7
8--echo # Checking variables
9SHOW VARIABLES LIKE 'innodb_fake_changes';
10SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
11SET innodb_fake_changes=1;
12SHOW VARIABLES LIKE 'innodb_fake_changes';
13SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
14SET innodb_fake_changes=default;
15SHOW VARIABLES LIKE 'innodb_fake_changes';
16SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
17
18--echo # Explicit COMMIT should fail when innodb_fake_changes is enabled
19--echo # DML should be fine
20CREATE TABLE t1 (a INT) ENGINE=InnoDB;
21INSERT INTO t1 VALUES (1);
22let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
23SET autocommit=0;
24SET innodb_fake_changes=1;
25BEGIN;
26INSERT INTO t1 VALUES (2);
27UPDATE t1 SET a=0;
28DELETE FROM t1 LIMIT 1;
29SELECT * FROM t1;
30--error 1180
31COMMIT;
32SET innodb_fake_changes=default;
33--echo # Verify that the fake changes to t1 did not leak through
34CHECK TABLE t1;
35let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
36--disable_query_log
37eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
38--enable_query_log
39DROP TABLE t1;
40
41--echo # DDL must result in error
42CREATE TABLE t1 (a INT) ENGINE=InnoDB;
43SET autocommit=0;
44SET innodb_fake_changes=1;
45BEGIN;
46--error 1005
47CREATE TABLE t2 (a INT) ENGINE=InnoDB;
48--error 1051
49DROP TABLE t1;
50--error 1180
51TRUNCATE TABLE t1;
52--error 1180
53ALTER TABLE t1 ENGINE=MyISAM;
54ROLLBACK;
55
56# Test for bug 890404: uninitialized value warning in btr_cur_pessimistic_update
57SET innodb_fake_changes=0;
58CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;
59INSERT INTO t3 VALUES (1,'');
60COMMIT;
61let $t3_checksum_1= `CHECKSUM TABLE t3 EXTENDED`;
62SET innodb_fake_changes=1;
63
64UPDATE t3 set b=lpad('b',11000,'c') where a=1;
65--error ER_ERROR_DURING_COMMIT
66COMMIT;
67
68SET innodb_fake_changes=default;
69--echo # Verify that the fake changes to t3 did not leak through
70CHECK TABLE t3;
71let $t3_checksum_2= `CHECKSUM TABLE t3 EXTENDED`;
72--disable_query_log
73eval SELECT "$t3_checksum_1" LIKE "$t3_checksum_2" AS should_be_1;
74--enable_query_log
75DROP TABLE t1, t3;
076
=== removed file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes.test'
--- Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 2012-04-18 23:25:36 +0000
+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 1970-01-01 00:00:00 +0000
@@ -1,49 +0,0 @@
1--source include/have_innodb.inc
2
3--disable_warnings
4DROP TABLE IF EXISTS t1;
5--enable_warnings
6
7
8--echo # Checking variables
9SHOW VARIABLES LIKE 'innodb_fake_changes';
10SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
11SET innodb_fake_changes=1;
12SHOW VARIABLES LIKE 'innodb_fake_changes';
13SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
14SET innodb_fake_changes=default;
15SHOW VARIABLES LIKE 'innodb_fake_changes';
16SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
17
18--echo # Explicit COMMIT should fail when innodb_fake_changes is enabled
19--echo # DML should be fine
20CREATE TABLE t1 (a INT) ENGINE=InnoDB;
21INSERT INTO t1 VALUES (1);
22SET autocommit=0;
23SET innodb_fake_changes=1;
24BEGIN;
25INSERT INTO t1 VALUES (2);
26UPDATE t1 SET a=0;
27DELETE FROM t1 LIMIT 1;
28SELECT * FROM t1;
29--error 1180
30COMMIT;
31SET innodb_fake_changes=default;
32DROP TABLE t1;
33
34--echo # DDL must result in error
35CREATE TABLE t1 (a INT) ENGINE=InnoDB;
36SET autocommit=0;
37SET innodb_fake_changes=1;
38BEGIN;
39--error 1005
40CREATE TABLE t2 (a INT) ENGINE=InnoDB;
41--error 1051
42DROP TABLE t1;
43--error 1180
44TRUNCATE TABLE t1;
45--error 1180
46ALTER TABLE t1 ENGINE=MyISAM;
47ROLLBACK;
48SET innodb_fake_changes=default;
49DROP TABLE t1;
500
=== modified file 'Percona-Server/storage/innobase/btr/btr0cur.c'
--- Percona-Server/storage/innobase/btr/btr0cur.c 2012-09-17 13:08:32 +0000
+++ Percona-Server/storage/innobase/btr/btr0cur.c 2012-10-12 12:45:16 +0000
@@ -2441,7 +2441,7 @@
2441 itself. Thus the following call is safe. */2441 itself. Thus the following call is safe. */
2442 row_upd_index_replace_new_col_vals_index_pos(new_entry, index, update,2442 row_upd_index_replace_new_col_vals_index_pos(new_entry, index, update,
2443 FALSE, *heap);2443 FALSE, *heap);
2444 if (!(flags & BTR_KEEP_SYS_FLAG)) {2444 if (!(flags & BTR_KEEP_SYS_FLAG) && !trx->fake_changes) {
2445 row_upd_index_entry_sys_field(new_entry, index, DATA_ROLL_PTR,2445 row_upd_index_entry_sys_field(new_entry, index, DATA_ROLL_PTR,
2446 roll_ptr);2446 roll_ptr);
2447 row_upd_index_entry_sys_field(new_entry, index, DATA_TRX_ID,2447 row_upd_index_entry_sys_field(new_entry, index, DATA_TRX_ID,

Subscribers

People subscribed via source and target branches