Merge lp:~percona-dev/percona-server/5.5.14-porting-other into lp:percona-server/5.5

Proposed by Oleg Tsarev
Status: Superseded
Proposed branch: lp:~percona-dev/percona-server/5.5.14-porting-other
Merge into: lp:percona-server/5.5
Diff against target: 5961 lines (+1756/-531)
47 files modified
Makefile (+1/-1)
control_online_alter_index.patch (+2/-2)
innodb_adaptive_hash_index_partitions.patch (+49/-20)
innodb_admin_command_base.patch (+1/-1)
innodb_buffer_pool_pages_i_s.patch (+3/-3)
innodb_buffer_pool_shm.patch (+5/-5)
innodb_bug60788.patch (+8/-8)
innodb_deadlock_count.patch (+2/-2)
innodb_dict_size_limit.patch (+8/-8)
innodb_expand_fast_index_creation.patch (+19/-18)
innodb_expand_import.patch (+9/-9)
innodb_extend_slow.patch (+25/-27)
innodb_extra_rseg.patch (+1/-1)
innodb_fake_changes.patch (+32/-21)
innodb_fast_checksum.patch (+6/-6)
innodb_files_extend.patch (+10/-10)
innodb_fix_misc.patch (+944/-56)
innodb_io_patches.patch (+20/-20)
innodb_kill_idle_transaction.patch (+277/-0)
innodb_lru_dump_restore.patch (+3/-3)
innodb_opt_lru_count.patch (+1/-1)
innodb_overwrite_relay_log_info.patch (+5/-5)
innodb_pass_corrupt_table.patch (+38/-38)
innodb_recovery_patches.patch (+4/-4)
innodb_separate_doublewrite.patch (+23/-23)
innodb_show_lock_name.patch (+4/-4)
innodb_show_status.patch (+10/-10)
innodb_show_status_extend.patch (+11/-11)
innodb_show_sys_tables.patch (+1/-1)
innodb_split_buf_pool_mutex.patch (+29/-29)
innodb_stats.patch (+33/-33)
innodb_thread_concurrency_timer_based.patch (+3/-3)
log_connection_error.patch (+3/-3)
log_warnings_suppress.patch (+5/-5)
microsec_process.patch (+1/-1)
mysql-test.diff (+19/-0)
mysql_syslog.patch (+1/-1)
optimizer_fix.patch (+2/-2)
processlist_row_stats.patch (+2/-2)
query_cache_enhance.patch (+1/-1)
response_time_distribution.patch (+8/-8)
series (+2/-0)
show_slave_status_nolock.patch (+3/-3)
show_temp.patch (+13/-13)
slow_extended.patch (+22/-20)
sql_no_fcache.patch (+6/-6)
userstat.patch (+81/-83)
To merge this branch: bzr merge lp:~percona-dev/percona-server/5.5.14-porting-other
Reviewer Review Type Date Requested Status
Percona developers Pending
Yasufumi Kinoshita Pending
Percona developers Pending
Review via email: mp+69944@code.launchpad.net

This proposal has been superseded by a proposal from 2011-08-01.

Description of the change

    1) port all other patches to 5.5.14
    2) sql_connect.cc little changed, I fix patches depended from it (slow_extended.patch, userstat.patch)
    3) handler.h: handler->add_index has now asynchronous, I add final_add_index call (innodb_expand_fast_index_creation.patch)
http://jenkins.percona.com/view/Percona%20Server%205.5/job/percona-server-5.5-param/65/
Nothing new errors in results.
Will fix available fails in other MP

To post a comment you must log in.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'Makefile'
2--- Makefile 2011-06-28 06:56:52 +0000
3+++ Makefile 2011-08-01 03:32:34 +0000
4@@ -1,6 +1,6 @@
5 FETCH_CMD=wget
6 MASTER_SITE=http://www.percona.com/downloads/community
7-MYSQL_VERSION=5.5.13
8+MYSQL_VERSION=5.5.14
9 PERCONA_SERVER_VERSION=rel20.4
10 PERCONA_SERVER ?=Percona-Server-$(MYSQL_VERSION)-$(PERCONA_SERVER_VERSION)
11 PERCONA_SERVER_SHORT_1 ?=Percona-Server-$(MYSQL_VERSION)
12
13=== modified file 'control_online_alter_index.patch'
14--- control_online_alter_index.patch 2011-06-10 10:07:06 +0000
15+++ control_online_alter_index.patch 2011-08-01 03:32:34 +0000
16@@ -32,7 +32,7 @@
17 diff -ruN a/sql/sql_partition.cc b/sql/sql_partition.cc
18 --- a/sql/sql_partition.cc 2010-11-03 07:01:14.000000000 +0900
19 +++ b/sql/sql_partition.cc 2010-12-03 13:59:56.444039002 +0900
20-@@ -4636,7 +4636,12 @@
21+@@ -4637,7 +4637,12 @@
22 alter_info->num_parts= curr_part_no - new_part_no;
23 }
24 }
25@@ -49,7 +49,7 @@
26 diff -ruN a/sql/sql_table.cc b/sql/sql_table.cc
27 --- a/sql/sql_table.cc 2010-11-03 07:01:14.000000000 +0900
28 +++ b/sql/sql_table.cc 2010-12-03 13:51:04.768955495 +0900
29-@@ -6112,6 +6112,10 @@
30+@@ -6116,6 +6116,10 @@
31 uint *idx_end_p;
32
33 alter_flags= table->file->alter_table_flags(alter_info->flags);
34
35=== modified file 'innodb_adaptive_hash_index_partitions.patch'
36--- innodb_adaptive_hash_index_partitions.patch 2011-06-27 07:12:14 +0000
37+++ innodb_adaptive_hash_index_partitions.patch 2011-08-01 03:32:34 +0000
38@@ -972,7 +972,7 @@
39
40 block->is_hashed = FALSE;
41
42-@@ -1481,7 +1482,7 @@
43+@@ -1413,7 +1414,7 @@
44 /* To follow the latching order, we
45 have to release btr_search_latch
46 before acquiring block->latch. */
47@@ -981,7 +981,7 @@
48 /* When we release the search latch,
49 we must rescan all blocks, because
50 some may become hashed again. */
51-@@ -1512,11 +1513,11 @@
52+@@ -1444,11 +1445,11 @@
53 anything. block->is_hashed can only
54 be set on uncompressed file pages. */
55
56@@ -995,7 +995,7 @@
57
58 ut_ad(!btr_search_enabled);
59 }
60-@@ -1535,7 +1536,11 @@
61+@@ -1467,7 +1468,11 @@
62 ibool released_search_latch;
63
64 #ifdef UNIV_SYNC_DEBUG
65@@ -1008,7 +1008,7 @@
66 #endif /* UNIV_SYNC_DEBUG */
67 ut_ad(!btr_search_enabled);
68
69-@@ -2655,6 +2660,7 @@
70+@@ -2203,6 +2208,7 @@
71 {
72 block->check_index_page_at_flush = FALSE;
73 block->index = NULL;
74@@ -1019,7 +1019,36 @@
75 diff -ruN a/storage/innobase/buf/buf0lru.c b/storage/innobase/buf/buf0lru.c
76 --- a/storage/innobase/buf/buf0lru.c 2010-12-04 15:35:29.137347521 +0900
77 +++ b/storage/innobase/buf/buf0lru.c 2010-12-04 16:12:48.658550840 +0900
78-@@ -1798,7 +1798,7 @@
79+@@ -605,7 +605,7 @@
80+
81+ mutex_exit(&buf_pool->LRU_list_mutex);
82+
83+- rw_lock_s_lock(&btr_search_latch);
84++ btr_search_s_lock_all();
85+ chunk = buf_pool->chunks;
86+ for (j = buf_pool->n_chunks; j--; chunk++) {
87+ buf_block_t* block = chunk->blocks;
88+@@ -617,16 +617,16 @@
89+ continue;
90+ }
91+
92+- rw_lock_s_unlock(&btr_search_latch);
93++ btr_search_s_unlock_all();
94+
95+ rw_lock_x_lock(&block->lock);
96+ btr_search_drop_page_hash_index(block, NULL);
97+ rw_lock_x_unlock(&block->lock);
98+
99+- rw_lock_s_lock(&btr_search_latch);
100++ btr_search_s_lock_all();
101+ }
102+ }
103+- rw_lock_s_unlock(&btr_search_latch);
104++ btr_search_s_unlock_all();
105+ }
106+ }
107+
108+@@ -1787,7 +1787,7 @@
109
110 UNIV_MEM_VALID(((buf_block_t*) bpage)->frame,
111 UNIV_PAGE_SIZE);
112@@ -1031,7 +1060,7 @@
113 diff -ruN a/storage/innobase/dict/dict0dict.c b/storage/innobase/dict/dict0dict.c
114 --- a/storage/innobase/dict/dict0dict.c 2010-12-04 15:52:23.398513916 +0900
115 +++ b/storage/innobase/dict/dict0dict.c 2010-12-04 16:12:48.662550715 +0900
116-@@ -1811,7 +1811,7 @@
117+@@ -1845,7 +1845,7 @@
118 zero. */
119
120 for (;;) {
121@@ -1056,7 +1085,7 @@
122 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
123 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:12:20.185850734 +0900
124 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:12:48.674552412 +0900
125-@@ -11702,6 +11702,11 @@
126+@@ -11719,6 +11719,11 @@
127 "Disable with --skip-innodb-adaptive-hash-index.",
128 NULL, innodb_adaptive_hash_index_update, TRUE);
129
130@@ -1068,7 +1097,7 @@
131 static MYSQL_SYSVAR_ULONG(replication_delay, srv_replication_delay,
132 PLUGIN_VAR_RQCMDARG,
133 "Replication thread delay (ms) on the slave server if "
134-@@ -12068,6 +12073,7 @@
135+@@ -12086,6 +12091,7 @@
136 MYSQL_SYSVAR(use_sys_stats_table),
137 MYSQL_SYSVAR(stats_sample_pages),
138 MYSQL_SYSVAR(adaptive_hash_index),
139@@ -1264,7 +1293,7 @@
140 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
141 --- a/storage/innobase/include/buf0buf.h 2010-12-15 19:00:07.713604580 +0900
142 +++ b/storage/innobase/include/buf0buf.h 2010-12-15 20:58:03.546839883 +0900
143-@@ -1546,7 +1546,7 @@
144+@@ -1543,7 +1543,7 @@
145 pointers in the adaptive hash index
146 pointing to this frame */
147 #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */
148@@ -1273,7 +1302,7 @@
149 already been built on this
150 page; note that it does not
151 guarantee that the index is
152-@@ -1560,6 +1560,7 @@
153+@@ -1557,6 +1557,7 @@
154 unsigned curr_left_side:1;/*!< TRUE or FALSE in hash indexing */
155 dict_index_t* index; /*!< Index for which the adaptive
156 hash index has been created. */
157@@ -1329,7 +1358,7 @@
158 diff -ruN a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c
159 --- a/storage/innobase/row/row0sel.c 2010-12-04 16:09:53.204513572 +0900
160 +++ b/storage/innobase/row/row0sel.c 2010-12-04 16:12:48.722551273 +0900
161-@@ -1210,7 +1210,7 @@
162+@@ -1211,7 +1211,7 @@
163 ut_ad(plan->unique_search);
164 ut_ad(!plan->must_get_clust);
165 #ifdef UNIV_SYNC_DEBUG
166@@ -1338,7 +1367,7 @@
167 #endif /* UNIV_SYNC_DEBUG */
168
169 row_sel_open_pcur(plan, TRUE, mtr);
170-@@ -1381,10 +1381,10 @@
171+@@ -1382,10 +1382,10 @@
172 && !plan->must_get_clust
173 && !plan->table->big_rows) {
174 if (!search_latch_locked) {
175@@ -1351,7 +1380,7 @@
176
177 /* There is an x-latch request waiting: release the
178 s-latch for a moment; as an s-latch here is often
179-@@ -1393,8 +1393,8 @@
180+@@ -1394,8 +1394,8 @@
181 from acquiring an s-latch for a long time, lowering
182 performance significantly in multiprocessors. */
183
184@@ -1362,7 +1391,7 @@
185 }
186
187 found_flag = row_sel_try_search_shortcut(node, plan, &mtr);
188-@@ -1417,7 +1417,7 @@
189+@@ -1418,7 +1418,7 @@
190 }
191
192 if (search_latch_locked) {
193@@ -1371,7 +1400,7 @@
194
195 search_latch_locked = FALSE;
196 }
197-@@ -1993,7 +1993,7 @@
198+@@ -1994,7 +1994,7 @@
199
200 func_exit:
201 if (search_latch_locked) {
202@@ -1380,7 +1409,7 @@
203 }
204 if (UNIV_LIKELY_NULL(heap)) {
205 mem_heap_free(heap);
206-@@ -3356,6 +3356,8 @@
207+@@ -3357,6 +3357,8 @@
208 /* if the returned record was locked and we did a semi-consistent
209 read (fetch the newest committed version), then this is set to
210 TRUE */
211@@ -1389,7 +1418,7 @@
212 #ifdef UNIV_SEARCH_DEBUG
213 ulint cnt = 0;
214 #endif /* UNIV_SEARCH_DEBUG */
215-@@ -3446,18 +3448,33 @@
216+@@ -3447,18 +3449,33 @@
217 /* PHASE 0: Release a possible s-latch we are holding on the
218 adaptive hash index latch if there is someone waiting behind */
219
220@@ -1427,7 +1456,7 @@
221 }
222
223 /* Reset the new record lock info if srv_locks_unsafe_for_binlog
224-@@ -3608,9 +3625,28 @@
225+@@ -3609,9 +3626,28 @@
226 hash index semaphore! */
227
228 #ifndef UNIV_SEARCH_DEBUG
229@@ -1459,7 +1488,7 @@
230 }
231 #endif
232 switch (row_sel_try_search_shortcut_for_mysql(
233-@@ -3671,7 +3707,11 @@
234+@@ -3672,7 +3708,11 @@
235
236 trx->search_latch_timeout--;
237
238@@ -1472,7 +1501,7 @@
239 trx->has_search_latch = FALSE;
240 }
241
242-@@ -3695,7 +3735,12 @@
243+@@ -3696,7 +3736,12 @@
244 /* PHASE 3: Open or restore index cursor position */
245
246 if (trx->has_search_latch) {
247
248=== modified file 'innodb_admin_command_base.patch'
249--- innodb_admin_command_base.patch 2011-06-10 10:07:06 +0000
250+++ innodb_admin_command_base.patch 2011-08-01 03:32:34 +0000
251@@ -8,7 +8,7 @@
252 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
253 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:32:15.624039043 +0900
254 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:32:35.424957827 +0900
255-@@ -11863,7 +11863,8 @@
256+@@ -11881,7 +11881,8 @@
257 i_s_innodb_sys_foreign_cols,
258 i_s_innodb_sys_stats,
259 i_s_innodb_table_stats,
260
261=== modified file 'innodb_buffer_pool_pages_i_s.patch'
262--- innodb_buffer_pool_pages_i_s.patch 2011-06-27 07:12:14 +0000
263+++ innodb_buffer_pool_pages_i_s.patch 2011-08-01 03:32:34 +0000
264@@ -8,7 +8,7 @@
265 diff -ruN a/storage/innobase/buf/buf0buf.c b/storage/innobase/buf/buf0buf.c
266 --- a/storage/innobase/buf/buf0buf.c 2010-12-04 20:20:44.595483291 +0900
267 +++ b/storage/innobase/buf/buf0buf.c 2010-12-06 19:28:04.055227506 +0900
268-@@ -4560,6 +4560,36 @@
269+@@ -4159,6 +4159,36 @@
270 mutex_exit(block_mutex);
271 }
272
273@@ -48,7 +48,7 @@
274 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
275 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 20:20:44.614551139 +0900
276 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-06 19:23:47.622195800 +0900
277-@@ -12148,6 +12148,9 @@
278+@@ -12166,6 +12166,9 @@
279 i_s_innodb_sys_stats,
280 i_s_innodb_table_stats,
281 i_s_innodb_index_stats,
282@@ -786,7 +786,7 @@
283 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
284 --- a/storage/innobase/include/buf0buf.h 2010-12-04 19:46:40.197471531 +0900
285 +++ b/storage/innobase/include/buf0buf.h 2010-12-06 19:23:47.638195824 +0900
286-@@ -1144,6 +1144,14 @@
287+@@ -1141,6 +1141,14 @@
288 /*===========*/
289 const buf_pool_t* buf_pool) /*!< in: buffer pool */
290 __attribute__((nonnull, const));
291
292=== modified file 'innodb_buffer_pool_shm.patch'
293--- innodb_buffer_pool_shm.patch 2011-06-23 07:32:16 +0000
294+++ innodb_buffer_pool_shm.patch 2011-08-01 03:32:34 +0000
295@@ -35,16 +35,16 @@
296 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
297 --- a/storage/innobase/handler/ha_innodb.cc 2011-04-09 18:48:47.000000000 +0400
298 +++ b/storage/innobase/handler/ha_innodb.cc 2011-04-09 18:48:48.000000000 +0400
299-@@ -194,6 +194,8 @@
300- static my_bool innobase_create_status_file = FALSE;
301+@@ -195,6 +195,8 @@
302 static my_bool innobase_stats_on_metadata = TRUE;
303+ static my_bool innobase_large_prefix = FALSE;
304 static my_bool innobase_use_sys_stats_table = FALSE;
305 +static my_bool innobase_buffer_pool_shm_checksum = TRUE;
306 +static uint innobase_buffer_pool_shm_key = 0;
307
308
309 static char* internal_innobase_data_file_path = NULL;
310-@@ -2670,6 +2672,12 @@
311+@@ -2676,6 +2678,12 @@
312 srv_buf_pool_size = (ulint) innobase_buffer_pool_size;
313 srv_buf_pool_instances = (ulint) innobase_buffer_pool_instances;
314
315@@ -57,7 +57,7 @@
316 srv_mem_pool_size = (ulint) innobase_additional_mem_pool_size;
317
318 srv_n_file_io_threads = (ulint) innobase_file_io_threads;
319-@@ -11733,6 +11741,16 @@
320+@@ -11750,6 +11758,16 @@
321 "Number of buffer pool instances, set to higher value on high-end machines to increase scalability",
322 NULL, NULL, 1L, 1L, MAX_BUFFER_POOLS, 1L);
323
324@@ -74,7 +74,7 @@
325 static MYSQL_SYSVAR_ULONG(commit_concurrency, innobase_commit_concurrency,
326 PLUGIN_VAR_RQCMDARG,
327 "Helps in performance tuning in heavily concurrent environments.",
328-@@ -12027,6 +12045,8 @@
329+@@ -12044,6 +12062,8 @@
330 MYSQL_SYSVAR(autoextend_increment),
331 MYSQL_SYSVAR(buffer_pool_size),
332 MYSQL_SYSVAR(buffer_pool_instances),
333
334=== modified file 'innodb_bug60788.patch'
335--- innodb_bug60788.patch 2011-06-29 09:32:51 +0000
336+++ innodb_bug60788.patch 2011-08-01 03:32:34 +0000
337@@ -10,7 +10,7 @@
338 diff -ruN a/storage/innobase/os/os0file.c b/storage/innobase/os/os0file.c
339 --- a/storage/innobase/os/os0file.c 2011-04-20 12:09:57.000000000 +0400
340 +++ b/storage/innobase/os/os0file.c 2011-04-20 12:10:04.000000000 +0400
341-@@ -2092,6 +2092,9 @@
342+@@ -2093,6 +2093,9 @@
343 failures++;
344
345 retry = TRUE;
346@@ -20,7 +20,7 @@
347 } else {
348
349 retry = FALSE;
350-@@ -2222,6 +2225,7 @@
351+@@ -2223,6 +2226,7 @@
352 off_t offs;
353 #if defined(HAVE_PREAD) && !defined(HAVE_BROKEN_PREAD)
354 ssize_t n_bytes;
355@@ -28,7 +28,7 @@
356 #endif /* HAVE_PREAD && !HAVE_BROKEN_PREAD */
357 ulint sec;
358 ulint ms;
359-@@ -2262,7 +2266,18 @@
360+@@ -2263,7 +2267,18 @@
361 os_n_pending_reads++;
362 os_mutex_exit(os_file_count_mutex);
363
364@@ -48,7 +48,7 @@
365
366 os_mutex_enter(os_file_count_mutex);
367 os_file_n_pending_preads--;
368-@@ -2281,6 +2296,7 @@
369+@@ -2282,6 +2297,7 @@
370 {
371 off_t ret_offset;
372 ssize_t ret;
373@@ -56,7 +56,7 @@
374 #ifndef UNIV_HOTBACKUP
375 ulint i;
376 #endif /* !UNIV_HOTBACKUP */
377-@@ -2301,7 +2317,17 @@
378+@@ -2302,7 +2318,17 @@
379 if (ret_offset < 0) {
380 ret = -1;
381 } else {
382@@ -75,7 +75,7 @@
383 }
384
385 #ifndef UNIV_HOTBACKUP
386-@@ -2340,6 +2366,7 @@
387+@@ -2341,6 +2367,7 @@
388 offset */
389 {
390 ssize_t ret;
391@@ -83,7 +83,7 @@
392 off_t offs;
393
394 ut_a((offset & 0xFFFFFFFFUL) == offset);
395-@@ -2367,7 +2394,18 @@
396+@@ -2368,7 +2395,18 @@
397 os_n_pending_writes++;
398 os_mutex_exit(os_file_count_mutex);
399
400@@ -103,7 +103,7 @@
401
402 os_mutex_enter(os_file_count_mutex);
403 os_file_n_pending_pwrites--;
404-@@ -2414,7 +2452,17 @@
405+@@ -2415,7 +2453,17 @@
406 goto func_exit;
407 }
408
409
410=== modified file 'innodb_deadlock_count.patch'
411--- innodb_deadlock_count.patch 2011-06-10 10:07:06 +0000
412+++ innodb_deadlock_count.patch 2011-08-01 03:32:34 +0000
413@@ -8,7 +8,7 @@
414 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
415 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:09:53.145500265 +0900
416 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 16:10:24.605515894 +0900
417-@@ -686,6 +686,8 @@
418+@@ -687,6 +687,8 @@
419 (char*) &export_vars.innodb_dblwr_pages_written, SHOW_LONG},
420 {"dblwr_writes",
421 (char*) &export_vars.innodb_dblwr_writes, SHOW_LONG},
422@@ -42,7 +42,7 @@
423 diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c
424 --- a/storage/innobase/lock/lock0lock.c 2010-12-03 17:49:11.609953956 +0900
425 +++ b/storage/innobase/lock/lock0lock.c 2010-12-04 16:10:24.608513889 +0900
426-@@ -3328,6 +3328,7 @@
427+@@ -3330,6 +3330,7 @@
428 break;
429
430 case LOCK_VICTIM_IS_START:
431
432=== modified file 'innodb_dict_size_limit.patch'
433--- innodb_dict_size_limit.patch 2011-06-10 10:07:06 +0000
434+++ innodb_dict_size_limit.patch 2011-08-01 03:32:34 +0000
435@@ -252,7 +252,7 @@
436 diff -ruN a/storage/innobase/dict/dict0crea.c b/storage/innobase/dict/dict0crea.c
437 --- a/storage/innobase/dict/dict0crea.c 2010-11-03 07:01:13.000000000 +0900
438 +++ b/storage/innobase/dict/dict0crea.c 2010-12-03 15:45:47.521955810 +0900
439-@@ -1210,6 +1210,9 @@
440+@@ -1209,6 +1209,9 @@
441 /* Foreign constraint system tables have already been
442 created, and they are ok */
443
444@@ -262,7 +262,7 @@
445 mutex_exit(&(dict_sys->mutex));
446
447 return(DB_SUCCESS);
448-@@ -1291,6 +1294,11 @@
449+@@ -1290,6 +1293,11 @@
450
451 trx_commit_for_mysql(trx);
452
453@@ -360,7 +360,7 @@
454 /****************************************************************//**
455 If the given column name is reserved for InnoDB system columns, return
456 TRUE.
457-@@ -1728,6 +1790,11 @@
458+@@ -1762,6 +1824,11 @@
459 ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
460 ut_ad(mutex_own(&(dict_sys->mutex)));
461
462@@ -375,7 +375,7 @@
463 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
464 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:43:57.294986852 +0900
465 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:45:47.534959966 +0900
466-@@ -674,6 +674,8 @@
467+@@ -675,6 +675,8 @@
468 (char*) &export_vars.innodb_dblwr_pages_written, SHOW_LONG},
469 {"dblwr_writes",
470 (char*) &export_vars.innodb_dblwr_writes, SHOW_LONG},
471@@ -384,7 +384,7 @@
472 {"have_atomic_builtins",
473 (char*) &export_vars.innodb_have_atomic_builtins, SHOW_BOOL},
474 {"log_waits",
475-@@ -11642,6 +11644,11 @@
476+@@ -11659,6 +11661,11 @@
477 "Choose method of innodb_adaptive_flushing. (native, [estimate], keep_average)",
478 NULL, innodb_adaptive_flushing_method_update, 1, &adaptive_flushing_method_typelib);
479
480@@ -396,7 +396,7 @@
481 static struct st_mysql_sys_var* innobase_system_variables[]= {
482 MYSQL_SYSVAR(additional_mem_pool_size),
483 MYSQL_SYSVAR(autoextend_increment),
484-@@ -11709,6 +11716,7 @@
485+@@ -11727,6 +11734,7 @@
486 MYSQL_SYSVAR(flush_neighbor_pages),
487 MYSQL_SYSVAR(read_ahead),
488 MYSQL_SYSVAR(adaptive_flushing_method),
489@@ -435,7 +435,7 @@
490 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
491 --- a/storage/innobase/include/buf0buf.h 2011-02-01 18:00:03.000000000 +0900
492 +++ b/storage/innobase/include/buf0buf.h 2011-02-01 18:03:29.000000000 +0900
493-@@ -1555,6 +1555,15 @@
494+@@ -1558,6 +1558,15 @@
495 #define BUF_POOL_ZIP_FOLD_BPAGE(b) BUF_POOL_ZIP_FOLD((buf_block_t*) (b))
496 /* @} */
497
498@@ -454,7 +454,7 @@
499 diff -ruN a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h
500 --- a/storage/innobase/include/dict0dict.h 2010-11-03 07:01:13.000000000 +0900
501 +++ b/storage/innobase/include/dict0dict.h 2010-12-03 15:45:47.558024515 +0900
502-@@ -1170,6 +1170,12 @@
503+@@ -1183,6 +1183,12 @@
504 /*====================================*/
505 dict_table_t* table, /*!< in: table */
506 const char* name); /*!< in: name of the index to find */
507
508=== modified file 'innodb_expand_fast_index_creation.patch'
509--- innodb_expand_fast_index_creation.patch 2011-05-11 13:27:33 +0000
510+++ innodb_expand_fast_index_creation.patch 2011-08-01 03:32:34 +0000
511@@ -219,7 +219,7 @@
512 +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
513 +
514 +######################################
515-+DROP TABLE t1;
516++DROP t1;
517 +CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
518 +INSERT INTO t2 VALUES (0), (1), (2);
519 +CREATE TABLE t1 (
520@@ -301,7 +301,7 @@
521 diff -ruN a/mysql-test/suite/innodb/t/innodb-index.test b/mysql-test/suite/innodb/t/innodb-index.test
522 --- a/mysql-test/suite/innodb/t/innodb-index.test 2011-03-31 17:36:17.000000000 +0400
523 +++ b/mysql-test/suite/innodb/t/innodb-index.test 2011-04-11 08:57:21.000000000 +0400
524-@@ -28,6 +28,11 @@
525+@@ -87,6 +87,11 @@
526 show create table t1;
527 --error ER_MULTIPLE_PRI_KEY
528 alter table t1 add primary key (c);
529@@ -419,7 +419,7 @@
530 diff -ruN a/sql/sql_lex.h b/sql/sql_lex.h
531 --- a/sql/sql_lex.h 2011-04-11 08:57:19.000000000 +0400
532 +++ b/sql/sql_lex.h 2011-04-11 08:57:21.000000000 +0400
533-@@ -1003,6 +1003,9 @@
534+@@ -1009,6 +1009,9 @@
535 List<Alter_column> alter_list;
536 List<Key> key_list;
537 List<Create_field> create_list;
538@@ -429,7 +429,7 @@
539 uint flags;
540 enum enum_enable_or_disable keys_onoff;
541 enum tablespace_op_type tablespace_op;
542-@@ -1014,6 +1017,8 @@
543+@@ -1020,6 +1023,8 @@
544
545
546 Alter_info() :
547@@ -438,7 +438,7 @@
548 flags(0),
549 keys_onoff(LEAVE_AS_IS),
550 tablespace_op(NO_TABLESPACE_OP),
551-@@ -1029,6 +1034,9 @@
552+@@ -1035,6 +1040,9 @@
553 alter_list.empty();
554 key_list.empty();
555 create_list.empty();
556@@ -451,7 +451,7 @@
557 diff -ruN a/sql/sql_table.cc b/sql/sql_table.cc
558 --- a/sql/sql_table.cc 2011-04-11 08:56:57.000000000 +0400
559 +++ b/sql/sql_table.cc 2011-04-11 23:30:02.000000000 +0400
560-@@ -2773,7 +2773,7 @@
561+@@ -2774,7 +2774,7 @@
562 file The handler for the new table.
563 key_info_buffer OUT An array of KEY structs for the indexes.
564 key_count OUT The number of elements in the array.
565@@ -460,7 +460,7 @@
566
567 DESCRIPTION
568 Prepares the table and key structures for table creation.
569-@@ -3119,7 +3119,6 @@
570+@@ -3120,7 +3120,6 @@
571 }
572
573 /* Create keys */
574@@ -468,7 +468,7 @@
575 List_iterator<Key> key_iterator(alter_info->key_list);
576 List_iterator<Key> key_iterator2(alter_info->key_list);
577 uint key_parts=0, fk_key_count=0;
578-@@ -3217,6 +3216,14 @@
579+@@ -3218,6 +3217,14 @@
580 if (!*key_info_buffer || ! key_part_info)
581 DBUG_RETURN(TRUE); // Out of memory
582
583@@ -483,7 +483,7 @@
584 key_iterator.rewind();
585 key_number=0;
586 for (; (key=key_iterator++) ; key_number++)
587-@@ -3635,6 +3642,22 @@
588+@@ -3636,6 +3643,22 @@
589 key_info->comment.str= key->key_create_info.comment.str;
590 }
591
592@@ -506,7 +506,7 @@
593 key_info++;
594 }
595 if (!unique_key && !primary_key &&
596-@@ -5247,6 +5270,10 @@
597+@@ -5249,6 +5272,10 @@
598 List<Create_field> new_create_list;
599 /* New key definitions are added here */
600 List<Key> new_key_list;
601@@ -517,7 +517,7 @@
602 List_iterator<Alter_drop> drop_it(alter_info->drop_list);
603 List_iterator<Create_field> def_it(alter_info->create_list);
604 List_iterator<Alter_column> alter_it(alter_info->alter_list);
605-@@ -5259,6 +5286,7 @@
606+@@ -5261,6 +5288,7 @@
607 uint used_fields= create_info->used_fields;
608 KEY *key_info=table->key_info;
609 bool rc= TRUE;
610@@ -525,7 +525,7 @@
611
612 DBUG_ENTER("mysql_prepare_alter_table");
613
614-@@ -5431,7 +5459,23 @@
615+@@ -5433,7 +5461,23 @@
616 /*
617 Collect all keys which isn't in drop list. Add only those
618 for which some fields exists.
619@@ -550,7 +550,7 @@
620
621 for (uint i=0 ; i < table->s->keys ; i++,key_info++)
622 {
623-@@ -5548,6 +5592,8 @@
624+@@ -5550,6 +5594,8 @@
625 test(key_info->flags & HA_GENERATED_KEY),
626 key_parts);
627 new_key_list.push_back(key);
628@@ -559,7 +559,7 @@
629 }
630 }
631 {
632-@@ -5555,7 +5601,21 @@
633+@@ -5557,7 +5603,21 @@
634 while ((key=key_it++)) // Add new keys
635 {
636 if (key->type != Key::FOREIGN_KEY)
637@@ -581,7 +581,7 @@
638 if (key->name.str &&
639 !my_strcasecmp(system_charset_info, key->name.str, primary_key_name))
640 {
641-@@ -5604,12 +5664,100 @@
642+@@ -5606,12 +5666,101 @@
643 rc= FALSE;
644 alter_info->create_list.swap(new_create_list);
645 alter_info->key_list.swap(new_key_list);
646@@ -659,9 +659,9 @@
647 + for (key_part= key->key_part; key_part < part_end; key_part++)
648 + key_part->field= table->field[key_part->fieldnr];
649 + }
650-+
651++ handler_add_index *add= 0;
652 + if ((error= table->file->add_index(table, alter_info->delayed_key_info,
653-+ alter_info->delayed_key_count)))
654++ alter_info->delayed_key_count, &add)))
655 + {
656 + /*
657 + Exchange the key_info for the error message. If we exchange
658@@ -674,6 +674,7 @@
659 +
660 + DBUG_RETURN(error);
661 + }
662++ table->file->final_add_index(add, true);
663 +
664 + DBUG_RETURN(0);
665 +}
666@@ -682,7 +683,7 @@
667 Alter table
668
669 SYNOPSIS
670-@@ -6400,19 +6548,38 @@
671+@@ -6404,19 +6552,38 @@
672 */
673 if (new_table && !(new_table->file->ha_table_flags() & HA_NO_COPY_ON_ALTER))
674 {
675
676=== modified file 'innodb_expand_import.patch'
677--- innodb_expand_import.patch 2011-06-10 10:07:06 +0000
678+++ innodb_expand_import.patch 2011-08-01 03:32:34 +0000
679@@ -53,7 +53,7 @@
680 #ifndef UNIV_HOTBACKUP
681 # include "buf0lru.h"
682 # include "ibuf0ibuf.h"
683-@@ -3032,6 +3040,84 @@
684+@@ -3033,6 +3041,84 @@
685 }
686
687 /********************************************************************//**
688@@ -138,7 +138,7 @@
689 Tries to open a single-table tablespace and optionally checks the space id is
690 right in it. If does not succeed, prints an error message to the .err log. This
691 function is used to open a tablespace when we start up mysqld, and also in
692-@@ -3078,7 +3164,7 @@
693+@@ -3079,7 +3165,7 @@
694
695 file = os_file_create_simple_no_error_handling(
696 innodb_file_data_key, filepath, OS_FILE_OPEN,
697@@ -147,7 +147,7 @@
698 if (!success) {
699 /* The following call prints an error message */
700 os_file_get_last_error(TRUE);
701-@@ -3125,6 +3211,445 @@
702+@@ -3126,6 +3212,445 @@
703 space_id = fsp_header_get_space_id(page);
704 space_flags = fsp_header_get_flags(page);
705
706@@ -593,7 +593,7 @@
707 ut_free(buf2);
708
709 if (UNIV_UNLIKELY(space_id != id
710-@@ -3166,6 +3691,271 @@
711+@@ -3167,6 +3692,271 @@
712 os_file_close(file);
713 mem_free(filepath);
714
715@@ -868,7 +868,7 @@
716 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
717 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:49:59.195023983 +0900
718 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:52:23.555957062 +0900
719-@@ -7377,6 +7377,14 @@
720+@@ -7389,6 +7389,14 @@
721 err = row_discard_tablespace_for_mysql(dict_table->name, trx);
722 } else {
723 err = row_import_tablespace_for_mysql(dict_table->name, trx);
724@@ -883,7 +883,7 @@
725 }
726
727 err = convert_error_code_to_mysql(err, dict_table->flags, NULL);
728-@@ -11649,6 +11657,11 @@
729+@@ -11666,6 +11674,11 @@
730 "Choose method of innodb_adaptive_flushing. (native, [estimate], keep_average)",
731 NULL, innodb_adaptive_flushing_method_update, 1, &adaptive_flushing_method_typelib);
732
733@@ -895,7 +895,7 @@
734 static MYSQL_SYSVAR_ULONG(dict_size_limit, srv_dict_size_limit,
735 PLUGIN_VAR_RQCMDARG,
736 "Limit the allocated memory for dictionary cache. (0: unlimited)",
737-@@ -11721,6 +11734,7 @@
738+@@ -11739,6 +11752,7 @@
739 MYSQL_SYSVAR(flush_neighbor_pages),
740 MYSQL_SYSVAR(read_ahead),
741 MYSQL_SYSVAR(adaptive_flushing_method),
742@@ -1033,7 +1033,7 @@
743 diff -ruN a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c
744 --- a/storage/innobase/row/row0mysql.c 2011-04-11 19:44:03.000000000 +0900
745 +++ b/storage/innobase/row/row0mysql.c 2011-06-06 11:53:18.395764565 +0900
746-@@ -2568,6 +2568,11 @@
747+@@ -2573,6 +2573,11 @@
748
749 current_lsn = log_get_lsn();
750
751@@ -1045,7 +1045,7 @@
752 /* It is possible, though very improbable, that the lsn's in the
753 tablespace to be imported have risen above the current system lsn, if
754 a lengthy purge, ibuf merge, or rollback was performed on a backup
755-@@ -2679,6 +2684,11 @@
756+@@ -2684,6 +2689,11 @@
757
758 trx->op_info = "";
759
760
761=== modified file 'innodb_extend_slow.patch'
762--- innodb_extend_slow.patch 2011-06-29 09:32:51 +0000
763+++ innodb_extend_slow.patch 2011-08-01 03:32:34 +0000
764@@ -114,7 +114,7 @@
765 buf_pool_t* buf_pool = buf_pool_get(space, offset);
766
767 ut_ad(mtr);
768-@@ -2875,6 +2935,9 @@
769+@@ -2876,6 +2936,9 @@
770 || ibuf_page_low(space, zip_size, offset,
771 FALSE, file, line, NULL));
772 #endif
773@@ -124,7 +124,7 @@
774 buf_pool->stat.n_page_gets++;
775 fold = buf_page_address_fold(space, offset);
776 loop:
777-@@ -2949,7 +3012,7 @@
778+@@ -2950,7 +3013,7 @@
779 return(NULL);
780 }
781
782@@ -335,7 +335,7 @@
783 diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
784 --- a/storage/innobase/fil/fil0fil.c 2010-12-03 15:53:54.610037199 +0900
785 +++ b/storage/innobase/fil/fil0fil.c 2010-12-03 17:42:42.079064198 +0900
786-@@ -4747,7 +4747,7 @@
787+@@ -4748,7 +4748,7 @@
788 node->name, node->handle, buf,
789 offset_low, offset_high,
790 page_size * n_pages,
791@@ -344,7 +344,7 @@
792 #endif
793 if (success) {
794 node->size += n_pages;
795-@@ -5074,7 +5074,7 @@
796+@@ -5075,7 +5075,7 @@
797 i/o on a tablespace which does not exist */
798 UNIV_INTERN
799 ulint
800@@ -353,7 +353,7 @@
801 /*===*/
802 ulint type, /*!< in: OS_FILE_READ or OS_FILE_WRITE,
803 ORed to OS_FILE_LOG, if a log i/o
804-@@ -5099,8 +5099,9 @@
805+@@ -5100,8 +5100,9 @@
806 void* buf, /*!< in/out: buffer where to store read data
807 or from where to write; in aio this must be
808 appropriately aligned */
809@@ -364,7 +364,7 @@
810 {
811 ulint mode;
812 fil_space_t* space;
813-@@ -5268,7 +5269,7 @@
814+@@ -5269,7 +5270,7 @@
815 #else
816 /* Queue the aio request */
817 ret = os_aio(type, mode | wake_later, node->name, node->handle, buf,
818@@ -376,7 +376,7 @@
819 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
820 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:36:44.293955189 +0900
821 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:42:42.090024586 +0900
822-@@ -1573,6 +1573,16 @@
823+@@ -1579,6 +1579,16 @@
824 trx->check_unique_secondary = !thd_test_options(
825 thd, OPTION_RELAXED_UNIQUE_CHECKS);
826
827@@ -393,7 +393,7 @@
828 DBUG_VOID_RETURN;
829 }
830
831-@@ -1627,6 +1637,32 @@
832+@@ -1633,6 +1643,32 @@
833 return(trx);
834 }
835
836@@ -426,7 +426,7 @@
837 /*********************************************************************//**
838 Note that a transaction has been registered with MySQL.
839 @return true if transaction is registered with MySQL 2PC coordinator */
840-@@ -9301,6 +9337,25 @@
841+@@ -9313,6 +9349,25 @@
842 statement has ended */
843
844 if (trx->n_mysql_tables_in_use == 0) {
845@@ -675,7 +675,7 @@
846 diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c
847 --- a/storage/innobase/lock/lock0lock.c 2010-12-03 15:09:51.297986437 +0900
848 +++ b/storage/innobase/lock/lock0lock.c 2010-12-03 17:42:42.111024587 +0900
849-@@ -1755,6 +1755,8 @@
850+@@ -1765,6 +1765,8 @@
851 {
852 lock_t* lock;
853 trx_t* trx;
854@@ -684,7 +684,7 @@
855
856 ut_ad(mutex_own(&kernel_mutex));
857
858-@@ -1813,6 +1815,10 @@
859+@@ -1823,6 +1825,10 @@
860 trx->que_state = TRX_QUE_LOCK_WAIT;
861 trx->was_chosen_as_deadlock_victim = FALSE;
862 trx->wait_started = time(NULL);
863@@ -695,7 +695,7 @@
864
865 ut_a(que_thr_stop(thr));
866
867-@@ -3764,6 +3770,8 @@
868+@@ -3766,6 +3772,8 @@
869 {
870 lock_t* lock;
871 trx_t* trx;
872@@ -704,7 +704,7 @@
873
874 ut_ad(mutex_own(&kernel_mutex));
875
876-@@ -3819,6 +3827,10 @@
877+@@ -3821,6 +3829,10 @@
878 return(DB_SUCCESS);
879 }
880
881@@ -727,7 +727,7 @@
882 #include "log0recv.h"
883 #ifndef UNIV_HOTBACKUP
884 # include "os0sync.h"
885-@@ -2212,13 +2214,18 @@
886+@@ -2213,13 +2215,18 @@
887 ulint n, /*!< in: number of bytes to read */
888 ulint offset, /*!< in: least significant 32 bits of file
889 offset from where to read */
890@@ -747,7 +747,7 @@
891
892 ut_a((offset & 0xFFFFFFFFUL) == offset);
893
894-@@ -2239,6 +2246,15 @@
895+@@ -2240,6 +2247,15 @@
896
897 os_n_file_reads++;
898
899@@ -763,7 +763,7 @@
900 #if defined(HAVE_PREAD) && !defined(HAVE_BROKEN_PREAD)
901 os_mutex_enter(os_file_count_mutex);
902 os_file_n_pending_preads++;
903-@@ -2252,6 +2268,13 @@
904+@@ -2253,6 +2269,13 @@
905 os_n_pending_reads--;
906 os_mutex_exit(os_file_count_mutex);
907
908@@ -777,7 +777,7 @@
909 return(n_bytes);
910 #else
911 {
912-@@ -2288,6 +2311,13 @@
913+@@ -2289,6 +2312,13 @@
914 os_n_pending_reads--;
915 os_mutex_exit(os_file_count_mutex);
916
917@@ -791,7 +791,7 @@
918 return(ret);
919 }
920 #endif
921-@@ -2428,7 +2458,8 @@
922+@@ -2429,7 +2459,8 @@
923 offset where to read */
924 ulint offset_high, /*!< in: most significant 32 bits of
925 offset */
926@@ -801,7 +801,7 @@
927 {
928 #ifdef __WIN__
929 BOOL ret;
930-@@ -2503,7 +2534,7 @@
931+@@ -2504,7 +2535,7 @@
932 os_bytes_read_since_printout += n;
933
934 try_again:
935@@ -810,7 +810,7 @@
936
937 if ((ulint)ret == n) {
938
939-@@ -2632,7 +2663,7 @@
940+@@ -2633,7 +2664,7 @@
941 os_bytes_read_since_printout += n;
942
943 try_again:
944@@ -819,7 +819,7 @@
945
946 if ((ulint)ret == n) {
947
948-@@ -4026,10 +4057,11 @@
949+@@ -4027,10 +4058,11 @@
950 (can be used to identify a completed
951 aio operation); ignored if mode is
952 OS_AIO_SYNC */
953@@ -832,18 +832,16 @@
954 {
955 os_aio_array_t* array;
956 os_aio_slot_t* slot;
957-@@ -4070,8 +4102,8 @@
958- wait in the Windows case. */
959+@@ -4078,7 +4110,7 @@
960
961 if (type == OS_FILE_READ) {
962-- return(os_file_read(file, buf, offset,
963+ return(os_file_read_func(file, buf, offset,
964 - offset_high, n));
965-+ return(os_file_read_trx(file, buf, offset,
966 + offset_high, n, trx));
967 }
968
969 ut_a(type == OS_FILE_WRITE);
970-@@ -4111,6 +4143,11 @@
971+@@ -4119,6 +4151,11 @@
972 array = NULL; /* Eliminate compiler warning */
973 }
974
975@@ -901,7 +899,7 @@
976 +
977 trx->op_info = "waiting in InnoDB queue";
978
979- thd_wait_begin(trx->mysql_thd, THD_WAIT_ROW_TABLE_LOCK);
980+ thd_wait_begin(trx->mysql_thd, THD_WAIT_USER_LOCK);
981 @@ -1379,6 +1395,12 @@
982
983 trx->op_info = "";
984
985=== modified file 'innodb_extra_rseg.patch'
986--- innodb_extra_rseg.patch 2011-06-10 10:07:06 +0000
987+++ innodb_extra_rseg.patch 2011-08-01 03:32:34 +0000
988@@ -8,7 +8,7 @@
989 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
990 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:18:48.879955903 +0900
991 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:22:53.779955671 +0900
992-@@ -11528,6 +11528,7 @@
993+@@ -11546,6 +11546,7 @@
994 innobase_system_variables, /* system variables */
995 NULL /* reserved */
996 },
997
998=== modified file 'innodb_fake_changes.patch'
999--- innodb_fake_changes.patch 2011-07-06 11:02:28 +0000
1000+++ innodb_fake_changes.patch 2011-08-01 03:32:34 +0000
1001@@ -1,5 +1,5 @@
1002 # name : innodb_fake_changes.patch
1003-# introduced : 5.5.13
1004+# introduced : 5.5.14
1005 # maintainer : Yasufumi
1006 #
1007 #!!! notice !!!
1008@@ -182,20 +182,20 @@
1009 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
1010 --- a/storage/innobase/handler/ha_innodb.cc 2011-06-01 21:04:26.511385596 +0900
1011 +++ b/storage/innobase/handler/ha_innodb.cc 2011-06-01 21:04:53.723390828 +0900
1012-@@ -485,6 +485,12 @@
1013+@@ -486,6 +486,12 @@
1014 " or 2 (write at commit, flush once per second).",
1015 NULL, NULL, 1, 0, 2, 0);
1016
1017 +static MYSQL_THDVAR_BOOL(fake_changes, PLUGIN_VAR_OPCMDARG,
1018 + "In the transaction after enabled, UPDATE, INSERT and DELETE only move the cursor to the records "
1019 + "and do nothing other operations (no changes, no ibuf, no undo, no transaction log) in the transaction. "
1020-+ "ATTENTION: the transaction started after enabled is affected.",
1021++ "This is to cause replication prefetch IO. ATTENTION: the transaction started after enabled is affected.",
1022 + NULL, NULL, FALSE);
1023 +
1024
1025 static handler *innobase_create_handler(handlerton *hton,
1026 TABLE_SHARE *table,
1027-@@ -1676,6 +1682,8 @@
1028+@@ -1682,6 +1688,8 @@
1029 trx->check_unique_secondary = !thd_test_options(
1030 thd, OPTION_RELAXED_UNIQUE_CHECKS);
1031
1032@@ -204,7 +204,7 @@
1033 #ifdef EXTENDED_SLOWLOG
1034 if (thd_log_slow_verbosity(thd) & SLOG_V_INNODB) {
1035 trx->take_stats = TRUE;
1036-@@ -3152,6 +3160,11 @@
1037+@@ -3164,6 +3172,11 @@
1038 trx_search_latch_release_if_reserved(trx);
1039 }
1040
1041@@ -216,7 +216,7 @@
1042 /* Transaction is deregistered only in a commit or a rollback. If
1043 it is deregistered we know there cannot be resources to be freed
1044 and we could return immediately. For the time being, we play safe
1045-@@ -7491,6 +7504,12 @@
1046+@@ -7507,6 +7520,12 @@
1047
1048 trx = innobase_trx_allocate(thd);
1049
1050@@ -229,7 +229,7 @@
1051 /* Latch the InnoDB data dictionary exclusively so that no deadlocks
1052 or lock waits can happen in it during a table create operation.
1053 Drop table etc. do this latching in row0mysql.c. */
1054-@@ -7711,6 +7730,10 @@
1055+@@ -7727,6 +7746,10 @@
1056 DBUG_RETURN(HA_ERR_CRASHED);
1057 }
1058
1059@@ -240,7 +240,7 @@
1060 /* Truncate the table in InnoDB */
1061
1062 error = row_truncate_table_for_mysql(prebuilt->table, prebuilt->trx);
1063-@@ -7767,6 +7790,12 @@
1064+@@ -7783,6 +7806,12 @@
1065
1066 trx = innobase_trx_allocate(thd);
1067
1068@@ -253,7 +253,7 @@
1069 name_len = strlen(name);
1070
1071 ut_a(name_len < 1000);
1072-@@ -7853,6 +7882,12 @@
1073+@@ -7869,6 +7898,12 @@
1074 trx->mysql_thd = NULL;
1075 #else
1076 trx = innobase_trx_allocate(thd);
1077@@ -266,7 +266,7 @@
1078 #endif
1079 row_drop_database_for_mysql(namebuf, trx);
1080 my_free(namebuf);
1081-@@ -7958,6 +7993,11 @@
1082+@@ -7974,6 +8009,11 @@
1083 trx_search_latch_release_if_reserved(parent_trx);
1084
1085 trx = innobase_trx_allocate(thd);
1086@@ -278,7 +278,7 @@
1087
1088 error = innobase_rename_table(trx, from, to, TRUE);
1089
1090-@@ -10756,6 +10796,10 @@
1091+@@ -10772,6 +10812,10 @@
1092 return(0);
1093 }
1094
1095@@ -289,7 +289,7 @@
1096 thd_get_xid(thd, (MYSQL_XID*) &trx->xid);
1097
1098 /* Release a possible FIFO ticket and search latch. Since we will
1099-@@ -12226,6 +12270,7 @@
1100+@@ -12300,6 +12344,7 @@
1101 MYSQL_SYSVAR(rollback_segments),
1102 MYSQL_SYSVAR(corrupt_table_action),
1103 MYSQL_SYSVAR(lazy_drop_table),
1104@@ -300,7 +300,7 @@
1105 diff -ruN a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc
1106 --- a/storage/innobase/handler/handler0alter.cc 2011-04-11 19:44:03.000000000 +0900
1107 +++ b/storage/innobase/handler/handler0alter.cc 2011-06-01 21:04:53.728495636 +0900
1108-@@ -657,6 +657,10 @@
1109+@@ -695,6 +695,10 @@
1110 possible adaptive hash latch to avoid deadlocks of threads. */
1111 trx_search_latch_release_if_reserved(prebuilt->trx);
1112
1113@@ -311,7 +311,7 @@
1114 /* Check if the index name is reserved. */
1115 if (innobase_index_name_is_reserved(user_thd, key_info, num_of_keys)) {
1116 DBUG_RETURN(-1);
1117-@@ -682,6 +686,13 @@
1118+@@ -732,6 +736,13 @@
1119 /* Create a background transaction for the operations on
1120 the data dictionary tables. */
1121 trx = innobase_trx_allocate(user_thd);
1122@@ -325,7 +325,18 @@
1123 trx_start_if_not_started(trx);
1124
1125 /* Create table containing all indexes to be built in this
1126-@@ -1172,6 +1183,12 @@
1127+@@ -1092,6 +1103,10 @@
1128+ trx_search_latch_release_if_reserved(prebuilt->trx);
1129+ trx = prebuilt->trx;
1130+
1131++ if (trx->fake_changes) {
1132++ DBUG_RETURN(HA_ERR_WRONG_COMMAND);
1133++ }
1134++
1135+ /* Test and mark all the indexes to be dropped */
1136+
1137+ row_mysql_lock_data_dictionary(trx);
1138+@@ -1296,6 +1311,12 @@
1139 /* Create a background transaction for the operations on
1140 the data dictionary tables. */
1141 trx = innobase_trx_allocate(user_thd);
1142@@ -364,7 +375,7 @@
1143 diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c
1144 --- a/storage/innobase/lock/lock0lock.c 2011-06-01 21:04:26.543396960 +0900
1145 +++ b/storage/innobase/lock/lock0lock.c 2011-06-01 21:04:53.739416526 +0900
1146-@@ -3909,6 +3909,10 @@
1147+@@ -3912,6 +3912,10 @@
1148
1149 trx = thr_get_trx(thr);
1150
1151@@ -375,7 +386,7 @@
1152 lock_mutex_enter_kernel();
1153
1154 /* Look for stronger locks the same trx already has on the table */
1155-@@ -5107,6 +5111,11 @@
1156+@@ -5114,6 +5118,11 @@
1157 }
1158
1159 trx = thr_get_trx(thr);
1160@@ -387,7 +398,7 @@
1161 next_rec = page_rec_get_next_const(rec);
1162 next_rec_heap_no = page_rec_get_heap_no(next_rec);
1163
1164-@@ -5275,6 +5284,10 @@
1165+@@ -5282,6 +5291,10 @@
1166 return(DB_SUCCESS);
1167 }
1168
1169@@ -398,7 +409,7 @@
1170 heap_no = rec_offs_comp(offsets)
1171 ? rec_get_heap_no_new(rec)
1172 : rec_get_heap_no_old(rec);
1173-@@ -5333,6 +5346,10 @@
1174+@@ -5340,6 +5353,10 @@
1175 return(DB_SUCCESS);
1176 }
1177
1178@@ -409,7 +420,7 @@
1179 heap_no = page_rec_get_heap_no(rec);
1180
1181 /* Another transaction cannot have an implicit lock on the record,
1182-@@ -5420,6 +5437,10 @@
1183+@@ -5427,6 +5444,10 @@
1184 return(DB_SUCCESS);
1185 }
1186
1187@@ -420,7 +431,7 @@
1188 heap_no = page_rec_get_heap_no(rec);
1189
1190 lock_mutex_enter_kernel();
1191-@@ -5496,6 +5517,10 @@
1192+@@ -5503,6 +5524,10 @@
1193 return(DB_SUCCESS);
1194 }
1195
1196
1197=== modified file 'innodb_fast_checksum.patch'
1198--- innodb_fast_checksum.patch 2011-06-10 10:07:06 +0000
1199+++ innodb_fast_checksum.patch 2011-08-01 03:32:34 +0000
1200@@ -109,7 +109,7 @@
1201 diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
1202 --- a/storage/innobase/fil/fil0fil.c 2010-12-04 15:52:23.406513743 +0900
1203 +++ b/storage/innobase/fil/fil0fil.c 2010-12-04 15:53:45.020513800 +0900
1204-@@ -3094,13 +3094,24 @@
1205+@@ -3095,13 +3095,24 @@
1206 return(TRUE);
1207 }
1208
1209@@ -135,7 +135,7 @@
1210 return(FALSE);
1211 }
1212
1213-@@ -3116,7 +3127,9 @@
1214+@@ -3117,7 +3128,9 @@
1215 if (!zip_size) {
1216 mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM,
1217 srv_use_checksums
1218@@ -157,7 +157,7 @@
1219 static my_bool innobase_recovery_stats = TRUE;
1220 static my_bool innobase_locks_unsafe_for_binlog = FALSE;
1221 static my_bool innobase_overwrite_relay_log_info = FALSE;
1222-@@ -2620,6 +2621,7 @@
1223+@@ -2626,6 +2627,7 @@
1224
1225 srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite;
1226 srv_use_checksums = (ibool) innobase_use_checksums;
1227@@ -165,7 +165,7 @@
1228
1229 #ifdef HAVE_LARGE_PAGES
1230 if ((os_use_large_pages = (ibool) my_use_large_pages))
1231-@@ -11421,6 +11423,15 @@
1232+@@ -11433,6 +11435,15 @@
1233 "Disable with --skip-innodb-checksums.",
1234 NULL, NULL, TRUE);
1235
1236@@ -181,7 +181,7 @@
1237 static MYSQL_SYSVAR_STR(data_home_dir, innobase_data_home_dir,
1238 PLUGIN_VAR_READONLY,
1239 "The common part for InnoDB table spaces.",
1240-@@ -11930,6 +11941,7 @@
1241+@@ -11947,6 +11958,7 @@
1242 MYSQL_SYSVAR(buffer_pool_size),
1243 MYSQL_SYSVAR(buffer_pool_instances),
1244 MYSQL_SYSVAR(checksums),
1245@@ -192,7 +192,7 @@
1246 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
1247 --- a/storage/innobase/include/buf0buf.h 2010-12-04 15:52:23.458514045 +0900
1248 +++ b/storage/innobase/include/buf0buf.h 2010-12-04 15:53:45.044514150 +0900
1249-@@ -604,6 +604,11 @@
1250+@@ -607,6 +607,11 @@
1251 buf_calc_page_new_checksum(
1252 /*=======================*/
1253 const byte* page); /*!< in: buffer page */
1254
1255=== modified file 'innodb_files_extend.patch'
1256--- innodb_files_extend.patch 2011-06-10 10:07:06 +0000
1257+++ innodb_files_extend.patch 2011-08-01 03:32:34 +0000
1258@@ -17,7 +17,7 @@
1259 fprintf(stderr,
1260 "InnoDB: Error: the size of single-table"
1261 " tablespace file %s\n"
1262-@@ -4151,7 +4151,7 @@
1263+@@ -4152,7 +4152,7 @@
1264
1265 size = (((ib_int64_t)size_high) << 32) + (ib_int64_t)size_low;
1266 #ifndef UNIV_HOTBACKUP
1267@@ -26,7 +26,7 @@
1268 fprintf(stderr,
1269 "InnoDB: Error: the size of single-table tablespace"
1270 " file %s\n"
1271-@@ -4171,7 +4171,7 @@
1272+@@ -4172,7 +4172,7 @@
1273 /* Align the memory for file i/o if we might have O_DIRECT set */
1274 page = ut_align(buf2, UNIV_PAGE_SIZE);
1275
1276@@ -35,7 +35,7 @@
1277 success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
1278
1279 /* We have to read the tablespace id from the file */
1280-@@ -5149,9 +5149,9 @@
1281+@@ -5150,9 +5150,9 @@
1282 ut_ad(ut_is_2pow(zip_size));
1283 ut_ad(buf);
1284 ut_ad(len > 0);
1285@@ -112,7 +112,7 @@
1286 static my_bool innobase_thread_concurrency_timer_based;
1287 static long long innobase_buffer_pool_size, innobase_log_file_size;
1288
1289-@@ -2316,6 +2319,65 @@
1290+@@ -2322,6 +2325,65 @@
1291 }
1292 #endif /* DBUG_OFF */
1293
1294@@ -178,7 +178,7 @@
1295 #ifndef MYSQL_SERVER
1296 innodb_overwrite_relay_log_info = FALSE;
1297 #endif
1298-@@ -7241,9 +7303,9 @@
1299+@@ -7253,9 +7315,9 @@
1300 | DICT_TF_COMPACT
1301 | DICT_TF_FORMAT_ZIP
1302 << DICT_TF_FORMAT_SHIFT;
1303@@ -191,7 +191,7 @@
1304 }
1305 }
1306
1307-@@ -11432,6 +11494,16 @@
1308+@@ -11444,6 +11506,16 @@
1309 "#### Attention: The checksum is not compatible for normal or disabled version! ####",
1310 NULL, NULL, FALSE);
1311
1312@@ -208,7 +208,7 @@
1313 static MYSQL_SYSVAR_STR(data_home_dir, innobase_data_home_dir,
1314 PLUGIN_VAR_READONLY,
1315 "The common part for InnoDB table spaces.",
1316-@@ -11936,6 +12008,8 @@
1317+@@ -11953,6 +12025,8 @@
1318 NULL, NULL, 0, &corrupt_table_action_typelib);
1319
1320 static struct st_mysql_sys_var* innobase_system_variables[]= {
1321@@ -220,7 +220,7 @@
1322 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
1323 --- a/storage/innobase/include/buf0buf.h 2010-12-04 15:55:21.375482937 +0900
1324 +++ b/storage/innobase/include/buf0buf.h 2010-12-04 15:55:58.258469088 +0900
1325-@@ -1683,7 +1683,7 @@
1326+@@ -1686,7 +1686,7 @@
1327 time_t last_printout_time;
1328 /*!< when buf_print_io was last time
1329 called */
1330@@ -229,7 +229,7 @@
1331 /*!< Statistics of buddy system,
1332 indexed by block size */
1333 buf_pool_stat_t stat; /*!< current statistics */
1334-@@ -1779,7 +1779,7 @@
1335+@@ -1782,7 +1782,7 @@
1336 /* @{ */
1337 UT_LIST_BASE_NODE_T(buf_page_t) zip_clean;
1338 /*!< unmodified compressed pages */
1339@@ -238,7 +238,7 @@
1340 /*!< buddy free lists */
1341
1342 buf_page_t watch[BUF_POOL_WATCH_SIZE];
1343-@@ -1787,9 +1787,9 @@
1344+@@ -1790,9 +1790,9 @@
1345 pool watches. Protected by
1346 buf_pool->mutex. */
1347
1348
1349=== modified file 'innodb_fix_misc.patch'
1350--- innodb_fix_misc.patch 2011-06-29 09:32:51 +0000
1351+++ innodb_fix_misc.patch 2011-08-01 03:32:34 +0000
1352@@ -5,15 +5,639 @@
1353 # Bug fix for
1354 # http://bugs.mysql.com/56433 (always: because good for all users, and safe)
1355 # and http://bugs.mysql.com/51325 (optional: innodb_lazy_drop_table)
1356+# and http://bugs.mysql.com/61341 (needed for innodb_lazy_drop_table to remove buf_LRU_insert_zip_clean())
1357 # were added. They may be removed in the future when will be fixed officially.
1358 #
1359 #!!! notice !!!
1360 # Any small change to this file in the main branch
1361 # should be done or reviewed by the maintainer!
1362+diff -ruN a/storage/innobase/buf/buf0buddy.c b/storage/innobase/buf/buf0buddy.c
1363+--- a/storage/innobase/buf/buf0buddy.c 2011-07-05 15:15:38.473447294 +0900
1364++++ b/storage/innobase/buf/buf0buddy.c 2011-07-05 15:16:09.258444327 +0900
1365+@@ -378,7 +378,6 @@
1366+ buf_page_t* bpage, /*!< in: block to relocate */
1367+ buf_page_t* dpage) /*!< in: free block to relocate to */
1368+ {
1369+- buf_page_t* b;
1370+ buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
1371+
1372+ //ut_ad(buf_pool_mutex_own(buf_pool));
1373+@@ -421,16 +420,6 @@
1374+ buf_relocate(bpage, dpage);
1375+ ut_d(bpage->state = BUF_BLOCK_ZIP_FREE);
1376+
1377+- /* relocate buf_pool->zip_clean */
1378+- b = UT_LIST_GET_PREV(zip_list, dpage);
1379+- UT_LIST_REMOVE(zip_list, buf_pool->zip_clean, dpage);
1380+-
1381+- if (b) {
1382+- UT_LIST_INSERT_AFTER(zip_list, buf_pool->zip_clean, b, dpage);
1383+- } else {
1384+- UT_LIST_ADD_FIRST(zip_list, buf_pool->zip_clean, dpage);
1385+- }
1386+-
1387+ UNIV_MEM_INVALID(bpage, sizeof *bpage);
1388+
1389+ mutex_exit(&buf_pool->zip_mutex);
1390 diff -ruN a/storage/innobase/buf/buf0buf.c b/storage/innobase/buf/buf0buf.c
1391 --- a/storage/innobase/buf/buf0buf.c 2011-02-23 19:00:48.178696354 +0900
1392 +++ b/storage/innobase/buf/buf0buf.c 2011-02-23 19:01:19.138826278 +0900
1393-@@ -4084,6 +4084,7 @@
1394+@@ -1189,72 +1189,6 @@
1395+ return(NULL);
1396+ }
1397+
1398+-/*********************************************************************//**
1399+-Checks that all blocks in the buffer chunk are in BUF_BLOCK_NOT_USED state.
1400+-@return TRUE if all freed */
1401+-static
1402+-ibool
1403+-buf_chunk_all_free(
1404+-/*===============*/
1405+- const buf_chunk_t* chunk) /*!< in: chunk being checked */
1406+-{
1407+- const buf_block_t* block;
1408+- ulint i;
1409+-
1410+- block = chunk->blocks;
1411+-
1412+- for (i = chunk->size; i--; block++) {
1413+-
1414+- if (buf_block_get_state(block) != BUF_BLOCK_NOT_USED) {
1415+-
1416+- return(FALSE);
1417+- }
1418+- }
1419+-
1420+- return(TRUE);
1421+-}
1422+-
1423+-/********************************************************************//**
1424+-Frees a chunk of buffer frames. */
1425+-static
1426+-void
1427+-buf_chunk_free(
1428+-/*===========*/
1429+- buf_pool_t* buf_pool, /*!< in: buffer pool instance */
1430+- buf_chunk_t* chunk) /*!< out: chunk of buffers */
1431+-{
1432+- buf_block_t* block;
1433+- const buf_block_t* block_end;
1434+-
1435+- //ut_ad(buf_pool_mutex_own(buf_pool)); /* but we need all mutex here */
1436+-
1437+- block_end = chunk->blocks + chunk->size;
1438+-
1439+- for (block = chunk->blocks; block < block_end; block++) {
1440+- ut_a(buf_block_get_state(block) == BUF_BLOCK_NOT_USED);
1441+- ut_a(!block->page.zip.data);
1442+-
1443+- ut_ad(!block->page.in_LRU_list);
1444+- ut_ad(!block->in_unzip_LRU_list);
1445+- ut_ad(!block->page.in_flush_list);
1446+- /* Remove the block from the free list. */
1447+- mutex_enter(&buf_pool->free_list_mutex);
1448+- ut_ad(block->page.in_free_list);
1449+- UT_LIST_REMOVE(free, buf_pool->free, (&block->page));
1450+- mutex_exit(&buf_pool->free_list_mutex);
1451+-
1452+- /* Free the latches. */
1453+- mutex_free(&block->mutex);
1454+- rw_lock_free(&block->lock);
1455+-#ifdef UNIV_SYNC_DEBUG
1456+- rw_lock_free(&block->debug_latch);
1457+-#endif /* UNIV_SYNC_DEBUG */
1458+- UNIV_MEM_UNDESC(block);
1459+- }
1460+-
1461+- os_mem_free_large(chunk->mem, chunk->mem_size);
1462+-}
1463+-
1464+ /********************************************************************//**
1465+ Set buffer pool size variables after resizing it */
1466+ static
1467+@@ -1380,8 +1314,6 @@
1468+ chunk = chunks + buf_pool->n_chunks;
1469+
1470+ while (--chunk >= chunks) {
1471+- /* Bypass the checks of buf_chunk_free(), since they
1472+- would fail at shutdown. */
1473+ os_mem_free_large(chunk->mem, chunk->mem_size);
1474+ }
1475+
1476+@@ -1644,290 +1576,6 @@
1477+ HASH_INSERT(buf_page_t, hash, buf_pool->page_hash, fold, dpage);
1478+ }
1479+
1480+-/********************************************************************//**
1481+-Shrinks a buffer pool instance. */
1482+-static
1483+-void
1484+-buf_pool_shrink_instance(
1485+-/*=====================*/
1486+- buf_pool_t* buf_pool, /*!< in: buffer pool instance */
1487+- ulint chunk_size) /*!< in: number of pages to remove */
1488+-{
1489+- buf_chunk_t* chunks;
1490+- buf_chunk_t* chunk;
1491+- ulint max_size;
1492+- ulint max_free_size;
1493+- buf_chunk_t* max_chunk;
1494+- buf_chunk_t* max_free_chunk;
1495+-
1496+- ut_ad(!buf_pool_mutex_own(buf_pool));
1497+-
1498+-try_again:
1499+- btr_search_disable(); /* Empty the adaptive hash index again */
1500+- //buf_pool_mutex_enter(buf_pool);
1501+- mutex_enter(&buf_pool->LRU_list_mutex);
1502+-
1503+-shrink_again:
1504+- if (buf_pool->n_chunks <= 1) {
1505+-
1506+- /* Cannot shrink if there is only one chunk */
1507+- goto func_done;
1508+- }
1509+-
1510+- /* Search for the largest free chunk
1511+- not larger than the size difference */
1512+- chunks = buf_pool->chunks;
1513+- chunk = chunks + buf_pool->n_chunks;
1514+- max_size = max_free_size = 0;
1515+- max_chunk = max_free_chunk = NULL;
1516+-
1517+- while (--chunk >= chunks) {
1518+- if (chunk->size <= chunk_size
1519+- && chunk->size > max_free_size) {
1520+- if (chunk->size > max_size) {
1521+- max_size = chunk->size;
1522+- max_chunk = chunk;
1523+- }
1524+-
1525+- if (buf_chunk_all_free(chunk)) {
1526+- max_free_size = chunk->size;
1527+- max_free_chunk = chunk;
1528+- }
1529+- }
1530+- }
1531+-
1532+- if (!max_free_size) {
1533+-
1534+- ulint dirty = 0;
1535+- ulint nonfree = 0;
1536+- buf_block_t* block;
1537+- buf_block_t* bend;
1538+-
1539+- /* Cannot shrink: try again later
1540+- (do not assign srv_buf_pool_old_size) */
1541+- if (!max_chunk) {
1542+-
1543+- goto func_exit;
1544+- }
1545+-
1546+- block = max_chunk->blocks;
1547+- bend = block + max_chunk->size;
1548+-
1549+- /* Move the blocks of chunk to the end of the
1550+- LRU list and try to flush them. */
1551+- for (; block < bend; block++) {
1552+- switch (buf_block_get_state(block)) {
1553+- case BUF_BLOCK_NOT_USED:
1554+- continue;
1555+- case BUF_BLOCK_FILE_PAGE:
1556+- break;
1557+- default:
1558+- nonfree++;
1559+- continue;
1560+- }
1561+-
1562+- mutex_enter(&block->mutex);
1563+- /* The following calls will temporarily
1564+- release block->mutex and buf_pool->mutex.
1565+- Therefore, we have to always retry,
1566+- even if !dirty && !nonfree. */
1567+-
1568+- if (!buf_flush_ready_for_replace(&block->page)) {
1569+-
1570+- buf_LRU_make_block_old(&block->page);
1571+- dirty++;
1572+- } else if (buf_LRU_free_block(&block->page, TRUE, TRUE)
1573+- != BUF_LRU_FREED) {
1574+- nonfree++;
1575+- }
1576+-
1577+- mutex_exit(&block->mutex);
1578+- }
1579+-
1580+- //buf_pool_mutex_exit(buf_pool);
1581+- mutex_exit(&buf_pool->LRU_list_mutex);
1582+-
1583+- /* Request for a flush of the chunk if it helps.
1584+- Do not flush if there are non-free blocks, since
1585+- flushing will not make the chunk freeable. */
1586+- if (nonfree) {
1587+- /* Avoid busy-waiting. */
1588+- os_thread_sleep(100000);
1589+- } else if (dirty
1590+- && buf_flush_LRU(buf_pool, dirty)
1591+- == ULINT_UNDEFINED) {
1592+-
1593+- buf_flush_wait_batch_end(buf_pool, BUF_FLUSH_LRU);
1594+- }
1595+-
1596+- goto try_again;
1597+- }
1598+-
1599+- max_size = max_free_size;
1600+- max_chunk = max_free_chunk;
1601+-
1602+- buf_pool->old_pool_size = buf_pool->curr_pool_size;
1603+-
1604+- /* Rewrite buf_pool->chunks. Copy everything but max_chunk. */
1605+- chunks = mem_alloc((buf_pool->n_chunks - 1) * sizeof *chunks);
1606+- memcpy(chunks, buf_pool->chunks,
1607+- (max_chunk - buf_pool->chunks) * sizeof *chunks);
1608+- memcpy(chunks + (max_chunk - buf_pool->chunks),
1609+- max_chunk + 1,
1610+- buf_pool->chunks + buf_pool->n_chunks
1611+- - (max_chunk + 1));
1612+- ut_a(buf_pool->curr_size > max_chunk->size);
1613+- buf_pool->curr_size -= max_chunk->size;
1614+- buf_pool->curr_pool_size = buf_pool->curr_size * UNIV_PAGE_SIZE;
1615+- chunk_size -= max_chunk->size;
1616+- buf_chunk_free(buf_pool, max_chunk);
1617+- mem_free(buf_pool->chunks);
1618+- buf_pool->chunks = chunks;
1619+- buf_pool->n_chunks--;
1620+-
1621+- /* Allow a slack of one megabyte. */
1622+- if (chunk_size > 1048576 / UNIV_PAGE_SIZE) {
1623+-
1624+- goto shrink_again;
1625+- }
1626+- goto func_exit;
1627+-
1628+-func_done:
1629+- buf_pool->old_pool_size = buf_pool->curr_pool_size;
1630+-func_exit:
1631+- //buf_pool_mutex_exit(buf_pool);
1632+- mutex_exit(&buf_pool->LRU_list_mutex);
1633+- btr_search_enable();
1634+-}
1635+-
1636+-/********************************************************************//**
1637+-Shrinks the buffer pool. */
1638+-static
1639+-void
1640+-buf_pool_shrink(
1641+-/*============*/
1642+- ulint chunk_size) /*!< in: number of pages to remove */
1643+-{
1644+- ulint i;
1645+-
1646+- for (i = 0; i < srv_buf_pool_instances; i++) {
1647+- buf_pool_t* buf_pool;
1648+- ulint instance_chunk_size;
1649+-
1650+- instance_chunk_size = chunk_size / srv_buf_pool_instances;
1651+- buf_pool = buf_pool_from_array(i);
1652+- buf_pool_shrink_instance(buf_pool, instance_chunk_size);
1653+- }
1654+-
1655+- buf_pool_set_sizes();
1656+-}
1657+-
1658+-/********************************************************************//**
1659+-Rebuild buf_pool->page_hash for a buffer pool instance. */
1660+-static
1661+-void
1662+-buf_pool_page_hash_rebuild_instance(
1663+-/*================================*/
1664+- buf_pool_t* buf_pool) /*!< in: buffer pool instance */
1665+-{
1666+- ulint i;
1667+- buf_page_t* b;
1668+- buf_chunk_t* chunk;
1669+- ulint n_chunks;
1670+- hash_table_t* zip_hash;
1671+- hash_table_t* page_hash;
1672+-
1673+- //buf_pool_mutex_enter(buf_pool);
1674+- mutex_enter(&buf_pool->LRU_list_mutex);
1675+- rw_lock_x_lock(&buf_pool->page_hash_latch);
1676+-
1677+- /* Free, create, and populate the hash table. */
1678+- hash_table_free(buf_pool->page_hash);
1679+- buf_pool->page_hash = page_hash = hash_create(2 * buf_pool->curr_size);
1680+- zip_hash = hash_create(2 * buf_pool->curr_size);
1681+-
1682+- HASH_MIGRATE(buf_pool->zip_hash, zip_hash, buf_page_t, hash,
1683+- BUF_POOL_ZIP_FOLD_BPAGE);
1684+-
1685+- hash_table_free(buf_pool->zip_hash);
1686+- buf_pool->zip_hash = zip_hash;
1687+-
1688+- /* Insert the uncompressed file pages to buf_pool->page_hash. */
1689+-
1690+- chunk = buf_pool->chunks;
1691+- n_chunks = buf_pool->n_chunks;
1692+-
1693+- for (i = 0; i < n_chunks; i++, chunk++) {
1694+- ulint j;
1695+- buf_block_t* block = chunk->blocks;
1696+-
1697+- for (j = 0; j < chunk->size; j++, block++) {
1698+- if (buf_block_get_state(block)
1699+- == BUF_BLOCK_FILE_PAGE) {
1700+- ut_ad(!block->page.in_zip_hash);
1701+- ut_ad(block->page.in_page_hash);
1702+-
1703+- HASH_INSERT(buf_page_t, hash, page_hash,
1704+- buf_page_address_fold(
1705+- block->page.space,
1706+- block->page.offset),
1707+- &block->page);
1708+- }
1709+- }
1710+- }
1711+-
1712+- /* Insert the compressed-only pages to buf_pool->page_hash.
1713+- All such blocks are either in buf_pool->zip_clean or
1714+- in buf_pool->flush_list. */
1715+-
1716+- mutex_enter(&buf_pool->zip_mutex);
1717+- for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b;
1718+- b = UT_LIST_GET_NEXT(zip_list, b)) {
1719+- ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE);
1720+- ut_ad(!b->in_flush_list);
1721+- ut_ad(b->in_LRU_list);
1722+- ut_ad(b->in_page_hash);
1723+- ut_ad(!b->in_zip_hash);
1724+-
1725+- HASH_INSERT(buf_page_t, hash, page_hash,
1726+- buf_page_address_fold(b->space, b->offset), b);
1727+- }
1728+- mutex_exit(&buf_pool->zip_mutex);
1729+-
1730+- buf_flush_list_mutex_enter(buf_pool);
1731+- for (b = UT_LIST_GET_FIRST(buf_pool->flush_list); b;
1732+- b = UT_LIST_GET_NEXT(flush_list, b)) {
1733+- ut_ad(b->in_flush_list);
1734+- ut_ad(b->in_LRU_list);
1735+- ut_ad(b->in_page_hash);
1736+- ut_ad(!b->in_zip_hash);
1737+-
1738+- switch (buf_page_get_state(b)) {
1739+- case BUF_BLOCK_ZIP_DIRTY:
1740+- HASH_INSERT(buf_page_t, hash, page_hash,
1741+- buf_page_address_fold(b->space,
1742+- b->offset), b);
1743+- break;
1744+- case BUF_BLOCK_FILE_PAGE:
1745+- /* uncompressed page */
1746+- break;
1747+- case BUF_BLOCK_ZIP_FREE:
1748+- case BUF_BLOCK_ZIP_PAGE:
1749+- case BUF_BLOCK_NOT_USED:
1750+- case BUF_BLOCK_READY_FOR_USE:
1751+- case BUF_BLOCK_MEMORY:
1752+- case BUF_BLOCK_REMOVE_HASH:
1753+- ut_error;
1754+- break;
1755+- }
1756+- }
1757+-
1758+- buf_flush_list_mutex_exit(buf_pool);
1759+- //buf_pool_mutex_exit(buf_pool);
1760+- mutex_exit(&buf_pool->LRU_list_mutex);
1761+- rw_lock_x_unlock(&buf_pool->page_hash_latch);
1762+-}
1763+-
1764+ /********************************************************************
1765+ Determine if a block is a sentinel for a buffer pool watch.
1766+ @return TRUE if a sentinel for a buffer pool watch, FALSE if not */
1767+@@ -2049,127 +1697,6 @@
1768+ return(NULL);
1769+ }
1770+
1771+-/********************************************************************//**
1772+-Rebuild buf_pool->page_hash. */
1773+-static
1774+-void
1775+-buf_pool_page_hash_rebuild(void)
1776+-/*============================*/
1777+-{
1778+- ulint i;
1779+-
1780+- for (i = 0; i < srv_buf_pool_instances; i++) {
1781+- buf_pool_page_hash_rebuild_instance(buf_pool_from_array(i));
1782+- }
1783+-}
1784+-
1785+-/********************************************************************//**
1786+-Increase the buffer pool size of one buffer pool instance. */
1787+-static
1788+-void
1789+-buf_pool_increase_instance(
1790+-/*=======================*/
1791+- buf_pool_t* buf_pool, /*!< in: buffer pool instane */
1792+- ulint change_size) /*!< in: new size of the pool */
1793+-{
1794+- buf_chunk_t* chunks;
1795+- buf_chunk_t* chunk;
1796+-
1797+- mutex_enter(&buf_pool->LRU_list_mutex);
1798+- rw_lock_x_lock(&buf_pool->page_hash_latch);
1799+- buf_pool_mutex_enter(buf_pool);
1800+- chunks = mem_alloc((buf_pool->n_chunks + 1) * sizeof *chunks);
1801+-
1802+- memcpy(chunks, buf_pool->chunks, buf_pool->n_chunks * sizeof *chunks);
1803+-
1804+- chunk = &chunks[buf_pool->n_chunks];
1805+-
1806+- if (!buf_chunk_init(buf_pool, chunk, change_size)) {
1807+- mem_free(chunks);
1808+- } else {
1809+- buf_pool->old_pool_size = buf_pool->curr_pool_size;
1810+- buf_pool->curr_size += chunk->size;
1811+- buf_pool->curr_pool_size = buf_pool->curr_size * UNIV_PAGE_SIZE;
1812+- mem_free(buf_pool->chunks);
1813+- buf_pool->chunks = chunks;
1814+- buf_pool->n_chunks++;
1815+- }
1816+-
1817+- mutex_exit(&buf_pool->LRU_list_mutex);
1818+- rw_lock_x_unlock(&buf_pool->page_hash_latch);
1819+- buf_pool_mutex_exit(buf_pool);
1820+-}
1821+-
1822+-/********************************************************************//**
1823+-Increase the buffer pool size. */
1824+-static
1825+-void
1826+-buf_pool_increase(
1827+-/*==============*/
1828+- ulint change_size)
1829+-{
1830+- ulint i;
1831+-
1832+- for (i = 0; i < srv_buf_pool_instances; i++) {
1833+- buf_pool_increase_instance(
1834+- buf_pool_from_array(i),
1835+- change_size / srv_buf_pool_instances);
1836+- }
1837+-
1838+- buf_pool_set_sizes();
1839+-}
1840+-
1841+-/********************************************************************//**
1842+-Resizes the buffer pool. */
1843+-UNIV_INTERN
1844+-void
1845+-buf_pool_resize(void)
1846+-/*=================*/
1847+-{
1848+- ulint change_size;
1849+- ulint min_change_size = 1048576 * srv_buf_pool_instances;
1850+-
1851+- buf_pool_mutex_enter_all();
1852+-
1853+- if (srv_buf_pool_old_size == srv_buf_pool_size) {
1854+-
1855+- buf_pool_mutex_exit_all();
1856+-
1857+- return;
1858+-
1859+- } else if (srv_buf_pool_curr_size + min_change_size
1860+- > srv_buf_pool_size) {
1861+-
1862+- change_size = (srv_buf_pool_curr_size - srv_buf_pool_size)
1863+- / UNIV_PAGE_SIZE;
1864+-
1865+- buf_pool_mutex_exit_all();
1866+-
1867+- /* Disable adaptive hash indexes and empty the index
1868+- in order to free up memory in the buffer pool chunks. */
1869+- buf_pool_shrink(change_size);
1870+-
1871+- } else if (srv_buf_pool_curr_size + min_change_size
1872+- < srv_buf_pool_size) {
1873+-
1874+- /* Enlarge the buffer pool by at least one megabyte */
1875+-
1876+- change_size = srv_buf_pool_size - srv_buf_pool_curr_size;
1877+-
1878+- buf_pool_mutex_exit_all();
1879+-
1880+- buf_pool_increase(change_size);
1881+- } else {
1882+- srv_buf_pool_size = srv_buf_pool_old_size;
1883+-
1884+- buf_pool_mutex_exit_all();
1885+-
1886+- return;
1887+- }
1888+-
1889+- buf_pool_page_hash_rebuild();
1890+-}
1891+-
1892+ /****************************************************************//**
1893+ Remove the sentinel block for the watch before replacing it with a real block.
1894+ buf_page_watch_clear() or buf_page_watch_occurred() will notice that
1895+@@ -2513,6 +2040,27 @@
1896+ #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
1897+ }
1898+
1899++ if (UNIV_UNLIKELY(bpage->space_was_being_deleted)) {
1900++ /* This page is obsoleted, should discard and retry */
1901++ rw_lock_s_unlock(&buf_pool->page_hash_latch);
1902++
1903++ mutex_enter(&buf_pool->LRU_list_mutex);
1904++ block_mutex = buf_page_get_mutex_enter(bpage);
1905++
1906++ if (UNIV_UNLIKELY(!block_mutex)) {
1907++ mutex_exit(&buf_pool->LRU_list_mutex);
1908++ goto lookup;
1909++ }
1910++
1911++ buf_LRU_free_block(bpage, TRUE, TRUE);
1912++
1913++ mutex_exit(&buf_pool->LRU_list_mutex);
1914++ mutex_exit(block_mutex);
1915++ block_mutex = NULL;
1916++
1917++ goto lookup;
1918++ }
1919++
1920+ if (UNIV_UNLIKELY(!bpage->zip.data)) {
1921+ /* There is no compressed page. */
1922+ err_exit:
1923+@@ -3026,6 +2574,27 @@
1924+ block = (buf_block_t*) buf_page_hash_get_low(
1925+ buf_pool, space, offset, fold);
1926+ if (block) {
1927++ if (UNIV_UNLIKELY(block->page.space_was_being_deleted)) {
1928++ /* This page is obsoleted, should discard and retry */
1929++ rw_lock_s_unlock(&buf_pool->page_hash_latch);
1930++
1931++ mutex_enter(&buf_pool->LRU_list_mutex);
1932++ block_mutex = buf_page_get_mutex_enter((buf_page_t*)block);
1933++
1934++ if (UNIV_UNLIKELY(!block_mutex)) {
1935++ mutex_exit(&buf_pool->LRU_list_mutex);
1936++ goto loop;
1937++ }
1938++
1939++ buf_LRU_free_block((buf_page_t*)block, TRUE, TRUE);
1940++
1941++ mutex_exit(&buf_pool->LRU_list_mutex);
1942++ mutex_exit(block_mutex);
1943++ block_mutex = NULL;
1944++
1945++ goto loop;
1946++ }
1947++
1948+ block_mutex = buf_page_get_mutex_enter((buf_page_t*)block);
1949+ ut_a(block_mutex);
1950+ }
1951+@@ -3225,8 +2794,6 @@
1952+
1953+ if (buf_page_get_state(&block->page)
1954+ == BUF_BLOCK_ZIP_PAGE) {
1955+- UT_LIST_REMOVE(zip_list, buf_pool->zip_clean,
1956+- &block->page);
1957+ ut_ad(!block->page.in_flush_list);
1958+ } else {
1959+ /* Relocate buf_pool->flush_list. */
1960+@@ -3943,11 +3510,28 @@
1961+
1962+ fold = buf_page_address_fold(space, offset);
1963+
1964++retry:
1965+ //buf_pool_mutex_enter(buf_pool);
1966+ mutex_enter(&buf_pool->LRU_list_mutex);
1967+ rw_lock_x_lock(&buf_pool->page_hash_latch);
1968+
1969+ watch_page = buf_page_hash_get_low(buf_pool, space, offset, fold);
1970++
1971++ if (UNIV_UNLIKELY(watch_page && watch_page->space_was_being_deleted)) {
1972++ mutex_t* block_mutex = buf_page_get_mutex_enter(watch_page);
1973++
1974++ /* This page is obsoleted, should discard and retry */
1975++ rw_lock_x_unlock(&buf_pool->page_hash_latch);
1976++ ut_a(block_mutex);
1977++
1978++ buf_LRU_free_block(watch_page, TRUE, TRUE);
1979++
1980++ mutex_exit(&buf_pool->LRU_list_mutex);
1981++ mutex_exit(block_mutex);
1982++
1983++ goto retry;
1984++ }
1985++
1986+ if (watch_page && !buf_pool_watch_is_sentinel(buf_pool, watch_page)) {
1987+ /* The page is already in the buffer pool. */
1988+ watch_page = NULL;
1989+@@ -4084,6 +3668,7 @@
1990 bpage->state = BUF_BLOCK_ZIP_PAGE;
1991 bpage->space = space;
1992 bpage->offset = offset;
1993@@ -21,6 +645,121 @@
1994
1995
1996 #ifdef UNIV_DEBUG
1997+@@ -4112,7 +3697,6 @@
1998+
1999+ /* The block must be put to the LRU list, to the old blocks */
2000+ buf_LRU_add_block(bpage, TRUE/* to old blocks */);
2001+- buf_LRU_insert_zip_clean(bpage);
2002+
2003+ mutex_exit(&buf_pool->LRU_list_mutex);
2004+
2005+@@ -4167,6 +3751,7 @@
2006+
2007+ fold = buf_page_address_fold(space, offset);
2008+
2009++retry:
2010+ //buf_pool_mutex_enter(buf_pool);
2011+ mutex_enter(&buf_pool->LRU_list_mutex);
2012+ rw_lock_x_lock(&buf_pool->page_hash_latch);
2013+@@ -4174,6 +3759,21 @@
2014+ block = (buf_block_t*) buf_page_hash_get_low(
2015+ buf_pool, space, offset, fold);
2016+
2017++ if (UNIV_UNLIKELY(block && block->page.space_was_being_deleted)) {
2018++ mutex_t* block_mutex = buf_page_get_mutex_enter((buf_page_t*)block);
2019++
2020++ /* This page is obsoleted, should discard and retry */
2021++ rw_lock_x_unlock(&buf_pool->page_hash_latch);
2022++ ut_a(block_mutex);
2023++
2024++ buf_LRU_free_block((buf_page_t*)block, TRUE, TRUE);
2025++
2026++ mutex_exit(&buf_pool->LRU_list_mutex);
2027++ mutex_exit(block_mutex);
2028++
2029++ goto retry;
2030++ }
2031++
2032+ if (block
2033+ && buf_page_in_file(&block->page)
2034+ && !buf_pool_watch_is_sentinel(buf_pool, &block->page)) {
2035+@@ -4465,9 +4065,9 @@
2036+ }
2037+
2038+ if (io_type == BUF_IO_WRITE
2039+- && (buf_page_get_state(bpage) == BUF_BLOCK_ZIP_DIRTY
2040+- || buf_page_get_flush_type(bpage) == BUF_FLUSH_LRU)) {
2041+- /* to keep consistency at buf_LRU_insert_zip_clean() */
2042++ && (/* buf_page_get_state(bpage) == BUF_BLOCK_ZIP_DIRTY
2043++ ||*/ buf_page_get_flush_type(bpage) == BUF_FLUSH_LRU)) {
2044++ /* (REMOVED) to keep consistency at buf_LRU_insert_zip_clean() */
2045+ have_LRU_mutex = TRUE; /* optimistic */
2046+ }
2047+ retry_mutex:
2048+@@ -4788,35 +4388,7 @@
2049+
2050+ mutex_enter(&buf_pool->zip_mutex);
2051+
2052+- /* Check clean compressed-only blocks. */
2053+-
2054+- for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b;
2055+- b = UT_LIST_GET_NEXT(zip_list, b)) {
2056+- ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE);
2057+- switch (buf_page_get_io_fix(b)) {
2058+- case BUF_IO_NONE:
2059+- /* All clean blocks should be I/O-unfixed. */
2060+- break;
2061+- case BUF_IO_READ:
2062+- /* In buf_LRU_free_block(), we temporarily set
2063+- b->io_fix = BUF_IO_READ for a newly allocated
2064+- control block in order to prevent
2065+- buf_page_get_gen() from decompressing the block. */
2066+- break;
2067+- default:
2068+- ut_error;
2069+- break;
2070+- }
2071+-
2072+- /* It is OK to read oldest_modification here because
2073+- we have acquired buf_pool->zip_mutex above which acts
2074+- as the 'block->mutex' for these bpages. */
2075+- ut_a(!b->oldest_modification);
2076+- ut_a(buf_page_hash_get(buf_pool, b->space, b->offset) == b);
2077+-
2078+- n_lru++;
2079+- n_zip++;
2080+- }
2081++ /* Check clean compressed-only blocks. (zip_clean list was removed)*/
2082+
2083+ /* Check dirty blocks. */
2084+
2085+@@ -4880,7 +4452,7 @@
2086+ ut_error;
2087+ }
2088+
2089+- ut_a(UT_LIST_GET_LEN(buf_pool->LRU) == n_lru);
2090++ //ut_a(UT_LIST_GET_LEN(buf_pool->LRU) == n_lru); /* zip_clean list was removed */
2091+ /* because of latching order with block->mutex, we cannot get needed mutexes before that */
2092+ /*
2093+ if (UT_LIST_GET_LEN(buf_pool->free) != n_free) {
2094+@@ -5116,17 +4688,6 @@
2095+
2096+ /* Traverse the lists of clean and dirty compressed-only blocks. */
2097+
2098+- for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b;
2099+- b = UT_LIST_GET_NEXT(zip_list, b)) {
2100+- ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE);
2101+- ut_a(buf_page_get_io_fix(b) != BUF_IO_WRITE);
2102+-
2103+- if (b->buf_fix_count != 0
2104+- || buf_page_get_io_fix(b) != BUF_IO_NONE) {
2105+- fixed_pages_number++;
2106+- }
2107+- }
2108+-
2109+ buf_flush_list_mutex_enter(buf_pool);
2110+ for (b = UT_LIST_GET_FIRST(buf_pool->flush_list); b;
2111+ b = UT_LIST_GET_NEXT(flush_list, b)) {
2112 diff -ruN a/storage/innobase/buf/buf0flu.c b/storage/innobase/buf/buf0flu.c
2113 --- a/storage/innobase/buf/buf0flu.c 2011-02-23 19:00:48.182659256 +0900
2114 +++ b/storage/innobase/buf/buf0flu.c 2011-02-23 19:01:19.138826278 +0900
2115@@ -47,31 +786,66 @@
2116 if (flush_type != BUF_FLUSH_LRU) {
2117
2118 return(TRUE);
2119+@@ -527,7 +534,6 @@
2120+ case BUF_BLOCK_ZIP_DIRTY:
2121+ buf_page_set_state(bpage, BUF_BLOCK_ZIP_PAGE);
2122+ UT_LIST_REMOVE(flush_list, buf_pool->flush_list, bpage);
2123+- buf_LRU_insert_zip_clean(bpage);
2124+ break;
2125+ case BUF_BLOCK_FILE_PAGE:
2126+ UT_LIST_REMOVE(flush_list, buf_pool->flush_list, bpage);
2127 diff -ruN a/storage/innobase/buf/buf0lru.c b/storage/innobase/buf/buf0lru.c
2128 --- a/storage/innobase/buf/buf0lru.c 2011-02-23 19:00:47.939695791 +0900
2129 +++ b/storage/innobase/buf/buf0lru.c 2011-02-23 19:01:19.142741970 +0900
2130-@@ -574,6 +574,37 @@
2131+@@ -574,38 +574,59 @@
2132 }
2133 }
2134
2135+-/********************************************************************//**
2136+-Insert a compressed block into buf_pool->zip_clean in the LRU order. */
2137 +/******************************************************************//**
2138 +*/
2139-+UNIV_INTERN
2140-+void
2141+ UNIV_INTERN
2142+ void
2143+-buf_LRU_insert_zip_clean(
2144+-/*=====================*/
2145+- buf_page_t* bpage) /*!< in: pointer to the block in question */
2146 +buf_LRU_mark_space_was_deleted(
2147 +/*===========================*/
2148 + ulint id) /*!< in: space id */
2149-+{
2150+ {
2151+- buf_page_t* b;
2152+- buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
2153 + ulint i;
2154-+
2155+
2156+- //ut_ad(buf_pool_mutex_own(buf_pool));
2157+- ut_ad(mutex_own(&buf_pool->LRU_list_mutex));
2158+- ut_ad(mutex_own(&buf_pool->zip_mutex));
2159+- ut_ad(buf_page_get_state(bpage) == BUF_BLOCK_ZIP_PAGE);
2160 + for (i = 0; i < srv_buf_pool_instances; i++) {
2161 + buf_pool_t* buf_pool;
2162 + buf_page_t* bpage;
2163-+
2164++ buf_chunk_t* chunk;
2165++ ulint j, k;
2166+
2167+- /* Find the first successor of bpage in the LRU list
2168+- that is in the zip_clean list. */
2169+- b = bpage;
2170+- do {
2171+- b = UT_LIST_GET_NEXT(LRU, b);
2172+- } while (b && (buf_page_get_state(b) != BUF_BLOCK_ZIP_PAGE || !b->in_LRU_list));
2173 + buf_pool = buf_pool_from_array(i);
2174-+
2175+
2176+- /* Insert bpage before b, i.e., after the predecessor of b. */
2177+- if (b) {
2178+- b = UT_LIST_GET_PREV(zip_list, b);
2179+- }
2180 + mutex_enter(&buf_pool->LRU_list_mutex);
2181-+
2182+
2183+- if (b) {
2184+- UT_LIST_INSERT_AFTER(zip_list, buf_pool->zip_clean, b, bpage);
2185+- } else {
2186+- UT_LIST_ADD_FIRST(zip_list, buf_pool->zip_clean, bpage);
2187 + bpage = UT_LIST_GET_FIRST(buf_pool->LRU);
2188 +
2189 + while (bpage != NULL) {
2190@@ -82,13 +856,33 @@
2191 + }
2192 +
2193 + mutex_exit(&buf_pool->LRU_list_mutex);
2194-+ }
2195-+}
2196-+
2197- /********************************************************************//**
2198- Insert a compressed block into buf_pool->zip_clean in the LRU order. */
2199- UNIV_INTERN
2200-@@ -1558,6 +1589,10 @@
2201++
2202++ rw_lock_s_lock(&btr_search_latch);
2203++ chunk = buf_pool->chunks;
2204++ for (j = buf_pool->n_chunks; j--; chunk++) {
2205++ buf_block_t* block = chunk->blocks;
2206++ for (k = chunk->size; k--; block++) {
2207++ if (buf_block_get_state(block)
2208++ != BUF_BLOCK_FILE_PAGE
2209++ || !block->is_hashed
2210++ || buf_page_get_space(&block->page) != id) {
2211++ continue;
2212++ }
2213++
2214++ rw_lock_s_unlock(&btr_search_latch);
2215++
2216++ rw_lock_x_lock(&block->lock);
2217++ btr_search_drop_page_hash_index(block, NULL);
2218++ rw_lock_x_unlock(&block->lock);
2219++
2220++ rw_lock_s_lock(&btr_search_latch);
2221++ }
2222++ }
2223++ rw_lock_s_unlock(&btr_search_latch);
2224+ }
2225+ }
2226+
2227+@@ -1558,6 +1579,10 @@
2228 return(BUF_LRU_NOT_FREED);
2229 }
2230
2231@@ -99,6 +893,23 @@
2232 #ifdef UNIV_IBUF_COUNT_DEBUG
2233 ut_a(ibuf_count_get(bpage->space, bpage->offset) == 0);
2234 #endif /* UNIV_IBUF_COUNT_DEBUG */
2235+@@ -1733,7 +1758,6 @@
2236+
2237+ mutex_enter(&buf_pool->zip_mutex);
2238+ if (b->state == BUF_BLOCK_ZIP_PAGE) {
2239+- buf_LRU_insert_zip_clean(b);
2240+ } else {
2241+ /* Relocate on buf_pool->flush_list. */
2242+ buf_flush_relocate_on_flush_list(bpage, b);
2243+@@ -2038,8 +2062,6 @@
2244+ ut_a(bpage->zip.data);
2245+ ut_a(buf_page_get_zip_size(bpage));
2246+
2247+- UT_LIST_REMOVE(zip_list, buf_pool->zip_clean, bpage);
2248+-
2249+ mutex_exit(&buf_pool->zip_mutex);
2250+ //buf_pool_mutex_exit_forbid(buf_pool);
2251+
2252 diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
2253 --- a/storage/innobase/fil/fil0fil.c 2011-02-23 19:00:48.223696428 +0900
2254 +++ b/storage/innobase/fil/fil0fil.c 2011-02-23 19:01:19.147655510 +0900
2255@@ -117,9 +928,9 @@
2256 - ut_a(node->n_pending == 0);
2257 + ut_a(node->n_pending == 0 || node->space->is_being_deleted);
2258 ut_a(node->n_pending_flushes == 0);
2259- ut_a(node->modification_counter == node->flush_counter);
2260-
2261-@@ -876,7 +877,7 @@
2262+ ut_a(node->modification_counter == node->flush_counter
2263+ || srv_fast_shutdown == 2);
2264+@@ -877,7 +878,7 @@
2265 ut_a(system->n_open > 0);
2266 system->n_open--;
2267
2268@@ -128,7 +939,7 @@
2269 ut_a(UT_LIST_GET_LEN(system->LRU) > 0);
2270
2271 /* The node is in the LRU list, remove it */
2272-@@ -1075,7 +1076,7 @@
2273+@@ -1076,7 +1077,7 @@
2274 ut_ad(node && system && space);
2275 ut_ad(mutex_own(&(system->mutex)));
2276 ut_a(node->magic_n == FIL_NODE_MAGIC_N);
2277@@ -137,7 +948,7 @@
2278
2279 if (node->open) {
2280 /* We fool the assertion in fil_node_close_file() to think
2281-@@ -1597,6 +1598,8 @@
2282+@@ -1598,6 +1599,8 @@
2283
2284 mutex_create(fil_system_mutex_key,
2285 &fil_system->mutex, SYNC_ANY_LATCH);
2286@@ -146,7 +957,7 @@
2287
2288 fil_system->spaces = hash_create(hash_size);
2289 fil_system->name_hash = hash_create(hash_size);
2290-@@ -2343,7 +2346,11 @@
2291+@@ -2344,7 +2347,11 @@
2292 completely and permanently. The flag is_being_deleted also prevents
2293 fil_flush() from being applied to this tablespace. */
2294
2295@@ -158,7 +969,7 @@
2296 #endif
2297 /* printf("Deleting tablespace %s id %lu\n", space->name, id); */
2298
2299-@@ -4721,6 +4728,10 @@
2300+@@ -4722,6 +4729,10 @@
2301 ulint page_size;
2302 ibool success = TRUE;
2303
2304@@ -169,7 +980,7 @@
2305 fil_mutex_enter_and_prepare_for_io(space_id);
2306
2307 space = fil_space_get_by_id(space_id);
2308-@@ -4732,6 +4743,7 @@
2309+@@ -4733,6 +4744,7 @@
2310 *actual_size = space->size;
2311
2312 mutex_exit(&fil_system->mutex);
2313@@ -177,7 +988,7 @@
2314
2315 return(TRUE);
2316 }
2317-@@ -4764,6 +4776,8 @@
2318+@@ -4765,6 +4777,8 @@
2319 offset_low = ((start_page_no - file_start_page_no)
2320 % (4096 * ((1024 * 1024) / page_size)))
2321 * page_size;
2322@@ -186,7 +997,7 @@
2323 #ifdef UNIV_HOTBACKUP
2324 success = os_file_write(node->name, node->handle, buf,
2325 offset_low, offset_high,
2326-@@ -4773,8 +4787,10 @@
2327+@@ -4774,8 +4788,10 @@
2328 node->name, node->handle, buf,
2329 offset_low, offset_high,
2330 page_size * n_pages,
2331@@ -198,7 +1009,7 @@
2332 if (success) {
2333 node->size += n_pages;
2334 space->size += n_pages;
2335-@@ -4820,6 +4836,7 @@
2336+@@ -4821,6 +4837,7 @@
2337 printf("Extended %s to %lu, actual size %lu pages\n", space->name,
2338 size_after_extend, *actual_size); */
2339 mutex_exit(&fil_system->mutex);
2340@@ -206,7 +1017,7 @@
2341
2342 fil_flush(space_id, TRUE);
2343
2344-@@ -5182,6 +5199,22 @@
2345+@@ -5183,6 +5200,22 @@
2346 srv_data_written+= len;
2347 }
2348
2349@@ -229,7 +1040,7 @@
2350 /* Reserve the fil_system mutex and make sure that we can open at
2351 least one file while holding it, if the file is not already open */
2352
2353-@@ -5323,10 +5356,24 @@
2354+@@ -5324,10 +5357,24 @@
2355 #else
2356 /* Queue the aio request */
2357 ret = os_aio(type, mode | wake_later, node->name, node->handle, buf,
2358@@ -255,7 +1066,7 @@
2359 ut_a(ret);
2360
2361 if (mode == OS_AIO_SYNC) {
2362-@@ -5426,6 +5473,7 @@
2363+@@ -5427,6 +5474,7 @@
2364 fil_node_t* fil_node;
2365 void* message;
2366 ulint type;
2367@@ -263,7 +1074,7 @@
2368
2369 ut_ad(fil_validate_skip());
2370
2371-@@ -5433,10 +5481,10 @@
2372+@@ -5434,10 +5482,10 @@
2373 srv_set_io_thread_op_info(segment, "native aio handle");
2374 #ifdef WIN_ASYNC_IO
2375 ret = os_aio_windows_handle(segment, 0, &fil_node,
2376@@ -276,7 +1087,7 @@
2377 #else
2378 ut_error;
2379 ret = 0; /* Eliminate compiler warning */
2380-@@ -5445,7 +5493,22 @@
2381+@@ -5446,7 +5494,22 @@
2382 srv_set_io_thread_op_info(segment, "simulated aio handle");
2383
2384 ret = os_aio_simulated_handle(segment, &fil_node,
2385@@ -303,7 +1114,7 @@
2386 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
2387 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:57:13.035513990 +0900
2388 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:57:53.084513775 +0900
2389-@@ -12007,6 +12007,12 @@
2390+@@ -12024,6 +12024,12 @@
2391 "except for the deletion.",
2392 NULL, NULL, 0, &corrupt_table_action_typelib);
2393
2394@@ -316,7 +1127,7 @@
2395 static struct st_mysql_sys_var* innobase_system_variables[]= {
2396 MYSQL_SYSVAR(page_size),
2397 MYSQL_SYSVAR(log_block_size),
2398-@@ -12097,6 +12103,7 @@
2399+@@ -12115,6 +12121,7 @@
2400 MYSQL_SYSVAR(purge_batch_size),
2401 MYSQL_SYSVAR(rollback_segments),
2402 MYSQL_SYSVAR(corrupt_table_action),
2403@@ -324,7 +1135,7 @@
2404 NULL
2405 };
2406
2407-@@ -12106,7 +12113,7 @@
2408+@@ -12124,7 +12131,7 @@
2409 &innobase_storage_engine,
2410 innobase_hton_name,
2411 plugin_author,
2412@@ -336,7 +1147,20 @@
2413 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
2414 --- a/storage/innobase/include/buf0buf.h 2011-02-23 19:00:48.252696774 +0900
2415 +++ b/storage/innobase/include/buf0buf.h 2011-02-23 19:01:19.182655902 +0900
2416-@@ -1438,6 +1438,7 @@
2417+@@ -261,12 +261,6 @@
2418+ BUF_BLOCK_ZIP_DIRTY or BUF_BLOCK_ZIP_PAGE */
2419+ buf_page_t* dpage) /*!< in/out: destination control block */
2420+ __attribute__((nonnull));
2421+-/********************************************************************//**
2422+-Resizes the buffer pool. */
2423+-UNIV_INTERN
2424+-void
2425+-buf_pool_resize(void);
2426+-/*=================*/
2427+ /*********************************************************************//**
2428+ Gets the current size of buffer buf_pool in bytes.
2429+ @return size in bytes */
2430+@@ -1441,6 +1435,7 @@
2431 0 if the block was never accessed
2432 in the buffer pool */
2433 /* @} */
2434@@ -344,6 +1168,15 @@
2435 ibool is_corrupt;
2436 # if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
2437 ibool file_page_was_freed;
2438+@@ -1780,8 +1775,6 @@
2439+ frames and buf_page_t descriptors of blocks that exist
2440+ in the buffer pool only in compressed form. */
2441+ /* @{ */
2442+- UT_LIST_BASE_NODE_T(buf_page_t) zip_clean;
2443+- /*!< unmodified compressed pages */
2444+ UT_LIST_BASE_NODE_T(buf_page_t) zip_free[BUF_BUDDY_SIZES_MAX];
2445+ /*!< buddy free lists */
2446+
2447 diff -ruN a/storage/innobase/include/buf0buf.ic b/storage/innobase/include/buf0buf.ic
2448 --- a/storage/innobase/include/buf0buf.ic 2011-02-23 19:00:48.130659154 +0900
2449 +++ b/storage/innobase/include/buf0buf.ic 2011-02-23 19:01:19.185655906 +0900
2450@@ -358,20 +1191,25 @@
2451 diff -ruN a/storage/innobase/include/buf0lru.h b/storage/innobase/include/buf0lru.h
2452 --- a/storage/innobase/include/buf0lru.h 2011-02-23 19:00:47.977658923 +0900
2453 +++ b/storage/innobase/include/buf0lru.h 2011-02-23 19:01:19.188625768 +0900
2454-@@ -85,6 +85,13 @@
2455+@@ -85,13 +85,13 @@
2456 buf_LRU_invalidate_tablespace(
2457 /*==========================*/
2458 ulint id); /*!< in: space id */
2459+-/********************************************************************//**
2460+-Insert a compressed block into buf_pool->zip_clean in the LRU order. */
2461 +/******************************************************************//**
2462 +*/
2463-+UNIV_INTERN
2464-+void
2465+ UNIV_INTERN
2466+ void
2467+-buf_LRU_insert_zip_clean(
2468+-/*=====================*/
2469+- buf_page_t* bpage); /*!< in: pointer to the block in question */
2470 +buf_LRU_mark_space_was_deleted(
2471 +/*===========================*/
2472 + ulint id); /*!< in: space id */
2473- /********************************************************************//**
2474- Insert a compressed block into buf_pool->zip_clean in the LRU order. */
2475- UNIV_INTERN
2476+
2477+ /******************************************************************//**
2478+ Try to free a block. If bpage is a descriptor of a compressed-only
2479 diff -ruN a/storage/innobase/include/os0file.h b/storage/innobase/include/os0file.h
2480 --- a/storage/innobase/include/os0file.h 2011-02-23 19:00:48.260696646 +0900
2481 +++ b/storage/innobase/include/os0file.h 2011-02-23 19:01:19.190656054 +0900
2482@@ -493,7 +1331,7 @@
2483 +++ b/storage/innobase/include/univ.i 2010-12-04 15:57:53.091592933 +0900
2484 @@ -53,6 +53,11 @@
2485 #define INNODB_VERSION_MINOR 1
2486- #define INNODB_VERSION_BUGFIX 7
2487+ #define INNODB_VERSION_BUGFIX 8
2488
2489 +#ifndef PERCONA_INNODB_VERSION
2490 +#define PERCONA_INNODB_VERSION 20.1
2491@@ -524,7 +1362,7 @@
2492 fil_node_t* message1; /*!< message which is given by the */
2493 void* message2; /*!< the requester of an aio operation
2494 and which can be used to identify
2495-@@ -3685,7 +3686,8 @@
2496+@@ -3686,7 +3687,8 @@
2497 offset */
2498 ulint offset_high, /*!< in: most significant 32 bits of
2499 offset */
2500@@ -534,7 +1372,7 @@
2501 {
2502 os_aio_slot_t* slot = NULL;
2503 #ifdef WIN_ASYNC_IO
2504-@@ -3774,6 +3776,7 @@
2505+@@ -3775,6 +3777,7 @@
2506 slot->offset = offset;
2507 slot->offset_high = offset_high;
2508 slot->io_already_done = FALSE;
2509@@ -542,7 +1380,7 @@
2510
2511 #ifdef WIN_ASYNC_IO
2512 control = &(slot->control);
2513-@@ -4061,6 +4064,7 @@
2514+@@ -4062,6 +4065,7 @@
2515 (can be used to identify a completed
2516 aio operation); ignored if mode is
2517 OS_AIO_SYNC */
2518@@ -550,7 +1388,7 @@
2519 trx_t* trx)
2520 {
2521 os_aio_array_t* array;
2522-@@ -4149,7 +4153,7 @@
2523+@@ -4157,7 +4161,7 @@
2524 trx->io_read += n;
2525 }
2526 slot = os_aio_array_reserve_slot(type, array, message1, message2, file,
2527@@ -559,7 +1397,7 @@
2528 if (type == OS_FILE_READ) {
2529 if (srv_use_native_aio) {
2530 os_n_file_reads++;
2531-@@ -4268,7 +4272,8 @@
2532+@@ -4276,7 +4280,8 @@
2533 parameters are valid and can be used to
2534 restart the operation, for example */
2535 void** message2,
2536@@ -569,7 +1407,7 @@
2537 {
2538 ulint orig_seg = segment;
2539 os_aio_array_t* array;
2540-@@ -4347,6 +4352,7 @@
2541+@@ -4355,6 +4360,7 @@
2542 *message2 = slot->message2;
2543
2544 *type = slot->type;
2545@@ -577,7 +1415,7 @@
2546
2547 if (ret && len == slot->len) {
2548 ret_val = TRUE;
2549-@@ -4575,7 +4581,8 @@
2550+@@ -4583,7 +4589,8 @@
2551 aio operation failed, these output
2552 parameters are valid and can be used to
2553 restart the operation. */
2554@@ -587,7 +1425,7 @@
2555 {
2556 ulint segment;
2557 os_aio_array_t* array;
2558-@@ -4648,6 +4655,7 @@
2559+@@ -4656,6 +4663,7 @@
2560 *message2 = slot->message2;
2561
2562 *type = slot->type;
2563@@ -595,7 +1433,7 @@
2564
2565 if ((slot->ret == 0) && (slot->n_bytes == (long)slot->len)) {
2566 ret = TRUE;
2567-@@ -4701,7 +4709,8 @@
2568+@@ -4709,7 +4717,8 @@
2569 parameters are valid and can be used to
2570 restart the operation, for example */
2571 void** message2,
2572@@ -605,7 +1443,7 @@
2573 {
2574 os_aio_array_t* array;
2575 ulint segment;
2576-@@ -4997,6 +5006,7 @@
2577+@@ -5005,6 +5014,7 @@
2578 *message2 = slot->message2;
2579
2580 *type = slot->type;
2581@@ -638,10 +1476,60 @@
2582 if (prebuilt->sql_stat_start) {
2583 node->state = INS_NODE_SET_IX_LOCK;
2584 prebuilt->sql_stat_start = FALSE;
2585+@@ -2602,10 +2610,29 @@
2586+
2587+ err = DB_ERROR;
2588+ } else {
2589++ dict_index_t* index;
2590++
2591+ /* Set the flag which tells that now it is legal to
2592+ IMPORT a tablespace for this table */
2593+ table->tablespace_discarded = TRUE;
2594+ table->ibd_file_missing = TRUE;
2595++
2596++ /* check adaptive hash entries */
2597++ index = dict_table_get_first_index(table);
2598++ while (index) {
2599++ ulint ref_count = btr_search_info_get_ref_count(index->search_info, index->id);
2600++ if (ref_count) {
2601++ fprintf(stderr, "InnoDB: Warning:"
2602++ " hash index ref_count (%lu) is not zero"
2603++ " after fil_discard_tablespace().\n"
2604++ "index: \"%s\""
2605++ " table: \"%s\"\n",
2606++ ref_count,
2607++ index->name,
2608++ table->name);
2609++ }
2610++ index = dict_table_get_next_index(index);
2611++ }
2612+ }
2613+ }
2614+
2615+@@ -2954,6 +2981,19 @@
2616+ table->space = space;
2617+ index = dict_table_get_first_index(table);
2618+ do {
2619++ ulint ref_count = btr_search_info_get_ref_count(index->search_info, index->id);
2620++ /* check adaptive hash entries */
2621++ if (ref_count) {
2622++ fprintf(stderr, "InnoDB: Warning:"
2623++ " hash index ref_count (%lu) is not zero"
2624++ " after fil_discard_tablespace().\n"
2625++ "index: \"%s\""
2626++ " table: \"%s\"\n",
2627++ ref_count,
2628++ index->name,
2629++ table->name);
2630++ }
2631++
2632+ index->space = space;
2633+ index = dict_table_get_next_index(index);
2634+ } while (index);
2635 diff -ruN a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c
2636 --- a/storage/innobase/row/row0sel.c 2010-12-04 15:52:23.494514495 +0900
2637 +++ b/storage/innobase/row/row0sel.c 2010-12-04 16:01:38.320883699 +0900
2638-@@ -3366,6 +3366,7 @@
2639+@@ -3367,6 +3367,7 @@
2640 ulint offsets_[REC_OFFS_NORMAL_SIZE];
2641 ulint* offsets = offsets_;
2642 ibool table_lock_waited = FALSE;
2643@@ -649,7 +1537,7 @@
2644
2645 rec_offs_init(offsets_);
2646
2647-@@ -3737,6 +3738,17 @@
2648+@@ -3738,6 +3739,17 @@
2649
2650 /* Do some start-of-statement preparations */
2651
2652@@ -667,7 +1555,7 @@
2653 if (!prebuilt->sql_stat_start) {
2654 /* No need to set an intention lock or assign a read view */
2655
2656-@@ -3747,6 +3759,18 @@
2657+@@ -3748,6 +3760,18 @@
2658 " perform a consistent read\n"
2659 "InnoDB: but the read view is not assigned!\n",
2660 stderr);
2661
2662=== modified file 'innodb_io_patches.patch'
2663--- innodb_io_patches.patch 2011-07-07 15:13:12 +0000
2664+++ innodb_io_patches.patch 2011-08-01 03:32:34 +0000
2665@@ -62,7 +62,7 @@
2666 diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
2667 --- a/storage/innobase/fil/fil0fil.c 2011-07-07 18:43:12.000000000 +0400
2668 +++ b/storage/innobase/fil/fil0fil.c 2011-07-07 19:01:22.000000000 +0400
2669-@@ -2600,7 +2600,7 @@
2670+@@ -2601,7 +2601,7 @@
2671
2672 os_thread_sleep(20000);
2673
2674@@ -71,7 +71,7 @@
2675
2676 goto retry;
2677
2678-@@ -2814,7 +2814,7 @@
2679+@@ -2815,7 +2815,7 @@
2680 goto error_exit;
2681 }
2682
2683@@ -80,7 +80,7 @@
2684
2685 if (!ret) {
2686 fputs("InnoDB: Error: file flush of tablespace ", stderr);
2687-@@ -3000,7 +3000,7 @@
2688+@@ -3001,7 +3001,7 @@
2689 }
2690 }
2691
2692@@ -89,7 +89,7 @@
2693 if (!success) {
2694
2695 goto func_exit;
2696-@@ -3022,7 +3022,7 @@
2697+@@ -3023,7 +3023,7 @@
2698
2699 goto func_exit;
2700 }
2701@@ -98,7 +98,7 @@
2702 func_exit:
2703 os_file_close(file);
2704 ut_free(buf2);
2705-@@ -4005,7 +4005,7 @@
2706+@@ -4006,7 +4006,7 @@
2707 size_after_extend, *actual_size); */
2708 mutex_exit(&fil_system->mutex);
2709
2710@@ -107,7 +107,7 @@
2711
2712 return(success);
2713 }
2714-@@ -4576,8 +4576,9 @@
2715+@@ -4577,8 +4577,9 @@
2716 void
2717 fil_flush(
2718 /*======*/
2719@@ -118,7 +118,7 @@
2720 {
2721 fil_space_t* space;
2722 fil_node_t* node;
2723-@@ -4648,7 +4649,7 @@
2724+@@ -4649,7 +4650,7 @@
2725 /* fprintf(stderr, "Flushing to file %s\n",
2726 node->name); */
2727
2728@@ -127,7 +127,7 @@
2729
2730 mutex_enter(&fil_system->mutex);
2731
2732-@@ -4731,7 +4732,7 @@
2733+@@ -4732,7 +4733,7 @@
2734 a non-existing space id. */
2735 for (i = 0; i < n_space_ids; i++) {
2736
2737@@ -139,7 +139,7 @@
2738 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
2739 --- a/storage/innobase/handler/ha_innodb.cc 2011-07-07 18:43:12.000000000 +0400
2740 +++ b/storage/innobase/handler/ha_innodb.cc 2011-07-07 19:01:24.000000000 +0400
2741-@@ -444,6 +444,12 @@
2742+@@ -445,6 +445,12 @@
2743 "Timeout in seconds an InnoDB transaction may wait for a lock before being rolled back. Values above 100000000 disable the timeout.",
2744 NULL, NULL, 50, 1, 1024 * 1024 * 1024, 0);
2745
2746@@ -152,7 +152,7 @@
2747
2748 static handler *innobase_create_handler(handlerton *hton,
2749 TABLE_SHARE *table,
2750-@@ -838,6 +844,17 @@
2751+@@ -839,6 +845,17 @@
2752 }
2753 }
2754
2755@@ -170,7 +170,7 @@
2756 /********************************************************************//**
2757 Obtain the InnoDB transaction of a MySQL thread.
2758 @return reference to transaction pointer */
2759-@@ -2437,6 +2454,9 @@
2760+@@ -2443,6 +2460,9 @@
2761 srv_n_read_io_threads = (ulint) innobase_read_io_threads;
2762 srv_n_write_io_threads = (ulint) innobase_write_io_threads;
2763
2764@@ -180,7 +180,7 @@
2765 srv_force_recovery = (ulint) innobase_force_recovery;
2766
2767 srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite;
2768-@@ -11025,7 +11045,7 @@
2769+@@ -11037,7 +11057,7 @@
2770 PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
2771 "Purge threads can be either 0 or 1.",
2772 NULL, NULL,
2773@@ -189,7 +189,7 @@
2774 0, /* Minimum value */
2775 1, 0); /* Maximum value */
2776
2777-@@ -11067,12 +11087,18 @@
2778+@@ -11079,12 +11099,18 @@
2779 innodb_file_format_max_validate,
2780 innodb_file_format_max_update, "Antelope");
2781
2782@@ -214,7 +214,7 @@
2783
2784 static MYSQL_SYSVAR_STR(flush_method, innobase_file_flush_method,
2785 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
2786-@@ -11167,7 +11193,7 @@
2787+@@ -11184,7 +11210,7 @@
2788 static MYSQL_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size,
2789 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
2790 "The size of the memory buffer InnoDB uses to cache data and indexes of its tables.",
2791@@ -223,7 +223,7 @@
2792
2793 static MYSQL_SYSVAR_LONG(buffer_pool_instances, innobase_buffer_pool_instances,
2794 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
2795-@@ -11319,6 +11345,95 @@
2796+@@ -11336,6 +11362,95 @@
2797 "trigger a readahead.",
2798 NULL, NULL, 56, 0, 64, 0);
2799
2800@@ -319,15 +319,15 @@
2801 static struct st_mysql_sys_var* innobase_system_variables[]= {
2802 MYSQL_SYSVAR(additional_mem_pool_size),
2803 MYSQL_SYSVAR(autoextend_increment),
2804-@@ -11339,6 +11454,7 @@
2805+@@ -11356,6 +11471,7 @@
2806 MYSQL_SYSVAR(file_format_check),
2807 MYSQL_SYSVAR(file_format_max),
2808 MYSQL_SYSVAR(flush_log_at_trx_commit),
2809 + MYSQL_SYSVAR(use_global_flush_log_at_trx_commit),
2810 MYSQL_SYSVAR(flush_method),
2811 MYSQL_SYSVAR(force_recovery),
2812- MYSQL_SYSVAR(locks_unsafe_for_binlog),
2813-@@ -11376,6 +11492,13 @@
2814+ MYSQL_SYSVAR(large_prefix),
2815+@@ -11394,6 +11510,13 @@
2816 MYSQL_SYSVAR(show_verbose_locks),
2817 MYSQL_SYSVAR(show_locks_held),
2818 MYSQL_SYSVAR(version),
2819@@ -837,7 +837,7 @@
2820 }
2821 # endif /* UNIV_DO_FLUSH */
2822
2823-@@ -4289,7 +4305,7 @@
2824+@@ -4296,7 +4312,7 @@
2825 #ifdef UNIV_DO_FLUSH
2826 if (slot->type == OS_FILE_WRITE
2827 && !os_do_not_call_flush_at_each_write) {
2828@@ -846,7 +846,7 @@
2829 ut_error;
2830 }
2831 }
2832-@@ -4590,7 +4606,7 @@
2833+@@ -4597,7 +4613,7 @@
2834 #ifdef UNIV_DO_FLUSH
2835 if (slot->type == OS_FILE_WRITE
2836 && !os_do_not_call_flush_at_each_write)
2837
2838=== added file 'innodb_kill_idle_transaction.patch'
2839--- innodb_kill_idle_transaction.patch 1970-01-01 00:00:00 +0000
2840+++ innodb_kill_idle_transaction.patch 2011-08-01 03:32:34 +0000
2841@@ -0,0 +1,277 @@
2842+# name : innodb_kill_idle_transaction.patch
2843+# introduced : 5.5.14
2844+# maintainer : Yasufumi
2845+#
2846+#!!! notice !!!
2847+# Any small change to this file in the main branch
2848+# should be done or reviewed by the maintainer!
2849+diff -ruN a/include/mysql/plugin.h b/include/mysql/plugin.h
2850+--- a/include/mysql/plugin.h 2011-06-22 01:42:39.000000000 +0900
2851++++ b/include/mysql/plugin.h 2011-07-12 22:19:58.000000000 +0900
2852+@@ -625,6 +625,12 @@
2853+ */
2854+ void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton,
2855+ const void *ha_data);
2856++
2857++int thd_command(const MYSQL_THD thd);
2858++long long thd_start_time(const MYSQL_THD thd);
2859++void thd_kill(MYSQL_THD thd);
2860++#define EXTENDED_FOR_KILLIDLE
2861++
2862+ #ifdef __cplusplus
2863+ }
2864+ #endif
2865+diff -ruN a/include/mysql/plugin_audit.h.pp b/include/mysql/plugin_audit.h.pp
2866+--- a/include/mysql/plugin_audit.h.pp 2011-06-22 01:42:39.000000000 +0900
2867++++ b/include/mysql/plugin_audit.h.pp 2011-07-13 00:53:06.000000000 +0900
2868+@@ -195,6 +195,9 @@
2869+ void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
2870+ void thd_set_ha_data(void* thd, const struct handlerton *hton,
2871+ const void *ha_data);
2872++int thd_command(const void* thd);
2873++long long thd_start_time(const void* thd);
2874++void thd_kill(void* thd);
2875+ struct mysql_event_general
2876+ {
2877+ unsigned int event_subclass;
2878+diff -ruN a/include/mysql/plugin_auth.h.pp b/include/mysql/plugin_auth.h.pp
2879+--- a/include/mysql/plugin_auth.h.pp 2011-06-22 01:42:39.000000000 +0900
2880++++ b/include/mysql/plugin_auth.h.pp 2011-07-13 00:53:06.000000000 +0900
2881+@@ -195,6 +195,9 @@
2882+ void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
2883+ void thd_set_ha_data(void* thd, const struct handlerton *hton,
2884+ const void *ha_data);
2885++int thd_command(const void* thd);
2886++long long thd_start_time(const void* thd);
2887++void thd_kill(void* thd);
2888+ #include <mysql/plugin_auth_common.h>
2889+ typedef struct st_plugin_vio_info
2890+ {
2891+diff -ruN a/include/mysql/plugin_ftparser.h.pp b/include/mysql/plugin_ftparser.h.pp
2892+--- a/include/mysql/plugin_ftparser.h.pp 2011-06-22 01:42:39.000000000 +0900
2893++++ b/include/mysql/plugin_ftparser.h.pp 2011-07-13 00:53:06.000000000 +0900
2894+@@ -148,6 +148,9 @@
2895+ void *thd_get_ha_data(const void* thd, const struct handlerton *hton);
2896+ void thd_set_ha_data(void* thd, const struct handlerton *hton,
2897+ const void *ha_data);
2898++int thd_command(const void* thd);
2899++long long thd_start_time(const void* thd);
2900++void thd_kill(void* thd);
2901+ enum enum_ftparser_mode
2902+ {
2903+ MYSQL_FTPARSER_SIMPLE_MODE= 0,
2904+diff -ruN a/sql/sql_class.cc b/sql/sql_class.cc
2905+--- a/sql/sql_class.cc 2011-06-22 01:42:40.000000000 +0900
2906++++ b/sql/sql_class.cc 2011-07-12 22:23:35.000000000 +0900
2907+@@ -711,6 +711,26 @@
2908+ return buffer;
2909+ }
2910+
2911++/* extend for kill session of idle transaction from engine */
2912++extern "C"
2913++int thd_command(const THD* thd)
2914++{
2915++ return (int) thd->command;
2916++}
2917++
2918++extern "C"
2919++long long thd_start_time(const THD* thd)
2920++{
2921++ return (long long) thd->start_time;
2922++}
2923++
2924++extern "C"
2925++void thd_kill(THD* thd)
2926++{
2927++ mysql_mutex_lock(&thd->LOCK_thd_data);
2928++ thd->awake(THD::KILL_CONNECTION);
2929++ mysql_mutex_unlock(&thd->LOCK_thd_data);
2930++}
2931+
2932+ /**
2933+ Implementation of Drop_table_error_handler::handle_condition().
2934+diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
2935+--- a/storage/innobase/handler/ha_innodb.cc 2011-07-12 17:10:37.000000000 +0900
2936++++ b/storage/innobase/handler/ha_innodb.cc 2011-07-12 22:33:06.000000000 +0900
2937+@@ -2828,6 +2828,10 @@
2938+
2939+ innobase_commit_concurrency_init_default();
2940+
2941++#ifndef EXTENDED_FOR_KILLIDLE
2942++ srv_kill_idle_transaction = 0;
2943++#endif
2944++
2945+ #ifdef HAVE_PSI_INTERFACE
2946+ /* Register keys with MySQL performance schema */
2947+ if (PSI_server) {
2948+@@ -11586,6 +11590,48 @@
2949+ return(false);
2950+ }
2951+
2952++/***********************************************************************
2953++functions for kill session of idle transaction */
2954++extern "C"
2955++ibool
2956++innobase_thd_is_idle(
2957++/*=================*/
2958++ const void* thd) /*!< in: thread handle (THD*) */
2959++{
2960++#ifdef EXTENDED_FOR_KILLIDLE
2961++ return(thd_command((const THD*) thd) == COM_SLEEP);
2962++#else
2963++ return(FALSE);
2964++#endif
2965++}
2966++
2967++extern "C"
2968++ib_int64_t
2969++innobase_thd_get_start_time(
2970++/*========================*/
2971++ const void* thd) /*!< in: thread handle (THD*) */
2972++{
2973++#ifdef EXTENDED_FOR_KILLIDLE
2974++ return((ib_int64_t)thd_start_time((const THD*) thd));
2975++#else
2976++ return(0); /*dummy value*/
2977++#endif
2978++}
2979++
2980++extern "C"
2981++void
2982++innobase_thd_kill(
2983++/*==============*/
2984++ void* thd)
2985++{
2986++#ifdef EXTENDED_FOR_KILLIDLE
2987++ thd_kill((THD*) thd);
2988++#else
2989++ return;
2990++#endif
2991++}
2992++
2993++
2994+ static SHOW_VAR innodb_status_variables_export[]= {
2995+ {"Innodb", (char*) &show_innodb_vars, SHOW_FUNC},
2996+ {NullS, NullS, SHOW_LONG}
2997+@@ -11872,6 +11918,15 @@
2998+ "Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket",
2999+ NULL, NULL, 500L, 1L, ~0L, 0);
3000+
3001++static MYSQL_SYSVAR_LONG(kill_idle_transaction, srv_kill_idle_transaction,
3002++ PLUGIN_VAR_RQCMDARG,
3003++#ifdef EXTENDED_FOR_KILLIDLE
3004++ "If non-zero value, the idle session with transaction which is idle over the value in seconds is killed by InnoDB.",
3005++#else
3006++ "No effect for this build.",
3007++#endif
3008++ NULL, NULL, 0, 0, LONG_MAX, 0);
3009++
3010+ static MYSQL_SYSVAR_LONG(file_io_threads, innobase_file_io_threads,
3011+ PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR,
3012+ "Number of file I/O threads in InnoDB.",
3013+@@ -12162,6 +12217,7 @@
3014+ MYSQL_SYSVAR(fast_checksum),
3015+ MYSQL_SYSVAR(commit_concurrency),
3016+ MYSQL_SYSVAR(concurrency_tickets),
3017++ MYSQL_SYSVAR(kill_idle_transaction),
3018+ MYSQL_SYSVAR(data_file_path),
3019+ MYSQL_SYSVAR(doublewrite_file),
3020+ MYSQL_SYSVAR(data_home_dir),
3021+diff -ruN a/storage/innobase/include/srv0srv.h b/storage/innobase/include/srv0srv.h
3022+--- a/storage/innobase/include/srv0srv.h 2011-07-12 17:10:37.000000000 +0900
3023++++ b/storage/innobase/include/srv0srv.h 2011-07-12 22:33:57.000000000 +0900
3024+@@ -291,6 +291,7 @@
3025+ extern ulint srv_activity_count;
3026+ extern ulint srv_fatal_semaphore_wait_threshold;
3027+ extern ulint srv_dml_needed_delay;
3028++extern lint srv_kill_idle_transaction;
3029+
3030+ extern mutex_t* kernel_mutex_temp;/* mutex protecting the server, trx structs,
3031+ query threads, and lock table: we allocate
3032+diff -ruN a/storage/innobase/include/trx0trx.h b/storage/innobase/include/trx0trx.h
3033+--- a/storage/innobase/include/trx0trx.h 2011-07-12 16:47:24.000000000 +0900
3034++++ b/storage/innobase/include/trx0trx.h 2011-07-12 22:35:39.000000000 +0900
3035+@@ -594,6 +594,8 @@
3036+ replication has processed */
3037+ const char* mysql_relay_log_file_name;
3038+ ib_int64_t mysql_relay_log_pos;
3039++ time_t idle_start;
3040++ ib_int64_t last_stmt_start;
3041+ /*------------------------------*/
3042+ ulint n_mysql_tables_in_use; /* number of Innobase tables
3043+ used in the processing of the current
3044+diff -ruN a/storage/innobase/srv/srv0srv.c b/storage/innobase/srv/srv0srv.c
3045+--- a/storage/innobase/srv/srv0srv.c 2011-07-12 17:10:37.000000000 +0900
3046++++ b/storage/innobase/srv/srv0srv.c 2011-07-12 22:43:22.000000000 +0900
3047+@@ -87,6 +87,11 @@
3048+ #include "mysql/plugin.h"
3049+ #include "mysql/service_thd_wait.h"
3050+
3051++/* prototypes of new functions added to ha_innodb.cc for kill_idle_transaction */
3052++ibool innobase_thd_is_idle(const void* thd);
3053++ib_int64_t innobase_thd_get_start_time(const void* thd);
3054++void innobase_thd_kill(void* thd);
3055++
3056+ /* prototypes for new functions added to ha_innodb.cc */
3057+ ibool innobase_get_slow_log();
3058+
3059+@@ -97,6 +102,9 @@
3060+ /* The following is the maximum allowed duration of a lock wait. */
3061+ UNIV_INTERN ulint srv_fatal_semaphore_wait_threshold = 600;
3062+
3063++/**/
3064++UNIV_INTERN lint srv_kill_idle_transaction = 0;
3065++
3066+ /* How much data manipulation language (DML) statements need to be delayed,
3067+ in microseconds, in order to reduce the lagging of the purge thread. */
3068+ UNIV_INTERN ulint srv_dml_needed_delay = 0;
3069+@@ -2826,6 +2834,36 @@
3070+ old_sema = sema;
3071+ }
3072+
3073++ if (srv_kill_idle_transaction && trx_sys) {
3074++ trx_t* trx;
3075++ time_t now;
3076++rescan_idle:
3077++ now = time(NULL);
3078++ mutex_enter(&kernel_mutex);
3079++ trx = UT_LIST_GET_FIRST(trx_sys->mysql_trx_list);
3080++ while (trx) {
3081++ if (trx->conc_state == TRX_ACTIVE
3082++ && trx->mysql_thd
3083++ && innobase_thd_is_idle(trx->mysql_thd)) {
3084++ ib_int64_t start_time; /* as stmt ID */
3085++
3086++ start_time = innobase_thd_get_start_time(trx->mysql_thd);
3087++ if (trx->last_stmt_start != start_time) {
3088++ trx->idle_start = now;
3089++ trx->last_stmt_start = start_time;
3090++ } else if (difftime(now, trx->idle_start)
3091++ > srv_kill_idle_transaction) {
3092++ /* kill the session */
3093++ mutex_exit(&kernel_mutex);
3094++ innobase_thd_kill(trx->mysql_thd);
3095++ goto rescan_idle;
3096++ }
3097++ }
3098++ trx = UT_LIST_GET_NEXT(mysql_trx_list, trx);
3099++ }
3100++ mutex_exit(&kernel_mutex);
3101++ }
3102++
3103+ /* Flush stderr so that a database user gets the output
3104+ to possible MySQL error file */
3105+
3106+diff -ruN a/storage/innobase/trx/trx0trx.c b/storage/innobase/trx/trx0trx.c
3107+--- a/storage/innobase/trx/trx0trx.c 2011-07-12 17:05:25.000000000 +0900
3108++++ b/storage/innobase/trx/trx0trx.c 2011-07-12 22:44:08.000000000 +0900
3109+@@ -143,6 +143,9 @@
3110+ trx->mysql_relay_log_file_name = "";
3111+ trx->mysql_relay_log_pos = 0;
3112+
3113++ trx->idle_start = 0;
3114++ trx->last_stmt_start = 0;
3115++
3116+ mutex_create(trx_undo_mutex_key, &trx->undo_mutex, SYNC_TRX_UNDO);
3117+
3118+ trx->rseg = NULL;
3119
3120=== modified file 'innodb_lru_dump_restore.patch'
3121--- innodb_lru_dump_restore.patch 2011-06-10 10:07:06 +0000
3122+++ innodb_lru_dump_restore.patch 2011-08-01 03:32:34 +0000
3123@@ -308,7 +308,7 @@
3124 diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
3125 --- a/storage/innobase/fil/fil0fil.c 2010-12-03 17:49:11.581025127 +0900
3126 +++ b/storage/innobase/fil/fil0fil.c 2010-12-04 15:33:37.632482885 +0900
3127-@@ -5289,6 +5289,70 @@
3128+@@ -5290,6 +5290,70 @@
3129 return(DB_SUCCESS);
3130 }
3131
3132@@ -382,7 +382,7 @@
3133 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
3134 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:49:11.589956135 +0900
3135 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:33:37.645555490 +0900
3136-@@ -11793,6 +11793,12 @@
3137+@@ -11810,6 +11810,12 @@
3138 "Limit the allocated memory for dictionary cache. (0: unlimited)",
3139 NULL, NULL, 0, 0, LONG_MAX, 0);
3140
3141@@ -395,7 +395,7 @@
3142 static struct st_mysql_sys_var* innobase_system_variables[]= {
3143 MYSQL_SYSVAR(additional_mem_pool_size),
3144 MYSQL_SYSVAR(autoextend_increment),
3145-@@ -11874,6 +11880,7 @@
3146+@@ -11892,6 +11898,7 @@
3147 #endif /* UNIV_DEBUG || UNIV_IBUF_DEBUG */
3148 MYSQL_SYSVAR(read_ahead_threshold),
3149 MYSQL_SYSVAR(io_capacity),
3150
3151=== modified file 'innodb_opt_lru_count.patch'
3152--- innodb_opt_lru_count.patch 2011-05-10 11:57:42 +0000
3153+++ innodb_opt_lru_count.patch 2011-08-01 03:32:34 +0000
3154@@ -277,7 +277,7 @@
3155 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
3156 --- a/storage/innobase/include/buf0buf.h 2010-11-03 07:01:13.000000000 +0900
3157 +++ b/storage/innobase/include/buf0buf.h 2010-12-03 15:20:49.608986590 +0900
3158-@@ -1387,11 +1387,11 @@
3159+@@ -1390,11 +1390,11 @@
3160
3161 UT_LIST_NODE_T(buf_page_t) LRU;
3162 /*!< node of the LRU list */
3163
3164=== modified file 'innodb_overwrite_relay_log_info.patch'
3165--- innodb_overwrite_relay_log_info.patch 2011-06-10 10:07:06 +0000
3166+++ innodb_overwrite_relay_log_info.patch 2011-08-01 03:32:34 +0000
3167@@ -56,7 +56,7 @@
3168 static my_bool innobase_rollback_on_timeout = FALSE;
3169 static my_bool innobase_create_status_file = FALSE;
3170 static my_bool innobase_stats_on_metadata = TRUE;
3171-@@ -2248,6 +2268,89 @@
3172+@@ -2254,6 +2274,89 @@
3173 }
3174 #endif /* DBUG_OFF */
3175
3176@@ -146,7 +146,7 @@
3177 /* Check that values don't overflow on 32-bit systems. */
3178 if (sizeof(ulint) == 4) {
3179 if (innobase_buffer_pool_size > UINT_MAX32) {
3180-@@ -2546,6 +2649,76 @@
3181+@@ -2552,6 +2655,76 @@
3182 goto mem_free_and_error;
3183 }
3184
3185@@ -223,7 +223,7 @@
3186 innobase_old_blocks_pct = buf_LRU_old_ratio_update(
3187 innobase_old_blocks_pct, TRUE);
3188
3189-@@ -2658,6 +2831,25 @@
3190+@@ -2666,6 +2839,25 @@
3191 trx_t* trx) /*!< in: transaction handle */
3192 {
3193 if (trx_is_started(trx)) {
3194@@ -249,7 +249,7 @@
3195
3196 trx_commit_for_mysql(trx);
3197 }
3198-@@ -11014,6 +11206,12 @@
3199+@@ -11026,6 +11218,12 @@
3200 "The common part for InnoDB table spaces.",
3201 NULL, NULL, NULL);
3202
3203@@ -262,7 +262,7 @@
3204 static MYSQL_SYSVAR_BOOL(doublewrite, innobase_use_doublewrite,
3205 PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
3206 "Enable InnoDB doublewrite buffer (enabled by default). "
3207-@@ -11474,6 +11672,7 @@
3208+@@ -11492,6 +11690,7 @@
3209 MYSQL_SYSVAR(old_blocks_pct),
3210 MYSQL_SYSVAR(old_blocks_time),
3211 MYSQL_SYSVAR(open_files),
3212
3213=== modified file 'innodb_pass_corrupt_table.patch'
3214--- innodb_pass_corrupt_table.patch 2011-06-29 09:32:51 +0000
3215+++ innodb_pass_corrupt_table.patch 2011-08-01 03:32:34 +0000
3216@@ -243,7 +243,7 @@
3217 ut_ad(page_is_leaf(buf_block_get_frame(block)));
3218
3219 rec = btr_cur_get_rec(cursor);
3220-@@ -3628,6 +3711,11 @@
3221+@@ -3640,6 +3723,11 @@
3222
3223 page = btr_cur_get_page(&cursor);
3224
3225@@ -357,7 +357,7 @@
3226 block_mutex = buf_page_get_mutex_enter(bpage);
3227
3228 rw_lock_s_unlock(&buf_pool->page_hash_latch);
3229-@@ -3059,6 +3072,13 @@
3230+@@ -3060,6 +3073,13 @@
3231 return(NULL);
3232 }
3233
3234@@ -478,7 +478,7 @@
3235 goto next_loop;
3236
3237 cached_foreign_tables = 0;
3238-@@ -4332,6 +4333,12 @@
3239+@@ -4366,6 +4367,12 @@
3240 heap = mem_heap_create(1000);
3241
3242 while (index) {
3243@@ -491,7 +491,7 @@
3244 size = btr_get_size(index, BTR_TOTAL_SIZE);
3245
3246 index->stat_index_size = size;
3247-@@ -4479,6 +4486,12 @@
3248+@@ -4513,6 +4520,12 @@
3249 heap = mem_heap_create(1000);
3250
3251 while (index) {
3252@@ -504,7 +504,7 @@
3253 /*===========================================*/
3254 {
3255 dict_table_t* sys_stats;
3256-@@ -4671,6 +4684,13 @@
3257+@@ -4705,6 +4718,13 @@
3258 || (srv_force_recovery < SRV_FORCE_NO_LOG_REDO
3259 && dict_index_is_clust(index)))) {
3260 ulint size;
3261@@ -518,7 +518,7 @@
3262 size = btr_get_size(index, BTR_TOTAL_SIZE);
3263
3264 index->stat_index_size = size;
3265-@@ -5467,4 +5487,42 @@
3266+@@ -5501,4 +5521,42 @@
3267 rw_lock_free(&dict_table_stats_latches[i]);
3268 }
3269 }
3270@@ -584,7 +584,7 @@
3271 UT_LIST_NODE_T(fil_space_t) space_list;
3272 /*!< list of all spaces */
3273 ulint magic_n;/*!< FIL_SPACE_MAGIC_N */
3274-@@ -1293,6 +1294,8 @@
3275+@@ -1294,6 +1295,8 @@
3276 ut_fold_string(name), space);
3277 space->is_in_unflushed_spaces = FALSE;
3278
3279@@ -593,7 +593,7 @@
3280 UT_LIST_ADD_LAST(space_list, fil_system->space_list, space);
3281
3282 mutex_exit(&fil_system->mutex);
3283-@@ -5267,6 +5270,34 @@
3284+@@ -5268,6 +5271,34 @@
3285 ut_a(byte_offset % OS_FILE_LOG_BLOCK_SIZE == 0);
3286 ut_a((len % OS_FILE_LOG_BLOCK_SIZE) == 0);
3287
3288@@ -628,7 +628,7 @@
3289 #ifdef UNIV_HOTBACKUP
3290 /* In ibbackup do normal i/o, not aio */
3291 if (type == OS_FILE_READ) {
3292-@@ -5281,6 +5312,8 @@
3293+@@ -5282,6 +5313,8 @@
3294 ret = os_aio(type, mode | wake_later, node->name, node->handle, buf,
3295 offset_low, offset_high, len, node, message, trx);
3296 #endif
3297@@ -637,7 +637,7 @@
3298 ut_a(ret);
3299
3300 if (mode == OS_AIO_SYNC) {
3301-@@ -5781,3 +5814,46 @@
3302+@@ -5782,3 +5815,46 @@
3303 return 0;
3304 }
3305 }
3306@@ -798,7 +798,7 @@
3307 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
3308 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:37:50.578486593 +0900
3309 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-04 15:38:18.137549396 +0900
3310-@@ -3972,6 +3972,12 @@
3311+@@ -3980,6 +3980,12 @@
3312 DBUG_RETURN(1);
3313 }
3314
3315@@ -811,7 +811,7 @@
3316 /* Create buffers for packing the fields of a record. Why
3317 table->reclength did not work here? Obviously, because char
3318 fields when packed actually became 1 byte longer, when we also
3319-@@ -3999,6 +4005,19 @@
3320+@@ -4007,6 +4013,19 @@
3321 /* Get pointer to a table object in InnoDB dictionary cache */
3322 ib_table = dict_table_get(norm_name, TRUE);
3323
3324@@ -831,7 +831,7 @@
3325 if (NULL == ib_table) {
3326 if (is_part && retries < 10) {
3327 ++retries;
3328-@@ -5163,6 +5182,10 @@
3329+@@ -5175,6 +5194,10 @@
3330
3331 ha_statistic_increment(&SSV::ha_write_count);
3332
3333@@ -842,7 +842,7 @@
3334 if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_INSERT)
3335 table->timestamp_field->set_time();
3336
3337-@@ -5380,6 +5403,10 @@
3338+@@ -5392,6 +5415,10 @@
3339 func_exit:
3340 innobase_active_small();
3341
3342@@ -853,7 +853,7 @@
3343 DBUG_RETURN(error_result);
3344 }
3345
3346-@@ -5556,6 +5583,10 @@
3347+@@ -5568,6 +5595,10 @@
3348
3349 ha_statistic_increment(&SSV::ha_update_count);
3350
3351@@ -864,7 +864,7 @@
3352 if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE)
3353 table->timestamp_field->set_time();
3354
3355-@@ -5645,6 +5676,10 @@
3356+@@ -5657,6 +5688,10 @@
3357
3358 innobase_active_small();
3359
3360@@ -875,7 +875,7 @@
3361 DBUG_RETURN(error);
3362 }
3363
3364-@@ -5666,6 +5701,10 @@
3365+@@ -5678,6 +5713,10 @@
3366
3367 ha_statistic_increment(&SSV::ha_delete_count);
3368
3369@@ -886,7 +886,7 @@
3370 if (!prebuilt->upd_node) {
3371 row_get_prebuilt_update_vector(prebuilt);
3372 }
3373-@@ -5692,6 +5731,10 @@
3374+@@ -5704,6 +5743,10 @@
3375
3376 innobase_active_small();
3377
3378@@ -897,7 +897,7 @@
3379 DBUG_RETURN(error);
3380 }
3381
3382-@@ -5931,6 +5974,10 @@
3383+@@ -5943,6 +5986,10 @@
3384
3385 ha_statistic_increment(&SSV::ha_read_key_count);
3386
3387@@ -908,7 +908,7 @@
3388 index = prebuilt->index;
3389
3390 if (UNIV_UNLIKELY(index == NULL)) {
3391-@@ -5996,6 +6043,10 @@
3392+@@ -6008,6 +6055,10 @@
3393 ret = DB_UNSUPPORTED;
3394 }
3395
3396@@ -919,7 +919,7 @@
3397 switch (ret) {
3398 case DB_SUCCESS:
3399 error = 0;
3400-@@ -6111,6 +6162,10 @@
3401+@@ -6123,6 +6174,10 @@
3402 {
3403 DBUG_ENTER("change_active_index");
3404
3405@@ -930,7 +930,7 @@
3406 ut_ad(user_thd == ha_thd());
3407 ut_a(prebuilt->trx == thd_to_trx(user_thd));
3408
3409-@@ -6201,6 +6256,10 @@
3410+@@ -6213,6 +6268,10 @@
3411
3412 DBUG_ENTER("general_fetch");
3413
3414@@ -941,7 +941,7 @@
3415 ut_a(prebuilt->trx == thd_to_trx(user_thd));
3416
3417 innodb_srv_conc_enter_innodb(prebuilt->trx);
3418-@@ -6210,6 +6269,10 @@
3419+@@ -6222,6 +6281,10 @@
3420
3421 innodb_srv_conc_exit_innodb(prebuilt->trx);
3422
3423@@ -952,7 +952,7 @@
3424 switch (ret) {
3425 case DB_SUCCESS:
3426 error = 0;
3427-@@ -7476,10 +7539,18 @@
3428+@@ -7488,10 +7551,18 @@
3429
3430 update_thd(ha_thd());
3431
3432@@ -971,7 +971,7 @@
3433 error = convert_error_code_to_mysql(error, prebuilt->table->flags,
3434 NULL);
3435
3436-@@ -7980,6 +8051,16 @@
3437+@@ -7992,6 +8063,16 @@
3438 return(ranges + (double) rows / (double) total_rows * time_for_scan);
3439 }
3440
3441@@ -988,7 +988,7 @@
3442 /*********************************************************************//**
3443 Calculates the key number used inside MySQL for an Innobase index. We will
3444 first check the "index translation table" for a match of the index to get
3445-@@ -8157,7 +8238,7 @@
3446+@@ -8169,7 +8250,7 @@
3447 ib_table = prebuilt->table;
3448
3449 if (flag & HA_STATUS_TIME) {
3450@@ -997,7 +997,7 @@
3451 /* In sql_show we call with this flag: update
3452 then statistics so that they are up-to-date */
3453
3454-@@ -8450,10 +8531,18 @@
3455+@@ -8462,10 +8543,18 @@
3456 THD* thd, /*!< in: connection thread handle */
3457 HA_CHECK_OPT* check_opt) /*!< in: currently ignored */
3458 {
3459@@ -1016,7 +1016,7 @@
3460 return(0);
3461 }
3462
3463-@@ -8635,6 +8724,10 @@
3464+@@ -8647,6 +8736,10 @@
3465 my_error(ER_QUERY_INTERRUPTED, MYF(0));
3466 }
3467
3468@@ -1027,7 +1027,7 @@
3469 DBUG_RETURN(is_ok ? HA_ADMIN_OK : HA_ADMIN_CORRUPT);
3470 }
3471
3472-@@ -9405,6 +9498,10 @@
3473+@@ -9417,6 +9510,10 @@
3474
3475 update_thd(thd);
3476
3477@@ -1038,7 +1038,7 @@
3478 if (prebuilt->table->ibd_file_missing && !thd_tablespace_op(thd)) {
3479 ut_print_timestamp(stderr);
3480 fprintf(stderr,
3481-@@ -11807,6 +11904,26 @@
3482+@@ -11824,6 +11921,26 @@
3483 "0 (the default) disables automatic dumps.",
3484 NULL, NULL, 0, 0, UINT_MAX32, 0);
3485
3486@@ -1065,7 +1065,7 @@
3487 static struct st_mysql_sys_var* innobase_system_variables[]= {
3488 MYSQL_SYSVAR(additional_mem_pool_size),
3489 MYSQL_SYSVAR(autoextend_increment),
3490-@@ -11893,6 +12010,7 @@
3491+@@ -11911,6 +12028,7 @@
3492 MYSQL_SYSVAR(purge_threads),
3493 MYSQL_SYSVAR(purge_batch_size),
3494 MYSQL_SYSVAR(rollback_segments),
3495@@ -1118,7 +1118,7 @@
3496 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
3497 --- a/storage/innobase/include/buf0buf.h 2010-12-03 15:49:59.218956083 +0900
3498 +++ b/storage/innobase/include/buf0buf.h 2010-12-04 15:38:18.164513667 +0900
3499-@@ -986,7 +986,7 @@
3500+@@ -989,7 +989,7 @@
3501 const buf_block_t* block) /*!< in: pointer to the control block */
3502 __attribute__((pure));
3503 #else /* UNIV_DEBUG */
3504@@ -1127,7 +1127,7 @@
3505 #endif /* UNIV_DEBUG */
3506 /*********************************************************************//**
3507 Gets the space id of a block.
3508-@@ -1433,6 +1433,7 @@
3509+@@ -1436,6 +1436,7 @@
3510 0 if the block was never accessed
3511 in the buffer pool */
3512 /* @} */
3513@@ -1163,7 +1163,7 @@
3514 diff -ruN a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h
3515 --- a/storage/innobase/include/dict0dict.h 2010-12-03 17:30:16.306955940 +0900
3516 +++ b/storage/innobase/include/dict0dict.h 2010-12-04 15:38:18.169513750 +0900
3517-@@ -1245,6 +1245,15 @@
3518+@@ -1258,6 +1258,15 @@
3519 dict_close(void);
3520 /*============*/
3521
3522@@ -1182,7 +1182,7 @@
3523 diff -ruN a/storage/innobase/include/dict0mem.h b/storage/innobase/include/dict0mem.h
3524 --- a/storage/innobase/include/dict0mem.h 2010-11-03 07:01:13.000000000 +0900
3525 +++ b/storage/innobase/include/dict0mem.h 2010-12-04 15:38:18.171513956 +0900
3526-@@ -640,6 +640,7 @@
3527+@@ -666,6 +666,7 @@
3528 the AUTOINC lock on this table. */
3529 /* @} */
3530 /*----------------------*/
3531@@ -1335,7 +1335,7 @@
3532 diff -ruN a/storage/innobase/row/row0sel.c b/storage/innobase/row/row0sel.c
3533 --- a/storage/innobase/row/row0sel.c 2010-11-03 07:01:13.000000000 +0900
3534 +++ b/storage/innobase/row/row0sel.c 2010-12-04 15:38:18.205551115 +0900
3535-@@ -3853,6 +3853,13 @@
3536+@@ -3854,6 +3854,13 @@
3537 /* PHASE 4: Look for matching records in a loop */
3538
3539 rec = btr_pcur_get_rec(pcur);
3540@@ -1349,7 +1349,7 @@
3541 ut_ad(!!page_rec_is_comp(rec) == comp);
3542 #ifdef UNIV_SEARCH_DEBUG
3543 /*
3544-@@ -3930,7 +3937,13 @@
3545+@@ -3931,7 +3938,13 @@
3546 if (UNIV_UNLIKELY(next_offs >= UNIV_PAGE_SIZE - PAGE_DIR)) {
3547
3548 wrong_offs:
3549@@ -1364,7 +1364,7 @@
3550 ut_print_timestamp(stderr);
3551 buf_page_print(page_align(rec), 0);
3552 fprintf(stderr,
3553-@@ -3981,7 +3994,8 @@
3554+@@ -3982,7 +3995,8 @@
3555
3556 offsets = rec_get_offsets(rec, index, offsets, ULINT_UNDEFINED, &heap);
3557
3558
3559=== modified file 'innodb_recovery_patches.patch'
3560--- innodb_recovery_patches.patch 2011-06-29 09:32:51 +0000
3561+++ innodb_recovery_patches.patch 2011-08-01 03:32:34 +0000
3562@@ -117,7 +117,7 @@
3563 static my_bool innobase_locks_unsafe_for_binlog = FALSE;
3564 static my_bool innobase_overwrite_relay_log_info = FALSE;
3565 static my_bool innobase_rollback_on_timeout = FALSE;
3566-@@ -2576,6 +2577,8 @@
3567+@@ -2582,6 +2583,8 @@
3568
3569 srv_force_recovery = (ulint) innobase_force_recovery;
3570
3571@@ -126,7 +126,7 @@
3572 srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite;
3573 srv_use_checksums = (ibool) innobase_use_checksums;
3574
3575-@@ -11274,6 +11277,11 @@
3576+@@ -11286,6 +11289,11 @@
3577 "The common part for InnoDB table spaces.",
3578 NULL, NULL, NULL);
3579
3580@@ -138,7 +138,7 @@
3581 static MYSQL_SYSVAR_BOOL(recovery_update_relay_log, innobase_overwrite_relay_log_info,
3582 PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
3583 "During InnoDB crash recovery on slave overwrite relay-log.info "
3584-@@ -11747,6 +11755,7 @@
3585+@@ -11764,6 +11772,7 @@
3586 MYSQL_SYSVAR(data_file_path),
3587 MYSQL_SYSVAR(data_home_dir),
3588 MYSQL_SYSVAR(doublewrite),
3589@@ -441,7 +441,7 @@
3590 #ifndef UNIV_HOTBACKUP
3591 # include "os0sync.h"
3592 # include "os0thread.h"
3593-@@ -4270,6 +4271,18 @@
3594+@@ -4278,6 +4279,18 @@
3595 INFINITE);
3596 }
3597
3598
3599=== modified file 'innodb_separate_doublewrite.patch'
3600--- innodb_separate_doublewrite.patch 2011-06-29 09:32:51 +0000
3601+++ innodb_separate_doublewrite.patch 2011-08-01 03:32:34 +0000
3602@@ -84,7 +84,7 @@
3603 /* The system tablespace always exists. */
3604 } else if (in_crash_recovery) {
3605 /* Check that the tablespace (the .ibd file) really
3606-@@ -1623,7 +1624,7 @@
3607+@@ -1682,7 +1683,7 @@
3608 space = mach_read_from_4(field);
3609
3610 /* Check if the tablespace exists and has the right name */
3611@@ -93,7 +93,7 @@
3612 flags = dict_sys_tables_get_flags(rec);
3613
3614 if (UNIV_UNLIKELY(flags == ULINT_UNDEFINED)) {
3615-@@ -1776,7 +1777,7 @@
3616+@@ -1835,7 +1836,7 @@
3617 goto err_exit;
3618 }
3619
3620@@ -149,7 +149,7 @@
3621 /* Put the node to the LRU list */
3622 UT_LIST_ADD_FIRST(LRU, system->LRU, node);
3623 }
3624-@@ -875,7 +875,7 @@
3625+@@ -876,7 +876,7 @@
3626 ut_a(system->n_open > 0);
3627 system->n_open--;
3628
3629@@ -158,7 +158,7 @@
3630 ut_a(UT_LIST_GET_LEN(system->LRU) > 0);
3631
3632 /* The node is in the LRU list, remove it */
3633-@@ -961,7 +961,7 @@
3634+@@ -962,7 +962,7 @@
3635 retry:
3636 mutex_enter(&fil_system->mutex);
3637
3638@@ -167,7 +167,7 @@
3639 /* We keep log files and system tablespace files always open;
3640 this is important in preventing deadlocks in this module, as
3641 a page read completion often performs another read from the
3642-@@ -1192,7 +1192,7 @@
3643+@@ -1193,7 +1193,7 @@
3644 " tablespace memory cache!\n",
3645 (ulong) space->id);
3646
3647@@ -176,7 +176,7 @@
3648
3649 mutex_exit(&fil_system->mutex);
3650
3651-@@ -1254,6 +1254,7 @@
3652+@@ -1255,6 +1255,7 @@
3653 space->mark = FALSE;
3654
3655 if (UNIV_LIKELY(purpose == FIL_TABLESPACE && !recv_recovery_on)
3656@@ -184,7 +184,7 @@
3657 && UNIV_UNLIKELY(id > fil_system->max_assigned_id)) {
3658 if (!fil_system->space_id_reuse_warned) {
3659 fil_system->space_id_reuse_warned = TRUE;
3660-@@ -1337,7 +1338,7 @@
3661+@@ -1338,7 +1339,7 @@
3662 (ulong) SRV_LOG_SPACE_FIRST_ID);
3663 }
3664
3665@@ -193,7 +193,7 @@
3666
3667 if (success) {
3668 *space_id = fil_system->max_assigned_id = id;
3669-@@ -1600,6 +1601,8 @@
3670+@@ -1601,6 +1602,8 @@
3671 UT_LIST_INIT(fil_system->LRU);
3672
3673 fil_system->max_n_open = max_n_open;
3674@@ -202,7 +202,7 @@
3675 }
3676
3677 /*******************************************************************//**
3678-@@ -1621,7 +1624,7 @@
3679+@@ -1622,7 +1625,7 @@
3680 space = UT_LIST_GET_FIRST(fil_system->space_list);
3681
3682 while (space != NULL) {
3683@@ -211,7 +211,7 @@
3684 node = UT_LIST_GET_FIRST(space->chain);
3685
3686 while (node != NULL) {
3687-@@ -1711,6 +1714,10 @@
3688+@@ -1712,6 +1715,10 @@
3689 ut_error;
3690 }
3691
3692@@ -222,7 +222,7 @@
3693 mutex_enter(&fil_system->mutex);
3694
3695 if (fil_system->max_assigned_id < max_id) {
3696-@@ -1729,6 +1736,7 @@
3697+@@ -1730,6 +1737,7 @@
3698 ulint
3699 fil_write_lsn_and_arch_no_to_file(
3700 /*==============================*/
3701@@ -230,7 +230,7 @@
3702 ulint sum_of_sizes, /*!< in: combined size of previous files
3703 in space, in database pages */
3704 ib_uint64_t lsn, /*!< in: lsn to write */
3705-@@ -1738,14 +1746,16 @@
3706+@@ -1739,14 +1747,16 @@
3707 byte* buf1;
3708 byte* buf;
3709
3710@@ -249,7 +249,7 @@
3711
3712 mem_free(buf1);
3713
3714-@@ -1781,7 +1791,7 @@
3715+@@ -1782,7 +1792,7 @@
3716 always open. */
3717
3718 if (space->purpose == FIL_TABLESPACE
3719@@ -258,7 +258,7 @@
3720 sum_of_sizes = 0;
3721
3722 node = UT_LIST_GET_FIRST(space->chain);
3723-@@ -1789,7 +1799,7 @@
3724+@@ -1790,7 +1800,7 @@
3725 mutex_exit(&fil_system->mutex);
3726
3727 err = fil_write_lsn_and_arch_no_to_file(
3728@@ -267,7 +267,7 @@
3729 if (err != DB_SUCCESS) {
3730
3731 return(err);
3732-@@ -4158,7 +4168,7 @@
3733+@@ -4159,7 +4169,7 @@
3734 }
3735
3736 #ifndef UNIV_HOTBACKUP
3737@@ -276,7 +276,7 @@
3738 fprintf(stderr,
3739 "InnoDB: Error: tablespace id %lu in file %s"
3740 " is not sensible\n",
3741-@@ -4167,7 +4177,7 @@
3742+@@ -4168,7 +4178,7 @@
3743 goto func_exit;
3744 }
3745 #else
3746@@ -285,7 +285,7 @@
3747 char* new_path;
3748
3749 fprintf(stderr,
3750-@@ -4988,7 +4998,7 @@
3751+@@ -4989,7 +4999,7 @@
3752 }
3753
3754 if (node->n_pending == 0 && space->purpose == FIL_TABLESPACE
3755@@ -294,7 +294,7 @@
3756 /* The node is in the LRU list, remove it */
3757
3758 ut_a(UT_LIST_GET_LEN(system->LRU) > 0);
3759-@@ -5034,7 +5044,7 @@
3760+@@ -5035,7 +5045,7 @@
3761 }
3762
3763 if (node->n_pending == 0 && node->space->purpose == FIL_TABLESPACE
3764@@ -303,7 +303,7 @@
3765 /* The node must be put back to the LRU list */
3766 UT_LIST_ADD_FIRST(LRU, system->LRU, node);
3767 }
3768-@@ -5645,7 +5655,7 @@
3769+@@ -5646,7 +5656,7 @@
3770 ut_a(fil_node->n_pending == 0);
3771 ut_a(fil_node->open);
3772 ut_a(fil_node->space->purpose == FIL_TABLESPACE);
3773@@ -348,7 +348,7 @@
3774
3775 /* The highest file format being used in the database. The value can be
3776 set by user, however, it will be adjusted to the newer file format if
3777-@@ -2472,6 +2473,8 @@
3778+@@ -2478,6 +2479,8 @@
3779 goto error;
3780 }
3781
3782@@ -357,7 +357,7 @@
3783 srv_use_sys_stats_table = (ibool) innobase_use_sys_stats_table;
3784
3785 /* -------------- Log files ---------------------------*/
3786-@@ -11641,6 +11644,11 @@
3787+@@ -11658,6 +11661,11 @@
3788 "Path to individual files and their sizes.",
3789 NULL, NULL, NULL);
3790
3791@@ -369,7 +369,7 @@
3792 static MYSQL_SYSVAR_LONG(autoinc_lock_mode, innobase_autoinc_lock_mode,
3793 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
3794 "The AUTOINC lock modes supported by InnoDB: "
3795-@@ -11808,6 +11816,7 @@
3796+@@ -11825,6 +11833,7 @@
3797 MYSQL_SYSVAR(commit_concurrency),
3798 MYSQL_SYSVAR(concurrency_tickets),
3799 MYSQL_SYSVAR(data_file_path),
3800@@ -519,7 +519,7 @@
3801 diff -ruN a/storage/innobase/row/row0mysql.c b/storage/innobase/row/row0mysql.c
3802 --- a/storage/innobase/row/row0mysql.c 2010-12-03 17:30:16.334989510 +0900
3803 +++ b/storage/innobase/row/row0mysql.c 2010-12-04 15:35:58.652496484 +0900
3804-@@ -3447,7 +3447,7 @@
3805+@@ -3452,7 +3452,7 @@
3806 /* Do not drop possible .ibd tablespace if something went
3807 wrong: we do not want to delete valuable data of the user */
3808
3809
3810=== modified file 'innodb_show_lock_name.patch'
3811--- innodb_show_lock_name.patch 2011-06-10 10:07:06 +0000
3812+++ innodb_show_lock_name.patch 2011-08-01 03:32:34 +0000
3813@@ -8,7 +8,7 @@
3814 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
3815 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:34:35.285040381 +0900
3816 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:35:12.974975252 +0900
3817-@@ -9593,9 +9593,8 @@
3818+@@ -9605,9 +9605,8 @@
3819 rw_lock_wait_time += mutex->lspent_time;
3820 }
3821 #else /* UNIV_DEBUG */
3822@@ -20,7 +20,7 @@
3823 buf2len= (uint) my_snprintf(buf2, sizeof(buf2), "os_waits=%lu",
3824 (ulong) mutex->count_os_wait);
3825
3826-@@ -9610,10 +9609,8 @@
3827+@@ -9622,10 +9621,8 @@
3828
3829 if (block_mutex) {
3830 buf1len = (uint) my_snprintf(buf1, sizeof buf1,
3831@@ -33,7 +33,7 @@
3832 buf2len = (uint) my_snprintf(buf2, sizeof buf2,
3833 "os_waits=%lu",
3834 (ulong) block_mutex_oswait_count);
3835-@@ -9642,9 +9639,8 @@
3836+@@ -9654,9 +9651,8 @@
3837 continue;
3838 }
3839
3840@@ -45,7 +45,7 @@
3841 buf2len = my_snprintf(buf2, sizeof buf2, "os_waits=%lu",
3842 (ulong) lock->count_os_wait);
3843
3844-@@ -9658,10 +9654,8 @@
3845+@@ -9670,10 +9666,8 @@
3846
3847 if (block_lock) {
3848 buf1len = (uint) my_snprintf(buf1, sizeof buf1,
3849
3850=== modified file 'innodb_show_status.patch'
3851--- innodb_show_status.patch 2011-06-10 10:07:06 +0000
3852+++ innodb_show_status.patch 2011-08-01 03:32:34 +0000
3853@@ -62,7 +62,7 @@
3854 diff -ruN a/storage/innobase/fil/fil0fil.c b/storage/innobase/fil/fil0fil.c
3855 --- a/storage/innobase/fil/fil0fil.c 2010-11-03 07:01:13.000000000 +0900
3856 +++ b/storage/innobase/fil/fil0fil.c 2010-12-03 15:07:31.790357112 +0900
3857-@@ -4888,3 +4888,30 @@
3858+@@ -4889,3 +4889,30 @@
3859
3860 fil_system = NULL;
3861 }
3862@@ -96,7 +96,7 @@
3863 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
3864 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:06:58.727955654 +0900
3865 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:07:31.799376984 +0900
3866-@@ -603,6 +603,8 @@
3867+@@ -604,6 +604,8 @@
3868 (char*) &export_vars.innodb_buffer_pool_pages_dirty, SHOW_LONG},
3869 {"buffer_pool_pages_flushed",
3870 (char*) &export_vars.innodb_buffer_pool_pages_flushed, SHOW_LONG},
3871@@ -105,7 +105,7 @@
3872 {"buffer_pool_pages_free",
3873 (char*) &export_vars.innodb_buffer_pool_pages_free, SHOW_LONG},
3874 #ifdef UNIV_DEBUG
3875-@@ -11081,6 +11083,16 @@
3876+@@ -11098,6 +11100,16 @@
3877 "Force InnoDB to not use next-key locking, to use only row-level locking.",
3878 NULL, NULL, FALSE);
3879
3880@@ -122,7 +122,7 @@
3881 #ifdef UNIV_LOG_ARCHIVE
3882 static MYSQL_SYSVAR_STR(log_arch_dir, innobase_log_arch_dir,
3883 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
3884-@@ -11268,7 +11280,7 @@
3885+@@ -11285,7 +11297,7 @@
3886
3887 static MYSQL_SYSVAR_STR(version, innodb_version_str,
3888 PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY,
3889@@ -131,7 +131,7 @@
3890
3891 static MYSQL_SYSVAR_BOOL(use_sys_malloc, srv_use_sys_malloc,
3892 PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
3893-@@ -11361,6 +11373,8 @@
3894+@@ -11379,6 +11391,8 @@
3895 MYSQL_SYSVAR(thread_concurrency),
3896 MYSQL_SYSVAR(thread_sleep_delay),
3897 MYSQL_SYSVAR(autoinc_lock_mode),
3898@@ -143,7 +143,7 @@
3899 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
3900 --- a/storage/innobase/include/buf0buf.h 2011-01-20 07:37:08.000000000 +0900
3901 +++ b/storage/innobase/include/buf0buf.h 2011-02-14 15:25:20.859126532 +0900
3902-@@ -125,6 +125,7 @@
3903+@@ -128,6 +128,7 @@
3904 /* General buffer pool info */
3905 ulint pool_unique_id; /*!< Buffer Pool ID */
3906 ulint pool_size; /*!< Buffer Pool size in pages */
3907@@ -216,7 +216,7 @@
3908 diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c
3909 --- a/storage/innobase/lock/lock0lock.c 2010-11-03 07:01:13.000000000 +0900
3910 +++ b/storage/innobase/lock/lock0lock.c 2010-12-03 15:07:31.819023998 +0900
3911-@@ -4374,6 +4374,7 @@
3912+@@ -4377,6 +4377,7 @@
3913
3914 putc('\n', file);
3915
3916@@ -224,7 +224,7 @@
3917 block = buf_page_try_get(space, page_no, &mtr);
3918
3919 for (i = 0; i < lock_rec_get_n_bits(lock); ++i) {
3920-@@ -4400,6 +4401,7 @@
3921+@@ -4403,6 +4404,7 @@
3922
3923 putc('\n', file);
3924 }
3925@@ -232,7 +232,7 @@
3926
3927 mtr_commit(&mtr);
3928 if (UNIV_LIKELY_NULL(heap)) {
3929-@@ -4583,7 +4585,7 @@
3930+@@ -4586,7 +4588,7 @@
3931 }
3932 }
3933
3934@@ -241,7 +241,7 @@
3935 nth_trx++;
3936 goto loop;
3937 }
3938-@@ -4655,8 +4657,8 @@
3939+@@ -4658,8 +4660,8 @@
3940
3941 nth_lock++;
3942
3943
3944=== modified file 'innodb_show_status_extend.patch'
3945--- innodb_show_status_extend.patch 2011-06-21 06:10:10 +0000
3946+++ innodb_show_status_extend.patch 2011-08-01 03:32:34 +0000
3947@@ -8,7 +8,7 @@
3948 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
3949 --- a/storage/innobase/handler/ha_innodb.cc 2011-01-21 19:53:42.369599743 +0900
3950 +++ b/storage/innobase/handler/ha_innodb.cc 2011-01-21 19:54:44.659599699 +0900
3951-@@ -638,6 +638,16 @@
3952+@@ -639,6 +639,16 @@
3953 trx_t* trx); /*!< in: transaction handle */
3954
3955 static SHOW_VAR innodb_status_variables[]= {
3956@@ -25,7 +25,7 @@
3957 {"buffer_pool_pages_data",
3958 (char*) &export_vars.innodb_buffer_pool_pages_data, SHOW_LONG},
3959 {"buffer_pool_pages_dirty",
3960-@@ -652,8 +662,14 @@
3961+@@ -653,8 +663,14 @@
3962 {"buffer_pool_pages_latched",
3963 (char*) &export_vars.innodb_buffer_pool_pages_latched, SHOW_LONG},
3964 #endif /* UNIV_DEBUG */
3965@@ -40,7 +40,7 @@
3966 {"buffer_pool_pages_total",
3967 (char*) &export_vars.innodb_buffer_pool_pages_total, SHOW_LONG},
3968 {"buffer_pool_read_ahead",
3969-@@ -668,6 +684,12 @@
3970+@@ -669,6 +685,12 @@
3971 (char*) &export_vars.innodb_buffer_pool_wait_free, SHOW_LONG},
3972 {"buffer_pool_write_requests",
3973 (char*) &export_vars.innodb_buffer_pool_write_requests, SHOW_LONG},
3974@@ -53,7 +53,7 @@
3975 {"data_fsyncs",
3976 (char*) &export_vars.innodb_data_fsyncs, SHOW_LONG},
3977 {"data_pending_fsyncs",
3978-@@ -694,12 +716,66 @@
3979+@@ -695,12 +717,66 @@
3980 (char*) &export_vars.innodb_dict_tables, SHOW_LONG},
3981 {"have_atomic_builtins",
3982 (char*) &export_vars.innodb_have_atomic_builtins, SHOW_BOOL},
3983@@ -120,7 +120,7 @@
3984 {"os_log_fsyncs",
3985 (char*) &export_vars.innodb_os_log_fsyncs, SHOW_LONG},
3986 {"os_log_pending_fsyncs",
3987-@@ -716,8 +792,14 @@
3988+@@ -717,8 +793,14 @@
3989 (char*) &export_vars.innodb_pages_read, SHOW_LONG},
3990 {"pages_written",
3991 (char*) &export_vars.innodb_pages_written, SHOW_LONG},
3992@@ -135,7 +135,7 @@
3993 {"row_lock_time",
3994 (char*) &export_vars.innodb_row_lock_time, SHOW_LONGLONG},
3995 {"row_lock_time_avg",
3996-@@ -734,8 +816,20 @@
3997+@@ -735,8 +817,20 @@
3998 (char*) &export_vars.innodb_rows_read, SHOW_LONG},
3999 {"rows_updated",
4000 (char*) &export_vars.innodb_rows_updated, SHOW_LONG},
4001@@ -234,7 +234,7 @@
4002 diff -ruN a/storage/innobase/include/lock0lock.h b/storage/innobase/include/lock0lock.h
4003 --- a/storage/innobase/include/lock0lock.h 2011-01-21 19:52:38.967683738 +0900
4004 +++ b/storage/innobase/include/lock0lock.h 2011-01-21 19:54:44.660599140 +0900
4005-@@ -816,6 +816,7 @@
4006+@@ -817,6 +817,7 @@
4007 /** The lock system struct */
4008 struct lock_sys_struct{
4009 hash_table_t* rec_hash; /*!< hash table of the record locks */
4010@@ -356,7 +356,7 @@
4011 diff -ruN a/storage/innobase/lock/lock0lock.c b/storage/innobase/lock/lock0lock.c
4012 --- a/storage/innobase/lock/lock0lock.c 2011-01-21 19:52:38.998600121 +0900
4013 +++ b/storage/innobase/lock/lock0lock.c 2011-01-21 19:54:44.668637536 +0900
4014-@@ -571,6 +571,7 @@
4015+@@ -569,6 +569,7 @@
4016 lock_sys = mem_alloc(sizeof(lock_sys_t));
4017
4018 lock_sys->rec_hash = hash_create(n_cells);
4019@@ -364,7 +364,7 @@
4020
4021 /* hash_create_mutexes(lock_sys->rec_hash, 2, SYNC_REC_LOCK); */
4022
4023-@@ -1719,6 +1720,7 @@
4024+@@ -1729,6 +1730,7 @@
4025
4026 HASH_INSERT(lock_t, hash, lock_sys->rec_hash,
4027 lock_rec_fold(space, page_no), lock);
4028@@ -372,7 +372,7 @@
4029 if (UNIV_UNLIKELY(type_mode & LOCK_WAIT)) {
4030
4031 lock_set_lock_and_trx_wait(lock, trx);
4032-@@ -2265,6 +2267,7 @@
4033+@@ -2275,6 +2277,7 @@
4034
4035 HASH_DELETE(lock_t, hash, lock_sys->rec_hash,
4036 lock_rec_fold(space, page_no), in_lock);
4037@@ -380,7 +380,7 @@
4038
4039 UT_LIST_REMOVE(trx_locks, trx->trx_locks, in_lock);
4040
4041-@@ -2308,6 +2311,7 @@
4042+@@ -2318,6 +2321,7 @@
4043
4044 HASH_DELETE(lock_t, hash, lock_sys->rec_hash,
4045 lock_rec_fold(space, page_no), in_lock);
4046
4047=== modified file 'innodb_show_sys_tables.patch'
4048--- innodb_show_sys_tables.patch 2011-06-10 10:07:06 +0000
4049+++ innodb_show_sys_tables.patch 2011-08-01 03:32:34 +0000
4050@@ -41,7 +41,7 @@
4051 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
4052 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:53:54.615040167 +0900
4053 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 16:07:26.851357007 +0900
4054-@@ -11772,7 +11772,14 @@
4055+@@ -11790,7 +11790,14 @@
4056 i_s_innodb_cmp,
4057 i_s_innodb_cmp_reset,
4058 i_s_innodb_cmpmem,
4059
4060=== modified file 'innodb_split_buf_pool_mutex.patch'
4061--- innodb_split_buf_pool_mutex.patch 2011-06-27 07:12:14 +0000
4062+++ innodb_split_buf_pool_mutex.patch 2011-08-01 03:32:34 +0000
4063@@ -8,7 +8,7 @@
4064 diff -ruN a/storage/innobase/btr/btr0cur.c b/storage/innobase/btr/btr0cur.c
4065 --- a/storage/innobase/btr/btr0cur.c 2010-11-03 07:01:13.000000000 +0900
4066 +++ b/storage/innobase/btr/btr0cur.c 2010-12-03 15:48:29.268957148 +0900
4067-@@ -4069,7 +4069,8 @@
4068+@@ -4081,7 +4081,8 @@
4069
4070 mtr_commit(mtr);
4071
4072@@ -18,7 +18,7 @@
4073 mutex_enter(&block->mutex);
4074
4075 /* Only free the block if it is still allocated to
4076-@@ -4080,16 +4081,21 @@
4077+@@ -4092,16 +4093,21 @@
4078 && buf_block_get_space(block) == space
4079 && buf_block_get_page_no(block) == page_no) {
4080
4081@@ -1168,7 +1168,7 @@
4082 buf_pool_t* buf_pool = buf_pool_get(space, offset);
4083
4084 ut_ad(mtr);
4085-@@ -2765,9 +2879,11 @@
4086+@@ -2766,9 +2880,11 @@
4087 fold = buf_page_address_fold(space, offset);
4088 loop:
4089 block = guess;
4090@@ -1181,7 +1181,7 @@
4091 /* If the guess is a compressed page descriptor that
4092 has been allocated by buf_buddy_alloc(), it may have
4093 been invalidated by buf_buddy_relocate(). In that
4094-@@ -2776,11 +2892,15 @@
4095+@@ -2777,11 +2893,15 @@
4096 the guess may be pointing to a buffer pool chunk that
4097 has been released when resizing the buffer pool. */
4098
4099@@ -1198,7 +1198,7 @@
4100 block = guess = NULL;
4101 } else {
4102 ut_ad(!block->page.in_zip_hash);
4103-@@ -2789,12 +2909,19 @@
4104+@@ -2790,12 +2910,19 @@
4105 }
4106
4107 if (block == NULL) {
4108@@ -1218,7 +1218,7 @@
4109 block = NULL;
4110 }
4111
4112-@@ -2806,12 +2933,14 @@
4113+@@ -2807,12 +2934,14 @@
4114 space, offset, fold);
4115
4116 if (UNIV_LIKELY_NULL(block)) {
4117@@ -1235,7 +1235,7 @@
4118
4119 if (mode == BUF_GET_IF_IN_POOL
4120 || mode == BUF_PEEK_IF_IN_POOL
4121-@@ -2861,7 +2990,8 @@
4122+@@ -2862,7 +2991,8 @@
4123 /* The page is being read to buffer pool,
4124 but we cannot wait around for the read to
4125 complete. */
4126@@ -1245,7 +1245,7 @@
4127
4128 return(NULL);
4129 }
4130-@@ -2871,38 +3001,49 @@
4131+@@ -2872,38 +3002,49 @@
4132 ibool success;
4133
4134 case BUF_BLOCK_FILE_PAGE:
4135@@ -1302,7 +1302,7 @@
4136
4137 {
4138 buf_page_t* hash_bpage;
4139-@@ -2915,35 +3056,47 @@
4140+@@ -2916,35 +3057,47 @@
4141 while buf_pool->mutex was released.
4142 Free the block that was allocated. */
4143
4144@@ -1356,7 +1356,7 @@
4145 buf_block_init_low(block);
4146 block->lock_hash_val = lock_rec_hash(space, offset);
4147
4148-@@ -2952,7 +3105,7 @@
4149+@@ -2953,7 +3106,7 @@
4150
4151 if (buf_page_get_state(&block->page)
4152 == BUF_BLOCK_ZIP_PAGE) {
4153@@ -1365,7 +1365,7 @@
4154 &block->page);
4155 ut_ad(!block->page.in_flush_list);
4156 } else {
4157-@@ -2969,20 +3122,25 @@
4158+@@ -2970,20 +3123,25 @@
4159 /* Insert at the front of unzip_LRU list */
4160 buf_unzip_LRU_add_block(block, FALSE);
4161
4162@@ -1394,7 +1394,7 @@
4163
4164 /* Decompress the page and apply buffered operations
4165 while not holding buf_pool->mutex or block->mutex. */
4166-@@ -2995,12 +3153,15 @@
4167+@@ -2996,12 +3154,15 @@
4168 }
4169
4170 /* Unfix and unlatch the block. */
4171@@ -1413,7 +1413,7 @@
4172 rw_lock_x_unlock(&block->lock);
4173
4174 break;
4175-@@ -3016,7 +3177,7 @@
4176+@@ -3017,7 +3178,7 @@
4177
4178 ut_ad(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
4179
4180@@ -1422,7 +1422,7 @@
4181 #if UNIV_WORD_SIZE == 4
4182 /* On 32-bit systems, there is no padding in buf_page_t. On
4183 other systems, Valgrind could complain about uninitialized pad
4184-@@ -3029,8 +3190,8 @@
4185+@@ -3030,8 +3191,8 @@
4186 /* Try to evict the block from the buffer pool, to use the
4187 insert buffer (change buffer) as much as possible. */
4188
4189@@ -1433,7 +1433,7 @@
4190 if (mode == BUF_GET_IF_IN_POOL_OR_WATCH) {
4191 /* Set the watch, as it would have
4192 been set if the page were not in the
4193-@@ -3039,6 +3200,9 @@
4194+@@ -3040,6 +3201,9 @@
4195 space, offset, fold);
4196
4197 if (UNIV_LIKELY_NULL(block)) {
4198@@ -1443,7 +1443,7 @@
4199
4200 /* The page entered the buffer
4201 pool for some reason. Try to
4202-@@ -3046,7 +3210,7 @@
4203+@@ -3047,7 +3211,7 @@
4204 goto got_block;
4205 }
4206 }
4207@@ -1452,10 +1452,10 @@
4208 fprintf(stderr,
4209 "innodb_change_buffering_debug evict %u %u\n",
4210 (unsigned) space, (unsigned) offset);
4211-@@ -3065,13 +3229,14 @@
4212-
4213- buf_block_buf_fix_inc(block, file, line);
4214-
4215+@@ -3069,13 +3233,14 @@
4216+ ut_a(mode == BUF_GET_POSSIBLY_FREED
4217+ || !block->page.file_page_was_freed);
4218+ #endif
4219 - mutex_exit(&block->mutex);
4220 + //mutex_exit(&block->mutex);
4221
4222@@ -3382,7 +3382,7 @@
4223 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
4224 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:48:03.048955897 +0900
4225 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 15:48:29.304024564 +0900
4226-@@ -264,6 +264,10 @@
4227+@@ -265,6 +265,10 @@
4228 # endif /* !PFS_SKIP_BUFFER_MUTEX_RWLOCK */
4229 {&buf_pool_mutex_key, "buf_pool_mutex", 0},
4230 {&buf_pool_zip_mutex_key, "buf_pool_zip_mutex", 0},
4231@@ -3393,7 +3393,7 @@
4232 {&cache_last_read_mutex_key, "cache_last_read_mutex", 0},
4233 {&dict_foreign_err_mutex_key, "dict_foreign_err_mutex", 0},
4234 {&dict_sys_mutex_key, "dict_sys_mutex", 0},
4235-@@ -313,6 +317,7 @@
4236+@@ -314,6 +318,7 @@
4237 {&archive_lock_key, "archive_lock", 0},
4238 # endif /* UNIV_LOG_ARCHIVE */
4239 {&btr_search_latch_key, "btr_search_latch", 0},
4240@@ -3547,7 +3547,7 @@
4241 diff -ruN a/storage/innobase/include/buf0buf.h b/storage/innobase/include/buf0buf.h
4242 --- a/storage/innobase/include/buf0buf.h 2010-12-03 15:22:36.327954660 +0900
4243 +++ b/storage/innobase/include/buf0buf.h 2010-12-03 15:48:29.343024683 +0900
4244-@@ -205,6 +205,20 @@
4245+@@ -208,6 +208,20 @@
4246 /*==========================*/
4247
4248 /********************************************************************//**
4249@@ -3568,7 +3568,7 @@
4250 Creates the buffer pool.
4251 @return own: buf_pool object, NULL if not enough memory or error */
4252 UNIV_INTERN
4253-@@ -834,6 +848,15 @@
4254+@@ -837,6 +851,15 @@
4255 const buf_page_t* bpage) /*!< in: pointer to control block */
4256 __attribute__((pure));
4257
4258@@ -3584,7 +3584,7 @@
4259 /*********************************************************************//**
4260 Get the flush type of a page.
4261 @return flush type */
4262-@@ -1315,7 +1338,7 @@
4263+@@ -1318,7 +1341,7 @@
4264 All these are protected by buf_pool->mutex. */
4265 /* @{ */
4266
4267@@ -3593,7 +3593,7 @@
4268 /*!< based on state, this is a
4269 list node, protected either by
4270 buf_pool->mutex or by
4271-@@ -1343,6 +1366,10 @@
4272+@@ -1346,6 +1369,10 @@
4273 BUF_BLOCK_REMOVE_HASH or
4274 BUF_BLOCK_READY_IN_USE. */
4275
4276@@ -3604,7 +3604,7 @@
4277 #ifdef UNIV_DEBUG
4278 ibool in_flush_list; /*!< TRUE if in buf_pool->flush_list;
4279 when buf_pool->flush_list_mutex is
4280-@@ -1435,11 +1462,11 @@
4281+@@ -1438,11 +1465,11 @@
4282 a block is in the unzip_LRU list
4283 if page.state == BUF_BLOCK_FILE_PAGE
4284 and page.zip.data != NULL */
4285@@ -3618,7 +3618,7 @@
4286 mutex_t mutex; /*!< mutex protecting this block:
4287 state (also protected by the buffer
4288 pool mutex), io_fix, buf_fix_count,
4289-@@ -1614,6 +1641,11 @@
4290+@@ -1617,6 +1644,11 @@
4291 pool instance, protects compressed
4292 only pages (of type buf_page_t, not
4293 buf_block_t */
4294@@ -3630,7 +3630,7 @@
4295 ulint instance_no; /*!< Array index of this buffer
4296 pool instance */
4297 ulint old_pool_size; /*!< Old pool size in bytes */
4298-@@ -1765,8 +1797,8 @@
4299+@@ -1768,8 +1800,8 @@
4300 /** Test if a buffer pool mutex is owned. */
4301 #define buf_pool_mutex_own(b) mutex_own(&b->mutex)
4302 /** Acquire a buffer pool mutex. */
4303
4304=== modified file 'innodb_stats.patch'
4305--- innodb_stats.patch 2011-06-10 10:07:06 +0000
4306+++ innodb_stats.patch 2011-08-01 03:32:34 +0000
4307@@ -189,7 +189,7 @@
4308 Creates an index tree for the index if it is not a member of a cluster.
4309 @return DB_SUCCESS or DB_OUT_OF_FILE_SPACE */
4310 static
4311-@@ -937,6 +1008,49 @@
4312+@@ -936,6 +1007,49 @@
4313 dict_sys->sys_fields, heap);
4314 node->field_def->common.parent = node;
4315
4316@@ -239,7 +239,7 @@
4317 node->commit_node = commit_node_create(heap);
4318 node->commit_node->common.parent = node;
4319
4320-@@ -1087,6 +1201,7 @@
4321+@@ -1086,6 +1200,7 @@
4322
4323 node->state = INDEX_BUILD_FIELD_DEF;
4324 node->field_no = 0;
4325@@ -247,7 +247,7 @@
4326
4327 thr->run_node = node->ind_def;
4328
4329-@@ -1132,7 +1247,31 @@
4330+@@ -1131,7 +1246,31 @@
4331 goto function_exit;
4332 }
4333
4334@@ -280,7 +280,7 @@
4335 }
4336
4337 if (node->state == INDEX_CREATE_INDEX_TREE) {
4338-@@ -1178,6 +1317,66 @@
4339+@@ -1177,6 +1316,66 @@
4340 return(NULL);
4341 }
4342
4343@@ -359,7 +359,7 @@
4344 }
4345
4346 return(table);
4347-@@ -4309,6 +4309,295 @@
4348+@@ -4343,6 +4343,295 @@
4349 }
4350
4351 /*********************************************************************//**
4352@@ -655,7 +655,7 @@
4353 Calculates new estimates for table and index statistics. The statistics
4354 are used in query optimization. */
4355 UNIV_INTERN
4356-@@ -4316,10 +4605,11 @@
4357+@@ -4350,10 +4639,11 @@
4358 dict_update_statistics(
4359 /*===================*/
4360 dict_table_t* table, /*!< in/out: table */
4361@@ -668,7 +668,7 @@
4362 {
4363 dict_index_t* index;
4364 ulint sum_of_index_sizes = 0;
4365-@@ -4336,6 +4626,27 @@
4366+@@ -4370,6 +4660,27 @@
4367 return;
4368 }
4369
4370@@ -696,7 +696,7 @@
4371 /* Find out the sizes of the indexes and how many different values
4372 for the key they approximately have */
4373
4374-@@ -4400,6 +4711,11 @@
4375+@@ -4434,6 +4745,11 @@
4376 index = dict_table_get_next_index(index);
4377 } while (index);
4378
4379@@ -708,7 +708,7 @@
4380 index = dict_table_get_first_index(table);
4381
4382 table->stat_n_rows = index->stat_n_diff_key_vals[
4383-@@ -4417,6 +4733,78 @@
4384+@@ -4451,6 +4767,78 @@
4385 dict_table_stats_unlock(table, RW_X_LATCH);
4386 }
4387
4388@@ -787,7 +787,7 @@
4389 /**********************************************************************//**
4390 Prints info of a foreign key constraint. */
4391 static
4392-@@ -4494,7 +4882,8 @@
4393+@@ -4528,7 +4916,8 @@
4394
4395 ut_ad(mutex_own(&(dict_sys->mutex)));
4396
4397@@ -904,15 +904,15 @@
4398 diff -ruN a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
4399 --- a/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:17:03.665960357 +0900
4400 +++ b/storage/innobase/handler/ha_innodb.cc 2010-12-03 17:22:21.586939783 +0900
4401-@@ -187,6 +187,7 @@
4402- static my_bool innobase_rollback_on_timeout = FALSE;
4403+@@ -188,6 +188,7 @@
4404 static my_bool innobase_create_status_file = FALSE;
4405 static my_bool innobase_stats_on_metadata = TRUE;
4406+ static my_bool innobase_large_prefix = FALSE;
4407 +static my_bool innobase_use_sys_stats_table = FALSE;
4408
4409
4410 static char* internal_innobase_data_file_path = NULL;
4411-@@ -2434,6 +2435,8 @@
4412+@@ -2440,6 +2441,8 @@
4413 goto error;
4414 }
4415
4416@@ -921,7 +921,7 @@
4417 /* -------------- Log files ---------------------------*/
4418
4419 /* The default dir for log files is the datadir of MySQL */
4420-@@ -5236,6 +5239,10 @@
4421+@@ -5248,6 +5251,10 @@
4422
4423 error = row_insert_for_mysql((byte*) record, prebuilt);
4424
4425@@ -932,7 +932,7 @@
4426 /* Handle duplicate key errors */
4427 if (auto_inc_used) {
4428 ulint err;
4429-@@ -5572,6 +5579,10 @@
4430+@@ -5584,6 +5591,10 @@
4431 }
4432 }
4433
4434@@ -943,7 +943,7 @@
4435 innodb_srv_conc_exit_innodb(trx);
4436
4437 error = convert_error_code_to_mysql(error,
4438-@@ -5625,6 +5636,10 @@
4439+@@ -5637,6 +5648,10 @@
4440
4441 error = row_update_for_mysql((byte*) record, prebuilt);
4442
4443@@ -954,7 +954,7 @@
4444 innodb_srv_conc_exit_innodb(trx);
4445
4446 error = convert_error_code_to_mysql(
4447-@@ -5943,6 +5958,11 @@
4448+@@ -5955,6 +5970,11 @@
4449 case DB_SUCCESS:
4450 error = 0;
4451 table->status = 0;
4452@@ -966,7 +966,7 @@
4453 break;
4454 case DB_RECORD_NOT_FOUND:
4455 error = HA_ERR_KEY_NOT_FOUND;
4456-@@ -6152,6 +6172,11 @@
4457+@@ -6164,6 +6184,11 @@
4458 case DB_SUCCESS:
4459 error = 0;
4460 table->status = 0;
4461@@ -978,7 +978,7 @@
4462 break;
4463 case DB_RECORD_NOT_FOUND:
4464 error = HA_ERR_END_OF_FILE;
4465-@@ -8094,11 +8119,35 @@
4466+@@ -8106,11 +8131,35 @@
4467 /* In sql_show we call with this flag: update
4468 then statistics so that they are up-to-date */
4469
4470@@ -1015,7 +1015,7 @@
4471
4472 prebuilt->trx->op_info = "returning various info to MySQL";
4473 }
4474-@@ -8176,7 +8225,7 @@
4475+@@ -8188,7 +8237,7 @@
4476 are asked by MySQL to avoid locking. Another reason to
4477 avoid the call is that it uses quite a lot of CPU.
4478 See Bug#38185. */
4479@@ -1024,7 +1024,7 @@
4480 || !(flag & HA_STATUS_VARIABLE_EXTRA)) {
4481 /* We do not update delete_length if no
4482 locking is requested so the "old" value can
4483-@@ -11385,6 +11434,26 @@
4484+@@ -11402,6 +11451,26 @@
4485 "The number of index pages to sample when calculating statistics (default 8)",
4486 NULL, NULL, 8, 1, ~0ULL, 0);
4487
4488@@ -1051,7 +1051,7 @@
4489 static MYSQL_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled,
4490 PLUGIN_VAR_OPCMDARG,
4491 "Enable InnoDB adaptive hash index (enabled by default). "
4492-@@ -11710,6 +11779,9 @@
4493+@@ -11728,6 +11797,9 @@
4494 MYSQL_SYSVAR(recovery_update_relay_log),
4495 MYSQL_SYSVAR(rollback_on_timeout),
4496 MYSQL_SYSVAR(stats_on_metadata),
4497@@ -1061,7 +1061,7 @@
4498 MYSQL_SYSVAR(stats_sample_pages),
4499 MYSQL_SYSVAR(adaptive_hash_index),
4500 MYSQL_SYSVAR(stats_method),
4501-@@ -11779,7 +11851,10 @@
4502+@@ -11797,7 +11869,10 @@
4503 i_s_innodb_sys_columns,
4504 i_s_innodb_sys_fields,
4505 i_s_innodb_sys_foreign,
4506@@ -1767,7 +1767,7 @@
4507 diff -ruN a/storage/innobase/include/dict0dict.h b/storage/innobase/include/dict0dict.h
4508 --- a/storage/innobase/include/dict0dict.h 2010-12-03 15:48:03.073024387 +0900
4509 +++ b/storage/innobase/include/dict0dict.h 2010-12-03 17:19:24.888965622 +0900
4510-@@ -1096,10 +1096,18 @@
4511+@@ -1109,10 +1109,18 @@
4512 dict_update_statistics(
4513 /*===================*/
4514 dict_table_t* table, /*!< in/out: table */
4515@@ -1787,7 +1787,7 @@
4516 /********************************************************************//**
4517 Reserves the dictionary system mutex for MySQL. */
4518 UNIV_INTERN
4519-@@ -1214,6 +1222,7 @@
4520+@@ -1227,6 +1235,7 @@
4521 dict_table_t* sys_columns; /*!< SYS_COLUMNS table */
4522 dict_table_t* sys_indexes; /*!< SYS_INDEXES table */
4523 dict_table_t* sys_fields; /*!< SYS_FIELDS table */
4524@@ -1806,7 +1806,7 @@
4525
4526 /* This must be last item. Defines the number of system tables. */
4527 SYS_NUM_SYSTEM_TABLES
4528-@@ -322,6 +323,20 @@
4529+@@ -327,6 +328,20 @@
4530 const char** ref_col_name, /*!< out: referenced column name
4531 in referenced table */
4532 ulint* pos); /*!< out: column position */
4533@@ -1967,7 +1967,7 @@
4534 }
4535 }
4536
4537-@@ -2098,6 +2101,71 @@
4538+@@ -2103,6 +2106,71 @@
4539 }
4540
4541 /*********************************************************************//**
4542@@ -2039,7 +2039,7 @@
4543 Scans a table create SQL string and adds to the data dictionary
4544 the foreign key constraints declared in the string. This function
4545 should be called after the indexes for a table have been created.
4546-@@ -3022,7 +3090,7 @@
4547+@@ -3027,7 +3095,7 @@
4548 dict_table_autoinc_initialize(table, 1);
4549 dict_table_autoinc_unlock(table);
4550 dict_update_statistics(table, FALSE /* update even if stats are
4551@@ -2048,7 +2048,7 @@
4552
4553 trx_commit_for_mysql(trx);
4554
4555-@@ -3324,6 +3392,8 @@
4556+@@ -3329,6 +3397,8 @@
4557 " IF (SQL % NOTFOUND) THEN\n"
4558 " found := 0;\n"
4559 " ELSE\n"
4560@@ -2060,7 +2060,7 @@
4561 diff -ruN a/storage/innobase/row/row0row.c b/storage/innobase/row/row0row.c
4562 --- a/storage/innobase/row/row0row.c 2011-03-10 00:11:38.000000000 +0900
4563 +++ b/storage/innobase/row/row0row.c 2011-03-30 11:44:58.000000000 +0900
4564-@@ -347,6 +347,14 @@
4565+@@ -315,6 +315,14 @@
4566
4567 rec_len = rec_offs_n_fields(offsets);
4568
4569@@ -2075,7 +2075,7 @@
4570 entry = dtuple_create(heap, rec_len);
4571
4572 dtuple_set_n_fields_cmp(entry,
4573-@@ -358,6 +366,14 @@
4574+@@ -326,6 +334,14 @@
4575 for (i = 0; i < rec_len; i++) {
4576
4577 dfield = dtuple_get_nth_field(entry, i);
4578@@ -2141,12 +2141,12 @@
4579 diff -ruN a/storage/innobase/trx/trx0rec.c b/storage/innobase/trx/trx0rec.c
4580 --- a/storage/innobase/trx/trx0rec.c 2011-03-10 00:11:38.000000000 +0900
4581 +++ b/storage/innobase/trx/trx0rec.c 2011-03-30 11:44:58.000000000 +0900
4582-@@ -665,14 +665,27 @@
4583+@@ -669,15 +669,27 @@
4584 /* Save to the undo log the old values of the columns to be updated. */
4585
4586 if (update) {
4587 + ulint extended = 0;
4588-+
4589+
4590 if (trx_undo_left(undo_page, ptr) < 5) {
4591
4592 return(0);
4593
4594=== modified file 'innodb_thread_concurrency_timer_based.patch'
4595--- innodb_thread_concurrency_timer_based.patch 2011-06-10 10:07:06 +0000
4596+++ innodb_thread_concurrency_timer_based.patch 2011-08-01 03:32:34 +0000
4597@@ -16,7 +16,7 @@
4598 static long long innobase_buffer_pool_size, innobase_log_file_size;
4599
4600 /** Percentage of the buffer pool to reserve for 'old' blocks.
4601-@@ -2543,6 +2544,9 @@
4602+@@ -2549,6 +2550,9 @@
4603 srv_n_log_files = (ulint) innobase_log_files_in_group;
4604 srv_log_file_size = (ulint) innobase_log_file_size;
4605
4606@@ -26,7 +26,7 @@
4607 #ifdef UNIV_LOG_ARCHIVE
4608 srv_log_archive_on = (ulint) innobase_log_archive;
4609 #endif /* UNIV_LOG_ARCHIVE */
4610-@@ -11475,6 +11479,12 @@
4611+@@ -11492,6 +11496,12 @@
4612 "Maximum delay between polling for a spin lock (6 by default)",
4613 NULL, NULL, 6L, 0L, ~0L, 0);
4614
4615@@ -39,7 +39,7 @@
4616 static MYSQL_SYSVAR_ULONG(thread_concurrency, srv_thread_concurrency,
4617 PLUGIN_VAR_RQCMDARG,
4618 "Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling.",
4619-@@ -11686,6 +11696,7 @@
4620+@@ -11704,6 +11714,7 @@
4621 MYSQL_SYSVAR(spin_wait_delay),
4622 MYSQL_SYSVAR(table_locks),
4623 MYSQL_SYSVAR(thread_concurrency),
4624
4625=== modified file 'log_connection_error.patch'
4626--- log_connection_error.patch 2011-06-16 01:19:11 +0000
4627+++ log_connection_error.patch 2011-08-01 03:32:34 +0000
4628@@ -18,7 +18,7 @@
4629 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
4630 --- a/sql/mysqld.cc 2011-04-09 18:48:53.000000000 +0400
4631 +++ b/sql/mysqld.cc 2011-04-09 18:48:54.000000000 +0400
4632-@@ -5040,6 +5040,10 @@
4633+@@ -5098,6 +5098,10 @@
4634
4635 DBUG_PRINT("error",("Too many connections"));
4636 close_connection(thd, ER_CON_COUNT_ERROR);
4637@@ -29,7 +29,7 @@
4638 delete thd;
4639 DBUG_VOID_RETURN;
4640 }
4641-@@ -5420,6 +5424,10 @@
4642+@@ -5478,6 +5482,10 @@
4643 if (!(thd->net.vio= vio_new_win32pipe(hConnectedPipe)) ||
4644 my_net_init(&thd->net, thd->net.vio))
4645 {
4646@@ -40,7 +40,7 @@
4647 close_connection(thd, ER_OUT_OF_RESOURCES);
4648 delete thd;
4649 continue;
4650-@@ -5615,6 +5623,10 @@
4651+@@ -5673,6 +5681,10 @@
4652 event_conn_closed)) ||
4653 my_net_init(&thd->net, thd->net.vio))
4654 {
4655
4656=== modified file 'log_warnings_suppress.patch'
4657--- log_warnings_suppress.patch 2011-06-16 01:19:11 +0000
4658+++ log_warnings_suppress.patch 2011-08-01 03:32:34 +0000
4659@@ -21,7 +21,7 @@
4660 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
4661 --- a/sql/mysqld.cc 2011-04-09 18:48:59.000000000 +0400
4662 +++ b/sql/mysqld.cc 2011-04-09 18:48:59.000000000 +0400
4663-@@ -623,6 +623,8 @@
4664+@@ -628,6 +628,8 @@
4665 SHOW_COMP_OPTION have_crypt, have_compress;
4666 SHOW_COMP_OPTION have_profiling;
4667
4668@@ -39,13 +39,13 @@
4669
4670 +extern ulonglong opt_log_warnings_suppress;
4671 +
4672- extern pthread_key(MEM_ROOT**,THR_MALLOC);
4673-
4674- #ifdef HAVE_PSI_INTERFACE
4675+ /*
4676+ THR_MALLOC is a key which will be used to set/get MEM_ROOT** for a thread,
4677+ using my_pthread_setspecific_ptr()/my_thread_getspecific_ptr().
4678 diff -ruN a/sql/sql_class.cc b/sql/sql_class.cc
4679 --- a/sql/sql_class.cc 2011-04-09 18:48:50.000000000 +0400
4680 +++ b/sql/sql_class.cc 2011-04-09 18:48:59.000000000 +0400
4681-@@ -4575,7 +4575,7 @@
4682+@@ -4864,7 +4864,7 @@
4683 ER_BINLOG_UNSAFE_STATEMENT,
4684 ER(ER_BINLOG_UNSAFE_STATEMENT),
4685 ER(LEX::binlog_stmt_unsafe_errcode[unsafe_type]));
4686
4687=== modified file 'microsec_process.patch'
4688--- microsec_process.patch 2011-06-10 10:07:06 +0000
4689+++ microsec_process.patch 2011-08-01 03:32:34 +0000
4690@@ -41,7 +41,7 @@
4691 if (schema_table_store_record(thd, table))
4692 {
4693 mysql_mutex_unlock(&LOCK_thread_count);
4694-@@ -7409,6 +7414,8 @@
4695+@@ -7441,6 +7446,8 @@
4696 {"STATE", 64, MYSQL_TYPE_STRING, 0, 1, "State", SKIP_OPEN_TABLE},
4697 {"INFO", PROCESS_LIST_INFO_WIDTH, MYSQL_TYPE_STRING, 0, 1, "Info",
4698 SKIP_OPEN_TABLE},
4699
4700=== modified file 'mysql-test.diff'
4701--- mysql-test.diff 2011-05-18 00:03:53 +0000
4702+++ mysql-test.diff 2011-08-01 03:32:34 +0000
4703@@ -1342,3 +1342,22 @@
4704 +++ b/mysql-test/suite/sys_vars/t/userstat_basic.test 2011-04-09 18:49:05.000000000 +0400
4705 @@ -0,0 +1 @@
4706 +SELECT @@global.userstat;
4707+diff -ruN a/mysql-test/suite/sys_vars/r/all_vars.result b/mysql-test/suite/sys_vars/r/all_vars.result
4708+--- a/mysql-test/suite/sys_vars/r/all_vars.result 2011-06-21 19:42:40.000000000 +0300
4709++++ b/mysql-test/suite/sys_vars/r/all_vars.result 2011-07-27 23:04:47.504793666 +0300
4710+@@ -12,11 +12,15 @@
4711+ left join t1 on variable_name=test_name where test_name is null;
4712+ There should be *no* variables listed below:
4713+ INNODB_ROLLBACK_SEGMENTS
4714++INNODB_KILL_IDLE_TRANSACTION
4715+ INNODB_STATS_METHOD
4716++INNODB_FAKE_CHANGES
4717+ INNODB_FILE_FORMAT_MAX
4718+ INNODB_LARGE_PREFIX
4719+ INNODB_ROLLBACK_SEGMENTS
4720++INNODB_KILL_IDLE_TRANSACTION
4721+ INNODB_STATS_METHOD
4722++INNODB_FAKE_CHANGES
4723+ INNODB_FILE_FORMAT_MAX
4724+ INNODB_LARGE_PREFIX
4725+ drop table t1;
4726
4727=== modified file 'mysql_syslog.patch'
4728--- mysql_syslog.patch 2011-05-11 13:27:33 +0000
4729+++ mysql_syslog.patch 2011-08-01 03:32:34 +0000
4730@@ -59,7 +59,7 @@
4731 + NO_ARG, 0, 0, 0, 0, 0, 0},
4732 +#endif
4733 {"plugin_dir", OPT_PLUGIN_DIR, "Directory for client-side plugins.",
4734- (uchar**) &opt_plugin_dir, (uchar**) &opt_plugin_dir, 0,
4735+ &opt_plugin_dir, &opt_plugin_dir, 0,
4736 GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
4737 @@ -1667,6 +1677,11 @@
4738 opt->name);
4739
4740=== modified file 'optimizer_fix.patch'
4741--- optimizer_fix.patch 2011-06-10 10:07:06 +0000
4742+++ optimizer_fix.patch 2011-08-01 03:32:34 +0000
4743@@ -20,8 +20,8 @@
4744 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
4745 --- a/sql/mysqld.cc 2010-12-02 19:22:40.027024953 +0900
4746 +++ b/sql/mysqld.cc 2010-12-02 20:51:50.811356434 +0900
4747-@@ -425,6 +425,7 @@
4748- uint opt_debug_sync_timeout= 0;
4749+@@ -430,6 +430,7 @@
4750+ MYSQL_PLUGIN_IMPORT uint opt_debug_sync_timeout= 0;
4751 #endif /* defined(ENABLED_DEBUG_SYNC) */
4752 my_bool opt_old_style_user_limits= 0, trust_function_creators= 0;
4753 +my_bool opt_optimizer_fix= 0;
4754
4755=== modified file 'processlist_row_stats.patch'
4756--- processlist_row_stats.patch 2011-06-16 01:19:11 +0000
4757+++ processlist_row_stats.patch 2011-08-01 03:32:34 +0000
4758@@ -8,7 +8,7 @@
4759 diff -ruN a/sql/sql_class.cc b/sql/sql_class.cc
4760 --- a/sql/sql_class.cc 2011-03-09 17:07:26.221709282 +0200
4761 +++ b/sql/sql_class.cc 2011-03-09 17:07:44.900164285 +0200
4762-@@ -2017,6 +2017,7 @@
4763+@@ -2306,6 +2306,7 @@
4764
4765 thd->sent_row_count++;
4766 thd->sent_row_count_2++;
4767@@ -89,7 +89,7 @@
4768 if (schema_table_store_record(thd, table))
4769 {
4770 mysql_mutex_unlock(&LOCK_thread_count);
4771-@@ -8082,6 +8108,12 @@
4772+@@ -8117,6 +8143,12 @@
4773 SKIP_OPEN_TABLE},
4774 {"TIME_MS", MY_INT64_NUM_DECIMAL_DIGITS, MYSQL_TYPE_LONGLONG,
4775 0, 0, "Time_ms", SKIP_OPEN_TABLE},
4776
4777=== modified file 'query_cache_enhance.patch'
4778--- query_cache_enhance.patch 2011-06-16 01:19:11 +0000
4779+++ query_cache_enhance.patch 2011-08-01 03:32:34 +0000
4780@@ -27,7 +27,7 @@
4781 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
4782 --- a/sql/mysqld.cc 2011-04-09 18:48:50.000000000 +0400
4783 +++ b/sql/mysqld.cc 2011-04-09 18:48:53.000000000 +0400
4784-@@ -899,6 +899,7 @@
4785+@@ -904,6 +904,7 @@
4786 #endif
4787 #ifdef HAVE_QUERY_CACHE
4788 ulong query_cache_min_res_unit= QUERY_CACHE_MIN_RESULT_DATA_SIZE;
4789
4790=== modified file 'response_time_distribution.patch'
4791--- response_time_distribution.patch 2011-06-21 02:36:36 +0000
4792+++ response_time_distribution.patch 2011-08-01 03:32:34 +0000
4793@@ -109,7 +109,7 @@
4794 #ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
4795 #include "../storage/perfschema/pfs_server.h"
4796 #endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
4797-@@ -606,7 +608,7 @@
4798+@@ -611,7 +613,7 @@
4799 MY_LOCALE *my_default_lc_messages;
4800 MY_LOCALE *my_default_lc_time_names;
4801
4802@@ -118,7 +118,7 @@
4803 SHOW_COMP_OPTION have_geometry, have_rtree_keys;
4804 SHOW_COMP_OPTION have_crypt, have_compress;
4805 SHOW_COMP_OPTION have_profiling;
4806-@@ -907,6 +909,10 @@
4807+@@ -912,6 +914,10 @@
4808 my_bool opt_enable_shared_memory;
4809 HANDLE smem_event_connect_request= 0;
4810 #endif
4811@@ -129,7 +129,7 @@
4812
4813 my_bool opt_use_ssl = 0;
4814 char *opt_ssl_ca= NULL, *opt_ssl_capath= NULL, *opt_ssl_cert= NULL,
4815-@@ -1478,6 +1484,9 @@
4816+@@ -1483,6 +1489,9 @@
4817 my_free(opt_bin_logname);
4818 bitmap_free(&temp_pool);
4819 free_max_user_conn();
4820@@ -139,7 +139,7 @@
4821 #ifdef HAVE_REPLICATION
4822 end_slave_list();
4823 #endif
4824-@@ -3960,6 +3969,9 @@
4825+@@ -4010,6 +4019,9 @@
4826 if (!DEFAULT_ERRMSGS[0][0])
4827 unireg_abort(1);
4828
4829@@ -149,7 +149,7 @@
4830 /* We have to initialize the storage engines before CSV logging */
4831 if (ha_init())
4832 {
4833-@@ -6848,6 +6860,11 @@
4834+@@ -6906,6 +6918,11 @@
4835 #else
4836 have_query_cache=SHOW_OPTION_NO;
4837 #endif
4838@@ -716,7 +716,7 @@
4839 #include "lock.h" // MYSQL_OPEN_IGNORE_FLUSH
4840 #include "debug_sync.h"
4841 #include "datadict.h" // dd_frm_type()
4842-@@ -7830,6 +7831,14 @@
4843+@@ -7865,6 +7866,14 @@
4844
4845 */
4846
4847@@ -731,7 +731,7 @@
4848 ST_SCHEMA_TABLE schema_tables[]=
4849 {
4850 {"CHARACTER_SETS", charsets_fields_info, create_schema_table,
4851-@@ -7883,6 +7892,13 @@
4852+@@ -7918,6 +7927,13 @@
4853 1, 9, 0, OPTIMIZE_I_S_TABLE|OPEN_TABLE_ONLY},
4854 {"ROUTINES", proc_fields_info, create_schema_table,
4855 fill_schema_proc, make_proc_old_format, 0, -1, -1, 0, 0},
4856@@ -785,7 +785,7 @@
4857 | MASTER_SYM
4858 { Lex->type|= REFRESH_MASTER; }
4859 | DES_KEY_FILE
4860-@@ -12597,6 +12613,7 @@
4861+@@ -12613,6 +12629,7 @@
4862 | PROXY_SYM {}
4863 | QUARTER_SYM {}
4864 | QUERY_SYM {}
4865
4866=== modified file 'series'
4867--- series 2011-07-21 09:14:03 +0000
4868+++ series 2011-08-01 03:32:34 +0000
4869@@ -29,6 +29,8 @@
4870 innodb_buffer_pool_pages_i_s.patch
4871 innodb_buffer_pool_shm.patch
4872 innodb_show_status_extend.patch
4873+innodb_kill_idle_transaction.patch
4874+innodb_fake_changes.patch
4875 slow_extended.patch
4876 percona_support.patch
4877 query_cache_enhance.patch
4878
4879=== modified file 'show_slave_status_nolock.patch'
4880--- show_slave_status_nolock.patch 2011-06-16 01:19:11 +0000
4881+++ show_slave_status_nolock.patch 2011-08-01 03:32:34 +0000
4882@@ -29,7 +29,7 @@
4883 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
4884 --- a/sql/mysqld.cc 2011-04-10 11:29:05.000000000 +0400
4885 +++ b/sql/mysqld.cc 2011-04-10 11:29:06.000000000 +0400
4886-@@ -3071,6 +3071,7 @@
4887+@@ -3121,6 +3121,7 @@
4888 {"show_relaylog_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_RELAYLOG_EVENTS]), SHOW_LONG_STATUS},
4889 {"show_slave_hosts", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_HOSTS]), SHOW_LONG_STATUS},
4890 {"show_slave_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_STAT]), SHOW_LONG_STATUS},
4891@@ -60,7 +60,7 @@
4892 sql_command_flags[SQLCOM_SHOW_CREATE_PROC]= CF_STATUS_COMMAND;
4893 sql_command_flags[SQLCOM_SHOW_CREATE_FUNC]= CF_STATUS_COMMAND;
4894 sql_command_flags[SQLCOM_SHOW_CREATE_TRIGGER]= CF_STATUS_COMMAND;
4895-@@ -2293,12 +2294,16 @@
4896+@@ -2354,12 +2355,16 @@
4897 mysql_mutex_unlock(&LOCK_active_mi);
4898 break;
4899 }
4900@@ -78,7 +78,7 @@
4901 if (active_mi != NULL)
4902 {
4903 res = show_master_info(thd, active_mi);
4904-@@ -2309,7 +2314,10 @@
4905+@@ -2370,7 +2375,10 @@
4906 WARN_NO_MASTER_INFO, ER(WARN_NO_MASTER_INFO));
4907 my_ok(thd);
4908 }
4909
4910=== modified file 'show_temp.patch'
4911--- show_temp.patch 2011-07-06 08:42:49 +0000
4912+++ show_temp.patch 2011-08-01 03:32:34 +0000
4913@@ -27,7 +27,7 @@
4914 diff -ruN a/sql/mysqld.cc b/sql/mysqld.cc
4915 --- a/sql/mysqld.cc 2011-07-05 22:30:05.000000000 +0400
4916 +++ b/sql/mysqld.cc 2011-07-06 12:04:47.000000000 +0400
4917-@@ -3051,6 +3051,7 @@
4918+@@ -3101,6 +3101,7 @@
4919 {"show_storage_engines", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STORAGE_ENGINES]), SHOW_LONG_STATUS},
4920 {"show_table_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLE_STATUS]), SHOW_LONG_STATUS},
4921 {"show_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLES]), SHOW_LONG_STATUS},
4922@@ -35,7 +35,7 @@
4923 {"show_triggers", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TRIGGERS]), SHOW_LONG_STATUS},
4924 {"show_variables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_VARIABLES]), SHOW_LONG_STATUS},
4925 {"show_warnings", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_WARNS]), SHOW_LONG_STATUS},
4926-@@ -7724,6 +7725,7 @@
4927+@@ -7798,6 +7799,7 @@
4928 PSI_mutex_key key_LOCK_des_key_file;
4929 #endif /* HAVE_OPENSSL */
4930
4931@@ -43,7 +43,7 @@
4932 PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_prep_xids,
4933 key_delayed_insert_mutex, key_hash_filo_lock, key_LOCK_active_mi,
4934 key_LOCK_connection_count, key_LOCK_crypt, key_LOCK_delayed_create,
4935-@@ -7777,6 +7779,7 @@
4936+@@ -7851,6 +7853,7 @@
4937 { &key_LOCK_system_variables_hash, "LOCK_system_variables_hash", PSI_FLAG_GLOBAL},
4938 { &key_LOCK_table_share, "LOCK_table_share", PSI_FLAG_GLOBAL},
4939 { &key_LOCK_thd_data, "THD::LOCK_thd_data", 0},
4940@@ -84,7 +84,7 @@
4941 case SCH_VIEWS:
4942 case SCH_TRIGGERS:
4943 case SCH_EVENTS:
4944-@@ -2017,6 +2022,7 @@
4945+@@ -2078,6 +2083,7 @@
4946 }
4947 case SQLCOM_SHOW_DATABASES:
4948 case SQLCOM_SHOW_TABLES:
4949@@ -92,7 +92,7 @@
4950 case SQLCOM_SHOW_TRIGGERS:
4951 case SQLCOM_SHOW_TABLE_STATUS:
4952 case SQLCOM_SHOW_OPEN_TABLES:
4953-@@ -4801,6 +4807,8 @@
4954+@@ -4841,6 +4847,8 @@
4955
4956 case SCH_TABLE_NAMES:
4957 case SCH_TABLES:
4958@@ -104,7 +104,7 @@
4959 diff -ruN a/sql/sql_show.cc b/sql/sql_show.cc
4960 --- a/sql/sql_show.cc 2011-07-05 22:30:04.000000000 +0400
4961 +++ b/sql/sql_show.cc 2011-07-06 12:09:05.000000000 +0400
4962-@@ -2693,6 +2693,7 @@
4963+@@ -2692,6 +2692,7 @@
4964 break;
4965 case SQLCOM_SHOW_TABLES:
4966 case SQLCOM_SHOW_TABLE_STATUS:
4967@@ -112,7 +112,7 @@
4968 case SQLCOM_SHOW_TRIGGERS:
4969 case SQLCOM_SHOW_EVENTS:
4970 thd->make_lex_string(&lookup_field_values->db_value,
4971-@@ -3181,6 +3182,231 @@
4972+@@ -3279,6 +3280,231 @@
4973 return (uint) OPEN_FULL_TABLE;
4974 }
4975
4976@@ -344,7 +344,7 @@
4977
4978 /**
4979 Try acquire high priority share metadata lock on a table (with
4980-@@ -6991,6 +7217,25 @@
4981+@@ -7023,6 +7249,25 @@
4982 {0, 0, MYSQL_TYPE_STRING, 0, 0, 0, SKIP_OPEN_TABLE}
4983 };
4984
4985@@ -370,7 +370,7 @@
4986
4987 ST_FIELD_INFO columns_fields_info[]=
4988 {
4989-@@ -7605,6 +7850,9 @@
4990+@@ -7637,6 +7882,9 @@
4991 hton_fill_schema_table, 0, 0, -1, -1, 0, 0},
4992 {"GLOBAL_STATUS", variables_fields_info, create_schema_table,
4993 fill_status, make_old_format, 0, 0, -1, 0, 0},
4994@@ -380,7 +380,7 @@
4995 {"GLOBAL_VARIABLES", variables_fields_info, create_schema_table,
4996 fill_variables, make_old_format, 0, 0, -1, 0, 0},
4997 {"KEY_COLUMN_USAGE", key_column_usage_fields_info, create_schema_table,
4998-@@ -7654,6 +7902,9 @@
4999+@@ -7686,6 +7934,9 @@
5000 get_all_tables, make_table_names_old_format, 0, 1, 2, 1, 0},
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches