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

Proposed by Laurynas Biveinis
Status: Merged
Approved by: Alexey Kopytov
Approved revision: no longer in the source branch.
Merged at revision: 573
Proposed branch: lp:~laurynas-biveinis/percona-server/bug1217002-5.5
Merge into: lp:percona-server/5.5
Diff against target: 547 lines (+381/-7)
14 files modified
Percona-Server/mysql-test/r/percona_server_variables_debug.result (+2/-0)
Percona-Server/mysql-test/suite/innodb/r/percona_changed_page_bmp_debug.result (+14/-0)
Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug-master.opt (+1/-1)
Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug.test (+46/-0)
Percona-Server/mysql-test/suite/sys_vars/r/innodb_log_checkpoint_now_basic.result (+79/-0)
Percona-Server/mysql-test/suite/sys_vars/r/innodb_track_redo_log_now_basic.result (+28/-0)
Percona-Server/mysql-test/suite/sys_vars/t/innodb_log_checkpoint_now_basic.test (+68/-0)
Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_changed_pages_basic.test (+1/-0)
Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_redo_log_now_basic.test (+27/-0)
Percona-Server/storage/innobase/fil/fil0fil.c (+5/-0)
Percona-Server/storage/innobase/handler/ha_innodb.cc (+85/-3)
Percona-Server/storage/innobase/log/log0recv.c (+2/-1)
Percona-Server/storage/innobase/row/row0merge.c (+17/-2)
Percona-Server/storage/innobase/srv/srv0srv.c (+6/-0)
To merge this branch: bzr merge lp:~laurynas-biveinis/percona-server/bug1217002-5.5
Reviewer Review Type Date Requested Status
Alexey Kopytov (community) Approve
Review via email: mp+184617@code.launchpad.net

Description of the change

a QA blocker

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

Merge bug 1217002 and bug 1213885 fixes from 5.1.

Mostly an automerge. Extra changes on the top in the sys_vars
testsuite:
- backport the test for innodb_log_checkpoint_now with 5.6 file-ids;
- add a test for innodb_track_redo_log_now;
- adjust the test for innodb_track_changed_pages to be skipped on
  debug builds.

To post a comment you must log in.
Revision history for this message
Alexey Kopytov (akopytov) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Percona-Server/mysql-test/r/percona_server_variables_debug.result'
2--- Percona-Server/mysql-test/r/percona_server_variables_debug.result 2013-09-09 06:59:26 +0000
3+++ Percona-Server/mysql-test/r/percona_server_variables_debug.result 2013-09-09 16:36:44 +0000
4@@ -134,6 +134,7 @@
5 INNODB_LOCK_WAIT_TIMEOUT
6 INNODB_LOG_BLOCK_SIZE
7 INNODB_LOG_BUFFER_SIZE
8+INNODB_LOG_CHECKPOINT_NOW
9 INNODB_LOG_FILES_IN_GROUP
10 INNODB_LOG_FILE_SIZE
11 INNODB_LOG_GROUP_HOME_DIR
12@@ -176,6 +177,7 @@
13 INNODB_THREAD_CONCURRENCY_TIMER_BASED
14 INNODB_THREAD_SLEEP_DELAY
15 INNODB_TRACK_CHANGED_PAGES
16+INNODB_TRACK_REDO_LOG_NOW
17 INNODB_TRX_PURGE_VIEW_UPDATE_ONLY_DEBUG
18 INNODB_TRX_RSEG_N_SLOTS_DEBUG
19 INNODB_USE_ATOMIC_WRITES
20
21=== modified file 'Percona-Server/mysql-test/suite/innodb/r/percona_changed_page_bmp_debug.result'
22--- Percona-Server/mysql-test/suite/innodb/r/percona_changed_page_bmp_debug.result 2013-02-07 07:32:03 +0000
23+++ Percona-Server/mysql-test/suite/innodb/r/percona_changed_page_bmp_debug.result 2013-09-09 16:36:44 +0000
24@@ -22,3 +22,17 @@
25 INSERT INTO t1 SELECT x FROM t1;
26 3rd restart
27 DROP TABLE t1;
28+CREATE TABLE t1 (x INT NOT NULL UNIQUE KEY) ENGINE=InnoDB;
29+INSERT INTO t1 VALUES(5);
30+SET @@GLOBAL.innodb_track_changed_pages=FALSE;
31+SET @@GLOBAL.innodb_log_checkpoint_now=TRUE;
32+RENAME TABLE t1 TO t2;
33+SET DEBUG_SYNC="row_merge_rename_tables_between_renames SIGNAL alter_table_ready WAIT_FOR finish_alter_table";
34+ALTER TABLE t2 ADD PRIMARY KEY(x);
35+SET DEBUG_SYNC="now WAIT_FOR alter_table_ready";
36+SET @@GLOBAL.innodb_log_checkpoint_now=TRUE;
37+SET @@GLOBAL.innodb_track_changed_pages=TRUE;
38+SET @@GLOBAL.innodb_track_redo_log_now=TRUE;
39+SET DEBUG_SYNC="now SIGNAL finish_alter_table";
40+SET DEBUG_SYNC="RESET";
41+DROP TABLE t2;
42
43=== modified file 'Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug-master.opt'
44--- Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug-master.opt 2013-02-07 07:32:03 +0000
45+++ Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug-master.opt 2013-09-09 16:36:44 +0000
46@@ -1,1 +1,1 @@
47---innodb_track_changed_pages=TRUE --innodb_log_file_size=5M
48+--innodb_track_changed_pages=TRUE --innodb_log_file_size=5M --innodb-file-per-table
49
50=== modified file 'Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug.test'
51--- Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug.test 2013-02-07 07:32:03 +0000
52+++ Percona-Server/mysql-test/suite/innodb/t/percona_changed_page_bmp_debug.test 2013-09-09 16:36:44 +0000
53@@ -3,6 +3,7 @@
54 #
55 --source include/have_debug.inc
56 --source include/have_innodb.inc
57+--source include/count_sessions.inc
58
59 --disable_warnings
60 DROP TABLE IF EXISTS t1;
61@@ -55,3 +56,48 @@
62 --source include/restart_mysqld.inc
63
64 DROP TABLE t1;
65+
66+#
67+# Test for bug 1217002 (RENAME/DROP crashes with innodb_track_changed_pages)
68+#
69+CREATE TABLE t1 (x INT NOT NULL UNIQUE KEY) ENGINE=InnoDB;
70+INSERT INTO t1 VALUES(5);
71+
72+# 1. Pause the log tracking thread
73+SET @@GLOBAL.innodb_track_changed_pages=FALSE;
74+SET @@GLOBAL.innodb_log_checkpoint_now=TRUE;
75+
76+# 2. Rename a table to log a MLOG_FILE_RENAME operation
77+RENAME TABLE t1 TO t2;
78+
79+# 3. Start an ALTER TABLE and stop it after the table -> temp table rename
80+--connect (con2,localhost,root,,)
81+--connection default
82+
83+SET DEBUG_SYNC="row_merge_rename_tables_between_renames SIGNAL alter_table_ready WAIT_FOR finish_alter_table";
84+
85+send ALTER TABLE t2 ADD PRIMARY KEY(x);
86+
87+# 4. Force a checkpoint and resume the log tracker thread, so that it misapplies the t1 > t2 rename.
88+--connection con2
89+
90+SET DEBUG_SYNC="now WAIT_FOR alter_table_ready";
91+
92+SET @@GLOBAL.innodb_log_checkpoint_now=TRUE;
93+SET @@GLOBAL.innodb_track_changed_pages=TRUE;
94+
95+# 5. Force the log tracker to catch up.
96+SET @@GLOBAL.innodb_track_redo_log_now=TRUE;
97+
98+# 6. Finish the ALTER TABLE, which then crashes if the bug is present.
99+SET DEBUG_SYNC="now SIGNAL finish_alter_table";
100+
101+--connection default
102+reap;
103+SET DEBUG_SYNC="RESET";
104+
105+disconnect con2;
106+
107+DROP TABLE t2;
108+
109+--source include/wait_until_count_sessions.inc
110
111=== added file 'Percona-Server/mysql-test/suite/sys_vars/r/innodb_log_checkpoint_now_basic.result'
112--- Percona-Server/mysql-test/suite/sys_vars/r/innodb_log_checkpoint_now_basic.result 1970-01-01 00:00:00 +0000
113+++ Percona-Server/mysql-test/suite/sys_vars/r/innodb_log_checkpoint_now_basic.result 2013-09-09 16:36:44 +0000
114@@ -0,0 +1,79 @@
115+SET @start_global_value = @@global.innodb_log_checkpoint_now;
116+SELECT @start_global_value;
117+@start_global_value
118+0
119+select @@global.innodb_log_checkpoint_now in (0, 1);
120+@@global.innodb_log_checkpoint_now in (0, 1)
121+1
122+select @@global.innodb_log_checkpoint_now;
123+@@global.innodb_log_checkpoint_now
124+0
125+select @@session.innodb_log_checkpoint_now;
126+ERROR HY000: Variable 'innodb_log_checkpoint_now' is a GLOBAL variable
127+show global variables like 'innodb_log_checkpoint_now';
128+Variable_name Value
129+innodb_log_checkpoint_now OFF
130+show session variables like 'innodb_log_checkpoint_now';
131+Variable_name Value
132+innodb_log_checkpoint_now OFF
133+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
134+VARIABLE_NAME VARIABLE_VALUE
135+INNODB_LOG_CHECKPOINT_NOW OFF
136+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
137+VARIABLE_NAME VARIABLE_VALUE
138+INNODB_LOG_CHECKPOINT_NOW OFF
139+set global innodb_log_checkpoint_now=1;
140+select @@global.innodb_log_checkpoint_now;
141+@@global.innodb_log_checkpoint_now
142+0
143+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
144+VARIABLE_NAME VARIABLE_VALUE
145+INNODB_LOG_CHECKPOINT_NOW OFF
146+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
147+VARIABLE_NAME VARIABLE_VALUE
148+INNODB_LOG_CHECKPOINT_NOW OFF
149+set @@global.innodb_log_checkpoint_now=0;
150+select @@global.innodb_log_checkpoint_now;
151+@@global.innodb_log_checkpoint_now
152+0
153+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
154+VARIABLE_NAME VARIABLE_VALUE
155+INNODB_LOG_CHECKPOINT_NOW OFF
156+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
157+VARIABLE_NAME VARIABLE_VALUE
158+INNODB_LOG_CHECKPOINT_NOW OFF
159+set global innodb_log_checkpoint_now=ON;
160+select @@global.innodb_log_checkpoint_now;
161+@@global.innodb_log_checkpoint_now
162+0
163+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
164+VARIABLE_NAME VARIABLE_VALUE
165+INNODB_LOG_CHECKPOINT_NOW OFF
166+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
167+VARIABLE_NAME VARIABLE_VALUE
168+INNODB_LOG_CHECKPOINT_NOW OFF
169+set global innodb_log_checkpoint_now=OFF;
170+select @@global.innodb_log_checkpoint_now;
171+@@global.innodb_log_checkpoint_now
172+0
173+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
174+VARIABLE_NAME VARIABLE_VALUE
175+INNODB_LOG_CHECKPOINT_NOW OFF
176+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
177+VARIABLE_NAME VARIABLE_VALUE
178+INNODB_LOG_CHECKPOINT_NOW OFF
179+set session innodb_log_checkpoint_now='some';
180+ERROR HY000: Variable 'innodb_log_checkpoint_now' is a GLOBAL variable and should be set with SET GLOBAL
181+set @@session.innodb_log_checkpoint_now='some';
182+ERROR HY000: Variable 'innodb_log_checkpoint_now' is a GLOBAL variable and should be set with SET GLOBAL
183+set global innodb_log_checkpoint_now=1.1;
184+ERROR 42000: Incorrect argument type to variable 'innodb_log_checkpoint_now'
185+set global innodb_log_checkpoint_now='foo';
186+ERROR 42000: Variable 'innodb_log_checkpoint_now' can't be set to the value of 'foo'
187+set global innodb_log_checkpoint_now=-2;
188+set global innodb_log_checkpoint_now=1e1;
189+ERROR 42000: Incorrect argument type to variable 'innodb_log_checkpoint_now'
190+SET @@global.innodb_log_checkpoint_now = @start_global_value;
191+SELECT @@global.innodb_log_checkpoint_now;
192+@@global.innodb_log_checkpoint_now
193+0
194
195=== added file 'Percona-Server/mysql-test/suite/sys_vars/r/innodb_track_redo_log_now_basic.result'
196--- Percona-Server/mysql-test/suite/sys_vars/r/innodb_track_redo_log_now_basic.result 1970-01-01 00:00:00 +0000
197+++ Percona-Server/mysql-test/suite/sys_vars/r/innodb_track_redo_log_now_basic.result 2013-09-09 16:36:44 +0000
198@@ -0,0 +1,28 @@
199+SELECT @@GLOBAL.innodb_track_redo_log_now;
200+@@GLOBAL.innodb_track_redo_log_now
201+0
202+SET @@GLOBAL.innodb_track_redo_log_now=1;
203+SELECT @@GLOBAL.innodb_track_redo_log_now;
204+@@GLOBAL.innodb_track_redo_log_now
205+0
206+SET @@GLOBAL.innodb_track_redo_log_now=0;
207+SELECT @@GLOBAL.innodb_track_redo_log_now;
208+@@GLOBAL.innodb_track_redo_log_now
209+0
210+SET @@GLOBAL.innodb_track_redo_log_now=ON;
211+SELECT @@GLOBAL.innodb_track_redo_log_now;
212+@@GLOBAL.innodb_track_redo_log_now
213+0
214+SET @@GLOBAL.innodb_track_redo_log_now=OFF;
215+SELECT @@GLOBAL.innodb_track_redo_log_now;
216+@@GLOBAL.innodb_track_redo_log_now
217+0
218+SET @@SESSION.innodb_track_redo_log_now=ON;
219+ERROR HY000: Variable 'innodb_track_redo_log_now' is a GLOBAL variable and should be set with SET GLOBAL
220+SET @@GLOBAL.innodb_track_redo_log_now=1.1;
221+ERROR 42000: Incorrect argument type to variable 'innodb_track_redo_log_now'
222+SET @@GLOBAL.innodb_track_redo_log_now='foo';
223+ERROR 42000: Variable 'innodb_track_redo_log_now' can't be set to the value of 'foo'
224+SET @@GLOBAL.innodb_track_redo_log_now=1e1;
225+ERROR 42000: Incorrect argument type to variable 'innodb_track_redo_log_now'
226+SET @@GLOBAL.innodb_track_redo_log_now=default;
227
228=== added file 'Percona-Server/mysql-test/suite/sys_vars/t/innodb_log_checkpoint_now_basic.test'
229--- Percona-Server/mysql-test/suite/sys_vars/t/innodb_log_checkpoint_now_basic.test 1970-01-01 00:00:00 +0000
230+++ Percona-Server/mysql-test/suite/sys_vars/t/innodb_log_checkpoint_now_basic.test 2013-09-09 16:36:44 +0000
231@@ -0,0 +1,68 @@
232+--source include/have_innodb.inc
233+--source include/have_debug.inc
234+
235+SET @start_global_value = @@global.innodb_log_checkpoint_now;
236+SELECT @start_global_value;
237+
238+#
239+# exists as global only
240+#
241+select @@global.innodb_log_checkpoint_now in (0, 1);
242+select @@global.innodb_log_checkpoint_now;
243+--error ER_INCORRECT_GLOBAL_LOCAL_VAR
244+select @@session.innodb_log_checkpoint_now;
245+show global variables like 'innodb_log_checkpoint_now';
246+show session variables like 'innodb_log_checkpoint_now';
247+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
248+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
249+
250+#
251+# show that it's writable
252+#
253+set global innodb_log_checkpoint_now=1;
254+# Should always be OFF
255+select @@global.innodb_log_checkpoint_now;
256+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
257+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
258+
259+set @@global.innodb_log_checkpoint_now=0;
260+# Should always be OFF
261+select @@global.innodb_log_checkpoint_now;
262+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
263+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
264+
265+set global innodb_log_checkpoint_now=ON;
266+# Should always be OFF
267+select @@global.innodb_log_checkpoint_now;
268+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
269+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
270+
271+set global innodb_log_checkpoint_now=OFF;
272+# Should always be OFF
273+select @@global.innodb_log_checkpoint_now;
274+select * from information_schema.global_variables where variable_name='innodb_log_checkpoint_now';
275+select * from information_schema.session_variables where variable_name='innodb_log_checkpoint_now';
276+
277+--error ER_GLOBAL_VARIABLE
278+set session innodb_log_checkpoint_now='some';
279+
280+--error ER_GLOBAL_VARIABLE
281+set @@session.innodb_log_checkpoint_now='some';
282+
283+#
284+# incorrect types
285+#
286+--error ER_WRONG_TYPE_FOR_VAR
287+set global innodb_log_checkpoint_now=1.1;
288+--error ER_WRONG_VALUE_FOR_VAR
289+set global innodb_log_checkpoint_now='foo';
290+set global innodb_log_checkpoint_now=-2;
291+--error ER_WRONG_TYPE_FOR_VAR
292+set global innodb_log_checkpoint_now=1e1;
293+
294+#
295+# Cleanup
296+#
297+
298+SET @@global.innodb_log_checkpoint_now = @start_global_value;
299+SELECT @@global.innodb_log_checkpoint_now;
300
301=== modified file 'Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_changed_pages_basic.test'
302--- Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_changed_pages_basic.test 2012-08-22 07:21:28 +0000
303+++ Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_changed_pages_basic.test 2013-09-09 16:36:44 +0000
304@@ -1,6 +1,7 @@
305 # Tests for innodb_track_changed_pages variable
306
307 --source include/have_innodb.inc
308+--source include/have_nodebug.inc
309
310 SELECT COUNT(@@GLOBAL.innodb_track_changed_pages);
311
312
313=== added file 'Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_redo_log_now_basic.test'
314--- Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_redo_log_now_basic.test 1970-01-01 00:00:00 +0000
315+++ Percona-Server/mysql-test/suite/sys_vars/t/innodb_track_redo_log_now_basic.test 2013-09-09 16:36:44 +0000
316@@ -0,0 +1,27 @@
317+# A global BOOL variable
318+
319+--source include/have_innodb.inc
320+--source include/have_debug.inc
321+
322+SELECT @@GLOBAL.innodb_track_redo_log_now;
323+
324+SET @@GLOBAL.innodb_track_redo_log_now=1;
325+SELECT @@GLOBAL.innodb_track_redo_log_now;
326+SET @@GLOBAL.innodb_track_redo_log_now=0;
327+SELECT @@GLOBAL.innodb_track_redo_log_now;
328+SET @@GLOBAL.innodb_track_redo_log_now=ON;
329+SELECT @@GLOBAL.innodb_track_redo_log_now;
330+SET @@GLOBAL.innodb_track_redo_log_now=OFF;
331+SELECT @@GLOBAL.innodb_track_redo_log_now;
332+
333+--error ER_GLOBAL_VARIABLE
334+SET @@SESSION.innodb_track_redo_log_now=ON;
335+
336+--error ER_WRONG_TYPE_FOR_VAR
337+SET @@GLOBAL.innodb_track_redo_log_now=1.1;
338+--error ER_WRONG_VALUE_FOR_VAR
339+SET @@GLOBAL.innodb_track_redo_log_now='foo';
340+--error ER_WRONG_TYPE_FOR_VAR
341+SET @@GLOBAL.innodb_track_redo_log_now=1e1;
342+
343+SET @@GLOBAL.innodb_track_redo_log_now=default;
344
345=== modified file 'Percona-Server/storage/innobase/fil/fil0fil.c'
346--- Percona-Server/storage/innobase/fil/fil0fil.c 2013-08-14 03:52:04 +0000
347+++ Percona-Server/storage/innobase/fil/fil0fil.c 2013-09-09 16:36:44 +0000
348@@ -2266,6 +2266,11 @@
349 if (!space_id) {
350
351 return(ptr);
352+ } else {
353+ /* Only replay file ops during recovery. This is a
354+ release-build assert to minimize any data loss risk by a
355+ misapplied file operation. */
356+ ut_a(recv_recovery_is_on());
357 }
358
359 /* Let us try to perform the file operation, if sensible. Note that
360
361=== modified file 'Percona-Server/storage/innobase/handler/ha_innodb.cc'
362--- Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-09-06 13:24:59 +0000
363+++ Percona-Server/storage/innobase/handler/ha_innodb.cc 2013-09-09 16:36:44 +0000
364@@ -12557,6 +12557,63 @@
365 return(thd_get_thread_id((const THD*) thd));
366 }
367
368+#ifdef UNIV_DEBUG
369+static my_bool innodb_log_checkpoint_now = TRUE;
370+
371+/****************************************************************//**
372+Force innodb to checkpoint. */
373+static
374+void
375+checkpoint_now_set(
376+/*===============*/
377+ THD* thd /*!< in: thread handle */
378+ __attribute__((unused)),
379+ struct st_mysql_sys_var* var /*!< in: pointer to system
380+ variable */
381+ __attribute__((unused)),
382+ void* var_ptr /*!< out: where the formal
383+ string goes */
384+ __attribute__((unused)),
385+ const void* save) /*!< in: immediate result from
386+ check function */
387+{
388+ if (*(my_bool*) save) {
389+ while (log_sys->last_checkpoint_lsn < log_sys->lsn) {
390+ log_make_checkpoint_at(IB_ULONGLONG_MAX, TRUE);
391+ fil_flush_file_spaces(FIL_LOG);
392+ }
393+ fil_write_flushed_lsn_to_data_files(log_sys->lsn, 0);
394+ fil_flush_file_spaces(FIL_TABLESPACE);
395+ }
396+}
397+
398+static my_bool innodb_track_redo_log_now = TRUE;
399+
400+/****************************************************************//**
401+Force log tracker to track the log synchronously. */
402+static
403+void
404+track_redo_log_now_set(
405+/*===================*/
406+ THD* thd /*!< in: thread handle */
407+ __attribute__((unused)),
408+ struct st_mysql_sys_var* var /*!< in: pointer to system
409+ variable */
410+ __attribute__((unused)),
411+ void* var_ptr /*!< out: where the formal
412+ string goes */
413+ __attribute__((unused)),
414+ const void* save) /*!< in: immediate result from
415+ check function */
416+{
417+ if (*(my_bool*) save && srv_track_changed_pages) {
418+
419+ log_online_follow_redo_log();
420+ }
421+}
422+
423+
424+#endif /* UNIV_DEBUG */
425
426 static SHOW_VAR innodb_status_variables_export[]= {
427 {"Innodb", (char*) &show_innodb_vars, SHOW_FUNC},
428@@ -13026,9 +13083,15 @@
429 NULL, NULL, SRV_STATS_NULLS_EQUAL, &innodb_stats_method_typelib);
430
431 static MYSQL_SYSVAR_BOOL(track_changed_pages, srv_track_changed_pages,
432- PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
433- "Track the redo log for changed pages and output a changed page bitmap",
434- NULL, NULL, FALSE);
435+ PLUGIN_VAR_NOCMDARG
436+#ifndef UNIV_DEBUG
437+ /* Make this variable dynamic for debug builds to
438+ provide a testcase sync facility */
439+ | PLUGIN_VAR_READONLY
440+#endif
441+ ,
442+ "Track the redo log for changed pages and output a changed page bitmap",
443+ NULL, NULL, FALSE);
444
445 static MYSQL_SYSVAR_ULONGLONG(max_bitmap_file_size, srv_max_bitmap_file_size,
446 PLUGIN_VAR_RQCMDARG,
447@@ -13248,6 +13311,21 @@
448 "[Deprecated option] no effect",
449 NULL, NULL, 0, 0, 1, 0);
450
451+#ifdef UNIV_DEBUG
452+
453+static MYSQL_SYSVAR_BOOL(log_checkpoint_now, innodb_log_checkpoint_now,
454+ PLUGIN_VAR_OPCMDARG,
455+ "Force checkpoint now",
456+ NULL, checkpoint_now_set, FALSE);
457+
458+static MYSQL_SYSVAR_BOOL(track_redo_log_now,
459+ innodb_track_redo_log_now,
460+ PLUGIN_VAR_OPCMDARG,
461+ "Force log tracker to catch up with checkpoint now",
462+ NULL, track_redo_log_now_set, FALSE);
463+
464+#endif /* UNIV_DEBUG */
465+
466 static MYSQL_SYSVAR_BOOL(locking_fake_changes, srv_fake_changes_locks,
467 PLUGIN_VAR_NOCMDARG,
468 "###EXPERIMENTAL### if enabled, transactions will get S row locks instead "
469@@ -13379,6 +13457,10 @@
470 MYSQL_SYSVAR(locking_fake_changes),
471 MYSQL_SYSVAR(merge_sort_block_size),
472 MYSQL_SYSVAR(print_all_deadlocks),
473+#ifdef UNIV_DEBUG
474+ MYSQL_SYSVAR(log_checkpoint_now),
475+ MYSQL_SYSVAR(track_redo_log_now),
476+#endif /* UNIV_DEBUG */
477 NULL
478 };
479
480
481=== modified file 'Percona-Server/storage/innobase/log/log0recv.c'
482--- Percona-Server/storage/innobase/log/log0recv.c 2013-08-14 03:52:04 +0000
483+++ Percona-Server/storage/innobase/log/log0recv.c 2013-09-09 16:36:44 +0000
484@@ -1266,7 +1266,8 @@
485 break;
486 case MLOG_FILE_RENAME:
487 ptr = fil_op_log_parse_or_replay(ptr, end_ptr, type,
488- space_id, 0);
489+ (recv_recovery_is_on()
490+ ? space_id : 0), 0);
491 break;
492 case MLOG_FILE_CREATE:
493 case MLOG_FILE_DELETE:
494
495=== modified file 'Percona-Server/storage/innobase/row/row0merge.c'
496--- Percona-Server/storage/innobase/row/row0merge.c 2013-08-14 03:52:04 +0000
497+++ Percona-Server/storage/innobase/row/row0merge.c 2013-09-09 16:36:44 +0000
498@@ -63,6 +63,14 @@
499 # define posix_fadvise(fd, offset, len, advice) /* nothing */
500 #endif /* __WIN__ */
501
502+#ifdef __WIN__
503+/* error LNK2001: unresolved external symbol _debug_sync_C_callback_ptr */
504+# define DEBUG_SYNC_C(dummy) ((void) 0)
505+#else
506+# include "m_string.h" /* for my_sys.h */
507+# include "my_sys.h" /* DEBUG_SYNC_C */
508+#endif
509+
510 #ifdef UNIV_DEBUG
511 /** Set these in order ot enable debug printout. */
512 /* @{ */
513@@ -2593,8 +2601,15 @@
514 /* The following calls will also rename the .ibd data files if
515 the tables are stored in a single-table tablespace */
516
517- if (!dict_table_rename_in_cache(old_table, tmp_name, FALSE)
518- || !dict_table_rename_in_cache(new_table, old_name, FALSE)) {
519+ if (!dict_table_rename_in_cache(old_table, tmp_name, FALSE)) {
520+
521+ err = DB_ERROR;
522+ goto err_exit;
523+ }
524+
525+ DEBUG_SYNC_C("row_merge_rename_tables_between_renames");
526+
527+ if (!dict_table_rename_in_cache(new_table, old_name, FALSE)) {
528
529 err = DB_ERROR;
530 goto err_exit;
531
532=== modified file 'Percona-Server/storage/innobase/srv/srv0srv.c'
533--- Percona-Server/storage/innobase/srv/srv0srv.c 2013-09-06 13:24:59 +0000
534+++ Percona-Server/storage/innobase/srv/srv0srv.c 2013-09-09 16:36:44 +0000
535@@ -3184,6 +3184,12 @@
536 os_event_wait(srv_checkpoint_completed_event);
537 os_event_reset(srv_checkpoint_completed_event);
538
539+#ifdef UNIV_DEBUG
540+ if (!srv_track_changed_pages) {
541+ continue;
542+ }
543+#endif
544+
545 if (srv_shutdown_state < SRV_SHUTDOWN_LAST_PHASE) {
546 if (!log_online_follow_redo_log()) {
547 /* TODO: sync with I_S log tracking status? */

Subscribers

People subscribed via source and target branches