Merge lp:~laurynas-biveinis/percona-server/fake-changes-from-fb-5.6 into lp:percona-server/5.6

Proposed by Laurynas Biveinis
Status: Merged
Approved by: Stewart Smith
Approved revision: no longer in the source branch.
Merged at revision: 479
Proposed branch: lp:~laurynas-biveinis/percona-server/fake-changes-from-fb-5.6
Merge into: lp:percona-server/5.6
Prerequisite: lp:~laurynas-biveinis/percona-server/fake-changes-binlog-5.6
Diff against target: 2012 lines (+1268/-191)
17 files modified
Percona-Server/mysql-test/include/start_fake_changes.inc (+37/-0)
Percona-Server/mysql-test/include/stop_fake_changes.inc (+34/-0)
Percona-Server/mysql-test/r/percona_innodb_fake_changes.result (+606/-43)
Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result (+58/-3)
Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result (+154/-0)
Percona-Server/mysql-test/t/percona_innodb_fake_changes.test (+303/-76)
Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test (+10/-4)
Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test (+16/-24)
Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test (+1/-0)
Percona-Server/sql/handler.cc (+1/-1)
Percona-Server/sql/sql_insert.cc (+1/-1)
Percona-Server/storage/innobase/btr/btr0cur.cc (+19/-16)
Percona-Server/storage/innobase/handler/ha_innodb.cc (+11/-9)
Percona-Server/storage/innobase/lock/lock0lock.cc (+4/-4)
Percona-Server/storage/innobase/que/que0que.cc (+1/-1)
Percona-Server/storage/innobase/row/row0ins.cc (+3/-2)
Percona-Server/storage/innobase/row/row0upd.cc (+9/-7)
To merge this branch: bzr merge lp:~laurynas-biveinis/percona-server/fake-changes-from-fb-5.6
Reviewer Review Type Date Requested Status
Stewart Smith (community) Approve
Vlad Lesin (community) g2 Approve
Laurynas Biveinis Pending
Review via email: mp+177312@code.launchpad.net

This proposal supersedes a proposal from 2013-07-17.

Description of the change

To post a comment you must log in.
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : Posted in a previous version of this proposal

Same comment as for the 5.5 MP.

review: Needs Fixing
Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : Posted in a previous version of this proposal

The 5.5 review comment re. redundant thr checks does not apply here, it's still reviewable.

Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote : Posted in a previous version of this proposal

Layrynas,

I think I see some places

btr0cur.cc line 2397, btr_cur_optimistic_update
lock0lock.cc line 6162, lock_clust_rec_modify_check_and_lock
lock0lock.cc line 6228, lock_sec_rec_modify_check_and_lock
que0que.cc line 6228, que_eval_sql

also, regardless this MP, there is

btr0cur.cc line 1394 -- double check of
 ut_ad((thr && thr_get_trx(thr)->fake_changes)
       || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));

Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote : Posted in a previous version of this proposal

Laurynas, sorry for misspelling

Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : Posted in a previous version of this proposal

Sergei -

> btr0cur.cc line 2397, btr_cur_optimistic_update
> lock0lock.cc line 6162, lock_clust_rec_modify_check_and_lock
> lock0lock.cc line 6228, lock_sec_rec_modify_check_and_lock
> que0que.cc line 6228, que_eval_sql

I reviewed them yesterday. Please show how each of them guarantees thr != NULL, because I was not able to prove that.

> btr0cur.cc line 1394 -- double check of
> ut_ad((thr && thr_get_trx(thr)->fake_changes)
> || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));

Yup, bug 1204443.

Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote : Posted in a previous version of this proposal

thr_get_trx expects that thr is NULL

btr0cur.cc line 2397, btr_cur_optimistic_update

line 2260:
ut_ad(thr_get_trx(thr)->id == trx_id
      || (flags & ~(BTR_KEEP_POS_FLAG | BTR_KEEP_IBUF_BITMAP))
      == (BTR_NO_UNDO_LOG_FLAG | BTR_NO_LOCKING_FLAG
   | BTR_CREATE_FLAG | BTR_KEEP_SYS_FLAG));
is either bug or thr should never be NULL here

lock0lock.cc line 6162, lock_clust_rec_modify_check_and_lock

line 6177:
ut_ad(lock_table_has(thr_get_trx(thr), index->table, LOCK_IX));

lock0lock.cc line 6228, lock_sec_rec_modify_check_and_lock

line 6241:
ut_ad(lock_table_has(thr_get_trx(thr), index->table, LOCK_IX));

que0que.cc line 6228, que_eval_sql

line 1294:
graph->trx = trx;

Revision history for this message
Sergei Glushchenko (sergei.glushchenko) wrote : Posted in a previous version of this proposal

Nevermind of que0que.cc line 6228, que_eval_sql :)

Revision history for this message
Laurynas Biveinis (laurynas-biveinis) wrote : Posted in a previous version of this proposal

> thr_get_trx expects that thr is NULL

(_not_ NULL)

You are right, thanks, I have reviewed and updated accordingly.

> btr0cur.cc line 2397, btr_cur_optimistic_update
>
> line 2260:
> ut_ad(thr_get_trx(thr)->id == trx_id
> || (flags & ~(BTR_KEEP_POS_FLAG | BTR_KEEP_IBUF_BITMAP))
> == (BTR_NO_UNDO_LOG_FLAG | BTR_NO_LOCKING_FLAG
> | BTR_CREATE_FLAG | BTR_KEEP_SYS_FLAG));
> is either bug or thr should never be NULL here

Thanks, http://bugs.mysql.com/bug.php?id=69847.

review: Needs Fixing
Revision history for this message
Vlad Lesin (vlad-lesin) :
review: Approve (g2)
Revision history for this message
Vlad Lesin (vlad-lesin) wrote :
Revision history for this message
Vlad Lesin (vlad-lesin) wrote :
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
=== added file 'Percona-Server/mysql-test/include/start_fake_changes.inc'
--- Percona-Server/mysql-test/include/start_fake_changes.inc 1970-01-01 00:00:00 +0000
+++ Percona-Server/mysql-test/include/start_fake_changes.inc 2013-10-17 08:14:49 +0000
@@ -0,0 +1,37 @@
1#
2# Include this file in a session before fake changes workload. It will enable
3# the fake changes for the current session and save the relevant server state
4# to variables that will be used by stop_fake_changes.inc that it didn't change.
5#
6# Since some of the state checked is global InnoDB counters, do not issue a
7# non-fake-changes workload in parallel.
8#
9
10# Requires userstat
11SELECT @@global.userstat = 1 AS should_be_1;
12
13# Have up-to-date stats for the fake changes table, so that, if there is a
14# non-fake-changes session running in parallel, it does not trigger an auto
15# stat recalc which then fails these checks.
16
17# Requires large index dive sample pages values
18SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
19
20eval ANALYZE TABLE $fake_changes_table;
21
22let $t_checksum_1= `CHECKSUM TABLE $fake_changes_table EXTENDED`;
23SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
24SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
25SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
26eval SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/$fake_changes_table';
27eval SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
28eval SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
29eval SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/$fake_changes_table';
30
31#
32# Index stats should not change, but it's only possible to inspect them
33# manually.
34#
35eval SHOW INDEXES IN $fake_changes_table;
36
37SET innodb_fake_changes=1;
038
=== added file 'Percona-Server/mysql-test/include/stop_fake_changes.inc'
--- Percona-Server/mysql-test/include/stop_fake_changes.inc 1970-01-01 00:00:00 +0000
+++ Percona-Server/mysql-test/include/stop_fake_changes.inc 2013-10-17 08:14:49 +0000
@@ -0,0 +1,34 @@
1#
2# Include this file in a session after fake changes workload. It will disable the fake
3# changes and assert that the relevant server state has not changed from the one saved
4# by a previous start_fake_changes.inc.
5#
6SET innodb_fake_changes=0;
7
8eval CHECK TABLE $fake_changes_table;
9
10let $t_checksum_2= `CHECKSUM TABLE $fake_changes_table EXTENDED`;
11SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
12SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
13SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
14eval SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/$fake_changes_table';
15eval SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
16eval SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE '$fake_changes_table';
17eval SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/$fake_changes_table';
18
19--disable_query_log
20eval SELECT "$t_checksum_1" LIKE "$t_checksum_2" AS should_be_1;
21--enable_query_log
22SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
23SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
24SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
25SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
26SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
27SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
28SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
29
30#
31# Index stats should not change, but it's only possible to inspect them
32# manually.
33#
34eval SHOW INDEXES IN $fake_changes_table;
035
=== modified file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes.result'
--- Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 2013-05-06 15:43:51 +0000
+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes.result 2013-10-17 08:14:49 +0000
@@ -22,10 +22,28 @@
22OFF22OFF
23# Explicit COMMIT should fail when innodb_fake_changes is enabled23# Explicit COMMIT should fail when innodb_fake_changes is enabled
24# DML should be fine24# DML should be fine
25SET @@GLOBAL.userstat= TRUE;25SET @@GLOBAL.userstat=TRUE;
26SET @@GLOBAL.innodb_stats_transient_sample_pages=30000;
26CREATE TABLE t1 (a INT) ENGINE=InnoDB;27CREATE TABLE t1 (a INT) ENGINE=InnoDB;
27INSERT INTO t1 VALUES (1);28INSERT INTO t1 VALUES (1);
28SET autocommit=0;29SELECT @@global.userstat = 1 AS should_be_1;
30should_be_1
311
32SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
33should_be_1
341
35ANALYZE TABLE t1;
36Table Op Msg_type Msg_text
37test.t1 analyze status OK
38SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
39SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
40SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
41SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
42SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
43SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
44SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
45SHOW INDEXES IN t1;
46Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
29SET innodb_fake_changes=1;47SET innodb_fake_changes=1;
30BEGIN;48BEGIN;
31INSERT INTO t1 VALUES (2);49INSERT INTO t1 VALUES (2);
@@ -36,31 +54,449 @@
361541
37COMMIT;55COMMIT;
38ERROR HY000: Got error 131 during COMMIT56ERROR HY000: Got error 131 during COMMIT
39SET innodb_fake_changes=default;57SET innodb_fake_changes=0;
40# Verify that the fake changes to t1 did not leak through58CHECK TABLE t1;
41CHECK TABLE t1;59Table Op Msg_type Msg_text
42Table Op Msg_type Msg_text60test.t1 check status OK
43test.t1 check status OK61SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
44should_be_162SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
45163SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
46should_be_064SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
47065SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
48should_be_066SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
49067SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
50should_be_068should_be_1
510691
52should_be_070SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
53071should_be_0
54should_be_0720
55073SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
56should_be_074should_be_0
570750
58should_be_076SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
59077should_be_0
60DROP TABLE t1;780
79SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
80should_be_0
810
82SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
83should_be_0
840
85SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
86should_be_0
870
88SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
89should_be_0
900
91SHOW INDEXES IN t1;
92Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
93DROP TABLE t1;
94CREATE TABLE t1 (a INT PRIMARY KEY, b INT, UNIQUE KEY (b)) ENGINE=InnoDB;
95INSERT INTO t1 VALUES (1,1);
96SELECT @@global.userstat = 1 AS should_be_1;
97should_be_1
981
99SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
100should_be_1
1011
102ANALYZE TABLE t1;
103Table Op Msg_type Msg_text
104test.t1 analyze status OK
105SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
106SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
107SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
108SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
109SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
110SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
111SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
112SHOW INDEXES IN t1;
113Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
114t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
115t1 0 b 1 b A 1 NULL NULL YES BTREE
116SET innodb_fake_changes=1;
117SELECT * FROM t1;
118ERROR HY000: Got error 131 during COMMIT
119INSERT INTO t1 VALUES (2,2);
120ERROR HY000: Got error 131 during COMMIT
121UPDATE t1 SET a=0 where b=1;
122ERROR 23000: Duplicate entry '1' for key 'b'
123UPDATE t1 SET b=0 where a=1;
124ERROR HY000: Got error 131 during COMMIT
125UPDATE t1 SET b=0 where a=2;
126ERROR HY000: Got error 131 during COMMIT
127DELETE FROM t1 where b=2;
128ERROR HY000: Got error 131 during COMMIT
129DELETE FROM t1 where b=1;
130ERROR HY000: Got error 131 during COMMIT
131DELETE FROM t1 where a=2;
132ERROR HY000: Got error 131 during COMMIT
133DELETE FROM t1 where a=1;
134ERROR HY000: Got error 131 during COMMIT
135REPLACE INTO t1 values (2,3);
136ERROR HY000: Got error 131 during COMMIT
137BEGIN;
138SELECT * FROM t1;
139a b
1401 1
141COMMIT;
142ERROR HY000: Got error 131 during COMMIT
143BEGIN;
144INSERT INTO t1 VALUES (2,2);
145COMMIT;
146ERROR HY000: Got error 131 during COMMIT
147BEGIN;
148UPDATE t1 SET a=0 where b=1;
149ERROR 23000: Duplicate entry '1' for key 'b'
150COMMIT;
151ERROR HY000: Got error 131 during COMMIT
152BEGIN;
153UPDATE t1 SET b=0 where a=1;
154COMMIT;
155ERROR HY000: Got error 131 during COMMIT
156BEGIN;
157UPDATE t1 SET b=0 where a=2;
158COMMIT;
159ERROR HY000: Got error 131 during COMMIT
160BEGIN;
161DELETE FROM t1 where b=2;
162COMMIT;
163ERROR HY000: Got error 131 during COMMIT
164BEGIN;
165DELETE FROM t1 where b=1;
166COMMIT;
167ERROR HY000: Got error 131 during COMMIT
168BEGIN;
169DELETE FROM t1 where a=2;
170COMMIT;
171ERROR HY000: Got error 131 during COMMIT
172BEGIN;
173DELETE FROM t1 where a=1;
174COMMIT;
175ERROR HY000: Got error 131 during COMMIT
176BEGIN;
177REPLACE INTO t1 values (2,3);
178COMMIT;
179ERROR HY000: Got error 131 during COMMIT
180INSERT INTO t1 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
181ERROR HY000: Got error 131 during COMMIT
182CREATE INDEX bx ON t1(b);
183ERROR HY000: Got error 131 during COMMIT
184SET innodb_fake_changes=0;
185CHECK TABLE t1;
186Table Op Msg_type Msg_text
187test.t1 check status OK
188SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
189SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
190SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
191SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
192SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
193SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
194SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
195should_be_1
1961
197SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
198should_be_0
1990
200SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
201should_be_0
2020
203SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
204should_be_0
2050
206SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
207should_be_0
2080
209SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
210should_be_0
2110
212SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
213should_be_0
2140
215SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
216should_be_0
2170
218SHOW INDEXES IN t1;
219Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
220t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
221t1 0 b 1 b A 1 NULL NULL YES BTREE
222DROP TABLE t1;
223CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
224INSERT INTO t2 VALUES (1, 1);
225SELECT @@global.userstat = 1 AS should_be_1;
226should_be_1
2271
228SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
229should_be_1
2301
231ANALYZE TABLE t2;
232Table Op Msg_type Msg_text
233test.t2 analyze status OK
234SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
235SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
236SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
237SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2';
238SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
239SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
240SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2';
241SHOW INDEXES IN t2;
242Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
243t2 0 PRIMARY 1 a A 1 NULL NULL BTREE
244SET innodb_fake_changes=1;
245SELECT * FROM t2;
246ERROR HY000: Got error 131 during COMMIT
247INSERT INTO t2 VALUES (2,2);
248ERROR HY000: Got error 131 during COMMIT
249UPDATE t2 SET b=0 where a=1;
250ERROR HY000: Got error 131 during COMMIT
251UPDATE t2 SET b=0 where a=2;
252ERROR HY000: Got error 131 during COMMIT
253DELETE FROM t2 where b=2;
254ERROR HY000: Got error 131 during COMMIT
255DELETE FROM t2 where b=1;
256ERROR HY000: Got error 131 during COMMIT
257DELETE FROM t2 where a=2;
258ERROR HY000: Got error 131 during COMMIT
259DELETE FROM t2 where a=1;
260ERROR HY000: Got error 131 during COMMIT
261REPLACE INTO t2 values (2,3);
262ERROR HY000: Got error 131 during COMMIT
263REPLACE INTO t2 VALUES (1,1);
264ERROR HY000: Got error 131 during COMMIT
265REPLACE INTO t2 VALUES (1,2);
266ERROR HY000: Got error 131 during COMMIT
267BEGIN;
268SELECT * FROM t2;
269a b
2701 1
271COMMIT;
272ERROR HY000: Got error 131 during COMMIT
273BEGIN;
274INSERT INTO t2 VALUES (2,2);
275COMMIT;
276ERROR HY000: Got error 131 during COMMIT
277BEGIN;
278UPDATE t2 SET b=0 where a=1;
279COMMIT;
280ERROR HY000: Got error 131 during COMMIT
281BEGIN;
282UPDATE t2 SET b=0 where a=2;
283COMMIT;
284ERROR HY000: Got error 131 during COMMIT
285BEGIN;
286DELETE FROM t2 where b=2;
287COMMIT;
288ERROR HY000: Got error 131 during COMMIT
289BEGIN;
290DELETE FROM t2 where b=1;
291COMMIT;
292ERROR HY000: Got error 131 during COMMIT
293BEGIN;
294DELETE FROM t2 where a=2;
295COMMIT;
296ERROR HY000: Got error 131 during COMMIT
297BEGIN;
298DELETE FROM t2 where a=1;
299COMMIT;
300ERROR HY000: Got error 131 during COMMIT
301BEGIN;
302REPLACE INTO t2 values (2,3);
303COMMIT;
304ERROR HY000: Got error 131 during COMMIT
305BEGIN;
306REPLACE INTO t2 VALUES (1,1);
307COMMIT;
308ERROR HY000: Got error 131 during COMMIT
309BEGIN;
310REPLACE INTO t2 VALUES (1,2);
311COMMIT;
312ERROR HY000: Got error 131 during COMMIT
313BEGIN;
314REPLACE INTO t2 VALUES (1,2);
315SELECT * from t2;
316a b
3171 1
318REPLACE INTO t2 VALUES (1,1);
319SELECT * from t2;
320a b
3211 1
322ROLLBACK;
323BEGIN;
324INSERT INTO t2 VALUES (1,1);
325ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
326INSERT INTO t2 VALUES (1,2);
327ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
328ROLLBACK;
329INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
330ERROR HY000: Got error 131 during COMMIT
331INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=b+10;
332ERROR HY000: Got error 131 during COMMIT
333INSERT INTO t2 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
334ERROR HY000: Got error 131 during COMMIT
335CREATE INDEX bx ON t2(b);
336ERROR HY000: Got error 131 during COMMIT
337SET innodb_fake_changes=0;
338CHECK TABLE t2;
339Table Op Msg_type Msg_text
340test.t2 check status OK
341SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
342SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
343SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
344SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2';
345SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
346SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2';
347SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2';
348should_be_1
3491
350SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
351should_be_0
3520
353SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
354should_be_0
3550
356SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
357should_be_0
3580
359SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
360should_be_0
3610
362SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
363should_be_0
3640
365SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
366should_be_0
3670
368SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
369should_be_0
3700
371SHOW INDEXES IN t2;
372Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
373t2 0 PRIMARY 1 a A 1 NULL NULL BTREE
374DROP TABLE t2;
375CREATE TABLE t3 (a INT PRIMARY KEY, B TEXT) ENGINE=InnoDB;
376INSERT INTO t3 VALUES (1, '');
377SELECT @@global.userstat = 1 AS should_be_1;
378should_be_1
3791
380SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
381should_be_1
3821
383ANALYZE TABLE t3;
384Table Op Msg_type Msg_text
385test.t3 analyze status OK
386SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
387SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
388SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
389SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
390SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
391SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
392SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
393SHOW INDEXES IN t3;
394Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
395t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
396SET innodb_fake_changes=1;
397SELECT * FROM t3;
398ERROR HY000: Got error 131 during COMMIT
399INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
400ERROR HY000: Got error 131 during COMMIT
401UPDATE t3 SET a=0 where a=1;
402ERROR HY000: Got error 131 during COMMIT
403DELETE FROM t3 where a=2;
404ERROR HY000: Got error 131 during COMMIT
405DELETE FROM t3 where a=1;
406ERROR HY000: Got error 131 during COMMIT
407REPLACE INTO t3 values (2,lpad('a',9000,'q'));
408ERROR HY000: Got error 131 during COMMIT
409INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
410ERROR HY000: Got error 131 during COMMIT
411BEGIN;
412SELECT * FROM t3;
413a B
4141
415COMMIT;
416ERROR HY000: Got error 131 during COMMIT
417BEGIN;
418INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
419COMMIT;
420ERROR HY000: Got error 131 during COMMIT
421BEGIN;
422UPDATE t3 SET a=0 where a=1;
423COMMIT;
424ERROR HY000: Got error 131 during COMMIT
425BEGIN;
426DELETE FROM t3 where a=2;
427COMMIT;
428ERROR HY000: Got error 131 during COMMIT
429BEGIN;
430DELETE FROM t3 where a=1;
431COMMIT;
432ERROR HY000: Got error 131 during COMMIT
433BEGIN;
434REPLACE INTO t3 values (2,lpad('a',9000,'q'));
435COMMIT;
436ERROR HY000: Got error 131 during COMMIT
437BEGIN;
438INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
439COMMIT;
440ERROR HY000: Got error 131 during COMMIT
441SET innodb_fake_changes=0;
442CHECK TABLE t3;
443Table Op Msg_type Msg_text
444test.t3 check status OK
445SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
446SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
447SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
448SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
449SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
450SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
451SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
452should_be_1
4531
454SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
455should_be_0
4560
457SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
458should_be_0
4590
460SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
461should_be_0
4620
463SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
464should_be_0
4650
466SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
467should_be_0
4680
469SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
470should_be_0
4710
472SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
473should_be_0
4740
475SHOW INDEXES IN t3;
476Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
477t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
478DROP TABLE t3;
61# DDL must result in error479# DDL must result in error
62CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;480CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
63SET autocommit=0;481SELECT @@global.userstat = 1 AS should_be_1;
482should_be_1
4831
484SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
485should_be_1
4861
487ANALYZE TABLE t1;
488Table Op Msg_type Msg_text
489test.t1 analyze status OK
490SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
491SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
492SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
493SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
494SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
495SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
496SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
497SHOW INDEXES IN t1;
498Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
499t1 0 PRIMARY 1 a A 0 NULL NULL BTREE
64SET innodb_fake_changes=1;500SET innodb_fake_changes=1;
65BEGIN;501BEGIN;
66CREATE TABLE t2 (a INT) ENGINE=InnoDB;502CREATE TABLE t2 (a INT) ENGINE=InnoDB;
@@ -68,52 +504,179 @@
68DROP TABLE t1;504DROP TABLE t1;
69ERROR 42S02: Unknown table 'test.t1'505ERROR 42S02: Unknown table 'test.t1'
70TRUNCATE TABLE t1;506TRUNCATE TABLE t1;
71ERROR HY000: Got error 131 during COMMIT507ERROR HY000: Table storage engine for 't1' doesn't have this option
72ALTER TABLE t1 ENGINE=MyISAM;508ALTER TABLE t1 ENGINE=MyISAM;
73ERROR HY000: Got error 131 during COMMIT509ERROR HY000: Got error 131 during COMMIT
74ROLLBACK;510ROLLBACK;
75SET innodb_fake_changes=0;511SET innodb_fake_changes=0;
512CHECK TABLE t1;
513Table Op Msg_type Msg_text
514test.t1 check status OK
515SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
516SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
517SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
518SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
519SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
520SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
521SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
522should_be_1
5231
524SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
525should_be_0
5260
527SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
528should_be_0
5290
530SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
531should_be_0
5320
533SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
534should_be_0
5350
536SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
537should_be_0
5380
539SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
540should_be_0
5410
542SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
543should_be_0
5440
545SHOW INDEXES IN t1;
546Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
547t1 0 PRIMARY 1 a A 0 NULL NULL BTREE
76INSERT INTO t1 VALUES (1), (2);548INSERT INTO t1 VALUES (1), (2);
77COMMIT;
78CREATE TABLE t2 (a INT PRIMARY KEY, b INT, INDEX b_ind (b),549CREATE TABLE t2 (a INT PRIMARY KEY, b INT, INDEX b_ind (b),
79FOREIGN KEY (b) REFERENCES t1(a) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;550FOREIGN KEY (b) REFERENCES t1(a) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
80INSERT INTO t2 VALUES (1, 1);551INSERT INTO t2 VALUES (1, 1);
81INSERT INTO t2 VALUES (2, 2);552INSERT INTO t2 VALUES (2, 2);
82COMMIT;553COMMIT;
554SELECT @@global.userstat = 1 AS should_be_1;
555should_be_1
5561
557SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
558should_be_1
5591
560ANALYZE TABLE t1;
561Table Op Msg_type Msg_text
562test.t1 analyze status OK
563SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
564SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
565SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
566SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
567SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
568SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
569SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
570SHOW INDEXES IN t1;
571Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
572t1 0 PRIMARY 1 a A 2 NULL NULL BTREE
83SET innodb_fake_changes=1;573SET innodb_fake_changes=1;
574BEGIN;
84DELETE FROM t1 WHERE a=1;575DELETE FROM t1 WHERE a=1;
85UPDATE t1 SET a=3 WHERE a=2;576UPDATE t1 SET a=3 WHERE a=2;
86COMMIT;577COMMIT;
87ERROR HY000: Got error 131 during COMMIT578ERROR HY000: Got error 131 during COMMIT
579SET innodb_fake_changes=0;
580CHECK TABLE t1;
581Table Op Msg_type Msg_text
582test.t1 check status OK
583SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
584SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
585SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
586SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
587SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
588SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
589SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
88should_be_1590should_be_1
8915911
90should_be_0592SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
910593should_be_0
92should_be_05940
930595SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
94should_be_0596should_be_0
9505970
96should_be_0598SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
970599should_be_0
98should_be_06000
990601SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
100should_be_0602should_be_0
10106030
102SET innodb_fake_changes=0;604SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
605should_be_0
6060
607SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
608should_be_0
6090
610SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
611should_be_0
6120
613SHOW INDEXES IN t1;
614Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
615t1 0 PRIMARY 1 a A 2 NULL NULL BTREE
103DROP TABLE t2;616DROP TABLE t2;
104CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;617CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;
105INSERT INTO t3 VALUES (1,'');618INSERT INTO t3 VALUES (1,'');
106COMMIT;619SELECT @@global.userstat = 1 AS should_be_1;
620should_be_1
6211
622SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
623should_be_1
6241
625ANALYZE TABLE t3;
626Table Op Msg_type Msg_text
627test.t3 analyze status OK
628SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
629SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
630SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
631SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
632SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
633SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
634SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
635SHOW INDEXES IN t3;
636Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
637t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
107SET innodb_fake_changes=1;638SET innodb_fake_changes=1;
639BEGIN;
108UPDATE t3 set b=lpad('b',11000,'c') where a=1;640UPDATE t3 set b=lpad('b',11000,'c') where a=1;
109COMMIT;641COMMIT;
110ERROR HY000: Got error 131 during COMMIT642ERROR HY000: Got error 131 during COMMIT
111SET innodb_fake_changes=default;643SET innodb_fake_changes=0;
112# Verify that the fake changes to t3 did not leak through
113CHECK TABLE t3;644CHECK TABLE t3;
114Table Op Msg_type Msg_text645Table Op Msg_type Msg_text
115test.t3 check status OK646test.t3 check status OK
647SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
648SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
649SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
650SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
651SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
652SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't3';
653SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t3';
116should_be_1654should_be_1
11716551
656SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
657should_be_0
6580
659SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
660should_be_0
6610
662SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
663should_be_0
6640
665SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
666should_be_0
6670
668SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
669should_be_0
6700
671SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
672should_be_0
6730
674SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
675should_be_0
6760
677SHOW INDEXES IN t3;
678Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
679t3 0 PRIMARY 1 a A 1 NULL NULL BTREE
118DROP TABLE t1, t3;680DROP TABLE t1, t3;
119SET @@GLOBAL.userstat= default;681SET @@GLOBAL.userstat= default;
682SET @@GLOBAL.innodb_stats_transient_sample_pages=default;
120683
=== modified file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result'
--- Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result 2012-10-17 11:30:19 +0000
+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_898306.result 2013-10-17 08:14:49 +0000
@@ -1,7 +1,29 @@
1DROP TABLE IF EXISTS t1;1DROP TABLE IF EXISTS t1;
2SET @@GLOBAL.userstat=ON;
3SET @@GLOBAL.innodb_stats_transient_sample_pages=30000;
2CREATE TABLE t1 (a INT primary key, b int, unique key (b)) ENGINE=InnoDB;4CREATE TABLE t1 (a INT primary key, b int, unique key (b)) ENGINE=InnoDB;
3INSERT INTO t1 VALUES (1,1);5INSERT INTO t1 VALUES (1,1);
4SET autocommit=1;6SET autocommit=1;
7SELECT @@global.userstat = 1 AS should_be_1;
8should_be_1
91
10SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
11should_be_1
121
13ANALYZE TABLE t1;
14Table Op Msg_type Msg_text
15test.t1 analyze status OK
16SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
17SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
18SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
19SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
20SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
21SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
22SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
23SHOW INDEXES IN t1;
24Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
25t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
26t1 0 b 1 b A 1 NULL NULL YES BTREE
5SET innodb_fake_changes=1;27SET innodb_fake_changes=1;
6# Confirm that duplicate key errors on REPLACE works28# Confirm that duplicate key errors on REPLACE works
7REPLACE INTO t1 VALUES (1,1);29REPLACE INTO t1 VALUES (1,1);
@@ -34,10 +56,43 @@
34INSERT INTO t1 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;56INSERT INTO t1 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
35ERROR HY000: Got error 131 during COMMIT57ERROR HY000: Got error 131 during COMMIT
36SET innodb_fake_changes=0;58SET innodb_fake_changes=0;
37SELECT * from t1;
38a b
391 1
40CHECK TABLE t1;59CHECK TABLE t1;
41Table Op Msg_type Msg_text60Table Op Msg_type Msg_text
42test.t1 check status OK61test.t1 check status OK
62SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
63SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
64SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
65SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
66SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
67SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
68SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
69should_be_1
701
71SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
72should_be_0
730
74SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
75should_be_0
760
77SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
78should_be_0
790
80SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
81should_be_0
820
83SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
84should_be_0
850
86SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
87should_be_0
880
89SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
90should_be_0
910
92SHOW INDEXES IN t1;
93Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
94t1 0 PRIMARY 1 a A 1 NULL NULL BTREE
95t1 0 b 1 b A 1 NULL NULL YES BTREE
43DROP TABLE t1;96DROP TABLE t1;
97SET @@GLOBAL.userstat=default;
98SET @@GLOBAL.innodb_stats_transient_sample_pages=default;
4499
=== modified file 'Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result'
--- Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result 2012-10-16 11:18:45 +0000
+++ Percona-Server/mysql-test/r/percona_innodb_fake_changes_bug_917942.result 2013-10-17 08:14:49 +0000
@@ -1,7 +1,28 @@
1DROP TABLE IF EXISTS t1;1DROP TABLE IF EXISTS t1;
2SET @@GLOBAL.userstat=ON;
3SET @@GLOBAL.innodb_stats_transient_sample_pages=30000;
2Test compressed4Test compressed
3CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;5CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
4INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));6INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
7SELECT @@global.userstat = 1 AS should_be_1;
8should_be_1
91
10SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
11should_be_1
121
13ANALYZE TABLE t1;
14Table Op Msg_type Msg_text
15test.t1 analyze status OK
16SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
17SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
18SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
19SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
20SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
21SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
22SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
23SHOW INDEXES IN t1;
24Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
25t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
5SET innodb_fake_changes=1;26SET innodb_fake_changes=1;
6INSERT INTO t1 VALUES(1, "foo", LPAD("a", 4600, "b")) ON DUPLICATE KEY UPDATE T = VALUES(T);27INSERT INTO t1 VALUES(1, "foo", LPAD("a", 4600, "b")) ON DUPLICATE KEY UPDATE T = VALUES(T);
7ERROR HY000: Got error 131 during COMMIT28ERROR HY000: Got error 131 during COMMIT
@@ -11,12 +32,62 @@
11CHECK TABLE t1;32CHECK TABLE t1;
12Table Op Msg_type Msg_text33Table Op Msg_type Msg_text
13test.t1 check status OK34test.t1 check status OK
35SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
36SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
37SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
38SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
39SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
40SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
41SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
14should_be_142should_be_1
151431
44SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
45should_be_0
460
47SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
48should_be_0
490
50SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
51should_be_0
520
53SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
54should_be_0
550
56SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
57should_be_0
580
59SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
60should_be_0
610
62SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
63should_be_0
640
65SHOW INDEXES IN t1;
66Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
67t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
16DROP TABLE t1;68DROP TABLE t1;
17Test for uncompressed69Test for uncompressed
18CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;70CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
19INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));71INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
72SELECT @@global.userstat = 1 AS should_be_1;
73should_be_1
741
75SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
76should_be_1
771
78ANALYZE TABLE t1;
79Table Op Msg_type Msg_text
80test.t1 analyze status OK
81SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
82SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
83SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
84SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
85SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
86SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
87SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
88SHOW INDEXES IN t1;
89Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
90t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
20SET innodb_fake_changes=1;91SET innodb_fake_changes=1;
21ERROR HY000: Got error 131 during COMMIT92ERROR HY000: Got error 131 during COMMIT
22ERROR HY000: Got error 131 during COMMIT93ERROR HY000: Got error 131 during COMMIT
@@ -122,11 +193,61 @@
122CHECK TABLE t1;193CHECK TABLE t1;
123Table Op Msg_type Msg_text194Table Op Msg_type Msg_text
124test.t1 check status OK195test.t1 check status OK
196SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
197SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
198SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
199SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
200SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
201SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
202SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
125should_be_1203should_be_1
12612041
205SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
206should_be_0
2070
208SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
209should_be_0
2100
211SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
212should_be_0
2130
214SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
215should_be_0
2160
217SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
218should_be_0
2190
220SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
221should_be_0
2220
223SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
224should_be_0
2250
226SHOW INDEXES IN t1;
227Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
228t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
127DROP TABLE t1;229DROP TABLE t1;
128CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;230CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
129INSERT INTO t1 VALUES(2, LPAD("v", 2, "b"), LPAD("a", 200, "b"));231INSERT INTO t1 VALUES(2, LPAD("v", 2, "b"), LPAD("a", 200, "b"));
232SELECT @@global.userstat = 1 AS should_be_1;
233should_be_1
2341
235SELECT @@global.innodb_stats_transient_sample_pages = 30000 AS should_be_1;
236should_be_1
2371
238ANALYZE TABLE t1;
239Table Op Msg_type Msg_text
240test.t1 analyze status OK
241SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
242SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_deleted';
243SELECT VARIABLE_VALUE INTO @innodb_rows_updated_1 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_updated';
244SELECT NUM_ROWS INTO @table_rows_estimate_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
245SELECT ROWS_CHANGED INTO @table_rows_changed_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
246SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_1 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
247SELECT MODIFIED_COUNTER INTO @table_dml_counter_1 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
248SHOW INDEXES IN t1;
249Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
250t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
130SET innodb_fake_changes=1;251SET innodb_fake_changes=1;
131INSERT INTO t1 VALUES (3, "foo", LPAD("a", 4600, "b"));252INSERT INTO t1 VALUES (3, "foo", LPAD("a", 4600, "b"));
132ERROR HY000: Got error 131 during COMMIT253ERROR HY000: Got error 131 during COMMIT
@@ -134,8 +255,39 @@
134CHECK TABLE t1;255CHECK TABLE t1;
135Table Op Msg_type Msg_text256Table Op Msg_type Msg_text
136test.t1 check status OK257test.t1 check status OK
258SELECT VARIABLE_VALUE INTO @innodb_rows_inserted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'Innodb_rows_inserted';
259SELECT VARIABLE_VALUE INTO @innodb_rows_deleted_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted';
260SELECT VARIABLE_VALUE INTO @innodb_rows_updated_2 FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated';
261SELECT NUM_ROWS INTO @table_rows_estimate_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
262SELECT ROWS_CHANGED INTO @table_rows_changed_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
263SELECT ROWS_CHANGED_X_INDEXES INTO @table_rows_changed_x_indexes_2 FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1';
264SELECT MODIFIED_COUNTER INTO @table_dml_counter_2 FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1';
137should_be_1265should_be_1
13812661
267SELECT @innodb_rows_inserted_2 - @innodb_rows_inserted_1 AS should_be_0;
268should_be_0
2690
270SELECT @innodb_rows_deleted_2 - @innodb_rows_deleted_1 AS should_be_0;
271should_be_0
2720
273SELECT @innodb_rows_updated_2 - @innodb_rows_updated_1 AS should_be_0;
274should_be_0
2750
276SELECT @table_rows_estimate_2 - @table_rows_estimate_1 AS should_be_0;
277should_be_0
2780
279SELECT @table_rows_changed_2 - @table_rows_changed_1 AS should_be_0;
280should_be_0
2810
282SELECT @table_rows_changed_x_indexes_2 - @table_rows_changed_x_indexes_1 AS should_be_0;
283should_be_0
2840
285SELECT @table_dml_counter_2 - @table_dml_counter_1 AS should_be_0;
286should_be_0
2870
288SHOW INDEXES IN t1;
289Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
290t1 0 PRIMARY 1 id A 1 NULL NULL BTREE
139DROP TABLE t1;291DROP TABLE t1;
140CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;292CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
141INSERT INTO t1 VALUES(2, LPAD("v", 3, "b"), LPAD("a", 100, "b"));293INSERT INTO t1 VALUES(2, LPAD("v", 3, "b"), LPAD("a", 100, "b"));
@@ -149,3 +301,5 @@
149should_be_1301should_be_1
15013021
151DROP TABLE t1;303DROP TABLE t1;
304SET @@GLOBAL.userstat=default;
305SET @@GLOBAL.innodb_stats_transient_sample_pages=default;
152306
=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes.test'
--- Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 2013-05-06 15:43:51 +0000
+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes.test 2013-10-17 08:14:49 +0000
@@ -4,7 +4,6 @@
4DROP TABLE IF EXISTS t1, t2, t3;4DROP TABLE IF EXISTS t1, t2, t3;
5--enable_warnings5--enable_warnings
66
7
8--echo # Checking variables7--echo # Checking variables
9SHOW VARIABLES LIKE 'innodb_fake_changes';8SHOW VARIABLES LIKE 'innodb_fake_changes';
10SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';9SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='innodb_fake_changes';
@@ -17,21 +16,15 @@
1716
18--echo # Explicit COMMIT should fail when innodb_fake_changes is enabled17--echo # Explicit COMMIT should fail when innodb_fake_changes is enabled
19--echo # DML should be fine18--echo # DML should be fine
20SET @@GLOBAL.userstat= TRUE;19SET @@GLOBAL.userstat=TRUE;
20SET @@GLOBAL.innodb_stats_transient_sample_pages=30000;
21
21CREATE TABLE t1 (a INT) ENGINE=InnoDB;22CREATE TABLE t1 (a INT) ENGINE=InnoDB;
22INSERT INTO t1 VALUES (1);23INSERT INTO t1 VALUES (1);
2324
24let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;25--let $fake_changes_table=t1
25let $innodb_rows_inserted_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_inserted'`;26--source include/start_fake_changes.inc
26let $innodb_rows_deleted_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;
27let $innodb_rows_updated_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;
28let $table_rows_estimate_1= `SELECT NUM_ROWS FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1'`;
29let $table_dml_counter_1= `SELECT MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1'`;
30let $table_rows_changed_1= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
31let $table_rows_changed_x_indexes_1= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;
3227
33SET autocommit=0;
34SET innodb_fake_changes=1;
35BEGIN;28BEGIN;
36INSERT INTO t1 VALUES (2);29INSERT INTO t1 VALUES (2);
37UPDATE t1 SET a=0;30UPDATE t1 SET a=0;
@@ -39,107 +32,341 @@
39SELECT * FROM t1;32SELECT * FROM t1;
40--error 118033--error 1180
41COMMIT;34COMMIT;
42SET innodb_fake_changes=default;35
43--echo # Verify that the fake changes to t1 did not leak through36--source include/stop_fake_changes.inc
44CHECK TABLE t1;37
45let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;38DROP TABLE t1;
46let $innodb_rows_inserted_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_inserted'`;39
47let $innodb_rows_deleted_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;40#
48let $innodb_rows_updated_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;41# Test primary and secondary index access
49let $table_rows_estimate_2= `SELECT NUM_ROWS FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1'`;42#
50let $table_dml_counter_2= `SELECT MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t1'`;43CREATE TABLE t1 (a INT PRIMARY KEY, b INT, UNIQUE KEY (b)) ENGINE=InnoDB;
51let $table_rows_changed_2= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;44INSERT INTO t1 VALUES (1,1);
52let $table_rows_changed_x_indexes_2= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't1'`;45
53--disable_query_log46--source include/start_fake_changes.inc
54eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;47
55eval SELECT "$innodb_rows_inserted_2" - "$innodb_rows_inserted_1" AS should_be_0;48# Test with autocommit
56eval SELECT "$innodb_rows_deleted_2" - "$innodb_rows_deleted_1" AS should_be_0;49--error ER_ERROR_DURING_COMMIT
57eval SELECT "$innodb_rows_updated_2" - "$innodb_rows_updated_1" AS should_be_0;50SELECT * FROM t1;
58eval SELECT "$table_rows_estimate_2" - "$table_rows_estimate_1" AS should_be_0;51--error ER_ERROR_DURING_COMMIT
59eval SELECT "$table_dml_counter_2" - "$table_dml_counter_1" AS should_be_0;52INSERT INTO t1 VALUES (2,2);
60eval SELECT "$table_rows_changed_2" - "$table_rows_changed_1" AS should_be_0;53--error ER_DUP_ENTRY
61eval SELECT "$table_rows_changed_x_indexes_2" - "$table_rows_changed_x_indexes_1" AS should_be_0;54UPDATE t1 SET a=0 where b=1;
62--enable_query_log55--error ER_ERROR_DURING_COMMIT
63DROP TABLE t1;56UPDATE t1 SET b=0 where a=1;
57--error ER_ERROR_DURING_COMMIT
58UPDATE t1 SET b=0 where a=2;
59--error ER_ERROR_DURING_COMMIT
60DELETE FROM t1 where b=2;
61--error ER_ERROR_DURING_COMMIT
62DELETE FROM t1 where b=1;
63--error ER_ERROR_DURING_COMMIT
64DELETE FROM t1 where a=2;
65--error ER_ERROR_DURING_COMMIT
66DELETE FROM t1 where a=1;
67--error ER_ERROR_DURING_COMMIT
68REPLACE INTO t1 values (2,3);
69
70# Test with transactions
71BEGIN;
72SELECT * FROM t1;
73--error ER_ERROR_DURING_COMMIT
74COMMIT;
75
76BEGIN;
77INSERT INTO t1 VALUES (2,2);
78--error ER_ERROR_DURING_COMMIT
79COMMIT;
80
81BEGIN;
82--error ER_DUP_ENTRY
83UPDATE t1 SET a=0 where b=1;
84--error ER_ERROR_DURING_COMMIT
85COMMIT;
86
87BEGIN;
88UPDATE t1 SET b=0 where a=1;
89--error ER_ERROR_DURING_COMMIT
90COMMIT;
91
92BEGIN;
93UPDATE t1 SET b=0 where a=2;
94--error ER_ERROR_DURING_COMMIT
95COMMIT;
96
97BEGIN;
98DELETE FROM t1 where b=2;
99--error ER_ERROR_DURING_COMMIT
100COMMIT;
101
102BEGIN;
103DELETE FROM t1 where b=1;
104--error ER_ERROR_DURING_COMMIT
105COMMIT;
106
107BEGIN;
108DELETE FROM t1 where a=2;
109--error ER_ERROR_DURING_COMMIT
110COMMIT;
111
112BEGIN;
113DELETE FROM t1 where a=1;
114--error ER_ERROR_DURING_COMMIT
115COMMIT;
116
117BEGIN;
118REPLACE INTO t1 values (2,3);
119--error ER_ERROR_DURING_COMMIT
120COMMIT;
121
122--error ER_ERROR_DURING_COMMIT
123INSERT INTO t1 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
124--error ER_ERROR_DURING_COMMIT
125CREATE INDEX bx ON t1(b);
126
127--source include/stop_fake_changes.inc
128
129DROP TABLE t1;
130
131#
132# Test all accesses through the primary index
133#
134CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
135INSERT INTO t2 VALUES (1, 1);
136
137--let $fake_changes_table=t2
138--source include/start_fake_changes.inc
139
140# Test with autocommit
141--error ER_ERROR_DURING_COMMIT
142SELECT * FROM t2;
143--error ER_ERROR_DURING_COMMIT
144INSERT INTO t2 VALUES (2,2);
145--error ER_ERROR_DURING_COMMIT
146UPDATE t2 SET b=0 where a=1;
147--error ER_ERROR_DURING_COMMIT
148UPDATE t2 SET b=0 where a=2;
149--error ER_ERROR_DURING_COMMIT
150DELETE FROM t2 where b=2;
151--error ER_ERROR_DURING_COMMIT
152DELETE FROM t2 where b=1;
153--error ER_ERROR_DURING_COMMIT
154DELETE FROM t2 where a=2;
155--error ER_ERROR_DURING_COMMIT
156DELETE FROM t2 where a=1;
157--error ER_ERROR_DURING_COMMIT
158REPLACE INTO t2 values (2,3);
159--error ER_ERROR_DURING_COMMIT
160REPLACE INTO t2 VALUES (1,1);
161--error ER_ERROR_DURING_COMMIT
162REPLACE INTO t2 VALUES (1,2);
163
164# Test with transactions
165BEGIN;
166SELECT * FROM t2;
167--error ER_ERROR_DURING_COMMIT
168COMMIT;
169
170BEGIN;
171INSERT INTO t2 VALUES (2,2);
172--error ER_ERROR_DURING_COMMIT
173COMMIT;
174
175BEGIN;
176UPDATE t2 SET b=0 where a=1;
177--error ER_ERROR_DURING_COMMIT
178COMMIT;
179
180BEGIN;
181UPDATE t2 SET b=0 where a=2;
182--error ER_ERROR_DURING_COMMIT
183COMMIT;
184
185BEGIN;
186DELETE FROM t2 where b=2;
187--error ER_ERROR_DURING_COMMIT
188COMMIT;
189
190BEGIN;
191DELETE FROM t2 where b=1;
192--error ER_ERROR_DURING_COMMIT
193COMMIT;
194
195BEGIN;
196DELETE FROM t2 where a=2;
197--error ER_ERROR_DURING_COMMIT
198COMMIT;
199
200BEGIN;
201DELETE FROM t2 where a=1;
202--error ER_ERROR_DURING_COMMIT
203COMMIT;
204
205BEGIN;
206REPLACE INTO t2 values (2,3);
207--error ER_ERROR_DURING_COMMIT
208COMMIT;
209
210BEGIN;
211REPLACE INTO t2 VALUES (1,1);
212--error ER_ERROR_DURING_COMMIT
213COMMIT;
214
215BEGIN;
216REPLACE INTO t2 VALUES (1,2);
217--error ER_ERROR_DURING_COMMIT
218COMMIT;
219
220# Confirm that duplicate key errors are OK
221BEGIN;
222REPLACE INTO t2 VALUES (1,2);
223SELECT * from t2;
224REPLACE INTO t2 VALUES (1,1);
225SELECT * from t2;
226ROLLBACK;
227
228BEGIN;
229--error ER_DUP_ENTRY
230INSERT INTO t2 VALUES (1,1);
231--error ER_DUP_ENTRY
232INSERT INTO t2 VALUES (1,2);
233ROLLBACK;
234
235--error ER_ERROR_DURING_COMMIT
236INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=2;
237--error ER_ERROR_DURING_COMMIT
238INSERT INTO t2 VALUES (1,1) ON DUPLICATE KEY UPDATE b=b+10;
239--error ER_ERROR_DURING_COMMIT
240INSERT INTO t2 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
241--error ER_ERROR_DURING_COMMIT
242CREATE INDEX bx ON t2(b);
243
244--source include/stop_fake_changes.inc
245
246DROP TABLE t2;
247
248#
249# Test TEXT
250#
251CREATE TABLE t3 (a INT PRIMARY KEY, B TEXT) ENGINE=InnoDB;
252INSERT INTO t3 VALUES (1, '');
253
254--let $fake_changes_table=t3
255--source include/start_fake_changes.inc
256
257# Test with autocommit
258--error ER_ERROR_DURING_COMMIT
259SELECT * FROM t3;
260--error ER_ERROR_DURING_COMMIT
261INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
262--error ER_ERROR_DURING_COMMIT
263UPDATE t3 SET a=0 where a=1;
264--error ER_ERROR_DURING_COMMIT
265DELETE FROM t3 where a=2;
266--error ER_ERROR_DURING_COMMIT
267DELETE FROM t3 where a=1;
268--error ER_ERROR_DURING_COMMIT
269REPLACE INTO t3 values (2,lpad('a',9000,'q'));
270--error ER_ERROR_DURING_COMMIT
271INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
272
273# Test with transactions
274BEGIN;
275SELECT * FROM t3;
276--error ER_ERROR_DURING_COMMIT
277COMMIT;
278
279BEGIN;
280INSERT INTO t3 VALUES (2,lpad('a',10000, 'b'));
281--error ER_ERROR_DURING_COMMIT
282COMMIT;
283
284BEGIN;
285UPDATE t3 SET a=0 where a=1;
286--error ER_ERROR_DURING_COMMIT
287COMMIT;
288
289BEGIN;
290DELETE FROM t3 where a=2;
291--error ER_ERROR_DURING_COMMIT
292COMMIT;
293
294BEGIN;
295DELETE FROM t3 where a=1;
296--error ER_ERROR_DURING_COMMIT
297COMMIT;
298
299BEGIN;
300REPLACE INTO t3 values (2,lpad('a',9000,'q'));
301--error ER_ERROR_DURING_COMMIT
302COMMIT;
303
304BEGIN;
305INSERT INTO t3 VALUES (1,1) ON DUPLICATE KEY UPDATE b=lpad('b',11000,'c');
306--error ER_ERROR_DURING_COMMIT
307COMMIT;
308
309--source include/stop_fake_changes.inc
310
311DROP TABLE t3;
64312
65--echo # DDL must result in error313--echo # DDL must result in error
66CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;314CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
67SET autocommit=0;315
68SET innodb_fake_changes=1;316--let $fake_changes_table=t1
317--source include/start_fake_changes.inc
318
69BEGIN;319BEGIN;
70--error ER_ILLEGAL_HA320--error ER_ILLEGAL_HA
71CREATE TABLE t2 (a INT) ENGINE=InnoDB;321CREATE TABLE t2 (a INT) ENGINE=InnoDB;
72--error 1051322--error 1051
73DROP TABLE t1;323DROP TABLE t1;
74--error 1180324--error 1031
75TRUNCATE TABLE t1;325TRUNCATE TABLE t1;
76--error 1180326--error 1180
77ALTER TABLE t1 ENGINE=MyISAM;327ALTER TABLE t1 ENGINE=MyISAM;
78ROLLBACK;328ROLLBACK;
79329
330--source include/stop_fake_changes.inc
331
80# Test stat counters foreign key constraints332# Test stat counters foreign key constraints
81SET innodb_fake_changes=0;
82INSERT INTO t1 VALUES (1), (2);333INSERT INTO t1 VALUES (1), (2);
83COMMIT;334
84CREATE TABLE t2 (a INT PRIMARY KEY, b INT, INDEX b_ind (b),335CREATE TABLE t2 (a INT PRIMARY KEY, b INT, INDEX b_ind (b),
85 FOREIGN KEY (b) REFERENCES t1(a) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;336 FOREIGN KEY (b) REFERENCES t1(a) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=InnoDB;
86INSERT INTO t2 VALUES (1, 1);337INSERT INTO t2 VALUES (1, 1);
87INSERT INTO t2 VALUES (2, 2);338INSERT INTO t2 VALUES (2, 2);
88COMMIT;339COMMIT;
89340
90let $t2_checksum_1= `CHECKSUM TABLE t2 EXTENDED`;341--let $fake_changes_table=t1
91let $innodb_rows_deleted_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;342--source include/start_fake_changes.inc
92let $innodb_rows_updated_1= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;
93let $table_rows_estimate_1= `SELECT NUM_ROWS FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2'`;
94let $table_dml_counter_1= `SELECT MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2'`;
95let $table_rows_changed_1= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
96let $table_rows_changed_x_indexes_1= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
97343
98SET innodb_fake_changes=1;344BEGIN;
99DELETE FROM t1 WHERE a=1;345DELETE FROM t1 WHERE a=1;
100UPDATE t1 SET a=3 WHERE a=2;346UPDATE t1 SET a=3 WHERE a=2;
101--error 1180347--error 1180
102COMMIT;348COMMIT;
103349
104let $t2_checksum_2= `CHECKSUM TABLE t2 EXTENDED`;350--source include/stop_fake_changes.inc
105let $innodb_rows_deleted_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_deleted'`;351
106let $innodb_rows_updated_2= `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME='Innodb_rows_updated'`;
107let $table_rows_estimate_2= `SELECT NUM_ROWS FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2'`;
108let $table_dml_counter_2= `SELECT MODIFIED_COUNTER FROM INFORMATION_SCHEMA.INNODB_SYS_TABLESTATS WHERE NAME LIKE 'test/t2'`;
109let $table_rows_changed_2= `SELECT ROWS_CHANGED FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
110let $table_rows_changed_x_indexes_2= `SELECT ROWS_CHANGED_X_INDEXES FROM INFORMATION_SCHEMA.TABLE_STATISTICS WHERE TABLE_SCHEMA LIKE 'test' AND TABLE_NAME LIKE 't2'`;
111
112--disable_query_log
113eval SELECT "$t2_checksum_1" LIKE "$t2_checksum_2" AS should_be_1;
114eval SELECT "$innodb_rows_deleted_2" - "$innodb_rows_deleted_1" AS should_be_0;
115eval SELECT "$innodb_rows_updated_2" - "$innodb_rows_updated_1" AS should_be_0;
116eval SELECT "$table_rows_estimate_2" - "$table_rows_estimate_1" AS should_be_0;
117eval SELECT "$table_rows_estimate_2" - "$table_rows_estimate_1" AS should_be_0;
118eval SELECT "$table_rows_changed_2" - "$table_rows_changed_1" AS should_be_0;
119eval SELECT "$table_rows_changed_x_indexes_2" - "$table_rows_changed_x_indexes_1" AS should_be_0;
120--enable_query_log
121
122SET innodb_fake_changes=0;
123DROP TABLE t2;352DROP TABLE t2;
124353
125# Test for bug 890404: uninitialized value warning in btr_cur_pessimistic_update354# Test for bug 890404: uninitialized value warning in btr_cur_pessimistic_update
126CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;355CREATE TABLE t3 (a INT primary key, b text) ENGINE=InnoDB;
127INSERT INTO t3 VALUES (1,'');356INSERT INTO t3 VALUES (1,'');
128COMMIT;
129let $t3_checksum_1= `CHECKSUM TABLE t3 EXTENDED`;357let $t3_checksum_1= `CHECKSUM TABLE t3 EXTENDED`;
130SET innodb_fake_changes=1;358
131359--let $fake_changes_table=t3
360--source include/start_fake_changes.inc
361
362BEGIN;
132UPDATE t3 set b=lpad('b',11000,'c') where a=1;363UPDATE t3 set b=lpad('b',11000,'c') where a=1;
133--error ER_ERROR_DURING_COMMIT364--error ER_ERROR_DURING_COMMIT
134COMMIT;365COMMIT;
135366
136SET innodb_fake_changes=default;367--source include/stop_fake_changes.inc
137--echo # Verify that the fake changes to t3 did not leak through368
138CHECK TABLE t3;
139let $t3_checksum_2= `CHECKSUM TABLE t3 EXTENDED`;
140--disable_query_log
141eval SELECT "$t3_checksum_1" LIKE "$t3_checksum_2" AS should_be_1;
142--enable_query_log
143DROP TABLE t1, t3;369DROP TABLE t1, t3;
144370
145SET @@GLOBAL.userstat= default;371SET @@GLOBAL.userstat= default;
372SET @@GLOBAL.innodb_stats_transient_sample_pages=default;
146373
=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test'
--- Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test 2012-10-17 11:30:19 +0000
+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_898306.test 2013-10-17 08:14:49 +0000
@@ -7,11 +7,16 @@
7DROP TABLE IF EXISTS t1;7DROP TABLE IF EXISTS t1;
8--enable_warnings8--enable_warnings
99
10SET @@GLOBAL.userstat=ON;
11SET @@GLOBAL.innodb_stats_transient_sample_pages=30000;
12
10CREATE TABLE t1 (a INT primary key, b int, unique key (b)) ENGINE=InnoDB;13CREATE TABLE t1 (a INT primary key, b int, unique key (b)) ENGINE=InnoDB;
11INSERT INTO t1 VALUES (1,1);14INSERT INTO t1 VALUES (1,1);
1215
13SET autocommit=1;16SET autocommit=1;
14SET innodb_fake_changes=1;17
18--let $fake_changes_table=t1
19--source include/start_fake_changes.inc
1520
16--echo # Confirm that duplicate key errors on REPLACE works21--echo # Confirm that duplicate key errors on REPLACE works
1722
@@ -52,8 +57,9 @@
52--error ER_ERROR_DURING_COMMIT57--error ER_ERROR_DURING_COMMIT
53INSERT INTO t1 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;58INSERT INTO t1 VALUES (1,2) ON DUPLICATE KEY UPDATE b=b+10;
5459
55SET innodb_fake_changes=0;60--source include/stop_fake_changes.inc
56SELECT * from t1;
57CHECK TABLE t1;
5861
59DROP TABLE t1;62DROP TABLE t1;
63
64SET @@GLOBAL.userstat=default;
65SET @@GLOBAL.innodb_stats_transient_sample_pages=default;
6066
=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test'
--- Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test 2012-10-17 11:30:19 +0000
+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes_bug_917942.test 2013-10-17 08:14:49 +0000
@@ -7,6 +7,9 @@
7DROP TABLE IF EXISTS t1;7DROP TABLE IF EXISTS t1;
8--enable_warnings8--enable_warnings
99
10SET @@GLOBAL.userstat=ON;
11SET @@GLOBAL.innodb_stats_transient_sample_pages=30000;
12
10#13#
11# Confirm that cursor->tree_height is initialized when calling btr_cur_pessimistic_update14# Confirm that cursor->tree_height is initialized when calling btr_cur_pessimistic_update
12# for transactions with innodb_fake_changes set15# for transactions with innodb_fake_changes set
@@ -16,30 +19,25 @@
16CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;19CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
1720
18INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));21INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
19let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
2022
21SET innodb_fake_changes=1;23--let $fake_changes_table=t1
24--source include/start_fake_changes.inc
2225
23--error 118026--error 1180
24INSERT INTO t1 VALUES(1, "foo", LPAD("a", 4600, "b")) ON DUPLICATE KEY UPDATE T = VALUES(T);27INSERT INTO t1 VALUES(1, "foo", LPAD("a", 4600, "b")) ON DUPLICATE KEY UPDATE T = VALUES(T);
25--error 118028--error 1180
26UPDATE t1 SET T = LPAD("A", 4600, "b");29UPDATE t1 SET T = LPAD("A", 4600, "b");
2730
28SET innodb_fake_changes=0;31--source include/stop_fake_changes.inc
29CHECK TABLE t1;32
30let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
31--disable_query_log
32eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
33--enable_query_log
34DROP TABLE t1;33DROP TABLE t1;
3534
36--echo Test for uncompressed35--echo Test for uncompressed
37CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;36CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
3837
39INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));38INSERT INTO t1 VALUES(NULL, LPAD("v", 2, "b"), LPAD("a", 100, "b"));
40let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
4139
42SET innodb_fake_changes=1;40--source include/start_fake_changes.inc
4341
44--disable_query_log42--disable_query_log
45let $x = 50;43let $x = 50;
@@ -53,12 +51,8 @@
53}51}
54--enable_query_log52--enable_query_log
5553
56SET innodb_fake_changes=0;54--source include/stop_fake_changes.inc
57CHECK TABLE t1;55
58let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
59--disable_query_log
60eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
61--enable_query_log
62DROP TABLE t1;56DROP TABLE t1;
6357
64#58#
@@ -69,19 +63,14 @@
69CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;63CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB KEY_BLOCK_SIZE=8;
7064
71INSERT INTO t1 VALUES(2, LPAD("v", 2, "b"), LPAD("a", 200, "b")); 65INSERT INTO t1 VALUES(2, LPAD("v", 2, "b"), LPAD("a", 200, "b"));
72let $t1_checksum_1= `CHECKSUM TABLE t1 EXTENDED`;
7366
74SET innodb_fake_changes=1;67--source include/start_fake_changes.inc
7568
76--error 118069--error 1180
77INSERT INTO t1 VALUES (3, "foo", LPAD("a", 4600, "b"));70INSERT INTO t1 VALUES (3, "foo", LPAD("a", 4600, "b"));
7871
79SET innodb_fake_changes=0;72--source include/stop_fake_changes.inc
80CHECK TABLE t1;73
81let $t1_checksum_2= `CHECKSUM TABLE t1 EXTENDED`;
82--disable_query_log
83eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
84--enable_query_log
85DROP TABLE t1;74DROP TABLE t1;
8675
87CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;76CREATE TABLE t1 (id INT PRIMARY KEY AUTO_INCREMENT, v VARCHAR(200), t TEXT) ENGINE=INNODB;
@@ -101,3 +90,6 @@
101eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;90eval SELECT "$t1_checksum_1" LIKE "$t1_checksum_2" AS should_be_1;
102--enable_query_log91--enable_query_log
103DROP TABLE t1;92DROP TABLE t1;
93
94SET @@GLOBAL.userstat=default;
95SET @@GLOBAL.innodb_stats_transient_sample_pages=default;
10496
=== modified file 'Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test'
--- Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test 2012-10-11 14:18:34 +0000
+++ Percona-Server/mysql-test/t/percona_innodb_fake_changes_locks.test 2013-10-17 08:14:49 +0000
@@ -16,6 +16,7 @@
16--connection conn116--connection conn1
17--echo # Verifying that X_LOCK not acquired17--echo # Verifying that X_LOCK not acquired
18SET autocommit=0;18SET autocommit=0;
19# Cannot use start_fake_changes.inc as conn2 issues real workload before reverting
19SET innodb_fake_changes=1;20SET innodb_fake_changes=1;
20BEGIN;21BEGIN;
21SELECT * FROM t1 FOR UPDATE;22SELECT * FROM t1 FOR UPDATE;
2223
=== modified file 'Percona-Server/sql/handler.cc'
--- Percona-Server/sql/handler.cc 2013-10-15 11:37:57 +0000
+++ Percona-Server/sql/handler.cc 2013-10-17 08:14:49 +0000
@@ -2121,7 +2121,7 @@
2121 and committing the transaction in other engines.2121 and committing the transaction in other engines.
2122 */2122 */
2123 if (!ha_info->is_trx_read_write()2123 if (!ha_info->is_trx_read_write()
2124 && !(ht->is_fake_change && ht->is_fake_change(ht, thd)))2124 && likely(!(ht->is_fake_change && ht->is_fake_change(ht, thd))))
2125 continue;2125 continue;
2126 if ((err= ht->prepare(ht, thd, all)))2126 if ((err= ht->prepare(ht, thd, all)))
2127 {2127 {
21282128
=== modified file 'Percona-Server/sql/sql_insert.cc'
--- Percona-Server/sql/sql_insert.cc 2013-10-15 11:37:57 +0000
+++ Percona-Server/sql/sql_insert.cc 2013-10-17 08:14:49 +0000
@@ -1906,7 +1906,7 @@
1906 2) do nothing on fake delete1906 2) do nothing on fake delete
1907 3) goto #11907 3) goto #1
1908 */1908 */
1909 if (table->file->is_fake_change_enabled(thd))1909 if (unlikely(table->file->is_fake_change_enabled(thd)))
1910 goto ok_or_after_trg_err;1910 goto ok_or_after_trg_err;
1911 /* Let us attempt do write_row() once more */1911 /* Let us attempt do write_row() once more */
1912 }1912 }
19131913
=== modified file 'Percona-Server/storage/innobase/btr/btr0cur.cc'
--- Percona-Server/storage/innobase/btr/btr0cur.cc 2013-10-15 11:37:57 +0000
+++ Percona-Server/storage/innobase/btr/btr0cur.cc 2013-10-17 08:14:49 +0000
@@ -1252,7 +1252,7 @@
1252 rec_t* rec;1252 rec_t* rec;
1253 roll_ptr_t roll_ptr;1253 roll_ptr_t roll_ptr;
12541254
1255 if (thr && thr_get_trx(thr)->fake_changes) {1255 if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1256 /* skip LOCK, UNDO */1256 /* skip LOCK, UNDO */
1257 return(DB_SUCCESS);1257 return(DB_SUCCESS);
1258 }1258 }
@@ -1514,7 +1514,7 @@
1514 goto fail_err;1514 goto fail_err;
1515 }1515 }
15161516
1517 if (thr && thr_get_trx(thr)->fake_changes) {1517 if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1518 /* skip CHANGE, LOG */1518 /* skip CHANGE, LOG */
1519 *big_rec = big_rec_vec;1519 *big_rec = big_rec_vec;
1520 return(err); /* == DB_SUCCESS */1520 return(err); /* == DB_SUCCESS */
@@ -1719,7 +1719,7 @@
1719 }1719 }
1720 }1720 }
17211721
1722 if (thr && thr_get_trx(thr)->fake_changes) {1722 if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1723 /* skip CHANGE, LOG */1723 /* skip CHANGE, LOG */
1724 if (n_reserved > 0) {1724 if (n_reserved > 0) {
1725 fil_space_release_free_extents(index->space,1725 fil_space_release_free_extents(index->space,
@@ -1785,7 +1785,7 @@
17851785
1786 ut_ad(thr || (flags & BTR_NO_LOCKING_FLAG));1786 ut_ad(thr || (flags & BTR_NO_LOCKING_FLAG));
17871787
1788 if (thr && thr_get_trx(thr)->fake_changes) {1788 if (UNIV_UNLIKELY(thr && thr_get_trx(thr)->fake_changes)) {
1789 /* skip LOCK, UNDO */1789 /* skip LOCK, UNDO */
1790 return(DB_SUCCESS);1790 return(DB_SUCCESS);
1791 }1791 }
@@ -2253,7 +2253,8 @@
2253 rec = btr_cur_get_rec(cursor);2253 rec = btr_cur_get_rec(cursor);
2254 index = cursor->index;2254 index = cursor->index;
2255 ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table));2255 ut_ad(!!page_rec_is_comp(rec) == dict_table_is_comp(index->table));
2256 ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));2256 ut_ad(thr_get_trx(thr)->fake_changes
2257 || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
2257 /* The insert buffer tree should never be updated in place. */2258 /* The insert buffer tree should never be updated in place. */
2258 ut_ad(!dict_index_is_ibuf(index));2259 ut_ad(!dict_index_is_ibuf(index));
2259 ut_ad(dict_index_is_online_ddl(index) == !!(flags & BTR_CREATE_FLAG)2260 ut_ad(dict_index_is_online_ddl(index) == !!(flags & BTR_CREATE_FLAG)
@@ -2398,7 +2399,7 @@
2398 goto func_exit;2399 goto func_exit;
2399 }2400 }
24002401
2401 if (thr && thr_get_trx(thr)->fake_changes) {2402 if (UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)) {
2402 /* skip CHANGE, LOG */2403 /* skip CHANGE, LOG */
2403 ut_ad(err == DB_SUCCESS);2404 ut_ad(err == DB_SUCCESS);
2404 return(DB_SUCCESS);2405 return(DB_SUCCESS);
@@ -2555,9 +2556,11 @@
2555 page_zip = buf_block_get_page_zip(block);2556 page_zip = buf_block_get_page_zip(block);
2556 index = cursor->index;2557 index = cursor->index;
25572558
2558 ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, dict_index_get_lock(index),2559 ut_ad(thr_get_trx(thr)->fake_changes
2559 MTR_MEMO_X_LOCK));2560 || mtr_memo_contains(mtr, dict_index_get_lock(index),
2560 ut_ad((thr && thr_get_trx(thr)->fake_changes) || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));2561 MTR_MEMO_X_LOCK));
2562 ut_ad(thr_get_trx(thr)->fake_changes
2563 || mtr_memo_contains(mtr, block, MTR_MEMO_PAGE_X_FIX));
2561#ifdef UNIV_ZIP_DEBUG2564#ifdef UNIV_ZIP_DEBUG
2562 ut_a(!page_zip || page_zip_validate(page_zip, page, index));2565 ut_a(!page_zip || page_zip_validate(page_zip, page, index));
2563#endif /* UNIV_ZIP_DEBUG */2566#endif /* UNIV_ZIP_DEBUG */
@@ -2614,7 +2617,7 @@
2614 if (UNIV_UNLIKELY(cursor->tree_height == ULINT_UNDEFINED)) {2617 if (UNIV_UNLIKELY(cursor->tree_height == ULINT_UNDEFINED)) {
2615 /* When the tree height is uninitialized due to fake2618 /* When the tree height is uninitialized due to fake
2616 changes, reserve some hardcoded number of extents. */2619 changes, reserve some hardcoded number of extents. */
2617 ut_a(thr && thr_get_trx(thr)->fake_changes);2620 ut_a(thr_get_trx(thr)->fake_changes);
2618 n_extents = 3;2621 n_extents = 3;
2619 }2622 }
2620 else {2623 else {
@@ -2653,7 +2656,7 @@
26532656
2654 trx = thr_get_trx(thr);2657 trx = thr_get_trx(thr);
26552658
2656 if (!(flags & BTR_KEEP_SYS_FLAG) && !trx->fake_changes) {2659 if (!(flags & BTR_KEEP_SYS_FLAG) && UNIV_LIKELY(!trx->fake_changes)) {
2657 row_upd_index_entry_sys_field(new_entry, index, DATA_ROLL_PTR,2660 row_upd_index_entry_sys_field(new_entry, index, DATA_ROLL_PTR,
2658 roll_ptr);2661 roll_ptr);
2659 row_upd_index_entry_sys_field(new_entry, index, DATA_TRX_ID,2662 row_upd_index_entry_sys_field(new_entry, index, DATA_TRX_ID,
@@ -2725,7 +2728,7 @@
2725 ut_ad(flags & BTR_KEEP_POS_FLAG);2728 ut_ad(flags & BTR_KEEP_POS_FLAG);
2726 }2729 }
27272730
2728 if (trx->fake_changes) {2731 if (UNIV_UNLIKELY(trx->fake_changes)) {
2729 /* skip CHANGE, LOG */2732 /* skip CHANGE, LOG */
2730 err = DB_SUCCESS;2733 err = DB_SUCCESS;
2731 goto return_after_reservations;2734 goto return_after_reservations;
@@ -3057,9 +3060,9 @@
3057 ut_ad(dict_index_is_clust(index));3060 ut_ad(dict_index_is_clust(index));
3058 ut_ad(!rec_get_deleted_flag(rec, rec_offs_comp(offsets)));3061 ut_ad(!rec_get_deleted_flag(rec, rec_offs_comp(offsets)));
30593062
3060 if (thr && thr_get_trx(thr)->fake_changes) {3063 if (UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)) {
3061 /* skip LOCK, UNDO, CHANGE, LOG */3064 /* skip LOCK, UNDO, CHANGE, LOG */
3062 return(DB_SUCCESS);3065 return(DB_SUCCESS);
3063 }3066 }
30643067
3065 err = lock_clust_rec_modify_check_and_lock(BTR_NO_LOCKING_FLAG, block,3068 err = lock_clust_rec_modify_check_and_lock(BTR_NO_LOCKING_FLAG, block,
@@ -3200,7 +3203,7 @@
3200 rec_t* rec;3203 rec_t* rec;
3201 dberr_t err;3204 dberr_t err;
32023205
3203 if (thr && thr_get_trx(thr)->fake_changes) {3206 if (UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)) {
3204 /* skip LOCK, CHANGE, LOG */3207 /* skip LOCK, CHANGE, LOG */
3205 return(DB_SUCCESS);3208 return(DB_SUCCESS);
3206 }3209 }
32073210
=== modified file 'Percona-Server/storage/innobase/handler/ha_innodb.cc'
--- Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-10-15 11:37:57 +0000
+++ Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-10-17 08:14:49 +0000
@@ -1548,7 +1548,7 @@
1548ha_innobase::is_fake_change_enabled(THD* thd)1548ha_innobase::is_fake_change_enabled(THD* thd)
1549{1549{
1550 trx_t* trx = thd_to_trx(thd);1550 trx_t* trx = thd_to_trx(thd);
1551 return(trx && trx->fake_changes);1551 return(trx && UNIV_UNLIKELY(trx->fake_changes));
1552}1552}
15531553
1554/********************************************************************//**1554/********************************************************************//**
@@ -3771,7 +3771,7 @@
3771 whom the transaction is being committed */3771 whom the transaction is being committed */
3772{3772{
3773 trx_t* trx = check_trx_exists(thd);3773 trx_t* trx = check_trx_exists(thd);
3774 return trx->fake_changes;3774 return UNIV_UNLIKELY(trx->fake_changes);
3775}3775}
37763776
3777/*****************************************************************//**3777/*****************************************************************//**
@@ -3879,9 +3879,11 @@
3879 /* No-op in XtraDB */3879 /* No-op in XtraDB */
3880 trx_search_latch_release_if_reserved(trx);3880 trx_search_latch_release_if_reserved(trx);
38813881
3882 if (trx->fake_changes &&3882 if (UNIV_UNLIKELY(trx->fake_changes &&
3883 (commit_trx ||3883 (commit_trx ||
3884 (!thd_test_options(thd, OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN)))) {3884 (!thd_test_options(thd,
3885 OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))))) {
3886
3885 /* rollback implicitly */3887 /* rollback implicitly */
3886 innobase_rollback(hton, thd, commit_trx);3888 innobase_rollback(hton, thd, commit_trx);
3887 /* because debug assertion code complains, if something left */3889 /* because debug assertion code complains, if something left */
@@ -10059,7 +10061,7 @@
1005910061
10060 trx = innobase_trx_allocate(thd);10062 trx = innobase_trx_allocate(thd);
1006110063
10062 if (trx->fake_changes) {10064 if (UNIV_UNLIKELY(trx->fake_changes)) {
10063 innobase_commit_low(trx);10065 innobase_commit_low(trx);
10064 trx_free_for_mysql(trx);10066 trx_free_for_mysql(trx);
10065 DBUG_RETURN(HA_ERR_WRONG_COMMAND);10067 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
@@ -10431,7 +10433,7 @@
10431 DBUG_RETURN(HA_ERR_CRASHED);10433 DBUG_RETURN(HA_ERR_CRASHED);
10432 }10434 }
1043310435
10434 if (prebuilt->trx->fake_changes) {10436 if (UNIV_UNLIKELY(prebuilt->trx->fake_changes)) {
10435 DBUG_RETURN(HA_ERR_WRONG_COMMAND);10437 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
10436 }10438 }
1043710439
@@ -10519,7 +10521,7 @@
1051910521
10520 trx = innobase_trx_allocate(thd);10522 trx = innobase_trx_allocate(thd);
1052110523
10522 if (trx->fake_changes) {10524 if (UNIV_UNLIKELY(trx->fake_changes)) {
10523 innobase_commit_low(trx);10525 innobase_commit_low(trx);
10524 trx_free_for_mysql(trx);10526 trx_free_for_mysql(trx);
10525 DBUG_RETURN(HA_ERR_WRONG_COMMAND);10527 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
@@ -10649,7 +10651,7 @@
10649#endif10651#endif
10650 trx = innobase_trx_allocate(thd);10652 trx = innobase_trx_allocate(thd);
1065110653
10652 if (trx->fake_changes) {10654 if (UNIV_UNLIKELY(trx->fake_changes)) {
10653 my_free(namebuf);10655 my_free(namebuf);
10654 innobase_commit_low(trx);10656 innobase_commit_low(trx);
10655 trx_free_for_mysql(trx);10657 trx_free_for_mysql(trx);
@@ -10829,7 +10831,7 @@
10829 trx_search_latch_release_if_reserved(parent_trx);10831 trx_search_latch_release_if_reserved(parent_trx);
1083010832
10831 trx = innobase_trx_allocate(thd);10833 trx = innobase_trx_allocate(thd);
10832 if (trx->fake_changes) {10834 if (UNIV_UNLIKELY(trx->fake_changes)) {
10833 innobase_commit_low(trx);10835 innobase_commit_low(trx);
10834 trx_free_for_mysql(trx);10836 trx_free_for_mysql(trx);
10835 DBUG_RETURN(HA_ERR_WRONG_COMMAND);10837 DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1083610838
=== modified file 'Percona-Server/storage/innobase/lock/lock0lock.cc'
--- Percona-Server/storage/innobase/lock/lock0lock.cc 2013-08-14 03:57:21 +0000
+++ Percona-Server/storage/innobase/lock/lock0lock.cc 2013-10-17 08:14:49 +0000
@@ -4415,7 +4415,7 @@
44154415
4416 trx = thr_get_trx(thr);4416 trx = thr_get_trx(thr);
44174417
4418 if (trx->fake_changes && mode == LOCK_IX) {4418 if (UNIV_UNLIKELY(trx->fake_changes && mode == LOCK_IX)) {
4419 mode = LOCK_IS;4419 mode = LOCK_IS;
4420 }4420 }
44214421
@@ -5943,7 +5943,7 @@
59435943
5944 trx = thr_get_trx(thr);5944 trx = thr_get_trx(thr);
59455945
5946 if (trx->fake_changes) {5946 if (UNIV_UNLIKELY(trx->fake_changes)) {
5947 return(DB_SUCCESS);5947 return(DB_SUCCESS);
5948 }5948 }
59495949
@@ -6159,7 +6159,7 @@
6159 return(DB_SUCCESS);6159 return(DB_SUCCESS);
6160 }6160 }
61616161
6162 if (thr && thr_get_trx(thr)->fake_changes) {6162 if (UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)) {
6163 return(DB_SUCCESS);6163 return(DB_SUCCESS);
6164 }6164 }
61656165
@@ -6225,7 +6225,7 @@
6225 return(DB_SUCCESS);6225 return(DB_SUCCESS);
6226 }6226 }
62276227
6228 if (thr && thr_get_trx(thr)->fake_changes) {6228 if (UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)) {
6229 return(DB_SUCCESS);6229 return(DB_SUCCESS);
6230 }6230 }
62316231
62326232
=== modified file 'Percona-Server/storage/innobase/que/que0que.cc'
--- Percona-Server/storage/innobase/que/que0que.cc 2013-08-06 15:16:34 +0000
+++ Percona-Server/storage/innobase/que/que0que.cc 2013-10-17 08:14:49 +0000
@@ -1273,7 +1273,7 @@
12731273
1274 ut_a(trx->error_state == DB_SUCCESS);1274 ut_a(trx->error_state == DB_SUCCESS);
12751275
1276 if (trx->fake_changes) {1276 if (UNIV_UNLIKELY(trx->fake_changes)) {
1277 /* fake_changes should not access to system tables */1277 /* fake_changes should not access to system tables */
1278 fprintf(stderr, "InnoDB: ERROR: innodb_fake_changes tried to access to system tables.\n");1278 fprintf(stderr, "InnoDB: ERROR: innodb_fake_changes tried to access to system tables.\n");
1279 return(DB_ERROR);1279 return(DB_ERROR);
12801280
=== modified file 'Percona-Server/storage/innobase/row/row0ins.cc'
--- Percona-Server/storage/innobase/row/row0ins.cc 2013-08-14 03:57:21 +0000
+++ Percona-Server/storage/innobase/row/row0ins.cc 2013-10-17 08:14:49 +0000
@@ -2757,8 +2757,9 @@
27572757
2758 btr_cur_search_to_nth_level(2758 btr_cur_search_to_nth_level(
2759 index, 0, entry, PAGE_CUR_LE,2759 index, 0, entry, PAGE_CUR_LE,
2760 thr_get_trx(thr)->fake_changes ? BTR_SEARCH_LEAF :2760 UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)
2761 (btr_latch_mode)2761 ? BTR_SEARCH_LEAF
2762 : (btr_latch_mode)
2762 (search_mode & ~(BTR_INSERT | BTR_IGNORE_SEC_UNIQUE)),2763 (search_mode & ~(BTR_INSERT | BTR_IGNORE_SEC_UNIQUE)),
2763 &cursor, 0, __FILE__, __LINE__, &mtr);2764 &cursor, 0, __FILE__, __LINE__, &mtr);
2764 }2765 }
27652766
=== modified file 'Percona-Server/storage/innobase/row/row0upd.cc'
--- Percona-Server/storage/innobase/row/row0upd.cc 2013-08-06 15:16:34 +0000
+++ Percona-Server/storage/innobase/row/row0upd.cc 2013-10-17 08:14:49 +0000
@@ -1751,7 +1751,7 @@
1751 btr_pcur_get_btr_cur(&pcur)->thr = thr;1751 btr_pcur_get_btr_cur(&pcur)->thr = thr;
17521752
1753 search_result = row_search_index_entry(index, entry,1753 search_result = row_search_index_entry(index, entry,
1754 trx->fake_changes1754 UNIV_UNLIKELY(trx->fake_changes)
1755 ? BTR_SEARCH_LEAF1755 ? BTR_SEARCH_LEAF
1756 : (btr_latch_mode)mode,1756 : (btr_latch_mode)mode,
1757 &pcur, &mtr);1757 &pcur, &mtr);
@@ -2015,7 +2015,7 @@
2015 the previous invocation of this function. Mark the2015 the previous invocation of this function. Mark the
2016 off-page columns in the entry inherited. */2016 off-page columns in the entry inherited. */
20172017
2018 if (!(trx->fake_changes)) {2018 if (UNIV_LIKELY(!trx->fake_changes)) {
2019 change_ownership = row_upd_clust_rec_by_insert_inherit(2019 change_ownership = row_upd_clust_rec_by_insert_inherit(
2020 NULL, NULL, entry, node->update);2020 NULL, NULL, entry, node->update);
2021 ut_a(change_ownership);2021 ut_a(change_ownership);
@@ -2049,7 +2049,8 @@
2049 delete-marked old record, mark them disowned by the2049 delete-marked old record, mark them disowned by the
2050 old record and owned by the new entry. */2050 old record and owned by the new entry. */
20512051
2052 if (rec_offs_any_extern(offsets) && !(trx->fake_changes)) {2052 if (rec_offs_any_extern(offsets)
2053 && UNIV_LIKELY(!(trx->fake_changes))) {
2053 change_ownership = row_upd_clust_rec_by_insert_inherit(2054 change_ownership = row_upd_clust_rec_by_insert_inherit(
2054 rec, offsets, entry, node->update);2055 rec, offsets, entry, node->update);
20552056
@@ -2204,9 +2205,10 @@
2204 the same transaction do not modify the record in the meantime.2205 the same transaction do not modify the record in the meantime.
2205 Therefore we can assert that the restoration of the cursor succeeds. */2206 Therefore we can assert that the restoration of the cursor succeeds. */
22062207
2207 ut_a(btr_pcur_restore_position(thr_get_trx(thr)->fake_changes2208 ut_a(btr_pcur_restore_position(
2208 ? BTR_SEARCH_TREE : BTR_MODIFY_TREE,2209 UNIV_UNLIKELY(thr_get_trx(thr)->fake_changes)
2209 pcur, mtr));2210 ? BTR_SEARCH_TREE : BTR_MODIFY_TREE,
2211 pcur, mtr));
22102212
2211 ut_ad(!rec_get_deleted_flag(btr_pcur_get_rec(pcur),2213 ut_ad(!rec_get_deleted_flag(btr_pcur_get_rec(pcur),
2212 dict_table_is_comp(index->table)));2214 dict_table_is_comp(index->table)));
@@ -2220,7 +2222,7 @@
2220 &offsets, offsets_heap, heap, &big_rec,2222 &offsets, offsets_heap, heap, &big_rec,
2221 node->update, node->cmpl_info,2223 node->update, node->cmpl_info,
2222 thr, thr_get_trx(thr)->id, mtr);2224 thr, thr_get_trx(thr)->id, mtr);
2223 if (big_rec && !(thr_get_trx(thr)->fake_changes)) {2225 if (big_rec && UNIV_LIKELY(!(thr_get_trx(thr)->fake_changes))) {
2224 ut_a(err == DB_SUCCESS);2226 ut_a(err == DB_SUCCESS);
2225 /* Write out the externally stored2227 /* Write out the externally stored
2226 columns while still x-latching2228 columns while still x-latching

Subscribers

People subscribed via source and target branches