Percona Server with XtraDB

Merge lp:~stewart/percona-server/5.5.20 into lp:percona-server/5.5

Proposed by Stewart Smith on 2012-02-06
Status: Merged
Approved by: Stewart Smith on 2012-02-06
Approved revision: 213
Merged at revision: 214
Proposed branch: lp:~stewart/percona-server/5.5.20
Merge into: lp:percona-server/5.5
Diff against target: 5315 lines (+680/-631) 46 files modified
To merge this branch: bzr merge lp:~stewart/percona-server/5.5.20
Reviewer Review Type Date Requested Status
Stewart Smith (community) Approve on 2012-02-06
Review via email: mp+91605@code.launchpad.net

Description of the Change

To post a comment you must log in.
Stewart Smith (stewart) :
review: Approve

Preview Diff

1=== modified file 'Makefile'
2--- Makefile 2012-01-09 02:00:29 +0000
3+++ Makefile 2012-02-06 05:02:26 +0000
4@@ -1,7 +1,7 @@
5 FETCH_CMD=wget
6 MASTER_SITE=http://s3.amazonaws.com/percona.com/downloads/community
7-MYSQL_VERSION=5.5.19
8-PERCONA_SERVER_VERSION=rel24.0
9+MYSQL_VERSION=5.5.20
10+PERCONA_SERVER_VERSION=rel24.1
11 PERCONA_SERVER ?=Percona-Server-$(MYSQL_VERSION)-$(PERCONA_SERVER_VERSION)
12 PERCONA_SERVER_SHORT_1 ?=Percona-Server-$(MYSQL_VERSION)
13 PERCONA_SERVER_SHORT_2 ?=Percona-Server
14
15=== modified file 'patches/bug860910.patch'
16--- patches/bug860910.patch 2011-12-27 15:32:16 +0000
17+++ patches/bug860910.patch 2012-02-06 05:02:26 +0000
18@@ -77,7 +77,7 @@
19 +--source include/rpl_end.inc
20 --- a/sql/log.cc
21 +++ b/sql/log.cc
22-@@ -5076,6 +5076,12 @@
23+@@ -5112,6 +5112,12 @@
24 user_var_event->type,
25 user_var_event->charset_number,
26 flags);
27
28=== modified file 'patches/control_online_alter_index.patch'
29--- patches/control_online_alter_index.patch 2011-12-27 15:32:16 +0000
30+++ patches/control_online_alter_index.patch 2012-02-06 05:02:26 +0000
31@@ -58,7 +58,7 @@
32 for (idx_p= index_drop_buffer, idx_end_p= idx_p + index_drop_count;
33 --- a/sql/sys_vars.cc
34 +++ b/sql/sys_vars.cc
35-@@ -2192,6 +2192,13 @@
36+@@ -2265,6 +2265,13 @@
37 GLOBAL_VAR(opt_optimizer_fix),
38 NO_CMD_LINE, DEFAULT(TRUE));
39
40
41=== modified file 'patches/group_commit.patch'
42--- patches/group_commit.patch 2012-01-11 15:14:15 +0000
43+++ patches/group_commit.patch 2012-02-06 05:02:26 +0000
44@@ -522,7 +522,7 @@
45 sync_period_ptr(sync_period),
46 is_relay_log(0), signal_cnt(0),
47 description_event_for_exec(0), description_event_for_queue(0)
48-@@ -5325,19 +5327,15 @@
49+@@ -5361,19 +5363,15 @@
50 SYNOPSIS
51 write_cache()
52 cache Cache to write to the binary log
53@@ -544,7 +544,7 @@
54 if (reinit_io_cache(cache, READ_CACHE, 0, 0, 0))
55 return ER_ERROR_ON_WRITE;
56 uint length= my_b_bytes_in_cache(cache), group, carry, hdr_offs;
57-@@ -5448,6 +5446,8 @@
58+@@ -5484,6 +5482,8 @@
59 }
60
61 /* Write data to the binary log file */
62@@ -553,7 +553,7 @@
63 if (my_b_write(&log_file, cache->read_pos, length))
64 return ER_ERROR_ON_WRITE;
65 thd->binlog_bytes_written+= length;
66-@@ -5456,9 +5456,6 @@
67+@@ -5492,9 +5492,6 @@
68
69 DBUG_ASSERT(carry == 0);
70
71@@ -563,7 +563,7 @@
72 return 0; // All OK
73 }
74
75-@@ -5499,8 +5496,6 @@
76+@@ -5535,8 +5532,6 @@
77 if (!is_open())
78 DBUG_RETURN(error);
79
80@@ -572,7 +572,7 @@
81 Incident incident= INCIDENT_LOST_EVENTS;
82 Incident_log_event ev(thd, incident, write_error_msg);
83 if (lock)
84-@@ -5549,112 +5544,332 @@
85+@@ -5585,112 +5580,332 @@
86 'cache' needs to be reinitialized after this functions returns.
87 */
88
89@@ -971,7 +971,7 @@
90 /**
91 Wait until we get a signal that the relay log has been updated.
92
93-@@ -6059,6 +6274,68 @@
94+@@ -6095,6 +6310,68 @@
95 }
96
97
98@@ -1040,7 +1040,7 @@
99 /********* transaction coordinator log for 2pc - mmap() based solution *******/
100
101 /*
102-@@ -6195,6 +6472,7 @@
103+@@ -6231,6 +6508,7 @@
104 mysql_mutex_init(key_LOCK_pool, &LOCK_pool, MY_MUTEX_INIT_FAST);
105 mysql_cond_init(key_COND_active, &COND_active, 0);
106 mysql_cond_init(key_COND_pool, &COND_pool, 0);
107@@ -1048,7 +1048,7 @@
108
109 inited=6;
110
111-@@ -6202,6 +6480,8 @@
112+@@ -6238,6 +6516,8 @@
113 active=pages;
114 pool=pages+1;
115 pool_last=pages+npages-1;
116@@ -1057,7 +1057,7 @@
117
118 return 0;
119
120-@@ -6307,7 +6587,7 @@
121+@@ -6343,7 +6623,7 @@
122 to the position in memory where xid was logged to.
123 */
124
125@@ -1066,7 +1066,7 @@
126 {
127 int err;
128 PAGE *p;
129-@@ -6446,7 +6726,9 @@
130+@@ -6482,7 +6762,9 @@
131 mysql_mutex_destroy(&LOCK_sync);
132 mysql_mutex_destroy(&LOCK_active);
133 mysql_mutex_destroy(&LOCK_pool);
134@@ -1076,7 +1076,7 @@
135 case 5:
136 data[0]='A'; // garble the first (signature) byte, in case mysql_file_delete fails
137 case 4:
138-@@ -6656,42 +6938,87 @@
139+@@ -6692,42 +6974,87 @@
140 mysql_cond_destroy(&COND_prep_xids);
141 }
142
143@@ -1176,7 +1176,7 @@
144 }
145
146 int TC_LOG_BINLOG::recover(IO_CACHE *log, Format_description_log_event *fdle)
147-@@ -6760,9 +7087,67 @@
148+@@ -6796,9 +7123,67 @@
149 {
150 return (ulonglong) mysql_bin_log.get_log_file()->pos_in_file;
151 }
152@@ -1244,7 +1244,7 @@
153 struct st_mysql_storage_engine binlog_storage_engine=
154 { MYSQL_HANDLERTON_INTERFACE_VERSION };
155
156-@@ -6777,7 +7162,7 @@
157+@@ -6813,7 +7198,7 @@
158 binlog_init, /* Plugin Init */
159 NULL, /* Plugin Deinit */
160 0x0100 /* 1.0 */,
161@@ -1446,7 +1446,7 @@
162 class Log_event_handler
163 --- a/sql/mysqld.cc
164 +++ b/sql/mysqld.cc
165-@@ -1490,6 +1490,7 @@
166+@@ -1495,6 +1495,7 @@
167 ha_end();
168 if (tc_log)
169 tc_log->close();
170@@ -1454,7 +1454,7 @@
171 delegates_destroy();
172 xid_cache_free();
173 table_def_free();
174-@@ -4061,6 +4062,8 @@
175+@@ -3911,6 +3912,8 @@
176 query_response_time_init();
177 #endif // HAVE_RESPONSE_TIME_DISTRIBUTION
178 /* We have to initialize the storage engines before CSV logging */
179@@ -1463,7 +1463,7 @@
180 init_global_table_stats();
181 init_global_index_stats();
182
183-@@ -8004,6 +8007,7 @@
184+@@ -7872,6 +7875,7 @@
185 key_LOCK_error_messages, key_LOG_INFO_lock, key_LOCK_thread_count,
186 key_PARTITION_LOCK_auto_inc;
187 PSI_mutex_key key_RELAYLOG_LOCK_index;
188@@ -1471,7 +1471,7 @@
189
190 static PSI_mutex_info all_server_mutexes[]=
191 {
192-@@ -8024,6 +8028,7 @@
193+@@ -7892,6 +7896,7 @@
194 { &key_delayed_insert_mutex, "Delayed_insert::mutex", 0},
195 { &key_hash_filo_lock, "hash_filo::lock", 0},
196 { &key_LOCK_active_mi, "LOCK_active_mi", PSI_FLAG_GLOBAL},
197@@ -1479,7 +1479,7 @@
198 { &key_LOCK_connection_count, "LOCK_connection_count", PSI_FLAG_GLOBAL},
199 { &key_LOCK_crypt, "LOCK_crypt", PSI_FLAG_GLOBAL},
200 { &key_LOCK_delayed_create, "LOCK_delayed_create", PSI_FLAG_GLOBAL},
201-@@ -8039,6 +8044,7 @@
202+@@ -7907,6 +7912,7 @@
203 "LOCK_global_index_stats", PSI_FLAG_GLOBAL},
204 { &key_LOCK_gdl, "LOCK_gdl", PSI_FLAG_GLOBAL},
205 { &key_LOCK_global_system_variables, "LOCK_global_system_variables", PSI_FLAG_GLOBAL},
206@@ -1487,7 +1487,7 @@
207 { &key_LOCK_manager, "LOCK_manager", PSI_FLAG_GLOBAL},
208 { &key_LOCK_prepared_stmt_count, "LOCK_prepared_stmt_count", PSI_FLAG_GLOBAL},
209 { &key_LOCK_rpl_status, "LOCK_rpl_status", PSI_FLAG_GLOBAL},
210-@@ -8050,6 +8056,7 @@
211+@@ -7918,6 +7924,7 @@
212 { &key_LOCK_temporary_tables, "THD::LOCK_temporary_tables", 0},
213 { &key_LOCK_user_conn, "LOCK_user_conn", PSI_FLAG_GLOBAL},
214 { &key_LOCK_uuid_generator, "LOCK_uuid_generator", PSI_FLAG_GLOBAL},
215@@ -1495,7 +1495,7 @@
216 { &key_LOG_LOCK_log, "LOG::LOCK_log", 0},
217 { &key_master_info_data_lock, "Master_info::data_lock", 0},
218 { &key_master_info_run_lock, "Master_info::run_lock", 0},
219-@@ -8097,6 +8104,7 @@
220+@@ -7965,6 +7972,7 @@
221 key_TABLE_SHARE_cond, key_user_level_lock_cond,
222 key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache;
223 PSI_cond_key key_RELAYLOG_update_cond;
224@@ -1503,7 +1503,7 @@
225
226 static PSI_cond_info all_server_conds[]=
227 {
228-@@ -8113,8 +8121,10 @@
229+@@ -7981,8 +7989,10 @@
230 { &key_RELAYLOG_update_cond, "MYSQL_RELAY_LOG::update_cond", 0},
231 { &key_COND_cache_status_changed, "Query_cache::COND_cache_status_changed", 0},
232 { &key_COND_manager, "COND_manager", PSI_FLAG_GLOBAL},
233@@ -1516,7 +1516,7 @@
234 { &key_item_func_sleep_cond, "Item_func_sleep::cond", 0},
235 --- a/sql/mysqld.h
236 +++ b/sql/mysqld.h
237-@@ -273,6 +273,7 @@
238+@@ -274,6 +274,7 @@
239 key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data,
240 key_LOCK_error_messages, key_LOCK_thread_count, key_PARTITION_LOCK_auto_inc;
241 extern PSI_mutex_key key_RELAYLOG_LOCK_index;
242@@ -1524,7 +1524,7 @@
243
244 extern PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger,
245 key_rwlock_LOCK_sys_init_connect, key_rwlock_LOCK_sys_init_slave,
246-@@ -293,6 +294,7 @@
247+@@ -294,6 +295,7 @@
248 key_TABLE_SHARE_cond, key_user_level_lock_cond,
249 key_COND_thread_count, key_COND_thread_cache, key_COND_flush_thread_cache;
250 extern PSI_cond_key key_RELAYLOG_update_cond;
251@@ -1552,7 +1552,7 @@
252 mysql_mutex_destroy(&LOCK_thd_data);
253 mysql_mutex_destroy(&LOCK_temporary_tables);
254 #ifndef DBUG_OFF
255-@@ -5292,6 +5296,24 @@
256+@@ -5297,6 +5301,24 @@
257 DBUG_RETURN(0);
258 }
259
260@@ -1887,7 +1887,7 @@
261
262 trx_deregister_from_2pc(trx);
263
264-@@ -10982,6 +11149,7 @@
265+@@ -10981,6 +11148,7 @@
266
267 srv_active_wake_master_thread();
268
269@@ -1895,7 +1895,7 @@
270 if (thd_sql_command(thd) != SQLCOM_XA_PREPARE
271 && (all
272 || !thd_test_options(
273-@@ -11008,6 +11176,7 @@
274+@@ -11007,6 +11175,7 @@
275 mysql_mutex_lock(&prepare_commit_mutex);
276 trx_owns_prepare_commit_mutex_set(trx);
277 }
278
279=== modified file 'patches/innodb_adaptive_hash_index_partitions.patch'
280--- patches/innodb_adaptive_hash_index_partitions.patch 2012-01-11 15:14:15 +0000
281+++ patches/innodb_adaptive_hash_index_partitions.patch 2012-02-06 05:02:26 +0000
282@@ -851,7 +851,7 @@
283
284 #ifdef UNIV_DEBUG
285 block->page.in_page_hash = FALSE;
286-@@ -1427,7 +1428,11 @@
287+@@ -1429,7 +1430,11 @@
288 ulint p;
289
290 #ifdef UNIV_SYNC_DEBUG
291@@ -864,7 +864,7 @@
292 #endif /* UNIV_SYNC_DEBUG */
293 ut_ad(!btr_search_enabled);
294
295-@@ -2142,6 +2147,7 @@
296+@@ -2144,6 +2149,7 @@
297 {
298 block->check_index_page_at_flush = FALSE;
299 block->index = NULL;
300@@ -874,7 +874,7 @@
301 block->n_fields = 1;
302 --- a/storage/innobase/buf/buf0lru.c
303 +++ b/storage/innobase/buf/buf0lru.c
304-@@ -560,7 +560,7 @@
305+@@ -576,7 +576,7 @@
306
307 mutex_exit(&buf_pool->LRU_list_mutex);
308
309@@ -883,7 +883,7 @@
310 chunk = buf_pool->chunks;
311 for (j = buf_pool->n_chunks; j--; chunk++) {
312 buf_block_t* block = chunk->blocks;
313-@@ -572,16 +572,16 @@
314+@@ -588,16 +588,16 @@
315 continue;
316 }
317
318@@ -905,7 +905,7 @@
319
320 --- a/storage/innobase/dict/dict0dict.c
321 +++ b/storage/innobase/dict/dict0dict.c
322-@@ -1846,7 +1846,7 @@
323+@@ -1851,7 +1851,7 @@
324 zero. */
325
326 for (;;) {
327@@ -916,7 +916,7 @@
328 }
329 --- a/storage/innobase/handler/ha_innodb.cc
330 +++ b/storage/innobase/handler/ha_innodb.cc
331-@@ -11833,6 +11833,11 @@
332+@@ -11832,6 +11832,11 @@
333 "Disable with --skip-innodb-adaptive-hash-index.",
334 NULL, innodb_adaptive_hash_index_update, TRUE);
335
336@@ -928,7 +928,7 @@
337 static MYSQL_SYSVAR_ULONG(replication_delay, srv_replication_delay,
338 PLUGIN_VAR_RQCMDARG,
339 "Replication thread delay (ms) on the slave server if "
340-@@ -12253,6 +12258,7 @@
341+@@ -12252,6 +12257,7 @@
342 MYSQL_SYSVAR(use_sys_stats_table),
343 MYSQL_SYSVAR(stats_sample_pages),
344 MYSQL_SYSVAR(adaptive_hash_index),
345@@ -1411,7 +1411,7 @@
346
347 --- a/storage/innobase/include/buf0buf.h
348 +++ b/storage/innobase/include/buf0buf.h
349-@@ -1580,6 +1580,7 @@
350+@@ -1600,6 +1600,7 @@
351 complete, though: there may
352 have been hash collisions,
353 record deletions, etc. */
354
355=== modified file 'patches/innodb_admin_command_base.patch'
356--- patches/innodb_admin_command_base.patch 2011-12-27 15:32:16 +0000
357+++ patches/innodb_admin_command_base.patch 2012-02-06 05:02:26 +0000
358@@ -7,7 +7,7 @@
359 # should be done or reviewed by the maintainer!
360 --- a/storage/innobase/handler/ha_innodb.cc
361 +++ b/storage/innobase/handler/ha_innodb.cc
362-@@ -11999,7 +11999,8 @@
363+@@ -12041,7 +12041,8 @@
364 i_s_innodb_sys_foreign_cols,
365 i_s_innodb_sys_stats,
366 i_s_innodb_table_stats,
367
368=== modified file 'patches/innodb_buffer_pool_pages_i_s.patch'
369--- patches/innodb_buffer_pool_pages_i_s.patch 2011-12-27 15:32:16 +0000
370+++ patches/innodb_buffer_pool_pages_i_s.patch 2012-02-06 05:02:26 +0000
371@@ -7,7 +7,7 @@
372 # should be done or reviewed by the maintainer!
373 --- a/storage/innobase/buf/buf0buf.c
374 +++ b/storage/innobase/buf/buf0buf.c
375-@@ -4161,6 +4161,36 @@
376+@@ -4163,6 +4163,36 @@
377 mutex_exit(block_mutex);
378 }
379
380@@ -46,7 +46,7 @@
381 @return TRUE */
382 --- a/storage/innobase/handler/ha_innodb.cc
383 +++ b/storage/innobase/handler/ha_innodb.cc
384-@@ -12296,6 +12296,9 @@
385+@@ -12338,6 +12338,9 @@
386 i_s_innodb_sys_stats,
387 i_s_innodb_table_stats,
388 i_s_innodb_index_stats,
389@@ -793,7 +793,7 @@
390 #endif /* i_s_h */
391 --- a/storage/innobase/include/buf0buf.h
392 +++ b/storage/innobase/include/buf0buf.h
393-@@ -1161,6 +1161,14 @@
394+@@ -1181,6 +1181,14 @@
395 /*===========*/
396 const buf_pool_t* buf_pool) /*!< in: buffer pool */
397 __attribute__((nonnull, const));
398
399=== modified file 'patches/innodb_buffer_pool_shm.patch'
400--- patches/innodb_buffer_pool_shm.patch 2011-12-27 15:32:16 +0000
401+++ patches/innodb_buffer_pool_shm.patch 2012-02-06 05:02:26 +0000
402@@ -55,7 +55,7 @@
403 srv_mem_pool_size = (ulint) innobase_additional_mem_pool_size;
404
405 srv_n_file_io_threads = (ulint) innobase_file_io_threads;
406-@@ -11864,6 +11872,16 @@
407+@@ -11863,6 +11871,16 @@
408 "Number of buffer pool instances, set to higher value on high-end machines to increase scalability",
409 NULL, NULL, 1L, 1L, MAX_BUFFER_POOLS, 1L);
410
411@@ -72,7 +72,7 @@
412 static MYSQL_SYSVAR_ULONG(commit_concurrency, innobase_commit_concurrency,
413 PLUGIN_VAR_RQCMDARG,
414 "Helps in performance tuning in heavily concurrent environments.",
415-@@ -12170,6 +12188,8 @@
416+@@ -12209,6 +12227,8 @@
417 MYSQL_SYSVAR(autoextend_increment),
418 MYSQL_SYSVAR(buffer_pool_size),
419 MYSQL_SYSVAR(buffer_pool_instances),
420
421=== modified file 'patches/innodb_deadlock_count.patch'
422--- patches/innodb_deadlock_count.patch 2011-10-28 08:46:55 +0000
423+++ patches/innodb_deadlock_count.patch 2012-02-06 05:02:26 +0000
424@@ -28,7 +28,7 @@
425 Gets the size of a lock struct.
426 --- a/storage/innobase/include/srv0srv.h
427 +++ b/storage/innobase/include/srv0srv.h
428-@@ -767,6 +767,7 @@
429+@@ -770,6 +770,7 @@
430 ulint innodb_buffer_pool_read_ahead_evicted;/*!< srv_read_ahead evicted*/
431 ulint innodb_dblwr_pages_written; /*!< srv_dblwr_pages_written */
432 ulint innodb_dblwr_writes; /*!< srv_dblwr_writes */
433@@ -48,7 +48,7 @@
434 break;
435 --- a/storage/innobase/srv/srv0srv.c
436 +++ b/storage/innobase/srv/srv0srv.c
437-@@ -474,6 +474,7 @@
438+@@ -477,6 +477,7 @@
439 static ulint srv_n_rows_deleted_old = 0;
440 static ulint srv_n_rows_read_old = 0;
441
442@@ -56,7 +56,7 @@
443 UNIV_INTERN ulint srv_n_lock_wait_count = 0;
444 UNIV_INTERN ulint srv_n_lock_wait_current_count = 0;
445 UNIV_INTERN ib_int64_t srv_n_lock_wait_time = 0;
446-@@ -2290,6 +2291,7 @@
447+@@ -2293,6 +2294,7 @@
448 export_vars.innodb_buffer_pool_pages_data = LRU_len;
449 export_vars.innodb_buffer_pool_pages_dirty = flush_list_len;
450 export_vars.innodb_buffer_pool_pages_free = free_len;
451
452=== modified file 'patches/innodb_dict_size_limit.patch'
453--- patches/innodb_dict_size_limit.patch 2011-12-27 15:32:16 +0000
454+++ patches/innodb_dict_size_limit.patch 2012-02-06 05:02:26 +0000
455@@ -289,7 +289,7 @@
456 mutex_exit(&(dict_sys->mutex));
457
458 if (table != NULL) {
459-@@ -1259,6 +1263,64 @@
460+@@ -1264,6 +1268,64 @@
461 dict_mem_table_free(table);
462 }
463
464@@ -354,7 +354,7 @@
465 /****************************************************************//**
466 If the given column name is reserved for InnoDB system columns, return
467 TRUE.
468-@@ -1763,6 +1825,11 @@
469+@@ -1768,6 +1830,11 @@
470 ut_ad(index->magic_n == DICT_INDEX_MAGIC_N);
471 ut_ad(mutex_own(&(dict_sys->mutex)));
472
473@@ -377,9 +377,9 @@
474 {"have_atomic_builtins",
475 (char*) &export_vars.innodb_have_atomic_builtins, SHOW_BOOL},
476 {"log_waits",
477-@@ -11774,6 +11776,11 @@
478- "Choose method of innodb_adaptive_flushing. (native, [estimate], keep_average)",
479- NULL, innodb_adaptive_flushing_method_update, 1, &adaptive_flushing_method_typelib);
480+@@ -11813,6 +11815,11 @@
481+ NULL, NULL, 0, 0, 1, 0);
482+ #endif
483
484 +static MYSQL_SYSVAR_ULONG(dict_size_limit, srv_dict_size_limit,
485 + PLUGIN_VAR_RQCMDARG,
486@@ -389,7 +389,7 @@
487 static struct st_mysql_sys_var* innobase_system_variables[]= {
488 MYSQL_SYSVAR(additional_mem_pool_size),
489 MYSQL_SYSVAR(autoextend_increment),
490-@@ -11843,6 +11850,7 @@
491+@@ -11882,6 +11889,7 @@
492 MYSQL_SYSVAR(flush_neighbor_pages),
493 MYSQL_SYSVAR(read_ahead),
494 MYSQL_SYSVAR(adaptive_flushing_method),
495@@ -425,7 +425,7 @@
496 or freed in a file segment. */
497 --- a/storage/innobase/include/buf0buf.h
498 +++ b/storage/innobase/include/buf0buf.h
499-@@ -1575,6 +1575,15 @@
500+@@ -1595,6 +1595,15 @@
501 #define BUF_POOL_ZIP_FOLD_BPAGE(b) BUF_POOL_ZIP_FOLD((buf_block_t*) (b))
502 /* @} */
503
504@@ -495,7 +495,7 @@
505 /*-------------------------------------------*/
506
507 extern ulint srv_n_rows_inserted;
508-@@ -714,6 +715,7 @@
509+@@ -717,6 +718,7 @@
510 ulint innodb_data_writes; /*!< I/O write requests */
511 ulint innodb_data_written; /*!< Data bytes written */
512 ulint innodb_data_reads; /*!< I/O read requests */
513@@ -514,7 +514,7 @@
514 /*-------------------------------------------*/
515 UNIV_INTERN ulong srv_n_spin_wait_rounds = 30;
516 UNIV_INTERN ulong srv_n_free_tickets_to_enter = 500;
517-@@ -2222,6 +2224,7 @@
518+@@ -2225,6 +2227,7 @@
519 export_vars.innodb_data_reads = os_n_file_reads;
520 export_vars.innodb_data_writes = os_n_file_writes;
521 export_vars.innodb_data_written = srv_data_written;
522
523=== modified file 'patches/innodb_expand_fast_index_creation.patch'
524--- patches/innodb_expand_fast_index_creation.patch 2011-12-27 15:32:16 +0000
525+++ patches/innodb_expand_fast_index_creation.patch 2012-02-06 05:02:26 +0000
526@@ -884,7 +884,7 @@
527
528 --- a/sql/sql_lex.h
529 +++ b/sql/sql_lex.h
530-@@ -1013,6 +1013,9 @@
531+@@ -1014,6 +1014,9 @@
532 List<Alter_column> alter_list;
533 List<Key> key_list;
534 List<Create_field> create_list;
535@@ -894,7 +894,7 @@
536 uint flags;
537 enum enum_enable_or_disable keys_onoff;
538 enum tablespace_op_type tablespace_op;
539-@@ -1024,6 +1027,8 @@
540+@@ -1025,6 +1028,8 @@
541
542
543 Alter_info() :
544@@ -903,7 +903,7 @@
545 flags(0),
546 keys_onoff(LEAVE_AS_IS),
547 tablespace_op(NO_TABLESPACE_OP),
548-@@ -1039,6 +1044,9 @@
549+@@ -1040,6 +1045,9 @@
550 alter_list.empty();
551 key_list.empty();
552 create_list.empty();
553@@ -1322,7 +1322,7 @@
554
555 --- a/sql/sys_vars.cc
556 +++ b/sql/sys_vars.cc
557-@@ -710,6 +710,14 @@
558+@@ -783,6 +783,14 @@
559 ON_CHECK(event_scheduler_check), ON_UPDATE(event_scheduler_update));
560 #endif
561
562@@ -1425,7 +1425,7 @@
563 --expire-logs-days=#
564 If non-zero, binary logs will be purged after
565 expire_logs_days days; possible purges happen at startup
566-@@ -777,6 +781,7 @@
567+@@ -781,6 +785,7 @@
568 div-precision-increment 4
569 engine-condition-pushdown TRUE
570 event-scheduler OFF
571
572=== modified file 'patches/innodb_expand_import.patch'
573--- patches/innodb_expand_import.patch 2011-12-27 15:32:16 +0000
574+++ patches/innodb_expand_import.patch 2012-02-06 05:02:26 +0000
575@@ -51,7 +51,7 @@
576 #ifndef UNIV_HOTBACKUP
577 # include "buf0lru.h"
578 # include "ibuf0ibuf.h"
579-@@ -3033,6 +3041,84 @@
580+@@ -3041,6 +3049,84 @@
581 }
582
583 /********************************************************************//**
584@@ -136,7 +136,7 @@
585 Tries to open a single-table tablespace and optionally checks the space id is
586 right in it. If does not succeed, prints an error message to the .err log. This
587 function is used to open a tablespace when we start up mysqld, and also in
588-@@ -3055,8 +3141,11 @@
589+@@ -3063,8 +3149,11 @@
590 accessing the first page of the file */
591 ulint id, /*!< in: space id */
592 ulint flags, /*!< in: tablespace flags */
593@@ -149,7 +149,7 @@
594 {
595 os_file_t file;
596 char* filepath;
597-@@ -3079,7 +3168,7 @@
598+@@ -3087,7 +3176,7 @@
599
600 file = os_file_create_simple_no_error_handling(
601 innodb_file_data_key, filepath, OS_FILE_OPEN,
602@@ -158,7 +158,7 @@
603 if (!success) {
604 /* The following call prints an error message */
605 os_file_get_last_error(TRUE);
606-@@ -3126,6 +3215,453 @@
607+@@ -3134,6 +3223,453 @@
608 space_id = fsp_header_get_space_id(page);
609 space_flags = fsp_header_get_flags(page);
610
611@@ -612,7 +612,7 @@
612 ut_free(buf2);
613
614 if (UNIV_UNLIKELY(space_id != id
615-@@ -3167,6 +3703,269 @@
616+@@ -3175,6 +3711,269 @@
617 os_file_close(file);
618 mem_free(filepath);
619
620@@ -884,7 +884,7 @@
621 #endif /* !UNIV_HOTBACKUP */
622 --- a/storage/innobase/handler/ha_innodb.cc
623 +++ b/storage/innobase/handler/ha_innodb.cc
624-@@ -7422,6 +7422,14 @@
625+@@ -7421,6 +7421,14 @@
626 err = row_discard_tablespace_for_mysql(dict_table->name, trx);
627 } else {
628 err = row_import_tablespace_for_mysql(dict_table->name, trx);
629@@ -899,9 +899,9 @@
630 }
631
632 err = convert_error_code_to_mysql(err, dict_table->flags, NULL);
633-@@ -11781,6 +11789,11 @@
634- "Choose method of innodb_adaptive_flushing. (native, [estimate], keep_average)",
635- NULL, innodb_adaptive_flushing_method_update, 1, &adaptive_flushing_method_typelib);
636+@@ -11820,6 +11828,11 @@
637+ NULL, NULL, 0, 0, 1, 0);
638+ #endif
639
640 +static MYSQL_SYSVAR_ULONG(import_table_from_xtrabackup, srv_expand_import,
641 + PLUGIN_VAR_RQCMDARG,
642@@ -911,7 +911,7 @@
643 static MYSQL_SYSVAR_ULONG(dict_size_limit, srv_dict_size_limit,
644 PLUGIN_VAR_RQCMDARG,
645 "Limit the allocated memory for dictionary cache. (0: unlimited)",
646-@@ -11855,6 +11868,7 @@
647+@@ -11894,6 +11907,7 @@
648 MYSQL_SYSVAR(flush_neighbor_pages),
649 MYSQL_SYSVAR(read_ahead),
650 MYSQL_SYSVAR(adaptive_flushing_method),
651@@ -1120,7 +1120,7 @@
652
653 /** When mysqld is run, the default directory "." is the mysqld datadir,
654 but in the MySQL Embedded Server Library and ibbackup it is not the default
655-@@ -473,8 +474,11 @@
656+@@ -478,8 +479,11 @@
657 accessing the first page of the file */
658 ulint id, /*!< in: space id */
659 ulint flags, /*!< in: tablespace flags */
660
661=== modified file 'patches/innodb_extend_slow.patch'
662--- patches/innodb_extend_slow.patch 2011-12-27 15:32:16 +0000
663+++ patches/innodb_extend_slow.patch 2012-02-06 05:02:26 +0000
664@@ -48,7 +48,7 @@
665
666 /*
667 IMPLEMENTATION OF THE BUFFER POOL
668-@@ -1869,8 +1903,16 @@
669+@@ -1871,8 +1905,16 @@
670 mutex_t* block_mutex;
671 ibool must_read;
672 unsigned access_time;
673@@ -65,7 +65,7 @@
674 buf_pool->stat.n_page_gets++;
675
676 for (;;) {
677-@@ -1888,7 +1930,7 @@
678+@@ -1890,7 +1932,7 @@
679 //buf_pool_mutex_exit(buf_pool);
680 rw_lock_s_unlock(&buf_pool->page_hash_latch);
681
682@@ -74,7 +74,7 @@
683
684 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
685 ut_a(++buf_dbg_counter % 37 || buf_validate());
686-@@ -1984,6 +2026,13 @@
687+@@ -1986,6 +2028,13 @@
688 /* Let us wait until the read operation
689 completes */
690
691@@ -88,7 +88,7 @@
692 for (;;) {
693 enum buf_io_fix io_fix;
694
695-@@ -1998,6 +2047,12 @@
696+@@ -2000,6 +2049,12 @@
697 break;
698 }
699 }
700@@ -101,7 +101,7 @@
701 }
702
703 #ifdef UNIV_IBUF_COUNT_DEBUG
704-@@ -2312,6 +2367,11 @@
705+@@ -2314,6 +2369,11 @@
706 ibool must_read;
707 ulint retries = 0;
708 mutex_t* block_mutex = NULL;
709@@ -113,7 +113,7 @@
710 buf_pool_t* buf_pool = buf_pool_get(space, offset);
711
712 ut_ad(mtr);
713-@@ -2341,6 +2401,9 @@
714+@@ -2343,6 +2403,9 @@
715 || ibuf_page_low(space, zip_size, offset,
716 FALSE, file, line, NULL));
717 #endif
718@@ -123,7 +123,7 @@
719 buf_pool->stat.n_page_gets++;
720 fold = buf_page_address_fold(space, offset);
721 loop:
722-@@ -2411,9 +2474,9 @@
723+@@ -2413,9 +2476,9 @@
724 return(NULL);
725 }
726
727@@ -135,7 +135,7 @@
728
729 retries = 0;
730 } else if (retries < BUF_PAGE_READ_MAX_RETRIES) {
731-@@ -2723,6 +2786,13 @@
732+@@ -2725,6 +2788,13 @@
733 /* Let us wait until the read operation
734 completes */
735
736@@ -149,7 +149,7 @@
737 for (;;) {
738 enum buf_io_fix io_fix;
739
740-@@ -2737,6 +2807,12 @@
741+@@ -2739,6 +2809,12 @@
742 break;
743 }
744 }
745@@ -162,7 +162,7 @@
746 }
747
748 fix_type = MTR_MEMO_BUF_FIX;
749-@@ -2763,13 +2839,17 @@
750+@@ -2765,13 +2841,17 @@
751 read-ahead */
752
753 buf_read_ahead_linear(space, zip_size, offset,
754@@ -181,7 +181,7 @@
755 return(block);
756 }
757
758-@@ -2793,6 +2873,7 @@
759+@@ -2795,6 +2875,7 @@
760 unsigned access_time;
761 ibool success;
762 ulint fix_type;
763@@ -189,7 +189,7 @@
764
765 ut_ad(block);
766 ut_ad(mtr);
767-@@ -2870,6 +2951,10 @@
768+@@ -2872,6 +2953,10 @@
769 #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
770 ut_a(block->page.file_page_was_freed == FALSE);
771 #endif
772@@ -200,7 +200,7 @@
773 if (UNIV_UNLIKELY(!access_time)) {
774 /* In the case of a first access, try to apply linear
775 read-ahead */
776-@@ -2877,7 +2962,7 @@
777+@@ -2879,7 +2964,7 @@
778 buf_read_ahead_linear(buf_block_get_space(block),
779 buf_block_get_zip_size(block),
780 buf_block_get_page_no(block),
781@@ -209,7 +209,7 @@
782 }
783
784 #ifdef UNIV_IBUF_COUNT_DEBUG
785-@@ -2887,6 +2972,9 @@
786+@@ -2889,6 +2974,9 @@
787 buf_pool = buf_pool_from_block(block);
788 buf_pool->stat.n_page_gets++;
789
790@@ -219,7 +219,7 @@
791 return(TRUE);
792 }
793
794-@@ -2909,6 +2997,7 @@
795+@@ -2911,6 +2999,7 @@
796 buf_pool_t* buf_pool;
797 ibool success;
798 ulint fix_type;
799@@ -227,7 +227,7 @@
800
801 ut_ad(mtr);
802 ut_ad(mtr->state == MTR_ACTIVE);
803-@@ -2995,6 +3084,11 @@
804+@@ -2997,6 +3086,11 @@
805 #endif
806 buf_pool->stat.n_page_gets++;
807
808@@ -355,7 +355,7 @@
809
810 --- a/storage/innobase/fil/fil0fil.c
811 +++ b/storage/innobase/fil/fil0fil.c
812-@@ -4757,7 +4757,7 @@
813+@@ -4765,7 +4765,7 @@
814 node->name, node->handle, buf,
815 offset_low, offset_high,
816 page_size * n_pages,
817@@ -364,7 +364,7 @@
818 #endif
819 if (success) {
820 node->size += n_pages;
821-@@ -5084,7 +5084,7 @@
822+@@ -5092,7 +5092,7 @@
823 i/o on a tablespace which does not exist */
824 UNIV_INTERN
825 ulint
826@@ -373,7 +373,7 @@
827 /*===*/
828 ulint type, /*!< in: OS_FILE_READ or OS_FILE_WRITE,
829 ORed to OS_FILE_LOG, if a log i/o
830-@@ -5109,8 +5109,9 @@
831+@@ -5117,8 +5117,9 @@
832 void* buf, /*!< in/out: buffer where to store read data
833 or from where to write; in aio this must be
834 appropriately aligned */
835@@ -384,7 +384,7 @@
836 {
837 ulint mode;
838 fil_space_t* space;
839-@@ -5278,7 +5279,7 @@
840+@@ -5286,7 +5287,7 @@
841 #else
842 /* Queue the aio request */
843 ret = os_aio(type, mode | wake_later, node->name, node->handle, buf,
844@@ -445,7 +445,7 @@
845 /*********************************************************************//**
846 Note that a transaction has been registered with MySQL.
847 @return true if transaction is registered with MySQL 2PC coordinator */
848-@@ -9418,6 +9454,25 @@
849+@@ -9417,6 +9453,25 @@
850 statement has ended */
851
852 if (trx->n_mysql_tables_in_use == 0) {
853@@ -514,7 +514,7 @@
854 order to contract the insert buffer tree. Technically, this function is like
855 --- a/storage/innobase/include/fil0fil.h
856 +++ b/storage/innobase/include/fil0fil.h
857-@@ -615,9 +615,12 @@
858+@@ -620,9 +620,12 @@
859 Reads or writes data. This operation is asynchronous (aio).
860 @return DB_SUCCESS, or DB_TABLESPACE_DELETED if we are trying to do
861 i/o on a tablespace which does not exist */
862@@ -528,7 +528,7 @@
863 /*===*/
864 ulint type, /*!< in: OS_FILE_READ or OS_FILE_WRITE,
865 ORed to OS_FILE_LOG, if a log i/o
866-@@ -642,8 +645,9 @@
867+@@ -647,8 +650,9 @@
868 void* buf, /*!< in/out: buffer where to store read data
869 or from where to write; in aio this must be
870 appropriately aligned */
871@@ -887,7 +887,7 @@
872 /* The following counter is incremented whenever there is some user activity
873 in the server */
874 UNIV_INTERN ulint srv_activity_count = 0;
875-@@ -1234,6 +1237,10 @@
876+@@ -1237,6 +1240,10 @@
877 ibool has_slept = FALSE;
878 srv_conc_slot_t* slot = NULL;
879 ulint i;
880@@ -898,7 +898,7 @@
881
882 #ifdef UNIV_SYNC_DEBUG
883 ut_ad(!sync_thread_levels_nonempty_trx(trx->has_search_latch));
884-@@ -1314,6 +1321,7 @@
885+@@ -1317,6 +1324,7 @@
886 switches. */
887 if (SRV_THREAD_SLEEP_DELAY > 0) {
888 os_thread_sleep(SRV_THREAD_SLEEP_DELAY);
889@@ -906,7 +906,7 @@
890 }
891
892 trx->op_info = "";
893-@@ -1373,6 +1381,14 @@
894+@@ -1376,6 +1384,14 @@
895 #ifdef UNIV_SYNC_DEBUG
896 ut_ad(!sync_thread_levels_nonempty_trx(trx->has_search_latch));
897 #endif /* UNIV_SYNC_DEBUG */
898@@ -921,7 +921,7 @@
899 trx->op_info = "waiting in InnoDB queue";
900
901 thd_wait_begin(trx->mysql_thd, THD_WAIT_USER_LOCK);
902-@@ -1381,6 +1397,12 @@
903+@@ -1384,6 +1400,12 @@
904
905 trx->op_info = "";
906
907
908=== modified file 'patches/innodb_extra_rseg.patch'
909--- patches/innodb_extra_rseg.patch 2011-12-27 15:32:16 +0000
910+++ patches/innodb_extra_rseg.patch 2012-02-06 05:02:26 +0000
911@@ -7,7 +7,7 @@
912 # should be done or reviewed by the maintainer!
913 --- a/storage/innobase/handler/ha_innodb.cc
914 +++ b/storage/innobase/handler/ha_innodb.cc
915-@@ -11664,6 +11664,7 @@
916+@@ -11706,6 +11706,7 @@
917 NULL, /* reserved */
918 0, /* flags */
919 },
920
921=== modified file 'patches/innodb_fake_changes.patch'
922--- patches/innodb_fake_changes.patch 2011-12-27 15:32:16 +0000
923+++ patches/innodb_fake_changes.patch 2012-02-06 05:02:26 +0000
924@@ -214,7 +214,7 @@
925 /* Transaction is deregistered only in a commit or a rollback. If
926 it is deregistered we know there cannot be resources to be freed
927 and we could return immediately. For the time being, we play safe
928-@@ -7544,6 +7557,12 @@
929+@@ -7543,6 +7556,12 @@
930
931 trx = innobase_trx_allocate(thd);
932
933@@ -227,7 +227,7 @@
934 /* Latch the InnoDB data dictionary exclusively so that no deadlocks
935 or lock waits can happen in it during a table create operation.
936 Drop table etc. do this latching in row0mysql.c. */
937-@@ -7764,6 +7783,10 @@
938+@@ -7763,6 +7782,10 @@
939 DBUG_RETURN(HA_ERR_CRASHED);
940 }
941
942@@ -238,7 +238,7 @@
943 /* Truncate the table in InnoDB */
944
945 error = row_truncate_table_for_mysql(prebuilt->table, prebuilt->trx);
946-@@ -7820,6 +7843,12 @@
947+@@ -7819,6 +7842,12 @@
948
949 trx = innobase_trx_allocate(thd);
950
951@@ -251,7 +251,7 @@
952 name_len = strlen(name);
953
954 ut_a(name_len < 1000);
955-@@ -7906,6 +7935,12 @@
956+@@ -7905,6 +7934,12 @@
957 trx->mysql_thd = NULL;
958 #else
959 trx = innobase_trx_allocate(thd);
960@@ -264,7 +264,7 @@
961 #endif
962 row_drop_database_for_mysql(namebuf, trx);
963 my_free(namebuf);
964-@@ -8011,6 +8046,11 @@
965+@@ -8010,6 +8045,11 @@
966 trx_search_latch_release_if_reserved(parent_trx);
967
968 trx = innobase_trx_allocate(thd);
969@@ -276,7 +276,7 @@
970
971 error = innobase_rename_table(trx, from, to, TRUE);
972
973-@@ -10881,6 +10921,10 @@
974+@@ -10880,6 +10920,10 @@
975 return(0);
976 }
977
978@@ -287,8 +287,8 @@
979 thd_get_xid(thd, (MYSQL_XID*) &trx->xid);
980
981 /* Release a possible FIFO ticket and search latch. Since we will
982-@@ -12438,6 +12482,7 @@
983- MYSQL_SYSVAR(rollback_segments),
984+@@ -12480,6 +12524,7 @@
985+ #endif
986 MYSQL_SYSVAR(corrupt_table_action),
987 MYSQL_SYSVAR(lazy_drop_table),
988 + MYSQL_SYSVAR(fake_changes),
989
990=== modified file 'patches/innodb_fast_checksum.patch'
991--- patches/innodb_fast_checksum.patch 2011-12-27 15:32:16 +0000
992+++ patches/innodb_fast_checksum.patch 2012-02-06 05:02:26 +0000
993@@ -106,7 +106,7 @@
994 /* We overwrite the first 4 bytes of the end lsn field to store
995 --- a/storage/innobase/fil/fil0fil.c
996 +++ b/storage/innobase/fil/fil0fil.c
997-@@ -3095,13 +3095,24 @@
998+@@ -3103,13 +3103,24 @@
999 return(TRUE);
1000 }
1001
1002@@ -132,7 +132,7 @@
1003 return(FALSE);
1004 }
1005
1006-@@ -3117,7 +3128,9 @@
1007+@@ -3125,7 +3136,9 @@
1008 if (!zip_size) {
1009 mach_write_to_4(page + FIL_PAGE_SPACE_OR_CHKSUM,
1010 srv_use_checksums
1011@@ -161,7 +161,7 @@
1012
1013 srv_blocking_lru_restore = (ibool) innobase_blocking_lru_restore;
1014
1015-@@ -11542,6 +11544,15 @@
1016+@@ -11541,6 +11543,15 @@
1017 "Disable with --skip-innodb-checksums.",
1018 NULL, NULL, TRUE);
1019
1020@@ -177,7 +177,7 @@
1021 static MYSQL_SYSVAR_STR(data_home_dir, innobase_data_home_dir,
1022 PLUGIN_VAR_READONLY,
1023 "The common part for InnoDB table spaces.",
1024-@@ -12073,6 +12084,7 @@
1025+@@ -12112,6 +12123,7 @@
1026 MYSQL_SYSVAR(buffer_pool_size),
1027 MYSQL_SYSVAR(buffer_pool_instances),
1028 MYSQL_SYSVAR(checksums),
1029
1030=== modified file 'patches/innodb_files_extend.patch'
1031--- patches/innodb_files_extend.patch 2011-12-27 15:32:16 +0000
1032+++ patches/innodb_files_extend.patch 2012-02-06 05:02:26 +0000
1033@@ -16,7 +16,7 @@
1034 fprintf(stderr,
1035 "InnoDB: Error: the size of single-table"
1036 " tablespace file %s\n"
1037-@@ -4161,7 +4161,7 @@
1038+@@ -4169,7 +4169,7 @@
1039
1040 size = (((ib_int64_t)size_high) << 32) + (ib_int64_t)size_low;
1041 #ifndef UNIV_HOTBACKUP
1042@@ -25,7 +25,7 @@
1043 fprintf(stderr,
1044 "InnoDB: Error: the size of single-table tablespace"
1045 " file %s\n"
1046-@@ -4181,7 +4181,7 @@
1047+@@ -4189,7 +4189,7 @@
1048 /* Align the memory for file i/o if we might have O_DIRECT set */
1049 page = ut_align(buf2, UNIV_PAGE_SIZE);
1050
1051@@ -34,7 +34,7 @@
1052 success = os_file_read(file, page, 0, 0, UNIV_PAGE_SIZE);
1053
1054 /* We have to read the tablespace id from the file */
1055-@@ -5159,9 +5159,9 @@
1056+@@ -5167,9 +5167,9 @@
1057 ut_ad(ut_is_2pow(zip_size));
1058 ut_ad(buf);
1059 ut_ad(len > 0);
1060@@ -49,7 +49,7 @@
1061 # ifndef UNIV_LOG_DEBUG
1062 --- a/storage/innobase/fsp/fsp0fsp.c
1063 +++ b/storage/innobase/fsp/fsp0fsp.c
1064-@@ -656,16 +656,18 @@
1065+@@ -595,16 +595,18 @@
1066 0 for uncompressed pages */
1067 ulint offset) /*!< in: page offset */
1068 {
1069@@ -78,7 +78,7 @@
1070 ut_ad(ut_is_2pow(zip_size));
1071
1072 if (!zip_size) {
1073-@@ -1464,12 +1466,12 @@
1074+@@ -1403,12 +1405,12 @@
1075 mtr);
1076 xdes_init(descr, mtr);
1077
1078@@ -175,7 +175,7 @@
1079 #ifndef MYSQL_SERVER
1080 innodb_overwrite_relay_log_info = FALSE;
1081 #endif
1082-@@ -7290,9 +7352,9 @@
1083+@@ -7289,9 +7351,9 @@
1084 | DICT_TF_COMPACT
1085 | DICT_TF_FORMAT_ZIP
1086 << DICT_TF_FORMAT_SHIFT;
1087@@ -188,7 +188,7 @@
1088 }
1089 }
1090
1091-@@ -11553,6 +11615,16 @@
1092+@@ -11552,6 +11614,16 @@
1093 "#### Attention: The checksum is not compatible for normal or disabled version! ####",
1094 NULL, NULL, FALSE);
1095
1096@@ -205,7 +205,7 @@
1097 static MYSQL_SYSVAR_STR(data_home_dir, innobase_data_home_dir,
1098 PLUGIN_VAR_READONLY,
1099 "The common part for InnoDB table spaces.",
1100-@@ -12079,6 +12151,8 @@
1101+@@ -12118,6 +12190,8 @@
1102 NULL, NULL, 0, &corrupt_table_action_typelib);
1103
1104 static struct st_mysql_sys_var* innobase_system_variables[]= {
1105@@ -216,7 +216,7 @@
1106 MYSQL_SYSVAR(buffer_pool_size),
1107 --- a/storage/innobase/include/buf0buf.h
1108 +++ b/storage/innobase/include/buf0buf.h
1109-@@ -1705,7 +1705,7 @@
1110+@@ -1725,7 +1725,7 @@
1111 time_t last_printout_time;
1112 /*!< when buf_print_io was last time
1113 called */
1114@@ -225,7 +225,7 @@
1115 /*!< Statistics of buddy system,
1116 indexed by block size */
1117 buf_pool_stat_t stat; /*!< current statistics */
1118-@@ -1803,7 +1803,7 @@
1119+@@ -1823,7 +1823,7 @@
1120 UT_LIST_BASE_NODE_T(buf_page_t) zip_clean;
1121 /*!< unmodified compressed pages */
1122 #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
1123@@ -234,7 +234,7 @@
1124 /*!< buddy free lists */
1125
1126 buf_page_t watch[BUF_POOL_WATCH_SIZE];
1127-@@ -1811,9 +1811,9 @@
1128+@@ -1831,9 +1831,9 @@
1129 pool watches. Protected by
1130 buf_pool->mutex. */
1131
1132@@ -249,7 +249,7 @@
1133 #endif
1134 --- a/storage/innobase/include/buf0types.h
1135 +++ b/storage/innobase/include/buf0types.h
1136-@@ -67,12 +67,13 @@
1137+@@ -70,12 +70,13 @@
1138 #define BUF_BUDDY_LOW (1 << BUF_BUDDY_LOW_SHIFT)
1139
1140 #define BUF_BUDDY_SIZES (UNIV_PAGE_SIZE_SHIFT - BUF_BUDDY_LOW_SHIFT)
1141@@ -412,7 +412,7 @@
1142 dest_offset = nth_file * group->file_size;
1143
1144 #ifdef UNIV_DEBUG
1145-@@ -1794,9 +1799,7 @@
1146+@@ -1797,9 +1802,7 @@
1147 ulint i;
1148
1149 ut_ad(mutex_own(&(log_sys->mutex)));
1150@@ -423,7 +423,7 @@
1151
1152 buf = group->checkpoint_buf;
1153
1154-@@ -1810,6 +1813,7 @@
1155+@@ -1813,6 +1816,7 @@
1156 mach_write_to_4(buf + LOG_CHECKPOINT_LOG_BUF_SIZE, log_sys->buf_size);
1157
1158 #ifdef UNIV_LOG_ARCHIVE
1159@@ -431,7 +431,7 @@
1160 if (log_sys->archiving_state == LOG_ARCH_OFF) {
1161 archived_lsn = IB_ULONGLONG_MAX;
1162 } else {
1163-@@ -1823,7 +1827,9 @@
1164+@@ -1826,7 +1830,9 @@
1165
1166 mach_write_to_8(buf + LOG_CHECKPOINT_ARCHIVED_LSN, archived_lsn);
1167 #else /* UNIV_LOG_ARCHIVE */
1168@@ -538,7 +538,7 @@
1169 readahead request. */
1170 --- a/storage/innobase/srv/srv0start.c
1171 +++ b/storage/innobase/srv/srv0start.c
1172-@@ -1562,11 +1562,13 @@
1173+@@ -1582,11 +1582,13 @@
1174 }
1175 #endif /* UNIV_LOG_ARCHIVE */
1176
1177@@ -554,7 +554,7 @@
1178
1179 return(DB_ERROR);
1180 }
1181-@@ -1575,7 +1577,7 @@
1182+@@ -1595,7 +1597,7 @@
1183
1184 for (i = 0; i < srv_n_data_files; i++) {
1185 #ifndef __WIN__
1186
1187=== modified file 'patches/innodb_fix_misc.patch'
1188--- patches/innodb_fix_misc.patch 2011-12-27 15:32:16 +0000
1189+++ patches/innodb_fix_misc.patch 2012-02-06 05:02:26 +0000
1190@@ -12,7 +12,7 @@
1191 # should be done or reviewed by the maintainer!
1192 --- a/storage/innobase/buf/buf0buf.c
1193 +++ b/storage/innobase/buf/buf0buf.c
1194-@@ -1979,6 +1979,27 @@
1195+@@ -1981,6 +1981,27 @@
1196 #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
1197 }
1198
1199@@ -40,7 +40,7 @@
1200 if (UNIV_UNLIKELY(!bpage->zip.data)) {
1201 /* There is no compressed page. */
1202 err_exit:
1203-@@ -2487,6 +2508,27 @@
1204+@@ -2489,6 +2510,27 @@
1205 block = (buf_block_t*) buf_page_hash_get_low(
1206 buf_pool, space, offset, fold);
1207 if (block) {
1208@@ -68,7 +68,7 @@
1209 block_mutex = buf_page_get_mutex_enter((buf_page_t*)block);
1210 ut_a(block_mutex);
1211 }
1212-@@ -3409,11 +3451,28 @@
1213+@@ -3411,11 +3453,28 @@
1214
1215 fold = buf_page_address_fold(space, offset);
1216
1217@@ -97,7 +97,7 @@
1218 if (watch_page && !buf_pool_watch_is_sentinel(buf_pool, watch_page)) {
1219 /* The page is already in the buffer pool. */
1220 watch_page = NULL;
1221-@@ -3544,6 +3603,7 @@
1222+@@ -3546,6 +3605,7 @@
1223 bpage->state = BUF_BLOCK_ZIP_PAGE;
1224 bpage->space = space;
1225 bpage->offset = offset;
1226@@ -105,7 +105,7 @@
1227
1228 #ifdef UNIV_DEBUG
1229 bpage->in_page_hash = FALSE;
1230-@@ -3628,6 +3688,7 @@
1231+@@ -3630,6 +3690,7 @@
1232
1233 fold = buf_page_address_fold(space, offset);
1234
1235@@ -113,7 +113,7 @@
1236 //buf_pool_mutex_enter(buf_pool);
1237 mutex_enter(&buf_pool->LRU_list_mutex);
1238 rw_lock_x_lock(&buf_pool->page_hash_latch);
1239-@@ -3635,6 +3696,21 @@
1240+@@ -3637,6 +3698,21 @@
1241 block = (buf_block_t*) buf_page_hash_get_low(
1242 buf_pool, space, offset, fold);
1243
1244@@ -135,7 +135,7 @@
1245 if (block
1246 && buf_page_in_file(&block->page)
1247 && !buf_pool_watch_is_sentinel(buf_pool, &block->page)) {
1248-@@ -3988,8 +4064,11 @@
1249+@@ -3990,8 +4066,11 @@
1250 }
1251
1252 if (io_type == BUF_IO_WRITE
1253@@ -176,7 +176,7 @@
1254 return(TRUE);
1255 --- a/storage/innobase/buf/buf0lru.c
1256 +++ b/storage/innobase/buf/buf0lru.c
1257-@@ -529,6 +529,62 @@
1258+@@ -545,6 +545,62 @@
1259 }
1260 }
1261
1262@@ -239,7 +239,7 @@
1263 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
1264 /********************************************************************//**
1265 Insert a compressed block into buf_pool->zip_clean in the LRU order. */
1266-@@ -1483,6 +1539,10 @@
1267+@@ -1499,6 +1555,10 @@
1268 return(FALSE);
1269 }
1270
1271@@ -296,7 +296,7 @@
1272
1273 fil_system->spaces = hash_create(hash_size);
1274 fil_system->name_hash = hash_create(hash_size);
1275-@@ -2344,7 +2347,11 @@
1276+@@ -2352,7 +2355,11 @@
1277 completely and permanently. The flag is_being_deleted also prevents
1278 fil_flush() from being applied to this tablespace. */
1279
1280@@ -308,7 +308,7 @@
1281 #endif
1282 /* printf("Deleting tablespace %s id %lu\n", space->name, id); */
1283
1284-@@ -4731,6 +4738,10 @@
1285+@@ -4739,6 +4746,10 @@
1286 ulint page_size;
1287 ibool success = TRUE;
1288
1289@@ -319,7 +319,7 @@
1290 fil_mutex_enter_and_prepare_for_io(space_id);
1291
1292 space = fil_space_get_by_id(space_id);
1293-@@ -4742,6 +4753,7 @@
1294+@@ -4750,6 +4761,7 @@
1295 *actual_size = space->size;
1296
1297 mutex_exit(&fil_system->mutex);
1298@@ -327,7 +327,7 @@
1299
1300 return(TRUE);
1301 }
1302-@@ -4774,6 +4786,8 @@
1303+@@ -4782,6 +4794,8 @@
1304 offset_low = ((start_page_no - file_start_page_no)
1305 % (4096 * ((1024 * 1024) / page_size)))
1306 * page_size;
1307@@ -336,7 +336,7 @@
1308 #ifdef UNIV_HOTBACKUP
1309 success = os_file_write(node->name, node->handle, buf,
1310 offset_low, offset_high,
1311-@@ -4783,8 +4797,10 @@
1312+@@ -4791,8 +4805,10 @@
1313 node->name, node->handle, buf,
1314 offset_low, offset_high,
1315 page_size * n_pages,
1316@@ -348,7 +348,7 @@
1317 if (success) {
1318 node->size += n_pages;
1319 space->size += n_pages;
1320-@@ -4830,6 +4846,7 @@
1321+@@ -4838,6 +4854,7 @@
1322 printf("Extended %s to %lu, actual size %lu pages\n", space->name,
1323 size_after_extend, *actual_size); */
1324 mutex_exit(&fil_system->mutex);
1325@@ -356,7 +356,7 @@
1326
1327 fil_flush(space_id, TRUE);
1328
1329-@@ -5192,6 +5209,22 @@
1330+@@ -5200,6 +5217,22 @@
1331 srv_data_written+= len;
1332 }
1333
1334@@ -379,7 +379,7 @@
1335 /* Reserve the fil_system mutex and make sure that we can open at
1336 least one file while holding it, if the file is not already open */
1337
1338-@@ -5333,10 +5366,24 @@
1339+@@ -5341,10 +5374,24 @@
1340 #else
1341 /* Queue the aio request */
1342 ret = os_aio(type, mode | wake_later, node->name, node->handle, buf,
1343@@ -405,7 +405,7 @@
1344 ut_a(ret);
1345
1346 if (mode == OS_AIO_SYNC) {
1347-@@ -5436,6 +5483,7 @@
1348+@@ -5444,6 +5491,7 @@
1349 fil_node_t* fil_node;
1350 void* message;
1351 ulint type;
1352@@ -413,7 +413,7 @@
1353
1354 ut_ad(fil_validate_skip());
1355
1356-@@ -5443,10 +5491,10 @@
1357+@@ -5451,10 +5499,10 @@
1358 srv_set_io_thread_op_info(segment, "native aio handle");
1359 #ifdef WIN_ASYNC_IO
1360 ret = os_aio_windows_handle(segment, 0, &fil_node,
1361@@ -426,7 +426,7 @@
1362 #else
1363 ut_error;
1364 ret = 0; /* Eliminate compiler warning */
1365-@@ -5455,7 +5503,22 @@
1366+@@ -5463,7 +5511,22 @@
1367 srv_set_io_thread_op_info(segment, "simulated aio handle");
1368
1369 ret = os_aio_simulated_handle(segment, &fil_node,
1370@@ -452,7 +452,7 @@
1371 ut_a(ret);
1372 --- a/storage/innobase/handler/ha_innodb.cc
1373 +++ b/storage/innobase/handler/ha_innodb.cc
1374-@@ -12150,6 +12150,12 @@
1375+@@ -12189,6 +12189,12 @@
1376 "except for the deletion.",
1377 NULL, NULL, 0, &corrupt_table_action_typelib);
1378
1379@@ -465,15 +465,15 @@
1380 static struct st_mysql_sys_var* innobase_system_variables[]= {
1381 MYSQL_SYSVAR(page_size),
1382 MYSQL_SYSVAR(log_block_size),
1383-@@ -12244,6 +12250,7 @@
1384- MYSQL_SYSVAR(purge_batch_size),
1385- MYSQL_SYSVAR(rollback_segments),
1386+@@ -12286,6 +12292,7 @@
1387+ MYSQL_SYSVAR(flush_checkpoint_debug),
1388+ #endif
1389 MYSQL_SYSVAR(corrupt_table_action),
1390 + MYSQL_SYSVAR(lazy_drop_table),
1391 NULL
1392 };
1393
1394-@@ -12253,7 +12260,7 @@
1395+@@ -12295,7 +12302,7 @@
1396 &innobase_storage_engine,
1397 innobase_hton_name,
1398 plugin_author,
1399@@ -484,7 +484,7 @@
1400 NULL, /* Plugin Deinit */
1401 --- a/storage/innobase/include/buf0buf.h
1402 +++ b/storage/innobase/include/buf0buf.h
1403-@@ -1455,6 +1455,7 @@
1404+@@ -1475,6 +1475,7 @@
1405 0 if the block was never accessed
1406 in the buffer pool */
1407 /* @} */
1408@@ -888,7 +888,7 @@
1409 UNIV_INTERN ulong srv_n_free_tickets_to_enter = 500;
1410 --- a/storage/innobase/srv/srv0start.c
1411 +++ b/storage/innobase/srv/srv0start.c
1412-@@ -2167,7 +2167,7 @@
1413+@@ -2187,7 +2187,7 @@
1414 if (srv_print_verbose_log) {
1415 ut_print_timestamp(stderr);
1416 fprintf(stderr,
1417
1418=== modified file 'patches/innodb_io_patches.patch'
1419--- patches/innodb_io_patches.patch 2012-01-10 11:30:16 +0000
1420+++ patches/innodb_io_patches.patch 2012-02-06 05:02:26 +0000
1421@@ -155,7 +155,7 @@
1422 return(0);
1423 --- a/storage/innobase/fil/fil0fil.c
1424 +++ b/storage/innobase/fil/fil0fil.c
1425-@@ -2601,7 +2601,7 @@
1426+@@ -2609,7 +2609,7 @@
1427
1428 os_thread_sleep(20000);
1429
1430@@ -164,7 +164,7 @@
1431
1432 goto retry;
1433
1434-@@ -2815,7 +2815,7 @@
1435+@@ -2823,7 +2823,7 @@
1436 goto error_exit;
1437 }
1438
1439@@ -173,7 +173,7 @@
1440
1441 if (!ret) {
1442 fputs("InnoDB: Error: file flush of tablespace ", stderr);
1443-@@ -3001,7 +3001,7 @@
1444+@@ -3009,7 +3009,7 @@
1445 }
1446 }
1447
1448@@ -182,7 +182,7 @@
1449 if (!success) {
1450
1451 goto func_exit;
1452-@@ -3023,7 +3023,7 @@
1453+@@ -3031,7 +3031,7 @@
1454
1455 goto func_exit;
1456 }
1457@@ -191,7 +191,7 @@
1458 func_exit:
1459 os_file_close(file);
1460 ut_free(buf2);
1461-@@ -4006,7 +4006,7 @@
1462+@@ -4014,7 +4014,7 @@
1463 size_after_extend, *actual_size); */
1464 mutex_exit(&fil_system->mutex);
1465
1466@@ -200,7 +200,7 @@
1467
1468 return(success);
1469 }
1470-@@ -4577,8 +4577,9 @@
1471+@@ -4585,8 +4585,9 @@
1472 void
1473 fil_flush(
1474 /*======*/
1475@@ -211,7 +211,7 @@
1476 {
1477 fil_space_t* space;
1478 fil_node_t* node;
1479-@@ -4649,7 +4650,7 @@
1480+@@ -4657,7 +4658,7 @@
1481 /* fprintf(stderr, "Flushing to file %s\n",
1482 node->name); */
1483
1484@@ -220,7 +220,7 @@
1485
1486 mutex_enter(&fil_system->mutex);
1487
1488-@@ -4732,7 +4733,7 @@
1489+@@ -4740,7 +4741,7 @@
1490 a non-existing space id. */
1491 for (i = 0; i < n_space_ids; i++) {
1492
1493@@ -272,7 +272,7 @@
1494 srv_force_recovery = (ulint) innobase_force_recovery;
1495
1496 srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite;
1497-@@ -11142,7 +11162,7 @@
1498+@@ -11141,7 +11161,7 @@
1499 PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_READONLY,
1500 "Purge threads can be either 0 or 1.",
1501 NULL, NULL,
1502@@ -281,7 +281,7 @@
1503 0, /* Minimum value */
1504 1, 0); /* Maximum value */
1505
1506-@@ -11184,12 +11204,18 @@
1507+@@ -11183,12 +11203,18 @@
1508 innodb_file_format_max_validate,
1509 innodb_file_format_max_update, "Antelope");
1510
1511@@ -306,7 +306,7 @@
1512
1513 static MYSQL_SYSVAR_STR(flush_method, innobase_file_flush_method,
1514 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
1515-@@ -11294,7 +11320,7 @@
1516+@@ -11293,7 +11319,7 @@
1517 static MYSQL_SYSVAR_LONGLONG(buffer_pool_size, innobase_buffer_pool_size,
1518 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
1519 "The size of the memory buffer InnoDB uses to cache data and indexes of its tables.",
1520@@ -315,7 +315,7 @@
1521
1522 static MYSQL_SYSVAR_LONG(buffer_pool_instances, innobase_buffer_pool_instances,
1523 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
1524-@@ -11451,6 +11477,135 @@
1525+@@ -11450,6 +11476,135 @@
1526 "trigger a readahead.",
1527 NULL, NULL, 56, 0, 64, 0);
1528
1529@@ -451,7 +451,7 @@
1530 static struct st_mysql_sys_var* innobase_system_variables[]= {
1531 MYSQL_SYSVAR(additional_mem_pool_size),
1532 MYSQL_SYSVAR(autoextend_increment),
1533-@@ -11471,6 +11626,7 @@
1534+@@ -11470,6 +11625,7 @@
1535 MYSQL_SYSVAR(file_format_check),
1536 MYSQL_SYSVAR(file_format_max),
1537 MYSQL_SYSVAR(flush_log_at_trx_commit),
1538@@ -459,7 +459,7 @@
1539 MYSQL_SYSVAR(flush_method),
1540 MYSQL_SYSVAR(force_recovery),
1541 MYSQL_SYSVAR(large_prefix),
1542-@@ -11510,6 +11666,13 @@
1543+@@ -11509,6 +11665,13 @@
1544 MYSQL_SYSVAR(show_verbose_locks),
1545 MYSQL_SYSVAR(show_locks_held),
1546 MYSQL_SYSVAR(version),
1547@@ -473,7 +473,7 @@
1548 MYSQL_SYSVAR(use_sys_malloc),
1549 MYSQL_SYSVAR(use_native_aio),
1550 MYSQL_SYSVAR(change_buffering),
1551-@@ -11522,6 +11685,9 @@
1552+@@ -11521,6 +11684,9 @@
1553 MYSQL_SYSVAR(purge_threads),
1554 MYSQL_SYSVAR(purge_batch_size),
1555 MYSQL_SYSVAR(rollback_segments),
1556@@ -524,7 +524,7 @@
1557 /** read only pages belonging to the insert buffer tree */
1558 --- a/storage/innobase/include/fil0fil.h
1559 +++ b/storage/innobase/include/fil0fil.h
1560-@@ -658,8 +658,9 @@
1561+@@ -663,8 +663,9 @@
1562 void
1563 fil_flush(
1564 /*======*/
1565@@ -1600,7 +1600,7 @@
1566 mutex_enter(&kernel_mutex);
1567 --- a/storage/innobase/srv/srv0start.c
1568 +++ b/storage/innobase/srv/srv0start.c
1569-@@ -1217,6 +1217,9 @@
1570+@@ -1237,6 +1237,9 @@
1571 } else if (0 == ut_strcmp(srv_file_flush_method_str, "O_DIRECT")) {
1572 srv_unix_file_flush_method = SRV_UNIX_O_DIRECT;
1573
1574@@ -1926,3 +1926,27 @@
1575
1576 # Performance schema variables are too long for files named
1577 # 'mysql-test/suite/sys_vars/t/' ...
1578+--- a/mysql-test/suite/innodb/t/innodb_cmp_drop_table-master.opt
1579++++ b/mysql-test/suite/innodb/t/innodb_cmp_drop_table-master.opt
1580+@@ -1 +1 @@
1581+---innodb-buffer-pool-size=8M
1582++--innodb-buffer-pool-size=32M
1583+--- a/mysql-test/suite/innodb/t/innodb_cmp_drop_table.test
1584++++ b/mysql-test/suite/innodb/t/innodb_cmp_drop_table.test
1585+@@ -36,13 +36,14 @@
1586+
1587+ -- disable_query_log
1588+
1589+--- let $i = 400
1590++-- let $i = 4000
1591++begin;
1592+ while ($i)
1593+ {
1594+ insert into t2 values(repeat('abcdefghijklmnopqrstuvwxyz',1000));
1595+ dec $i;
1596+ }
1597+-
1598++commit;
1599+ -- enable_query_log
1600+
1601+ # now there should be no 8K pages in the buffer pool
1602
1603=== modified file 'patches/innodb_kill_idle_transaction.patch'
1604--- patches/innodb_kill_idle_transaction.patch 2011-12-27 15:32:16 +0000
1605+++ patches/innodb_kill_idle_transaction.patch 2012-02-06 05:02:26 +0000
1606@@ -114,7 +114,7 @@
1607 #ifdef HAVE_PSI_INTERFACE
1608 /* Register keys with MySQL performance schema */
1609 if (PSI_server) {
1610-@@ -11695,6 +11699,57 @@
1611+@@ -11694,6 +11698,57 @@
1612 return(false);
1613 }
1614
1615@@ -172,7 +172,7 @@
1616 static SHOW_VAR innodb_status_variables_export[]= {
1617 {"Innodb", (char*) &show_innodb_vars, SHOW_FUNC},
1618 {NullS, NullS, SHOW_LONG}
1619-@@ -11986,6 +12041,15 @@
1620+@@ -11985,6 +12040,15 @@
1621 "Number of times a thread is allowed to enter InnoDB within the same SQL query after it has once got the ticket",
1622 NULL, NULL, 500L, 1L, ~0L, 0);
1623
1624@@ -188,7 +188,7 @@
1625 static MYSQL_SYSVAR_LONG(file_io_threads, innobase_file_io_threads,
1626 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR,
1627 "Number of file I/O threads in InnoDB.",
1628-@@ -12288,6 +12352,7 @@
1629+@@ -12327,6 +12391,7 @@
1630 MYSQL_SYSVAR(fast_checksum),
1631 MYSQL_SYSVAR(commit_concurrency),
1632 MYSQL_SYSVAR(concurrency_tickets),
1633@@ -198,7 +198,7 @@
1634 MYSQL_SYSVAR(data_home_dir),
1635 --- a/storage/innobase/include/srv0srv.h
1636 +++ b/storage/innobase/include/srv0srv.h
1637-@@ -296,6 +296,7 @@
1638+@@ -299,6 +299,7 @@
1639 extern ulint srv_activity_count;
1640 extern ulint srv_fatal_semaphore_wait_threshold;
1641 extern ulint srv_dml_needed_delay;
1642@@ -242,7 +242,7 @@
1643 /* How much data manipulation language (DML) statements need to be delayed,
1644 in microseconds, in order to reduce the lagging of the purge thread. */
1645 UNIV_INTERN ulint srv_dml_needed_delay = 0;
1646-@@ -2834,6 +2843,36 @@
1647+@@ -2837,6 +2846,36 @@
1648 old_sema = sema;
1649 }
1650
1651
1652=== modified file 'patches/innodb_lru_dump_restore.patch'
1653--- patches/innodb_lru_dump_restore.patch 2011-12-27 15:32:16 +0000
1654+++ patches/innodb_lru_dump_restore.patch 2012-02-06 05:02:26 +0000
1655@@ -7,7 +7,7 @@
1656 # should be done or reviewed by the maintainer!
1657 --- a/storage/innobase/buf/buf0lru.c
1658 +++ b/storage/innobase/buf/buf0lru.c
1659-@@ -2183,6 +2183,289 @@
1660+@@ -2197,6 +2197,289 @@
1661 memset(&buf_LRU_stat_cur, 0, sizeof buf_LRU_stat_cur);
1662 }
1663
1664@@ -310,7 +310,7 @@
1665 /*==============*/
1666 --- a/storage/innobase/fil/fil0fil.c
1667 +++ b/storage/innobase/fil/fil0fil.c
1668-@@ -5299,6 +5299,70 @@
1669+@@ -5307,6 +5307,70 @@
1670 return(DB_SUCCESS);
1671 }
1672
1673@@ -401,7 +401,7 @@
1674 #ifdef HAVE_LARGE_PAGES
1675 if ((os_use_large_pages = (ibool) my_use_large_pages))
1676 os_large_page_size = (ulint) opt_large_page_size;
1677-@@ -11925,6 +11929,19 @@
1678+@@ -11964,6 +11968,19 @@
1679 "Limit the allocated memory for dictionary cache. (0: unlimited)",
1680 NULL, NULL, 0, 0, LONG_MAX, 0);
1681
1682@@ -421,7 +421,7 @@
1683 static struct st_mysql_sys_var* innobase_system_variables[]= {
1684 MYSQL_SYSVAR(additional_mem_pool_size),
1685 MYSQL_SYSVAR(autoextend_increment),
1686-@@ -12009,6 +12026,8 @@
1687+@@ -12048,6 +12065,8 @@
1688 MYSQL_SYSVAR(random_read_ahead),
1689 MYSQL_SYSVAR(read_ahead_threshold),
1690 MYSQL_SYSVAR(io_capacity),
1691@@ -540,7 +540,7 @@
1692 an exclusive lock on the buffer frame. The flag is cleared and the x-lock
1693 --- a/storage/innobase/include/fil0fil.h
1694 +++ b/storage/innobase/include/fil0fil.h
1695-@@ -648,6 +648,14 @@
1696+@@ -653,6 +653,14 @@
1697 void* message, /*!< in: message for aio handler if non-sync
1698 aio used, else ignored */
1699 trx_t* trx);
1700@@ -557,7 +557,7 @@
1701 handler for completed requests. The aio array of pending requests is divided
1702 --- a/storage/innobase/include/srv0srv.h
1703 +++ b/storage/innobase/include/srv0srv.h
1704-@@ -361,6 +361,12 @@
1705+@@ -364,6 +364,12 @@
1706 reading of a disk page */
1707 extern ulint srv_buf_pool_reads;
1708
1709@@ -570,7 +570,7 @@
1710 /** Status variables to be passed to MySQL */
1711 typedef struct export_var_struct export_struc;
1712
1713-@@ -666,6 +672,16 @@
1714+@@ -669,6 +675,16 @@
1715 /*=====================*/
1716 void* arg); /*!< in: a dummy parameter required by
1717 os_thread_create */
1718@@ -602,10 +602,15 @@
1719 /* structure to pass status variables to MySQL */
1720 UNIV_INTERN export_struc export_vars;
1721
1722-@@ -2710,6 +2716,58 @@
1723- OS_THREAD_DUMMY_RETURN;
1724- }
1725+@@ -2708,6 +2714,58 @@
1726+ /* We count the number of threads in os_thread_exit(). A created
1727+ thread should always use that to exit and not use return() to exit. */
1728
1729++ os_thread_exit(NULL);
1730++
1731++ OS_THREAD_DUMMY_RETURN;
1732++}
1733++
1734 +/*********************************************************************//**
1735 +A thread which restores the buffer pool from a dump file on startup and does
1736 +periodic buffer pool dumps.
1737@@ -653,14 +658,9 @@
1738 + /* We count the number of threads in os_thread_exit(). A created
1739 + thread should always use that to exit and not use return() to exit. */
1740 +
1741-+ os_thread_exit(NULL);
1742-+
1743-+ OS_THREAD_DUMMY_RETURN;
1744-+}
1745-+
1746- /**********************************************************************//**
1747- Check whether any background thread is active.
1748- @return FALSE if all are are suspended or have exited. */
1749+ os_thread_exit(NULL);
1750+
1751+ OS_THREAD_DUMMY_RETURN;
1752 --- a/storage/innobase/srv/srv0start.c
1753 +++ b/storage/innobase/srv/srv0start.c
1754 @@ -87,6 +87,7 @@
1755@@ -683,7 +683,7 @@
1756
1757 /** We use this mutex to test the return value of pthread_mutex_trylock
1758 on successful locking. HP-UX does NOT return 0, though Linux et al do. */
1759-@@ -1821,6 +1822,15 @@
1760+@@ -1841,6 +1842,15 @@
1761 os_thread_create(&srv_monitor_thread, NULL,
1762 thread_ids + 4 + SRV_MAX_N_IO_THREADS);
1763
1764
1765=== modified file 'patches/innodb_opt_lru_count.patch'
1766--- patches/innodb_opt_lru_count.patch 2011-12-27 15:32:16 +0000
1767+++ patches/innodb_opt_lru_count.patch 2012-02-06 05:02:26 +0000
1768@@ -29,7 +29,7 @@
1769 #if defined UNIV_AHI_DEBUG || defined UNIV_DEBUG
1770 block->n_pointers = 0;
1771 #endif /* UNIV_AHI_DEBUG || UNIV_DEBUG */
1772-@@ -1401,7 +1401,7 @@
1773+@@ -1403,7 +1403,7 @@
1774
1775 memcpy(dpage, bpage, sizeof *dpage);
1776
1777@@ -38,7 +38,7 @@
1778 ut_d(bpage->in_page_hash = FALSE);
1779
1780 /* relocate buf_pool->LRU */
1781-@@ -3223,8 +3223,8 @@
1782+@@ -3225,8 +3225,8 @@
1783 bpage->in_zip_hash = FALSE;
1784 bpage->in_flush_list = FALSE;
1785 bpage->in_free_list = FALSE;
1786@@ -48,7 +48,7 @@
1787
1788 ut_d(bpage->in_page_hash = TRUE);
1789
1790-@@ -3389,7 +3389,7 @@
1791+@@ -3391,7 +3391,7 @@
1792 ibuf_merge_or_delete_for_page(NULL, space, offset, zip_size, TRUE);
1793
1794 /* Flush pages from the end of the LRU list if necessary */
1795@@ -94,7 +94,7 @@
1796
1797 return(FALSE);
1798 }
1799-@@ -1985,8 +1988,14 @@
1800+@@ -2049,8 +2052,14 @@
1801 buf_page_t* bpage;
1802 ulint n_replaceable;
1803 ulint distance = 0;
1804@@ -110,7 +110,7 @@
1805
1806 n_replaceable = UT_LIST_GET_LEN(buf_pool->free);
1807
1808-@@ -1997,7 +2006,13 @@
1809+@@ -2061,7 +2070,13 @@
1810 + BUF_FLUSH_EXTRA_MARGIN(buf_pool))
1811 && (distance < BUF_LRU_FREE_SEARCH_LEN(buf_pool))) {
1812
1813@@ -125,7 +125,7 @@
1814
1815 mutex_enter(block_mutex);
1816
1817-@@ -2012,11 +2027,18 @@
1818+@@ -2076,11 +2091,18 @@
1819 bpage = UT_LIST_GET_PREV(LRU, bpage);
1820 }
1821
1822@@ -145,7 +145,7 @@
1823 }
1824
1825 return(BUF_FLUSH_FREE_BLOCK_MARGIN(buf_pool)
1826-@@ -2034,7 +2056,8 @@
1827+@@ -2098,7 +2120,8 @@
1828 void
1829 buf_flush_free_margin(
1830 /*==================*/
1831@@ -155,7 +155,7 @@
1832 {
1833 ulint n_to_flush;
1834
1835-@@ -2045,7 +2068,7 @@
1836+@@ -2109,7 +2132,7 @@
1837
1838 n_flushed = buf_flush_LRU(buf_pool, n_to_flush);
1839
1840@@ -164,7 +164,7 @@
1841 /* There was an LRU type flush batch already running;
1842 let us wait for it to end */
1843
1844-@@ -2058,8 +2081,9 @@
1845+@@ -2122,8 +2145,9 @@
1846 Flushes pages from the end of all the LRU lists. */
1847 UNIV_INTERN
1848 void
1849@@ -175,7 +175,7 @@
1850 {
1851 ulint i;
1852
1853-@@ -2068,7 +2092,7 @@
1854+@@ -2132,7 +2156,7 @@
1855
1856 buf_pool = buf_pool_from_array(i);
1857
1858@@ -186,7 +186,7 @@
1859
1860 --- a/storage/innobase/buf/buf0lru.c
1861 +++ b/storage/innobase/buf/buf0lru.c
1862-@@ -923,7 +923,7 @@
1863+@@ -934,7 +934,7 @@
1864
1865 /* No free block was found: try to flush the LRU list */
1866
1867@@ -195,7 +195,7 @@
1868 ++srv_buf_pool_wait_free;
1869
1870 os_aio_simulated_wake_handler_threads();
1871-@@ -1120,7 +1120,7 @@
1872+@@ -1131,7 +1131,7 @@
1873
1874 /* Remove the block from the LRU list */
1875 UT_LIST_REMOVE(LRU, buf_pool->LRU, bpage);
1876@@ -204,7 +204,7 @@
1877
1878 buf_unzip_LRU_remove_block_if_needed(bpage);
1879
1880-@@ -1199,7 +1199,7 @@
1881+@@ -1210,7 +1210,7 @@
1882
1883 ut_ad(!bpage->in_LRU_list);
1884 UT_LIST_ADD_LAST(LRU, buf_pool->LRU, bpage);
1885@@ -213,7 +213,7 @@
1886
1887 if (UT_LIST_GET_LEN(buf_pool->LRU) > BUF_LRU_OLD_MIN_LEN) {
1888
1889-@@ -1269,7 +1269,7 @@
1890+@@ -1280,7 +1280,7 @@
1891 buf_pool->LRU_old_len++;
1892 }
1893
1894@@ -222,7 +222,7 @@
1895
1896 if (UT_LIST_GET_LEN(buf_pool->LRU) > BUF_LRU_OLD_MIN_LEN) {
1897
1898-@@ -1513,7 +1513,7 @@
1899+@@ -1524,7 +1524,7 @@
1900 buf_page_set_old(b, buf_page_is_old(b));
1901 #endif /* UNIV_LRU_DEBUG */
1902 } else {
1903@@ -271,7 +271,7 @@
1904 if (buf_debug_prints) {
1905 --- a/storage/innobase/include/buf0buf.h
1906 +++ b/storage/innobase/include/buf0buf.h
1907-@@ -1404,11 +1404,11 @@
1908+@@ -1424,11 +1424,11 @@
1909
1910 UT_LIST_NODE_T(buf_page_t) LRU;
1911 /*!< node of the LRU list */
1912
1913=== modified file 'patches/innodb_overwrite_relay_log_info.patch'
1914--- patches/innodb_overwrite_relay_log_info.patch 2011-12-27 15:32:16 +0000
1915+++ patches/innodb_overwrite_relay_log_info.patch 2012-02-06 05:02:26 +0000
1916@@ -248,7 +248,7 @@
1917
1918 trx_commit_for_mysql(trx);
1919 }
1920-@@ -11131,6 +11323,12 @@
1921+@@ -11130,6 +11322,12 @@
1922 "The common part for InnoDB table spaces.",
1923 NULL, NULL, NULL);
1924
1925@@ -261,7 +261,7 @@
1926 static MYSQL_SYSVAR_BOOL(doublewrite, innobase_use_doublewrite,
1927 PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
1928 "Enable InnoDB doublewrite buffer (enabled by default). "
1929-@@ -11608,6 +11806,7 @@
1930+@@ -11647,6 +11845,7 @@
1931 MYSQL_SYSVAR(old_blocks_pct),
1932 MYSQL_SYSVAR(old_blocks_time),
1933 MYSQL_SYSVAR(open_files),
1934
1935=== modified file 'patches/innodb_pass_corrupt_table.patch'
1936--- patches/innodb_pass_corrupt_table.patch 2012-01-10 11:28:15 +0000
1937+++ patches/innodb_pass_corrupt_table.patch 2012-02-06 05:02:26 +0000
1938@@ -338,7 +338,7 @@
1939 if (!ready) {
1940
1941 return(block);
1942-@@ -1945,6 +1951,13 @@
1943+@@ -1947,6 +1953,13 @@
1944 return(NULL);
1945 }
1946
1947@@ -352,7 +352,7 @@
1948 block_mutex = buf_page_get_mutex_enter(bpage);
1949
1950 rw_lock_s_unlock(&buf_pool->page_hash_latch);
1951-@@ -2524,6 +2537,13 @@
1952+@@ -2526,6 +2539,13 @@
1953 return(NULL);
1954 }
1955
1956@@ -366,7 +366,7 @@
1957 switch (buf_block_get_state(block)) {
1958 buf_page_t* bpage;
1959 ibool success;
1960-@@ -3198,6 +3218,7 @@
1961+@@ -3200,6 +3220,7 @@
1962 bpage->newest_modification = 0;
1963 bpage->oldest_modification = 0;
1964 HASH_INVALIDATE(bpage, hash);
1965@@ -374,7 +374,7 @@
1966 #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
1967 bpage->file_page_was_freed = FALSE;
1968 #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
1969-@@ -3836,6 +3857,7 @@
1970+@@ -3838,6 +3859,7 @@
1971 (ulong) bpage->offset);
1972 }
1973
1974@@ -382,7 +382,7 @@
1975 /* From version 3.23.38 up we store the page checksum
1976 to the 4 first bytes of the page end lsn field */
1977
1978-@@ -3877,6 +3899,23 @@
1979+@@ -3879,6 +3901,23 @@
1980 REFMAN "forcing-innodb-recovery.html\n"
1981 "InnoDB: about forcing recovery.\n", stderr);
1982
1983@@ -406,7 +406,7 @@
1984 if (srv_force_recovery < SRV_FORCE_IGNORE_CORRUPT) {
1985 /* If page space id is larger than TRX_SYS_SPACE
1986 (0), we will attempt to mark the corresponding
1987-@@ -3893,6 +3932,7 @@
1988+@@ -3895,6 +3934,7 @@
1989 }
1990 }
1991 }
1992@@ -414,7 +414,7 @@
1993
1994 if (recv_recovery_is_on()) {
1995 /* Pages must be uncompressed for crash recovery. */
1996-@@ -3902,8 +3942,11 @@
1997+@@ -3904,8 +3944,11 @@
1998
1999 if (uncompressed && !recv_no_ibuf_operations) {
2000 ibuf_merge_or_delete_for_page(
2001@@ -462,7 +462,7 @@
2002 /* If table->ibd_file_missing == TRUE, this will
2003 print an error message and return without doing
2004 anything. */
2005-@@ -1293,7 +1294,7 @@
2006+@@ -1298,7 +1299,7 @@
2007 + dict_sys->size) > srv_dict_size_limit ) {
2008 prev_table = UT_LIST_GET_PREV(table_LRU, table);
2009
2010@@ -471,7 +471,7 @@
2011 goto next_loop;
2012
2013 cached_foreign_tables = 0;
2014-@@ -4367,6 +4368,12 @@
2015+@@ -4377,6 +4378,12 @@
2016 heap = mem_heap_create(1000);
2017
2018 while (index) {
2019@@ -484,7 +484,7 @@
2020 size = btr_get_size(index, BTR_TOTAL_SIZE);
2021
2022 index->stat_index_size = size;
2023-@@ -4514,6 +4521,12 @@
2024+@@ -4524,6 +4531,12 @@
2025 heap = mem_heap_create(1000);
2026
2027 while (index) {
2028@@ -497,7 +497,7 @@
2029 /*===========================================*/
2030 {
2031 dict_table_t* sys_stats;
2032-@@ -4706,6 +4719,13 @@
2033+@@ -4716,6 +4729,13 @@
2034 || (srv_force_recovery < SRV_FORCE_NO_LOG_REDO
2035 && dict_index_is_clust(index)))) {
2036 ulint size;
2037@@ -511,7 +511,7 @@
2038 size = btr_get_size(index, BTR_TOTAL_SIZE);
2039
2040 index->stat_index_size = size;
2041-@@ -5685,4 +5705,42 @@
2042+@@ -5695,4 +5715,42 @@
2043
2044 index->type |= DICT_CORRUPT;
2045 }
2046@@ -584,7 +584,7 @@
2047 UT_LIST_ADD_LAST(space_list, fil_system->space_list, space);
2048
2049 mutex_exit(&fil_system->mutex);
2050-@@ -5277,6 +5280,34 @@
2051+@@ -5285,6 +5288,34 @@
2052 ut_a(byte_offset % OS_FILE_LOG_BLOCK_SIZE == 0);
2053 ut_a((len % OS_FILE_LOG_BLOCK_SIZE) == 0);
2054
2055@@ -619,7 +619,7 @@
2056 #ifdef UNIV_HOTBACKUP
2057 /* In ibbackup do normal i/o, not aio */
2058 if (type == OS_FILE_READ) {
2059-@@ -5291,6 +5322,8 @@
2060+@@ -5299,6 +5330,8 @@
2061 ret = os_aio(type, mode | wake_later, node->name, node->handle, buf,
2062 offset_low, offset_high, len, node, message, trx);
2063 #endif
2064@@ -628,7 +628,7 @@
2065 ut_a(ret);
2066
2067 if (mode == OS_AIO_SYNC) {
2068-@@ -5791,3 +5824,46 @@
2069+@@ -5799,3 +5832,46 @@
2070 return 0;
2071 }
2072 }
2073@@ -677,7 +677,7 @@
2074 +
2075 --- a/storage/innobase/fsp/fsp0fsp.c
2076 +++ b/storage/innobase/fsp/fsp0fsp.c
2077-@@ -369,6 +369,12 @@
2078+@@ -308,6 +308,12 @@
2079 ut_ad(id || !zip_size);
2080
2081 block = buf_page_get(id, zip_size, 0, RW_X_LATCH, mtr);
2082@@ -690,7 +690,7 @@
2083 header = FSP_HEADER_OFFSET + buf_block_get_frame(block);
2084 buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
2085
2086-@@ -787,6 +793,12 @@
2087+@@ -726,6 +732,12 @@
2088 fsp_header_t* sp_header;
2089
2090 block = buf_page_get(space, zip_size, 0, RW_X_LATCH, mtr);
2091@@ -703,7 +703,7 @@
2092 buf_block_dbg_add_level(block, SYNC_FSP_PAGE);
2093
2094 sp_header = FSP_HEADER_OFFSET + buf_block_get_frame(block);
2095-@@ -1866,6 +1878,11 @@
2096+@@ -1805,6 +1817,11 @@
2097 {
2098 fseg_inode_t* inode;
2099
2100@@ -715,7 +715,7 @@
2101 for (; i < FSP_SEG_INODES_PER_PAGE(zip_size); i++) {
2102
2103 inode = fsp_seg_inode_page_get_nth_inode(
2104-@@ -1979,6 +1996,11 @@
2105+@@ -1918,6 +1935,11 @@
2106
2107 page = buf_block_get_frame(block);
2108
2109@@ -727,7 +727,7 @@
2110 n = fsp_seg_inode_page_find_free(page, 0, zip_size, mtr);
2111
2112 ut_a(n != ULINT_UNDEFINED);
2113-@@ -2072,6 +2094,11 @@
2114+@@ -2011,6 +2033,11 @@
2115
2116 inode = fut_get_ptr(space, zip_size, inode_addr, RW_X_LATCH, mtr);
2117
2118@@ -739,7 +739,7 @@
2119 if (UNIV_UNLIKELY(!mach_read_from_8(inode + FSEG_ID))) {
2120
2121 inode = NULL;
2122-@@ -2098,7 +2125,7 @@
2123+@@ -2037,7 +2064,7 @@
2124 {
2125 fseg_inode_t* inode
2126 = fseg_inode_try_get(header, space, zip_size, mtr);
2127@@ -748,7 +748,7 @@
2128 return(inode);
2129 }
2130
2131-@@ -3304,6 +3331,11 @@
2132+@@ -3243,6 +3270,11 @@
2133
2134 descr = xdes_get_descriptor(space, zip_size, page, mtr);
2135
2136@@ -760,7 +760,7 @@
2137 ut_a(descr);
2138 if (xdes_get_bit(descr, XDES_FREE_BIT, page % FSP_EXTENT_SIZE, mtr)) {
2139 fputs("InnoDB: Dump of the tablespace extent descriptor: ",
2140-@@ -3551,6 +3583,11 @@
2141+@@ -3490,6 +3522,11 @@
2142
2143 descr = xdes_get_descriptor(space, zip_size, header_page, mtr);
2144
2145@@ -772,7 +772,7 @@
2146 /* Check that the header resides on a page which has not been
2147 freed yet */
2148
2149-@@ -3635,6 +3672,12 @@
2150+@@ -3574,6 +3611,12 @@
2151
2152 inode = fseg_inode_get(header, space, zip_size, mtr);
2153
2154@@ -908,7 +908,7 @@
2155 switch (ret) {
2156 case DB_SUCCESS:
2157 error = 0;
2158-@@ -6137,6 +6188,10 @@
2159+@@ -6136,6 +6187,10 @@
2160 {
2161 DBUG_ENTER("change_active_index");
2162
2163@@ -919,7 +919,7 @@
2164 ut_ad(user_thd == ha_thd());
2165 ut_a(prebuilt->trx == thd_to_trx(user_thd));
2166
2167-@@ -6250,6 +6305,10 @@
2168+@@ -6249,6 +6304,10 @@
2169
2170 DBUG_ENTER("general_fetch");
2171
2172@@ -930,7 +930,7 @@
2173 ut_a(prebuilt->trx == thd_to_trx(user_thd));
2174
2175 innodb_srv_conc_enter_innodb(prebuilt->trx);
2176-@@ -6259,6 +6318,10 @@
2177+@@ -6258,6 +6317,10 @@
2178
2179 innodb_srv_conc_exit_innodb(prebuilt->trx);
2180
2181@@ -941,7 +941,7 @@
2182 switch (ret) {
2183 case DB_SUCCESS:
2184 error = 0;
2185-@@ -7525,10 +7588,18 @@
2186+@@ -7524,10 +7587,18 @@
2187
2188 update_thd(ha_thd());
2189
2190@@ -960,7 +960,7 @@
2191 error = convert_error_code_to_mysql(error, prebuilt->table->flags,
2192 NULL);
2193
2194-@@ -8040,6 +8111,16 @@
2195+@@ -8039,6 +8110,16 @@
2196 return(ranges + (double) rows / (double) total_rows * time_for_scan);
2197 }
2198
2199@@ -977,7 +977,7 @@
2200 /*********************************************************************//**
2201 Calculates the key number used inside MySQL for an Innobase index. We will
2202 first check the "index translation table" for a match of the index to get
2203-@@ -8217,7 +8298,7 @@
2204+@@ -8216,7 +8297,7 @@
2205 ib_table = prebuilt->table;
2206
2207 if (flag & HA_STATUS_TIME) {
2208@@ -986,7 +986,7 @@
2209 /* In sql_show we call with this flag: update
2210 then statistics so that they are up-to-date */
2211
2212-@@ -8517,10 +8598,18 @@
2213+@@ -8516,10 +8597,18 @@
2214 THD* thd, /*!< in: connection thread handle */
2215 HA_CHECK_OPT* check_opt) /*!< in: currently ignored */
2216 {
2217@@ -1005,7 +1005,7 @@
2218 return(0);
2219 }
2220
2221-@@ -8756,6 +8845,10 @@
2222+@@ -8755,6 +8844,10 @@
2223 my_error(ER_QUERY_INTERRUPTED, MYF(0));
2224 }
2225
2226@@ -1016,7 +1016,7 @@
2227 DBUG_RETURN(is_ok ? HA_ADMIN_OK : HA_ADMIN_CORRUPT);
2228 }
2229
2230-@@ -9526,6 +9619,10 @@
2231+@@ -9525,6 +9618,10 @@
2232
2233 update_thd(thd);
2234
2235@@ -1027,7 +1027,7 @@
2236 if (prebuilt->table->ibd_file_missing && !thd_tablespace_op(thd)) {
2237 ut_print_timestamp(stderr);
2238 fprintf(stderr,
2239-@@ -11990,6 +12087,26 @@
2240+@@ -11989,6 +12086,26 @@
2241 "dump file (if present). Disabled by default.",
2242 NULL, NULL, FALSE);
2243
2244@@ -1054,7 +1054,7 @@
2245 static struct st_mysql_sys_var* innobase_system_variables[]= {
2246 MYSQL_SYSVAR(additional_mem_pool_size),
2247 MYSQL_SYSVAR(autoextend_increment),
2248-@@ -12083,6 +12200,7 @@
2249+@@ -12082,6 +12199,7 @@
2250 #ifdef UNIV_DEBUG
2251 MYSQL_SYSVAR(flush_checkpoint_debug),
2252 #endif
2253@@ -1104,7 +1104,7 @@
2254 block, index != NULL && dict_index_is_ibuf(index)
2255 --- a/storage/innobase/include/buf0buf.h
2256 +++ b/storage/innobase/include/buf0buf.h
2257-@@ -1003,7 +1003,7 @@
2258+@@ -1023,7 +1023,7 @@
2259 const buf_block_t* block) /*!< in: pointer to the control block */
2260 __attribute__((pure));
2261 #else /* UNIV_DEBUG */
2262@@ -1113,7 +1113,7 @@
2263 #endif /* UNIV_DEBUG */
2264 /*********************************************************************//**
2265 Gets the space id of a block.
2266-@@ -1450,6 +1450,7 @@
2267+@@ -1470,6 +1470,7 @@
2268 0 if the block was never accessed
2269 in the buffer pool */
2270 /* @} */
2271@@ -1132,7 +1132,7 @@
2272 /*********************************************************************//**
2273 Gets the current size of buffer buf_pool in bytes.
2274 @return size in bytes */
2275-@@ -637,6 +637,12 @@
2276+@@ -681,6 +681,12 @@
2277 /*================*/
2278 const buf_block_t* block) /*!< in: pointer to the control block */
2279 {
2280@@ -1175,7 +1175,7 @@
2281 #ifdef UNIV_DEBUG
2282 --- a/storage/innobase/include/fil0fil.h
2283 +++ b/storage/innobase/include/fil0fil.h
2284-@@ -754,6 +754,19 @@
2285+@@ -759,6 +759,19 @@
2286 fil_system_hash_nodes(void);
2287 /*========================*/
2288
2289@@ -1359,7 +1359,7 @@
2290 /*-------------------------------------------*/
2291 --- a/storage/innobase/srv/srv0start.c
2292 +++ b/storage/innobase/srv/srv0start.c
2293-@@ -2155,6 +2155,13 @@
2294+@@ -2175,6 +2175,13 @@
2295
2296 os_fast_mutex_free(&srv_os_test_mutex);
2297
2298
2299=== modified file 'patches/innodb_recovery_patches.patch'
2300--- patches/innodb_recovery_patches.patch 2011-12-27 15:32:16 +0000
2301+++ patches/innodb_recovery_patches.patch 2012-02-06 05:02:26 +0000
2302@@ -124,7 +124,7 @@
2303 srv_use_doublewrite_buf = (ibool) innobase_use_doublewrite;
2304 srv_use_checksums = (ibool) innobase_use_checksums;
2305
2306-@@ -11391,6 +11394,11 @@
2307+@@ -11390,6 +11393,11 @@
2308 "The common part for InnoDB table spaces.",
2309 NULL, NULL, NULL);
2310
2311@@ -136,7 +136,7 @@
2312 static MYSQL_SYSVAR_BOOL(recovery_update_relay_log, innobase_overwrite_relay_log_info,
2313 PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
2314 "During InnoDB crash recovery on slave overwrite relay-log.info "
2315-@@ -11879,6 +11887,7 @@
2316+@@ -11918,6 +11926,7 @@
2317 MYSQL_SYSVAR(data_file_path),
2318 MYSQL_SYSVAR(data_home_dir),
2319 MYSQL_SYSVAR(doublewrite),
2320
2321=== modified file 'patches/innodb_separate_doublewrite.patch'
2322--- patches/innodb_separate_doublewrite.patch 2011-12-27 15:32:16 +0000
2323+++ patches/innodb_separate_doublewrite.patch 2012-02-06 05:02:26 +0000
2324@@ -7,7 +7,7 @@
2325 # should be done or reviewed by the maintainer!
2326 --- a/storage/innobase/buf/buf0buf.c
2327 +++ b/storage/innobase/buf/buf0buf.c
2328-@@ -3805,7 +3805,8 @@
2329+@@ -3807,7 +3807,8 @@
2330 read_space_id = mach_read_from_4(
2331 frame + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID);
2332
2333@@ -262,7 +262,7 @@
2334 if (err != DB_SUCCESS) {
2335
2336 return(err);
2337-@@ -4168,7 +4178,7 @@
2338+@@ -4176,7 +4186,7 @@
2339 }
2340
2341 #ifndef UNIV_HOTBACKUP
2342@@ -271,7 +271,7 @@
2343 fprintf(stderr,
2344 "InnoDB: Error: tablespace id %lu in file %s"
2345 " is not sensible\n",
2346-@@ -4177,7 +4187,7 @@
2347+@@ -4185,7 +4195,7 @@
2348 goto func_exit;
2349 }
2350 #else
2351@@ -280,7 +280,7 @@
2352 char* new_path;
2353
2354 fprintf(stderr,
2355-@@ -4998,7 +5008,7 @@
2356+@@ -5006,7 +5016,7 @@
2357 }
2358
2359 if (node->n_pending == 0 && space->purpose == FIL_TABLESPACE
2360@@ -289,7 +289,7 @@
2361 /* The node is in the LRU list, remove it */
2362
2363 ut_a(UT_LIST_GET_LEN(system->LRU) > 0);
2364-@@ -5044,7 +5054,7 @@
2365+@@ -5052,7 +5062,7 @@
2366 }
2367
2368 if (node->n_pending == 0 && node->space->purpose == FIL_TABLESPACE
2369@@ -298,7 +298,7 @@
2370 /* The node must be put back to the LRU list */
2371 UT_LIST_ADD_FIRST(LRU, system->LRU, node);
2372 }
2373-@@ -5655,7 +5665,7 @@
2374+@@ -5663,7 +5673,7 @@
2375 ut_a(fil_node->n_pending == 0);
2376 ut_a(fil_node->open);
2377 ut_a(fil_node->space->purpose == FIL_TABLESPACE);
2378@@ -316,9 +316,9 @@
2379 -
2380 +#include "trx0sys.h"
2381
2382- #define FSP_HEADER_OFFSET FIL_PAGE_DATA /* Offset of the space header
2383- within a file page */
2384-@@ -999,10 +999,10 @@
2385+ /* FILE SEGMENT INODE
2386+ ==================
2387+@@ -938,10 +938,10 @@
2388 flst_init(header + FSP_SEG_INODES_FREE, mtr);
2389
2390 mlog_write_ull(header + FSP_SEG_ID, 1, mtr);
2391@@ -350,7 +350,7 @@
2392 srv_use_sys_stats_table = (ibool) innobase_use_sys_stats_table;
2393
2394 /* -------------- Log files ---------------------------*/
2395-@@ -11772,6 +11775,11 @@
2396+@@ -11771,6 +11774,11 @@
2397 "Path to individual files and their sizes.",
2398 NULL, NULL, NULL);
2399
2400@@ -362,7 +362,7 @@
2401 static MYSQL_SYSVAR_LONG(autoinc_lock_mode, innobase_autoinc_lock_mode,
2402 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
2403 "The AUTOINC lock modes supported by InnoDB: "
2404-@@ -11951,6 +11959,7 @@
2405+@@ -11990,6 +11998,7 @@
2406 MYSQL_SYSVAR(commit_concurrency),
2407 MYSQL_SYSVAR(concurrency_tickets),
2408 MYSQL_SYSVAR(data_file_path),
2409@@ -536,7 +536,7 @@
2410 #ifdef UNIV_LOG_ARCHIVE
2411 ulint* min_arch_log_no,/*!< out: min of archived log
2412 numbers in data files */
2413-@@ -747,6 +748,7 @@
2414+@@ -748,6 +749,7 @@
2415 *sum_of_new_sizes = 0;
2416
2417 *create_new_db = FALSE;
2418@@ -544,7 +544,7 @@
2419
2420 srv_normalize_path_for_win(srv_data_home);
2421
2422-@@ -984,6 +986,142 @@
2423+@@ -1004,6 +1006,142 @@
2424 srv_data_file_is_raw_partition[i] != 0);
2425 }
2426
2427@@ -622,8 +622,8 @@
2428 + (ulong) TRX_SYS_DOUBLEWRITE_BLOCK_SIZE * 9);
2429 + }
2430 +
2431-+ fil_read_flushed_lsn_and_arch_log_no(
2432-+ files[i], one_opened,
2433++ fil_read_first_page(
2434++ files[i], one_opened, &flags,
2435 +#ifdef UNIV_LOG_ARCHIVE
2436 + min_arch_log_no, max_arch_log_no,
2437 +#endif /* UNIV_LOG_ARCHIVE */
2438@@ -687,7 +687,7 @@
2439 return(DB_SUCCESS);
2440 }
2441
2442-@@ -997,6 +1135,7 @@
2443+@@ -1017,6 +1155,7 @@
2444 /*====================================*/
2445 {
2446 ibool create_new_db;
2447@@ -695,7 +695,7 @@
2448 ibool log_file_created;
2449 ibool log_created = FALSE;
2450 ibool log_opened = FALSE;
2451-@@ -1462,6 +1601,7 @@
2452+@@ -1482,6 +1621,7 @@
2453 }
2454
2455 err = open_or_create_data_files(&create_new_db,
2456@@ -703,7 +703,7 @@
2457 #ifdef UNIV_LOG_ARCHIVE
2458 &min_arch_log_no, &max_arch_log_no,
2459 #endif /* UNIV_LOG_ARCHIVE */
2460-@@ -1629,6 +1769,14 @@
2461+@@ -1649,6 +1789,14 @@
2462 after the double write buffer has been created. */
2463 trx_sys_create();
2464
2465@@ -718,7 +718,7 @@
2466 dict_create();
2467
2468 srv_startup_is_before_trx_rollback_phase = FALSE;
2469-@@ -1662,6 +1810,13 @@
2470+@@ -1682,6 +1830,13 @@
2471 recv_recovery_from_archive_finish();
2472 #endif /* UNIV_LOG_ARCHIVE */
2473 } else {
2474@@ -732,7 +732,7 @@
2475
2476 /* Check if we support the max format that is stamped
2477 on the system tablespace.
2478-@@ -1748,6 +1903,17 @@
2479+@@ -1768,6 +1923,17 @@
2480 we have finished the recovery process so that the
2481 image of TRX_SYS_PAGE_NO is not stale. */
2482 trx_sys_file_format_tag_init();
2483
2484=== modified file 'patches/innodb_show_lock_name.patch'
2485--- patches/innodb_show_lock_name.patch 2011-12-27 15:32:16 +0000
2486+++ patches/innodb_show_lock_name.patch 2012-02-06 05:02:26 +0000
2487@@ -7,7 +7,7 @@
2488 # should be done or reviewed by the maintainer!
2489 --- a/storage/innobase/handler/ha_innodb.cc
2490 +++ b/storage/innobase/handler/ha_innodb.cc
2491-@@ -9710,9 +9710,8 @@
2492+@@ -9709,9 +9709,8 @@
2493 rw_lock_wait_time += mutex->lspent_time;
2494 }
2495 #else /* UNIV_DEBUG */
2496@@ -19,7 +19,7 @@
2497 buf2len= (uint) my_snprintf(buf2, sizeof(buf2), "os_waits=%lu",
2498 (ulong) mutex->count_os_wait);
2499
2500-@@ -9727,10 +9726,8 @@
2501+@@ -9726,10 +9725,8 @@
2502
2503 if (block_mutex) {
2504 buf1len = (uint) my_snprintf(buf1, sizeof buf1,
2505@@ -32,7 +32,7 @@
2506 buf2len = (uint) my_snprintf(buf2, sizeof buf2,
2507 "os_waits=%lu",
2508 (ulong) block_mutex_oswait_count);
2509-@@ -9759,9 +9756,8 @@
2510+@@ -9758,9 +9755,8 @@
2511 continue;
2512 }
2513
2514@@ -44,7 +44,7 @@
2515 buf2len = my_snprintf(buf2, sizeof buf2, "os_waits=%lu",
2516 (ulong) lock->count_os_wait);
2517
2518-@@ -9775,10 +9771,8 @@
2519+@@ -9774,10 +9770,8 @@
2520
2521 if (block_lock) {
2522 buf1len = (uint) my_snprintf(buf1, sizeof buf1,
2523
2524=== modified file 'patches/innodb_show_status.patch'
2525--- patches/innodb_show_status.patch 2011-12-27 15:32:16 +0000
2526+++ patches/innodb_show_status.patch 2012-02-06 05:02:26 +0000
2527@@ -7,7 +7,7 @@
2528 # should be done or reviewed by the maintainer!
2529 --- a/storage/innobase/buf/buf0buf.c
2530 +++ b/storage/innobase/buf/buf0buf.c
2531-@@ -4365,6 +4365,7 @@
2532+@@ -4372,6 +4372,7 @@
2533 }
2534
2535 total_info->pool_size += pool_info->pool_size;
2536@@ -15,7 +15,7 @@
2537 total_info->lru_len += pool_info->lru_len;
2538 total_info->old_lru_len += pool_info->old_lru_len;
2539 total_info->free_list_len += pool_info->free_list_len;
2540-@@ -4430,6 +4431,8 @@
2541+@@ -4437,6 +4438,8 @@
2542
2543 pool_info->pool_size = buf_pool->curr_size;
2544
2545@@ -24,7 +24,7 @@
2546 pool_info->lru_len = UT_LIST_GET_LEN(buf_pool->LRU);
2547
2548 pool_info->old_lru_len = buf_pool->LRU_old_len;
2549-@@ -4551,14 +4554,16 @@
2550+@@ -4558,14 +4561,16 @@
2551 ut_ad(pool_info);
2552
2553 fprintf(file,
2554@@ -59,7 +59,7 @@
2555
2556 --- a/storage/innobase/fil/fil0fil.c
2557 +++ b/storage/innobase/fil/fil0fil.c
2558-@@ -4889,3 +4889,30 @@
2559+@@ -4897,3 +4897,30 @@
2560
2561 fil_system = NULL;
2562 }
2563@@ -101,7 +101,7 @@
2564 {"buffer_pool_pages_free",
2565 (char*) &export_vars.innodb_buffer_pool_pages_free, SHOW_LONG},
2566 #ifdef UNIV_DEBUG
2567-@@ -11208,6 +11210,16 @@
2568+@@ -11207,6 +11209,16 @@
2569 "Force InnoDB to not use next-key locking, to use only row-level locking.",
2570 NULL, NULL, FALSE);
2571
2572@@ -118,7 +118,7 @@
2573 #ifdef UNIV_LOG_ARCHIVE
2574 static MYSQL_SYSVAR_STR(log_arch_dir, innobase_log_arch_dir,
2575 PLUGIN_VAR_RQCMDARG | PLUGIN_VAR_READONLY,
2576-@@ -11395,7 +11407,7 @@
2577+@@ -11394,7 +11406,7 @@
2578
2579 static MYSQL_SYSVAR_STR(version, innodb_version_str,
2580 PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_READONLY,
2581@@ -127,7 +127,7 @@
2582
2583 static MYSQL_SYSVAR_BOOL(use_sys_malloc, srv_use_sys_malloc,
2584 PLUGIN_VAR_NOCMDARG | PLUGIN_VAR_READONLY,
2585-@@ -11495,6 +11507,8 @@
2586+@@ -11494,6 +11506,8 @@
2587 MYSQL_SYSVAR(thread_concurrency),
2588 MYSQL_SYSVAR(thread_sleep_delay),
2589 MYSQL_SYSVAR(autoinc_lock_mode),
2590@@ -148,7 +148,7 @@
2591 ulint free_list_len; /*!< Length of buf_pool->free list */
2592 --- a/storage/innobase/include/fil0fil.h
2593 +++ b/storage/innobase/include/fil0fil.h
2594-@@ -726,6 +726,17 @@
2595+@@ -731,6 +731,17 @@
2596 /*============================*/
2597 ulint id); /*!< in: space id */
2598
2599
2600=== modified file 'patches/innodb_show_status_extend.patch'
2601--- patches/innodb_show_status_extend.patch 2011-12-27 15:32:16 +0000
2602+++ patches/innodb_show_status_extend.patch 2012-02-06 05:02:26 +0000
2603@@ -240,7 +240,7 @@
2604 /** The lock system */
2605 --- a/storage/innobase/include/srv0srv.h
2606 +++ b/storage/innobase/include/srv0srv.h
2607-@@ -739,6 +739,11 @@
2608+@@ -742,6 +742,11 @@
2609
2610 /** Status variables to be passed to MySQL */
2611 struct export_var_struct{
2612@@ -252,7 +252,7 @@
2613 ulint innodb_data_pending_reads; /*!< Pending reads */
2614 ulint innodb_data_pending_writes; /*!< Pending writes */
2615 ulint innodb_data_pending_fsyncs; /*!< Pending fsyncs */
2616-@@ -756,6 +761,9 @@
2617+@@ -759,6 +764,9 @@
2618 #ifdef UNIV_DEBUG
2619 ulint innodb_buffer_pool_pages_latched; /*!< Latched pages */
2620 #endif /* UNIV_DEBUG */
2621@@ -262,7 +262,7 @@
2622 ulint innodb_buffer_pool_read_requests; /*!< buf_pool->stat.n_page_gets */
2623 ulint innodb_buffer_pool_reads; /*!< srv_buf_pool_reads */
2624 ulint innodb_buffer_pool_wait_free; /*!< srv_buf_pool_wait_free */
2625-@@ -765,13 +773,43 @@
2626+@@ -768,13 +776,43 @@
2627 ulint innodb_buffer_pool_read_ahead_rnd;/*!< srv_read_ahead_rnd */
2628 ulint innodb_buffer_pool_read_ahead; /*!< srv_read_ahead */
2629 ulint innodb_buffer_pool_read_ahead_evicted;/*!< srv_read_ahead evicted*/
2630@@ -306,7 +306,7 @@
2631 ulint innodb_os_log_written; /*!< srv_os_log_written */
2632 ulint innodb_os_log_fsyncs; /*!< fil_n_log_flushes */
2633 ulint innodb_os_log_pending_writes; /*!< srv_os_log_pending_writes */
2634-@@ -780,6 +818,8 @@
2635+@@ -783,6 +821,8 @@
2636 ulint innodb_pages_created; /*!< buf_pool->stat.n_pages_created */
2637 ulint innodb_pages_read; /*!< buf_pool->stat.n_pages_read */
2638 ulint innodb_pages_written; /*!< buf_pool->stat.n_pages_written */
2639@@ -315,7 +315,7 @@
2640 ulint innodb_row_lock_waits; /*!< srv_n_lock_wait_count */
2641 ulint innodb_row_lock_current_waits; /*!< srv_n_lock_wait_current_count */
2642 ib_int64_t innodb_row_lock_time; /*!< srv_n_lock_wait_time
2643-@@ -789,11 +829,18 @@
2644+@@ -792,11 +832,18 @@
2645 / srv_n_lock_wait_count */
2646 ulint innodb_row_lock_time_max; /*!< srv_n_lock_max_wait_time
2647 / 1000 */
2648@@ -383,7 +383,7 @@
2649 }
2650 --- a/storage/innobase/srv/srv0srv.c
2651 +++ b/storage/innobase/srv/srv0srv.c
2652-@@ -2259,12 +2259,49 @@
2653+@@ -2262,12 +2262,49 @@
2654 ulint LRU_len;
2655 ulint free_len;
2656 ulint flush_list_len;
2657@@ -433,7 +433,7 @@
2658 export_vars.innodb_data_pending_reads
2659 = os_n_pending_reads;
2660 export_vars.innodb_data_pending_writes
2661-@@ -2303,6 +2340,92 @@
2662+@@ -2306,6 +2343,92 @@
2663
2664 export_vars.innodb_buffer_pool_pages_misc
2665 = buf_pool_get_n_pages() - LRU_len - free_len;
2666
2667=== modified file 'patches/innodb_show_sys_tables.patch'
2668--- patches/innodb_show_sys_tables.patch 2011-12-27 15:32:16 +0000
2669+++ patches/innodb_show_sys_tables.patch 2012-02-06 05:02:26 +0000
2670@@ -39,7 +39,7 @@
2671 Determine the flags of a table described in SYS_TABLES.
2672 --- a/storage/innobase/handler/ha_innodb.cc
2673 +++ b/storage/innobase/handler/ha_innodb.cc
2674-@@ -11908,7 +11908,14 @@
2675+@@ -11950,7 +11950,14 @@
2676 i_s_innodb_cmp,
2677 i_s_innodb_cmp_reset,
2678 i_s_innodb_cmpmem,
2679
2680=== modified file 'patches/innodb_split_buf_pool_mutex.patch'
2681--- patches/innodb_split_buf_pool_mutex.patch 2012-01-11 15:14:15 +0000
2682+++ patches/innodb_split_buf_pool_mutex.patch 2012-02-06 05:02:26 +0000
2683@@ -527,7 +527,7 @@
2684 buf_pool_mutex_exit(buf_pool);
2685
2686 return(DB_SUCCESS);
2687-@@ -1374,7 +1402,11 @@
2688+@@ -1376,7 +1404,11 @@
2689 ulint fold;
2690 buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
2691
2692@@ -540,7 +540,7 @@
2693 ut_ad(mutex_own(buf_page_get_mutex(bpage)));
2694 ut_a(buf_page_get_io_fix(bpage) == BUF_IO_NONE);
2695 ut_a(bpage->buf_fix_count == 0);
2696-@@ -1485,21 +1517,32 @@
2697+@@ -1487,21 +1519,32 @@
2698 buf_page_t* bpage;
2699 ulint i;
2700 buf_pool_t* buf_pool = buf_pool_get(space, offset);
2701@@ -574,7 +574,7 @@
2702 for (i = 0; i < BUF_POOL_WATCH_SIZE; i++) {
2703 bpage = &buf_pool->watch[i];
2704
2705-@@ -1523,10 +1566,12 @@
2706+@@ -1525,10 +1568,12 @@
2707 bpage->space = space;
2708 bpage->offset = offset;
2709 bpage->buf_fix_count = 1;
2710@@ -588,7 +588,7 @@
2711 return(NULL);
2712 case BUF_BLOCK_ZIP_PAGE:
2713 ut_ad(bpage->in_page_hash);
2714-@@ -1544,6 +1589,8 @@
2715+@@ -1546,6 +1591,8 @@
2716 ut_error;
2717
2718 /* Fix compiler warning */
2719@@ -597,7 +597,7 @@
2720 return(NULL);
2721 }
2722
2723-@@ -1561,7 +1608,11 @@
2724+@@ -1563,7 +1610,11 @@
2725 space, offset) */
2726 buf_page_t* watch) /*!< in/out: sentinel for watch */
2727 {
2728@@ -610,7 +610,7 @@
2729
2730 HASH_DELETE(buf_page_t, hash, buf_pool->page_hash, fold, watch);
2731 ut_d(watch->in_page_hash = FALSE);
2732-@@ -1583,28 +1634,31 @@
2733+@@ -1585,28 +1636,31 @@
2734 buf_pool_t* buf_pool = buf_pool_get(space, offset);
2735 ulint fold = buf_page_address_fold(space, offset);
2736
2737@@ -646,7 +646,7 @@
2738 }
2739
2740 /****************************************************************//**
2741-@@ -1624,14 +1678,16 @@
2742+@@ -1626,14 +1680,16 @@
2743 buf_pool_t* buf_pool = buf_pool_get(space, offset);
2744 ulint fold = buf_page_address_fold(space, offset);
2745
2746@@ -665,7 +665,7 @@
2747
2748 return(ret);
2749 }
2750-@@ -1648,13 +1704,15 @@
2751+@@ -1650,13 +1706,15 @@
2752 {
2753 buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
2754
2755@@ -683,7 +683,7 @@
2756 }
2757
2758 /********************************************************************//**
2759-@@ -1678,14 +1736,20 @@
2760+@@ -1680,14 +1738,20 @@
2761 ut_a(buf_page_in_file(bpage));
2762
2763 if (buf_page_peek_if_too_old(bpage)) {
2764@@ -708,7 +708,7 @@
2765 }
2766 }
2767
2768-@@ -1702,7 +1766,8 @@
2769+@@ -1704,7 +1768,8 @@
2770 buf_block_t* block;
2771 buf_pool_t* buf_pool = buf_pool_get(space, offset);
2772
2773@@ -718,7 +718,7 @@
2774
2775 block = (buf_block_t*) buf_page_hash_get(buf_pool, space, offset);
2776
2777-@@ -1711,7 +1776,8 @@
2778+@@ -1713,7 +1778,8 @@
2779 block->check_index_page_at_flush = FALSE;
2780 }
2781
2782@@ -728,7 +728,7 @@
2783 }
2784
2785 #if defined UNIV_DEBUG_FILE_ACCESSES || defined UNIV_DEBUG
2786-@@ -1731,7 +1797,8 @@
2787+@@ -1733,7 +1799,8 @@
2788 buf_page_t* bpage;
2789 buf_pool_t* buf_pool = buf_pool_get(space, offset);
2790
2791@@ -738,7 +738,7 @@
2792
2793 bpage = buf_page_hash_get(buf_pool, space, offset);
2794
2795-@@ -1742,7 +1809,8 @@
2796+@@ -1744,7 +1811,8 @@
2797 bpage->file_page_was_freed = TRUE;
2798 }
2799
2800@@ -748,7 +748,7 @@
2801
2802 return(bpage);
2803 }
2804-@@ -1763,7 +1831,8 @@
2805+@@ -1765,7 +1833,8 @@
2806 buf_page_t* bpage;
2807 buf_pool_t* buf_pool = buf_pool_get(space, offset);
2808
2809@@ -758,7 +758,7 @@
2810
2811 bpage = buf_page_hash_get(buf_pool, space, offset);
2812
2813-@@ -1772,7 +1841,8 @@
2814+@@ -1774,7 +1843,8 @@
2815 bpage->file_page_was_freed = FALSE;
2816 }
2817
2818@@ -768,7 +768,7 @@
2819
2820 return(bpage);
2821 }
2822-@@ -1804,8 +1874,9 @@
2823+@@ -1806,8 +1876,9 @@
2824 buf_pool->stat.n_page_gets++;
2825
2826 for (;;) {
2827@@ -779,7 +779,7 @@
2828 bpage = buf_page_hash_get(buf_pool, space, offset);
2829 if (bpage) {
2830 ut_ad(!buf_pool_watch_is_sentinel(buf_pool, bpage));
2831-@@ -1814,7 +1885,8 @@
2832+@@ -1816,7 +1887,8 @@
2833
2834 /* Page not in buf_pool: needs to be read from file */
2835
2836@@ -789,7 +789,7 @@
2837
2838 buf_read_page(space, zip_size, offset);
2839
2840-@@ -1826,10 +1898,15 @@
2841+@@ -1828,10 +1900,15 @@
2842 if (UNIV_UNLIKELY(!bpage->zip.data)) {
2843 /* There is no compressed page. */
2844 err_exit:
2845@@ -806,7 +806,7 @@
2846 ut_ad(!buf_pool_watch_is_sentinel(buf_pool, bpage));
2847
2848 switch (buf_page_get_state(bpage)) {
2849-@@ -1838,24 +1915,43 @@
2850+@@ -1840,24 +1917,43 @@
2851 case BUF_BLOCK_MEMORY:
2852 case BUF_BLOCK_REMOVE_HASH:
2853 case BUF_BLOCK_ZIP_FREE:
2854@@ -855,7 +855,7 @@
2855 buf_block_buf_fix_inc((buf_block_t*) bpage,
2856 __FILE__, __LINE__);
2857 goto got_block;
2858-@@ -1868,7 +1964,7 @@
2859+@@ -1870,7 +1966,7 @@
2860 must_read = buf_page_get_io_fix(bpage) == BUF_IO_READ;
2861 access_time = buf_page_is_accessed(bpage);
2862
2863@@ -864,7 +864,7 @@
2864
2865 mutex_exit(block_mutex);
2866
2867-@@ -2179,7 +2275,7 @@
2868+@@ -2181,7 +2277,7 @@
2869 const buf_block_t* block) /*!< in: pointer to block,
2870 not dereferenced */
2871 {
2872@@ -873,7 +873,7 @@
2873
2874 if (UNIV_UNLIKELY((((ulint) block) % sizeof *block) != 0)) {
2875 /* The pointer should be aligned. */
2876-@@ -2215,6 +2311,7 @@
2877+@@ -2217,6 +2313,7 @@
2878 ulint fix_type;
2879 ibool must_read;
2880 ulint retries = 0;
2881@@ -881,7 +881,7 @@
2882 buf_pool_t* buf_pool = buf_pool_get(space, offset);
2883
2884 ut_ad(mtr);
2885-@@ -2248,18 +2345,24 @@
2886+@@ -2250,18 +2347,24 @@
2887 fold = buf_page_address_fold(space, offset);
2888 loop:
2889 block = guess;
2890@@ -908,7 +908,7 @@
2891 block = guess = NULL;
2892 } else {
2893 ut_ad(!block->page.in_zip_hash);
2894-@@ -2268,12 +2371,19 @@
2895+@@ -2270,12 +2373,19 @@
2896 }
2897
2898 if (block == NULL) {
2899@@ -928,7 +928,7 @@
2900 block = NULL;
2901 }
2902
2903-@@ -2285,12 +2395,14 @@
2904+@@ -2287,12 +2397,14 @@
2905 space, offset, fold);
2906
2907 if (UNIV_LIKELY_NULL(block)) {
2908@@ -945,7 +945,7 @@
2909
2910 if (mode == BUF_GET_IF_IN_POOL
2911 || mode == BUF_PEEK_IF_IN_POOL
2912-@@ -2343,7 +2455,8 @@
2913+@@ -2345,7 +2457,8 @@
2914 /* The page is being read to buffer pool,
2915 but we cannot wait around for the read to
2916 complete. */
2917@@ -955,7 +955,7 @@
2918
2919 return(NULL);
2920 }
2921-@@ -2353,38 +2466,49 @@
2922+@@ -2355,38 +2468,49 @@
2923 ibool success;
2924
2925 case BUF_BLOCK_FILE_PAGE:
2926@@ -1012,7 +1012,7 @@
2927
2928 {
2929 buf_page_t* hash_bpage;
2930-@@ -2397,35 +2521,47 @@
2931+@@ -2399,35 +2523,47 @@
2932 while buf_pool->mutex was released.
2933 Free the block that was allocated. */
2934
2935@@ -1066,7 +1066,7 @@
2936 buf_block_init_low(block);
2937 block->lock_hash_val = lock_rec_hash(space, offset);
2938
2939-@@ -2435,7 +2571,7 @@
2940+@@ -2437,7 +2573,7 @@
2941 if (buf_page_get_state(&block->page)
2942 == BUF_BLOCK_ZIP_PAGE) {
2943 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
2944@@ -1075,7 +1075,7 @@
2945 &block->page);
2946 #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
2947 ut_ad(!block->page.in_flush_list);
2948-@@ -2453,18 +2589,23 @@
2949+@@ -2455,18 +2591,23 @@
2950 /* Insert at the front of unzip_LRU list */
2951 buf_unzip_LRU_add_block(block, FALSE);
2952
2953@@ -1101,7 +1101,7 @@
2954 buf_page_free_descriptor(bpage);
2955
2956 /* Decompress the page and apply buffered operations
2957-@@ -2478,12 +2619,15 @@
2958+@@ -2480,12 +2621,15 @@
2959 }
2960
2961 /* Unfix and unlatch the block. */
2962@@ -1120,7 +1120,7 @@
2963 rw_lock_x_unlock(&block->lock);
2964
2965 break;
2966-@@ -2499,7 +2643,7 @@
2967+@@ -2501,7 +2645,7 @@
2968
2969 ut_ad(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
2970
2971@@ -1129,7 +1129,7 @@
2972 #if UNIV_WORD_SIZE == 4
2973 /* On 32-bit systems, there is no padding in buf_page_t. On
2974 other systems, Valgrind could complain about uninitialized pad
2975-@@ -2512,8 +2656,8 @@
2976+@@ -2514,8 +2658,8 @@
2977 /* Try to evict the block from the buffer pool, to use the
2978 insert buffer (change buffer) as much as possible. */
2979
2980@@ -1140,7 +1140,7 @@
2981 if (mode == BUF_GET_IF_IN_POOL_OR_WATCH) {
2982 /* Set the watch, as it would have
2983 been set if the page were not in the
2984-@@ -2522,6 +2666,9 @@
2985+@@ -2524,6 +2668,9 @@
2986 space, offset, fold);
2987
2988 if (UNIV_LIKELY_NULL(block)) {
2989@@ -1150,7 +1150,7 @@
2990
2991 /* The page entered the buffer
2992 pool for some reason. Try to
2993-@@ -2529,7 +2676,7 @@
2994+@@ -2531,7 +2678,7 @@
2995 goto got_block;
2996 }
2997 }
2998@@ -1159,7 +1159,7 @@
2999 fprintf(stderr,
3000 "innodb_change_buffering_debug evict %u %u\n",
3001 (unsigned) space, (unsigned) offset);
3002-@@ -2551,13 +2698,14 @@
3003+@@ -2553,13 +2700,14 @@
3004 ut_a(mode == BUF_GET_POSSIBLY_FREED
3005 || !block->page.file_page_was_freed);
3006 #endif
3007@@ -1176,7 +1176,7 @@
3008
3009 if (UNIV_LIKELY(mode != BUF_PEEK_IF_IN_POOL)) {
3010 buf_page_set_accessed_make_young(&block->page, access_time);
3011-@@ -2790,9 +2938,11 @@
3012+@@ -2792,9 +2940,11 @@
3013 buf_pool = buf_pool_from_block(block);
3014
3015 if (mode == BUF_MAKE_YOUNG && buf_page_peek_if_too_old(&block->page)) {
3016@@ -1190,7 +1190,7 @@
3017 } else if (!buf_page_is_accessed(&block->page)) {
3018 /* Above, we do a dirty read on purpose, to avoid
3019 mutex contention. The field buf_page_t::access_time
3020-@@ -2800,9 +2950,11 @@
3021+@@ -2802,9 +2952,11 @@
3022 field must be protected by mutex, however. */
3023 ulint time_ms = ut_time_ms();
3024
3025@@ -1204,7 +1204,7 @@
3026 }
3027
3028 ut_ad(!ibuf_inside(mtr) || mode == BUF_KEEP_OLD);
3029-@@ -2869,18 +3021,21 @@
3030+@@ -2871,18 +3023,21 @@
3031 ut_ad(mtr);
3032 ut_ad(mtr->state == MTR_ACTIVE);
3033
3034@@ -1229,7 +1229,7 @@
3035
3036 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
3037 ut_a(buf_block_get_state(block) == BUF_BLOCK_FILE_PAGE);
3038-@@ -2970,7 +3125,10 @@
3039+@@ -2972,7 +3127,10 @@
3040 buf_page_t* hash_page;
3041
3042 ut_ad(buf_pool == buf_pool_get(space, offset));
3043@@ -1241,7 +1241,7 @@
3044 ut_ad(mutex_own(&(block->mutex)));
3045 ut_a(buf_block_get_state(block) != BUF_BLOCK_FILE_PAGE);
3046
3047-@@ -2999,11 +3157,14 @@
3048+@@ -3001,11 +3159,14 @@
3049 if (UNIV_LIKELY(!hash_page)) {
3050 } else if (buf_pool_watch_is_sentinel(buf_pool, hash_page)) {
3051 /* Preserve the reference count. */
3052@@ -1257,7 +1257,7 @@
3053 } else {
3054 fprintf(stderr,
3055 "InnoDB: Error: page %lu %lu already found"
3056-@@ -3013,7 +3174,8 @@
3057+@@ -3015,7 +3176,8 @@
3058 (const void*) hash_page, (const void*) block);
3059 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
3060 mutex_exit(&block->mutex);
3061@@ -1267,7 +1267,7 @@
3062 buf_print();
3063 buf_LRU_print();
3064 buf_validate();
3065-@@ -3096,7 +3258,9 @@
3066+@@ -3098,7 +3260,9 @@
3067
3068 fold = buf_page_address_fold(space, offset);
3069
3070@@ -1278,7 +1278,7 @@
3071
3072 watch_page = buf_page_hash_get_low(buf_pool, space, offset, fold);
3073 if (watch_page && !buf_pool_watch_is_sentinel(buf_pool, watch_page)) {
3074-@@ -3105,9 +3269,15 @@
3075+@@ -3107,9 +3271,15 @@
3076 err_exit:
3077 if (block) {
3078 mutex_enter(&block->mutex);
3079@@ -1295,7 +1295,7 @@
3080
3081 bpage = NULL;
3082 goto func_exit;
3083-@@ -3130,6 +3300,8 @@
3084+@@ -3132,6 +3302,8 @@
3085
3086 buf_page_init(buf_pool, space, offset, fold, block);
3087
3088@@ -1304,7 +1304,7 @@
3089 /* The block must be put to the LRU list, to the old blocks */
3090 buf_LRU_add_block(bpage, TRUE/* to old blocks */);
3091
3092-@@ -3157,7 +3329,7 @@
3093+@@ -3159,7 +3331,7 @@
3094 been added to buf_pool->LRU and
3095 buf_pool->page_hash. */
3096 mutex_exit(&block->mutex);
3097@@ -1313,7 +1313,7 @@
3098 mutex_enter(&block->mutex);
3099 block->page.zip.data = data;
3100
3101-@@ -3170,13 +3342,14 @@
3102+@@ -3172,13 +3344,14 @@
3103 buf_unzip_LRU_add_block(block, TRUE);
3104 }
3105
3106@@ -1329,7 +1329,7 @@
3107
3108 /* If buf_buddy_alloc() allocated storage from the LRU list,
3109 it released and reacquired buf_pool->mutex. Thus, we must
3110-@@ -3192,7 +3365,10 @@
3111+@@ -3194,7 +3367,10 @@
3112
3113 /* The block was added by some other thread. */
3114 watch_page = NULL;
3115@@ -1341,7 +1341,7 @@
3116
3117 bpage = NULL;
3118 goto func_exit;
3119-@@ -3240,20 +3416,26 @@
3120+@@ -3242,20 +3418,26 @@
3121 HASH_INSERT(buf_page_t, hash, buf_pool->page_hash, fold,
3122 bpage);
3123
3124@@ -1369,7 +1369,7 @@
3125
3126 if (mode == BUF_READ_IBUF_PAGES_ONLY) {
3127
3128-@@ -3295,7 +3477,9 @@
3129+@@ -3297,7 +3479,9 @@
3130
3131 fold = buf_page_address_fold(space, offset);
3132
3133@@ -1380,7 +1380,7 @@
3134
3135 block = (buf_block_t*) buf_page_hash_get_low(
3136 buf_pool, space, offset, fold);
3137-@@ -3311,7 +3495,9 @@
3138+@@ -3313,7 +3497,9 @@
3139 #endif /* UNIV_DEBUG_FILE_ACCESSES || UNIV_DEBUG */
3140
3141 /* Page can be found in buf_pool */
3142@@ -1391,7 +1391,7 @@
3143
3144 buf_block_free(free_block);
3145
3146-@@ -3333,6 +3519,7 @@
3147+@@ -3335,6 +3521,7 @@
3148 mutex_enter(&block->mutex);
3149
3150 buf_page_init(buf_pool, space, offset, fold, block);
3151@@ -1399,7 +1399,7 @@
3152
3153 /* The block must be put to the LRU list */
3154 buf_LRU_add_block(&block->page, FALSE);
3155-@@ -3359,7 +3546,7 @@
3156+@@ -3361,7 +3548,7 @@
3157 the reacquisition of buf_pool->mutex. We also must
3158 defer this operation until after the block descriptor
3159 has been added to buf_pool->LRU and buf_pool->page_hash. */
3160@@ -1408,7 +1408,7 @@
3161 mutex_enter(&block->mutex);
3162 block->page.zip.data = data;
3163
3164-@@ -3377,7 +3564,8 @@
3165+@@ -3379,7 +3566,8 @@
3166
3167 buf_page_set_accessed(&block->page, time_ms);
3168
3169@@ -1418,7 +1418,7 @@
3170
3171 mtr_memo_push(mtr, block, MTR_MEMO_BUF_FIX);
3172
3173-@@ -3432,7 +3620,9 @@
3174+@@ -3434,7 +3622,9 @@
3175 ibool ret = TRUE;
3176
3177 /* First unfix and release lock on the bpage */
3178@@ -1429,7 +1429,7 @@
3179 mutex_enter(buf_page_get_mutex(bpage));
3180 ut_ad(buf_page_get_io_fix(bpage) == BUF_IO_READ);
3181 ut_ad(bpage->buf_fix_count == 0);
3182-@@ -3453,11 +3643,15 @@
3183+@@ -3455,11 +3645,15 @@
3184 ret = FALSE;
3185 }
3186
3187@@ -1446,7 +1446,7 @@
3188
3189 return(ret);
3190 }
3191-@@ -3475,6 +3669,8 @@
3192+@@ -3477,6 +3671,8 @@
3193 buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
3194 const ibool uncompressed = (buf_page_get_state(bpage)
3195 == BUF_BLOCK_FILE_PAGE);
3196@@ -1455,7 +1455,7 @@
3197
3198 ut_a(buf_page_in_file(bpage));
3199
3200-@@ -3617,8 +3813,26 @@
3201+@@ -3619,8 +3815,26 @@
3202 }
3203 }
3204
3205@@ -1483,7 +1483,7 @@
3206
3207 #ifdef UNIV_IBUF_COUNT_DEBUG
3208 if (io_type == BUF_IO_WRITE || uncompressed) {
3209-@@ -3641,6 +3855,7 @@
3210+@@ -3643,6 +3857,7 @@
3211 the x-latch to this OS thread: do not let this confuse you in
3212 debugging! */
3213
3214@@ -1491,7 +1491,7 @@
3215 ut_ad(buf_pool->n_pend_reads > 0);
3216 buf_pool->n_pend_reads--;
3217 buf_pool->stat.n_pages_read++;
3218-@@ -3658,6 +3873,9 @@
3219+@@ -3660,6 +3875,9 @@
3220
3221 buf_flush_write_complete(bpage);
3222
3223@@ -1501,7 +1501,7 @@
3224 if (uncompressed) {
3225 rw_lock_s_unlock_gen(&((buf_block_t*) bpage)->lock,
3226 BUF_IO_WRITE);
3227-@@ -3680,8 +3898,8 @@
3228+@@ -3682,8 +3900,8 @@
3229 }
3230 #endif /* UNIV_DEBUG */
3231
3232@@ -1511,7 +1511,7 @@
3233 }
3234
3235 /*********************************************************************//**
3236-@@ -3698,7 +3916,9 @@
3237+@@ -3700,7 +3918,9 @@
3238
3239 ut_ad(buf_pool);
3240
3241@@ -1522,7 +1522,7 @@
3242
3243 chunk = buf_pool->chunks;
3244
3245-@@ -3715,7 +3935,9 @@
3246+@@ -3717,7 +3937,9 @@
3247 }
3248 }
3249
3250@@ -1533,7 +1533,7 @@
3251
3252 return(TRUE);
3253 }
3254-@@ -3763,7 +3985,8 @@
3255+@@ -3765,7 +3987,8 @@
3256 freed = buf_LRU_search_and_free_block(buf_pool, 100);
3257 }
3258
3259@@ -1543,7 +1543,7 @@
3260
3261 ut_ad(UT_LIST_GET_LEN(buf_pool->LRU) == 0);
3262 ut_ad(UT_LIST_GET_LEN(buf_pool->unzip_LRU) == 0);
3263-@@ -3776,7 +3999,8 @@
3264+@@ -3778,7 +4001,8 @@
3265 memset(&buf_pool->stat, 0x00, sizeof(buf_pool->stat));
3266 buf_refresh_io_stats(buf_pool);
3267
3268@@ -1553,7 +1553,7 @@
3269 }
3270
3271 /*********************************************************************//**
3272-@@ -3818,7 +4042,10 @@
3273+@@ -3820,7 +4044,10 @@
3274
3275 ut_ad(buf_pool);
3276
3277@@ -1565,7 +1565,7 @@
3278
3279 chunk = buf_pool->chunks;
3280
3281-@@ -3913,7 +4140,7 @@
3282+@@ -3918,7 +4145,7 @@
3283 /* Check clean compressed-only blocks. */
3284
3285 for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b;
3286@@ -1574,7 +1574,7 @@
3287 ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE);
3288 switch (buf_page_get_io_fix(b)) {
3289 case BUF_IO_NONE:
3290-@@ -3944,7 +4171,7 @@
3291+@@ -3950,7 +4177,7 @@
3292
3293 buf_flush_list_mutex_enter(buf_pool);
3294 for (b = UT_LIST_GET_FIRST(buf_pool->flush_list); b;
3295@@ -1583,7 +1583,7 @@
3296 ut_ad(b->in_flush_list);
3297 ut_a(b->oldest_modification);
3298 n_flush++;
3299-@@ -4003,6 +4230,8 @@
3300+@@ -4010,6 +4237,8 @@
3301 }
3302
3303 ut_a(UT_LIST_GET_LEN(buf_pool->LRU) == n_lru);
3304@@ -1592,7 +1592,7 @@
3305 if (UT_LIST_GET_LEN(buf_pool->free) != n_free) {
3306 fprintf(stderr, "Free list len %lu, free blocks %lu\n",
3307 (ulong) UT_LIST_GET_LEN(buf_pool->free),
3308-@@ -4013,8 +4242,11 @@
3309+@@ -4020,8 +4249,11 @@
3310 ut_a(buf_pool->n_flush[BUF_FLUSH_SINGLE_PAGE] == n_single_flush);
3311 ut_a(buf_pool->n_flush[BUF_FLUSH_LIST] == n_list_flush);
3312 ut_a(buf_pool->n_flush[BUF_FLUSH_LRU] == n_lru_flush);
3313@@ -1605,7 +1605,7 @@
3314
3315 ut_a(buf_LRU_validate());
3316 ut_a(buf_flush_validate(buf_pool));
3317-@@ -4070,7 +4302,9 @@
3318+@@ -4077,7 +4309,9 @@
3319 index_ids = mem_alloc(size * sizeof *index_ids);
3320 counts = mem_alloc(sizeof(ulint) * size);
3321
3322@@ -1616,7 +1616,7 @@
3323 buf_flush_list_mutex_enter(buf_pool);
3324
3325 fprintf(stderr,
3326-@@ -4139,7 +4373,9 @@
3327+@@ -4146,7 +4380,9 @@
3328 }
3329 }
3330
3331@@ -1627,7 +1627,7 @@
3332
3333 for (i = 0; i < n_found; i++) {
3334 index = dict_index_get_if_in_cache(index_ids[i]);
3335-@@ -4196,7 +4432,7 @@
3336+@@ -4203,7 +4439,7 @@
3337 buf_chunk_t* chunk;
3338 ulint fixed_pages_number = 0;
3339
3340@@ -1636,7 +1636,7 @@
3341
3342 chunk = buf_pool->chunks;
3343
3344-@@ -4230,7 +4466,7 @@
3345+@@ -4237,7 +4473,7 @@
3346 /* Traverse the lists of clean and dirty compressed-only blocks. */
3347
3348 for (b = UT_LIST_GET_FIRST(buf_pool->zip_clean); b;
3349@@ -1645,7 +1645,7 @@
3350 ut_a(buf_page_get_state(b) == BUF_BLOCK_ZIP_PAGE);
3351 ut_a(buf_page_get_io_fix(b) != BUF_IO_WRITE);
3352
3353-@@ -4242,7 +4478,7 @@
3354+@@ -4249,7 +4485,7 @@
3355
3356 buf_flush_list_mutex_enter(buf_pool);
3357 for (b = UT_LIST_GET_FIRST(buf_pool->flush_list); b;
3358@@ -1654,7 +1654,7 @@
3359 ut_ad(b->in_flush_list);
3360
3361 switch (buf_page_get_state(b)) {
3362-@@ -4268,7 +4504,7 @@
3363+@@ -4275,7 +4511,7 @@
3364
3365 buf_flush_list_mutex_exit(buf_pool);
3366 mutex_exit(&buf_pool->zip_mutex);
3367@@ -1663,7 +1663,7 @@
3368
3369 return(fixed_pages_number);
3370 }
3371-@@ -4426,6 +4662,8 @@
3372+@@ -4433,6 +4669,8 @@
3373 /* Find appropriate pool_info to store stats for this buffer pool */
3374 pool_info = &all_pool_info[pool_id];
3375
3376@@ -1672,7 +1672,7 @@
3377 buf_pool_mutex_enter(buf_pool);
3378 buf_flush_list_mutex_enter(buf_pool);
3379
3380-@@ -4541,6 +4779,8 @@
3381+@@ -4548,6 +4786,8 @@
3382 pool_info->unzip_cur = buf_LRU_stat_cur.unzip;
3383
3384 buf_refresh_io_stats(buf_pool);
3385@@ -1681,7 +1681,7 @@
3386 buf_pool_mutex_exit(buf_pool);
3387 }
3388
3389-@@ -4785,11 +5025,13 @@
3390+@@ -4792,11 +5032,13 @@
3391 {
3392 ulint len;
3393
3394@@ -2127,7 +2127,7 @@
3395 }
3396 --- a/storage/innobase/buf/buf0lru.c
3397 +++ b/storage/innobase/buf/buf0lru.c
3398-@@ -143,8 +143,9 @@
3399+@@ -147,8 +147,9 @@
3400 void
3401 buf_LRU_block_free_hashed_page(
3402 /*===========================*/
3403@@ -2138,7 +2138,7 @@
3404
3405 /******************************************************************//**
3406 Determines if the unzip_LRU list should be used for evicting a victim
3407-@@ -154,15 +155,20 @@
3408+@@ -158,15 +159,20 @@
3409 ibool
3410 buf_LRU_evict_from_unzip_LRU(
3411 /*=========================*/
3412@@ -2161,7 +2161,7 @@
3413 return(FALSE);
3414 }
3415
3416-@@ -171,14 +177,20 @@
3417+@@ -175,14 +181,20 @@
3418 decompressed pages in the buffer pool. */
3419 if (UT_LIST_GET_LEN(buf_pool->unzip_LRU)
3420 <= UT_LIST_GET_LEN(buf_pool->LRU) / 10) {
3421@@ -2182,9 +2182,9 @@
3422
3423 /* Calculate the average over past intervals, and add the values
3424 of the current interval. */
3425-@@ -246,18 +258,25 @@
3426+@@ -250,18 +262,25 @@
3427 page_arr = ut_malloc(
3428- sizeof(ulint) * BUF_LRU_DROP_SEARCH_HASH_SIZE);
3429+ sizeof(ulint) * BUF_LRU_DROP_SEARCH_SIZE);
3430
3431 - buf_pool_mutex_enter(buf_pool);
3432 + //buf_pool_mutex_enter(buf_pool);
3433@@ -2209,7 +2209,7 @@
3434 ut_a(buf_page_in_file(bpage));
3435
3436 if (buf_page_get_state(bpage) != BUF_BLOCK_FILE_PAGE
3437-@@ -266,23 +285,27 @@
3438+@@ -270,24 +289,30 @@
3439 /* Compressed pages are never hashed.
3440 Skip blocks of other tablespaces.
3441 Skip I/O-fixed blocks (to be dealt with later). */
3442@@ -2234,12 +2234,15 @@
3443 /* Store the page number so that we can drop the hash
3444 index in a batch later. */
3445 page_arr[num_entries] = bpage->offset;
3446++
3447 + mutex_exit(block_mutex);
3448 +
3449- ut_a(num_entries < BUF_LRU_DROP_SEARCH_HASH_SIZE);
3450+ ut_a(num_entries < BUF_LRU_DROP_SEARCH_SIZE);
3451++
3452 ++num_entries;
3453
3454-@@ -292,14 +315,16 @@
3455+ if (num_entries < BUF_LRU_DROP_SEARCH_SIZE) {
3456+@@ -296,14 +321,16 @@
3457
3458 /* Array full. We release the buf_pool->mutex to obey
3459 the latching order. */
3460@@ -2258,7 +2261,7 @@
3461
3462 /* Note that we released the buf_pool mutex above
3463 after reading the prev_bpage during processing of a
3464-@@ -317,13 +342,23 @@
3465+@@ -321,13 +348,23 @@
3466 /* If, however, bpage has been removed from LRU list
3467 to the free list then we should restart the scan.
3468 bpage->state is protected by buf_pool mutex. */
3469@@ -2283,67 +2286,73 @@
3470
3471 /* Drop any remaining batch of search hashed pages. */
3472 buf_LRU_drop_page_hash_batch(id, zip_size, page_arr, num_entries);
3473-@@ -345,7 +380,9 @@
3474- ibool all_freed;
3475+@@ -351,7 +388,9 @@
3476+ ulint i;
3477
3478 scan_again:
3479 - buf_pool_mutex_enter(buf_pool);
3480 + //buf_pool_mutex_enter(buf_pool);
3481 + mutex_enter(&buf_pool->LRU_list_mutex);
3482 + rw_lock_x_lock(&buf_pool->page_hash_latch);
3483+ buf_flush_list_mutex_enter(buf_pool);
3484
3485 all_freed = TRUE;
3486-
3487-@@ -375,8 +412,15 @@
3488- all_freed = FALSE;
3489- goto next_page;
3490- } else {
3491-- block_mutex = buf_page_get_mutex(bpage);
3492-- mutex_enter(block_mutex);
3493-+ block_mutex = buf_page_get_mutex_enter(bpage);
3494-+
3495-+ if (!block_mutex) {
3496-+ /* It may be impossible case...
3497-+ Something wrong, so will be scan_again */
3498-+
3499-+ all_freed = FALSE;
3500-+ goto next_page;
3501-+ }
3502-
3503- if (bpage->buf_fix_count > 0) {
3504-
3505-@@ -409,7 +453,9 @@
3506- ulint page_no;
3507- ulint zip_size;
3508-
3509-- buf_pool_mutex_exit(buf_pool);
3510-+ //buf_pool_mutex_exit(buf_pool);
3511-+ mutex_exit(&buf_pool->LRU_list_mutex);
3512-+ rw_lock_x_unlock(&buf_pool->page_hash_latch);
3513-
3514- zip_size = buf_page_get_zip_size(bpage);
3515- page_no = buf_page_get_page_no(bpage);
3516-@@ -433,7 +479,7 @@
3517-
3518- if (buf_LRU_block_remove_hashed_page(bpage, TRUE)
3519- != BUF_BLOCK_ZIP_FREE) {
3520-- buf_LRU_block_free_hashed_page((buf_block_t*) bpage);
3521-+ buf_LRU_block_free_hashed_page((buf_block_t*) bpage, TRUE);
3522+@@ -364,7 +403,7 @@
3523+
3524+ ut_a(buf_page_in_file(bpage));
3525+
3526+- prev_bpage = UT_LIST_GET_PREV(list, bpage);
3527++ prev_bpage = UT_LIST_GET_PREV(flush_list, bpage);
3528+
3529+ /* bpage->space and bpage->io_fix are protected by
3530+ buf_pool->mutex and block_mutex. It is safe to check
3531+@@ -388,8 +427,14 @@
3532+ will stay in the flush_list because buf_flush_remove()
3533+ needs buf_pool->mutex as well. */
3534+ buf_flush_list_mutex_exit(buf_pool);
3535+- block_mutex = buf_page_get_mutex(bpage);
3536+- mutex_enter(block_mutex);
3537++ block_mutex = buf_page_get_mutex_enter(bpage);
3538++
3539++ if (!block_mutex) {
3540++ /* It may be impossible case...
3541++ Something wrong, so will be scan_again */
3542++ all_freed = FALSE;
3543++ goto next_page;
3544++ }
3545+
3546+ if (bpage->buf_fix_count > 0) {
3547 mutex_exit(block_mutex);
3548- } else {
3549- /* The block_mutex should have been released
3550-@@ -446,7 +492,9 @@
3551- bpage = prev_bpage;
3552+@@ -440,9 +485,15 @@
3553+ mutex_exit(block_mutex);
3554+
3555+ /* Now it is safe to release the buf_pool->mutex. */
3556+- buf_pool_mutex_exit(buf_pool);
3557++ //buf_pool_mutex_exit(buf_pool);
3558++ mutex_exit(&buf_pool->LRU_list_mutex);
3559++ rw_lock_x_unlock(&buf_pool->page_hash_latch);
3560++
3561+ os_thread_yield();
3562+- buf_pool_mutex_enter(buf_pool);
3563++ //buf_pool_mutex_enter(buf_pool);
3564++ mutex_enter(&buf_pool->LRU_list_mutex);
3565++ rw_lock_x_lock(&buf_pool->page_hash_latch);
3566++
3567+
3568+ mutex_enter(block_mutex);
3569+ buf_page_unset_sticky(bpage);
3570+@@ -454,7 +505,9 @@
3571+ i = 0;
3572 }
3573
3574 - buf_pool_mutex_exit(buf_pool);
3575-+ //buf_pool_mutex_exit(buf_pool);
3576++// buf_pool_mutex_exit(buf_pool);
3577 + mutex_exit(&buf_pool->LRU_list_mutex);
3578 + rw_lock_x_unlock(&buf_pool->page_hash_latch);
3579+ buf_flush_list_mutex_exit(buf_pool);
3580
3581- if (!all_freed) {
3582- os_thread_sleep(20000);
3583-@@ -493,7 +541,9 @@
3584+ ut_ad(buf_flush_validate(buf_pool));
3585+@@ -504,7 +557,9 @@
3586 buf_page_t* b;
3587 buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
3588
3589@@ -2354,7 +2363,7 @@
3590 ut_ad(buf_page_get_state(bpage) == BUF_BLOCK_ZIP_PAGE);
3591
3592 /* Find the first successor of bpage in the LRU list
3593-@@ -501,17 +551,17 @@
3594+@@ -512,17 +567,17 @@
3595 b = bpage;
3596 do {
3597 b = UT_LIST_GET_NEXT(LRU, b);
3598@@ -2376,7 +2385,7 @@
3599 }
3600 }
3601 #endif /* UNIV_DEBUG || UNIV_BUF_DEBUG */
3602-@@ -525,18 +575,19 @@
3603+@@ -536,18 +591,19 @@
3604 buf_LRU_free_from_unzip_LRU_list(
3605 /*=============================*/
3606 buf_pool_t* buf_pool, /*!< in: buffer pool instance */
3607@@ -2398,7 +2407,7 @@
3608
3609 /* Theoratically it should be much easier to find a victim
3610 from unzip_LRU as we can choose even a dirty block (as we'll
3611-@@ -546,7 +597,7 @@
3612+@@ -557,7 +613,7 @@
3613 if we have done five iterations so far. */
3614
3615 if (UNIV_UNLIKELY(n_iterations >= 5)
3616@@ -2407,7 +2416,7 @@
3617
3618 return(FALSE);
3619 }
3620-@@ -554,18 +605,25 @@
3621+@@ -565,18 +621,25 @@
3622 distance = 100 + (n_iterations
3623 * UT_LIST_GET_LEN(buf_pool->unzip_LRU)) / 5;
3624
3625@@ -2435,7 +2444,7 @@
3626 mutex_exit(&block->mutex);
3627
3628 if (freed) {
3629-@@ -584,35 +642,46 @@
3630+@@ -595,35 +658,46 @@
3631 buf_LRU_free_from_common_LRU_list(
3632 /*==============================*/
3633 buf_pool_t* buf_pool,
3634@@ -2487,7 +2496,7 @@
3635 mutex_exit(block_mutex);
3636
3637 if (freed) {
3638-@@ -649,16 +718,23 @@
3639+@@ -660,16 +734,23 @@
3640 n_iterations / 5 of the unzip_LRU list. */
3641 {
3642 ibool freed = FALSE;
3643@@ -2496,12 +2505,12 @@
3644 - buf_pool_mutex_enter(buf_pool);
3645 + if (UT_LIST_GET_LEN(buf_pool->unzip_LRU))
3646 + have_LRU_mutex = TRUE;
3647++
3648++ //buf_pool_mutex_enter(buf_pool);
3649++ if (have_LRU_mutex)
3650++ mutex_enter(&buf_pool->LRU_list_mutex);
3651
3652 - freed = buf_LRU_free_from_unzip_LRU_list(buf_pool, n_iterations);
3653-+ //buf_pool_mutex_enter(buf_pool);
3654-+ if (have_LRU_mutex)
3655-+ mutex_enter(&buf_pool->LRU_list_mutex);
3656-+
3657 + freed = buf_LRU_free_from_unzip_LRU_list(buf_pool, n_iterations, have_LRU_mutex);
3658
3659 if (!freed) {
3660@@ -2514,7 +2523,7 @@
3661 if (!freed) {
3662 buf_pool->LRU_flush_ended = 0;
3663 } else if (buf_pool->LRU_flush_ended > 0) {
3664-@@ -666,6 +742,8 @@
3665+@@ -677,6 +758,8 @@
3666 }
3667
3668 buf_pool_mutex_exit(buf_pool);
3669@@ -2523,7 +2532,7 @@
3670
3671 return(freed);
3672 }
3673-@@ -726,7 +804,9 @@
3674+@@ -737,7 +820,9 @@
3675
3676 buf_pool = buf_pool_from_array(i);
3677
3678@@ -2534,7 +2543,7 @@
3679
3680 if (!recv_recovery_on
3681 && UT_LIST_GET_LEN(buf_pool->free)
3682-@@ -736,7 +816,9 @@
3683+@@ -747,7 +832,9 @@
3684 ret = TRUE;
3685 }
3686
3687@@ -2545,7 +2554,7 @@
3688 }
3689
3690 return(ret);
3691-@@ -754,9 +836,10 @@
3692+@@ -765,9 +852,10 @@
3693 {
3694 buf_block_t* block;
3695
3696@@ -2558,7 +2567,7 @@
3697
3698 if (block) {
3699
3700-@@ -765,7 +848,9 @@
3701+@@ -776,7 +864,9 @@
3702 ut_ad(!block->page.in_flush_list);
3703 ut_ad(!block->page.in_LRU_list);
3704 ut_a(!buf_page_in_file(&block->page));
3705@@ -2569,7 +2578,7 @@
3706
3707 mutex_enter(&block->mutex);
3708
3709-@@ -775,6 +860,8 @@
3710+@@ -786,6 +876,8 @@
3711 ut_ad(buf_pool_from_block(block) == buf_pool);
3712
3713 mutex_exit(&block->mutex);
3714@@ -2578,7 +2587,7 @@
3715 }
3716
3717 return(block);
3718-@@ -797,7 +884,7 @@
3719+@@ -808,7 +900,7 @@
3720 ibool mon_value_was = FALSE;
3721 ibool started_monitor = FALSE;
3722 loop:
3723@@ -2587,7 +2596,7 @@
3724
3725 if (!recv_recovery_on && UT_LIST_GET_LEN(buf_pool->free)
3726 + UT_LIST_GET_LEN(buf_pool->LRU) < buf_pool->curr_size / 20) {
3727-@@ -865,7 +952,7 @@
3728+@@ -876,7 +968,7 @@
3729
3730 /* If there is a block in the free list, take it */
3731 block = buf_LRU_get_free_only(buf_pool);
3732@@ -2596,7 +2605,7 @@
3733
3734 if (block) {
3735 ut_ad(buf_pool_from_block(block) == buf_pool);
3736-@@ -965,7 +1052,8 @@
3737+@@ -976,7 +1068,8 @@
3738 ulint new_len;
3739
3740 ut_a(buf_pool->LRU_old);
3741@@ -2606,7 +2615,7 @@
3742 ut_ad(buf_pool->LRU_old_ratio >= BUF_LRU_OLD_RATIO_MIN);
3743 ut_ad(buf_pool->LRU_old_ratio <= BUF_LRU_OLD_RATIO_MAX);
3744 #if BUF_LRU_OLD_RATIO_MIN * BUF_LRU_OLD_MIN_LEN <= BUF_LRU_OLD_RATIO_DIV * (BUF_LRU_OLD_TOLERANCE + 5)
3745-@@ -1031,7 +1119,8 @@
3746+@@ -1042,7 +1135,8 @@
3747 {
3748 buf_page_t* bpage;
3749
3750@@ -2616,7 +2625,7 @@
3751 ut_a(UT_LIST_GET_LEN(buf_pool->LRU) == BUF_LRU_OLD_MIN_LEN);
3752
3753 /* We first initialize all blocks in the LRU list as old and then use
3754-@@ -1066,13 +1155,14 @@
3755+@@ -1077,13 +1171,14 @@
3756 ut_ad(buf_pool);
3757 ut_ad(bpage);
3758 ut_ad(buf_page_in_file(bpage));
3759@@ -2633,7 +2642,7 @@
3760
3761 UT_LIST_REMOVE(unzip_LRU, buf_pool->unzip_LRU, block);
3762 }
3763-@@ -1090,7 +1180,8 @@
3764+@@ -1101,7 +1196,8 @@
3765
3766 ut_ad(buf_pool);
3767 ut_ad(bpage);
3768@@ -2643,7 +2652,7 @@
3769
3770 ut_a(buf_page_in_file(bpage));
3771
3772-@@ -1167,12 +1258,13 @@
3773+@@ -1178,12 +1274,13 @@
3774
3775 ut_ad(buf_pool);
3776 ut_ad(block);
3777@@ -2659,7 +2668,7 @@
3778
3779 if (old) {
3780 UT_LIST_ADD_LAST(unzip_LRU, buf_pool->unzip_LRU, block);
3781-@@ -1193,7 +1285,8 @@
3782+@@ -1204,7 +1301,8 @@
3783
3784 ut_ad(buf_pool);
3785 ut_ad(bpage);
3786@@ -2669,7 +2678,7 @@
3787
3788 ut_a(buf_page_in_file(bpage));
3789
3790-@@ -1244,7 +1337,8 @@
3791+@@ -1255,7 +1353,8 @@
3792
3793 ut_ad(buf_pool);
3794 ut_ad(bpage);
3795@@ -2679,7 +2688,7 @@
3796
3797 ut_a(buf_page_in_file(bpage));
3798 ut_ad(!bpage->in_LRU_list);
3799-@@ -1323,7 +1417,8 @@
3800+@@ -1334,7 +1433,8 @@
3801 {
3802 buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
3803
3804@@ -2689,7 +2698,7 @@
3805
3806 if (bpage->old) {
3807 buf_pool->stat.n_pages_made_young++;
3808-@@ -1362,17 +1457,18 @@
3809+@@ -1373,17 +1473,18 @@
3810 buf_LRU_free_block(
3811 /*===============*/
3812 buf_page_t* bpage, /*!< in: block to be freed */
3813@@ -2711,7 +2720,7 @@
3814 ut_ad(!bpage->in_flush_list == !bpage->oldest_modification);
3815 #if UNIV_WORD_SIZE == 4
3816 /* On 32-bit systems, there is no padding in buf_page_t. On
3817-@@ -1381,7 +1477,7 @@
3818+@@ -1392,7 +1493,7 @@
3819 UNIV_MEM_ASSERT_RW(bpage, sizeof *bpage);
3820 #endif
3821
3822@@ -2720,7 +2729,7 @@
3823
3824 /* Do not free buffer-fixed or I/O-fixed blocks. */
3825 return(FALSE);
3826-@@ -1415,7 +1511,7 @@
3827+@@ -1426,7 +1527,7 @@
3828 alloc:
3829 b = buf_page_alloc_descriptor();
3830 ut_a(b);
3831@@ -2729,7 +2738,7 @@
3832 }
3833
3834 #ifdef UNIV_DEBUG
3835-@@ -1426,6 +1522,39 @@
3836+@@ -1437,6 +1538,39 @@
3837 }
3838 #endif /* UNIV_DEBUG */
3839
3840@@ -2769,7 +2778,7 @@
3841 if (buf_LRU_block_remove_hashed_page(bpage, zip)
3842 != BUF_BLOCK_ZIP_FREE) {
3843 ut_a(bpage->buf_fix_count == 0);
3844-@@ -1442,6 +1571,10 @@
3845+@@ -1453,6 +1587,10 @@
3846
3847 ut_a(!hash_b);
3848
3849@@ -2780,7 +2789,7 @@
3850 b->state = b->oldest_modification
3851 ? BUF_BLOCK_ZIP_DIRTY
3852 : BUF_BLOCK_ZIP_PAGE;
3853-@@ -1517,6 +1650,7 @@
3854+@@ -1528,6 +1666,7 @@
3855 buf_LRU_add_block_low(b, buf_page_is_old(b));
3856 }
3857
3858@@ -2788,11 +2797,13 @@
3859 if (b->state == BUF_BLOCK_ZIP_PAGE) {
3860 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
3861 buf_LRU_insert_zip_clean(b);
3862-@@ -1534,9 +1668,12 @@
3863+@@ -1543,12 +1682,13 @@
3864+ /* Prevent buf_page_get_gen() from
3865+ decompressing the block while we release
3866 buf_pool->mutex and block_mutex. */
3867- b->buf_fix_count++;
3868- b->io_fix = BUF_IO_READ;
3869-+ mutex_exit(&buf_pool->zip_mutex);
3870+- mutex_enter(&buf_pool->zip_mutex);
3871+ buf_page_set_sticky(b);
3872+ mutex_exit(&buf_pool->zip_mutex);
3873 }
3874
3875 - buf_pool_mutex_exit(buf_pool);
3876@@ -2802,7 +2813,7 @@
3877 mutex_exit(block_mutex);
3878
3879 /* Remove possible adaptive hash index on the page.
3880-@@ -1568,7 +1705,9 @@
3881+@@ -1580,7 +1720,9 @@
3882 : BUF_NO_CHECKSUM_MAGIC);
3883 }
3884
3885@@ -2813,7 +2824,7 @@
3886 mutex_enter(block_mutex);
3887
3888 if (b) {
3889-@@ -1578,13 +1717,17 @@
3890+@@ -1589,13 +1731,17 @@
3891 mutex_exit(&buf_pool->zip_mutex);
3892 }
3893
3894@@ -2832,7 +2843,7 @@
3895 }
3896
3897 return(TRUE);
3898-@@ -1596,13 +1739,14 @@
3899+@@ -1607,13 +1753,14 @@
3900 void
3901 buf_LRU_block_free_non_file_page(
3902 /*=============================*/
3903@@ -2849,7 +2860,7 @@
3904 ut_ad(mutex_own(&block->mutex));
3905
3906 switch (buf_block_get_state(block)) {
3907-@@ -1636,18 +1780,21 @@
3908+@@ -1647,18 +1794,21 @@
3909 if (data) {
3910 block->page.zip.data = NULL;
3911 mutex_exit(&block->mutex);
3912@@ -2875,7 +2886,7 @@
3913
3914 UNIV_MEM_ASSERT_AND_FREE(block->frame, UNIV_PAGE_SIZE);
3915 }
3916-@@ -1677,7 +1824,11 @@
3917+@@ -1688,7 +1838,11 @@
3918 buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
3919
3920 ut_ad(bpage);
3921@@ -2888,7 +2899,7 @@
3922 ut_ad(mutex_own(buf_page_get_mutex(bpage)));
3923
3924 ut_a(buf_page_get_io_fix(bpage) == BUF_IO_NONE);
3925-@@ -1785,7 +1936,9 @@
3926+@@ -1796,7 +1950,9 @@
3927
3928 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
3929 mutex_exit(buf_page_get_mutex(bpage));
3930@@ -2899,7 +2910,7 @@
3931 buf_print();
3932 buf_LRU_print();
3933 buf_validate();
3934-@@ -1807,17 +1960,17 @@
3935+@@ -1818,17 +1974,17 @@
3936 ut_a(buf_page_get_zip_size(bpage));
3937
3938 #if defined UNIV_DEBUG || defined UNIV_BUF_DEBUG
3939@@ -2921,7 +2932,7 @@
3940 buf_page_free_descriptor(bpage);
3941 return(BUF_BLOCK_ZIP_FREE);
3942
3943-@@ -1839,13 +1992,13 @@
3944+@@ -1850,13 +2006,13 @@
3945 ut_ad(!bpage->in_flush_list);
3946 ut_ad(!bpage->in_LRU_list);
3947 mutex_exit(&((buf_block_t*) bpage)->mutex);
3948@@ -2938,7 +2949,7 @@
3949 mutex_enter(&((buf_block_t*) bpage)->mutex);
3950 page_zip_set_size(&bpage->zip, 0);
3951 }
3952-@@ -1871,18 +2024,19 @@
3953+@@ -1882,18 +2038,19 @@
3954 void
3955 buf_LRU_block_free_hashed_page(
3956 /*===========================*/
3957@@ -2962,7 +2973,7 @@
3958 }
3959
3960 /******************************************************************//**
3961-@@ -1897,7 +2051,7 @@
3962+@@ -1908,7 +2065,7 @@
3963 {
3964 if (buf_LRU_block_remove_hashed_page(bpage, TRUE)
3965 != BUF_BLOCK_ZIP_FREE) {
3966@@ -2971,7 +2982,7 @@
3967 }
3968 }
3969
3970-@@ -1925,7 +2079,8 @@
3971+@@ -1936,7 +2093,8 @@
3972 }
3973
3974 if (adjust) {
3975@@ -2981,7 +2992,7 @@
3976
3977 if (ratio != buf_pool->LRU_old_ratio) {
3978 buf_pool->LRU_old_ratio = ratio;
3979-@@ -1937,7 +2092,8 @@
3980+@@ -1948,7 +2106,8 @@
3981 }
3982 }
3983
3984@@ -2991,7 +3002,7 @@
3985 } else {
3986 buf_pool->LRU_old_ratio = ratio;
3987 }
3988-@@ -2042,7 +2198,8 @@
3989+@@ -2053,7 +2212,8 @@
3990 ulint new_len;
3991
3992 ut_ad(buf_pool);
3993@@ -3001,7 +3012,7 @@
3994
3995 if (UT_LIST_GET_LEN(buf_pool->LRU) >= BUF_LRU_OLD_MIN_LEN) {
3996
3997-@@ -2103,16 +2260,22 @@
3998+@@ -2114,16 +2274,22 @@
3999
4000 ut_a(buf_pool->LRU_old_len == old_len);
4001
4002@@ -3026,7 +3037,7 @@
4003 UT_LIST_VALIDATE(unzip_LRU, buf_block_t, buf_pool->unzip_LRU,
4004 ut_ad(ut_list_node_313->in_unzip_LRU_list
4005 && ut_list_node_313->page.in_LRU_list));
4006-@@ -2126,7 +2289,8 @@
4007+@@ -2137,7 +2303,8 @@
4008 ut_a(buf_page_belongs_to_unzip_LRU(&block->page));
4009 }
4010
4011@@ -3036,7 +3047,7 @@
4012 }
4013
4014 /**********************************************************************//**
4015-@@ -2162,7 +2326,8 @@
4016+@@ -2173,7 +2340,8 @@
4017 const buf_page_t* bpage;
4018
4019 ut_ad(buf_pool);
4020@@ -3046,7 +3057,7 @@
4021
4022 bpage = UT_LIST_GET_FIRST(buf_pool->LRU);
4023
4024-@@ -2219,7 +2384,8 @@
4025+@@ -2230,7 +2398,8 @@
4026 bpage = UT_LIST_GET_NEXT(LRU, bpage);
4027 }
4028
4029@@ -3312,7 +3323,7 @@
4030 /*********************************************************************//**
4031 Get the flush type of a page.
4032 @return flush type */
4033-@@ -1332,7 +1355,7 @@
4034+@@ -1352,7 +1375,7 @@
4035 All these are protected by buf_pool->mutex. */
4036 /* @{ */
4037
4038@@ -3321,7 +3332,7 @@
4039 /*!< based on state, this is a
4040 list node, protected either by
4041 buf_pool->mutex or by
4042-@@ -1360,6 +1383,10 @@
4043+@@ -1380,6 +1403,10 @@
4044 BUF_BLOCK_REMOVE_HASH or
4045 BUF_BLOCK_READY_IN_USE. */
4046
4047@@ -3332,7 +3343,7 @@
4048 #ifdef UNIV_DEBUG
4049 ibool in_flush_list; /*!< TRUE if in buf_pool->flush_list;
4050 when buf_pool->flush_list_mutex is
4051-@@ -1452,11 +1479,11 @@
4052+@@ -1472,11 +1499,11 @@
4053 a block is in the unzip_LRU list
4054 if page.state == BUF_BLOCK_FILE_PAGE
4055 and page.zip.data != NULL */
4056@@ -3346,7 +3357,7 @@
4057 mutex_t mutex; /*!< mutex protecting this block:
4058 state (also protected by the buffer
4059 pool mutex), io_fix, buf_fix_count,
4060-@@ -1636,6 +1663,11 @@
4061+@@ -1656,6 +1683,11 @@
4062 pool instance, protects compressed
4063 only pages (of type buf_page_t, not
4064 buf_block_t */
4065@@ -3358,7 +3369,7 @@
4066 ulint instance_no; /*!< Array index of this buffer
4067 pool instance */
4068 ulint old_pool_size; /*!< Old pool size in bytes */
4069-@@ -1789,8 +1821,8 @@
4070+@@ -1809,8 +1841,8 @@
4071 /** Test if a buffer pool mutex is owned. */
4072 #define buf_pool_mutex_own(b) mutex_own(&b->mutex)
4073 /** Acquire a buffer pool mutex. */
4074@@ -3426,7 +3437,7 @@
4075 /*********************************************************************//**
4076 Get the flush type of a page.
4077 @return flush type */
4078-@@ -443,8 +472,8 @@
4079+@@ -444,8 +473,8 @@
4080 enum buf_io_fix io_fix) /*!< in: io_fix state */
4081 {
4082 #ifdef UNIV_DEBUG
4083@@ -3437,7 +3448,25 @@
4084 #endif
4085 ut_ad(mutex_own(buf_page_get_mutex(bpage)));
4086
4087-@@ -474,14 +503,14 @@
4088+@@ -482,7 +511,7 @@
4089+ {
4090+ #ifdef UNIV_DEBUG
4091+ buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
4092+- ut_ad(buf_pool_mutex_own(buf_pool));
4093++ ut_ad(mutex_own(&buf_pool->LRU_list_mutex));
4094+ #endif
4095+ ut_ad(mutex_own(buf_page_get_mutex(bpage)));
4096+ ut_ad(buf_page_get_io_fix(bpage) == BUF_IO_NONE);
4097+@@ -500,7 +529,7 @@
4098+ {
4099+ #ifdef UNIV_DEBUG
4100+ buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
4101+- ut_ad(buf_pool_mutex_own(buf_pool));
4102++ ut_ad(mutex_own(&buf_pool->LRU_list_mutex));
4103+ #endif
4104+ ut_ad(mutex_own(buf_page_get_mutex(bpage)));
4105+ ut_ad(buf_page_get_io_fix(bpage) == BUF_IO_PIN);
4106+@@ -518,14 +547,14 @@
4107 const buf_page_t* bpage) /*!< control block being relocated */
4108 {
4109 #ifdef UNIV_DEBUG
4110@@ -3456,7 +3485,7 @@
4111 && bpage->buf_fix_count == 0);
4112 }
4113
4114-@@ -495,8 +524,8 @@
4115+@@ -539,8 +568,8 @@
4116 const buf_page_t* bpage) /*!< in: control block */
4117 {
4118 #ifdef UNIV_DEBUG
4119@@ -3467,7 +3496,7 @@
4120 #endif
4121 ut_ad(buf_page_in_file(bpage));
4122
4123-@@ -516,7 +545,8 @@
4124+@@ -560,7 +589,8 @@
4125 buf_pool_t* buf_pool = buf_pool_from_bpage(bpage);
4126 #endif /* UNIV_DEBUG */
4127 ut_a(buf_page_in_file(bpage));
4128@@ -3477,7 +3506,7 @@
4129 ut_ad(bpage->in_LRU_list);
4130
4131 #ifdef UNIV_LRU_DEBUG
4132-@@ -563,9 +593,10 @@
4133+@@ -607,9 +637,10 @@
4134 ulint time_ms) /*!< in: ut_time_ms() */
4135 {
4136 #ifdef UNIV_DEBUG
4137@@ -3490,7 +3519,7 @@
4138 ut_a(buf_page_in_file(bpage));
4139
4140 if (!bpage->access_time) {
4141-@@ -808,19 +839,19 @@
4142+@@ -852,19 +883,19 @@
4143 /*===========*/
4144 buf_block_t* block) /*!< in, own: block to be freed */
4145 {
4146@@ -3514,7 +3543,7 @@
4147 }
4148 #endif /* !UNIV_HOTBACKUP */
4149
4150-@@ -868,17 +899,17 @@
4151+@@ -912,17 +943,17 @@
4152 page frame */
4153 {
4154 ib_uint64_t lsn;
4155@@ -3537,7 +3566,7 @@
4156
4157 return(lsn);
4158 }
4159-@@ -896,7 +927,7 @@
4160+@@ -940,7 +971,7 @@
4161 #ifdef UNIV_SYNC_DEBUG
4162 buf_pool_t* buf_pool = buf_pool_from_bpage((buf_page_t*)block);
4163
4164@@ -3546,7 +3575,7 @@
4165 && (block->page.buf_fix_count == 0))
4166 || rw_lock_own(&(block->lock), RW_LOCK_EXCLUSIVE));
4167 #endif /* UNIV_SYNC_DEBUG */
4168-@@ -1026,7 +1057,11 @@
4169+@@ -1070,7 +1101,11 @@
4170 buf_page_t* bpage;
4171
4172 ut_ad(buf_pool);
4173@@ -3559,7 +3588,7 @@
4174 ut_ad(fold == buf_page_address_fold(space, offset));
4175
4176 /* Look for the page in the hash table */
4177-@@ -1111,11 +1146,13 @@
4178+@@ -1155,11 +1190,13 @@
4179 const buf_page_t* bpage;
4180 buf_pool_t* buf_pool = buf_pool_get(space, offset);
4181
4182@@ -3575,7 +3604,7 @@
4183
4184 return(bpage != NULL);
4185 }
4186-@@ -1243,4 +1280,38 @@
4187+@@ -1287,4 +1324,38 @@
4188 buf_pool_mutex_exit(buf_pool);
4189 }
4190 }
4191
4192=== modified file 'patches/innodb_stats.patch'
4193--- patches/innodb_stats.patch 2011-12-27 15:32:16 +0000
4194+++ patches/innodb_stats.patch 2012-02-06 05:02:26 +0000
4195@@ -278,10 +278,16 @@
4196 }
4197
4198 if (node->state == INDEX_CREATE_INDEX_TREE) {
4199-@@ -1183,6 +1322,66 @@
4200- }
4201+@@ -1177,6 +1316,66 @@
4202+ return(NULL);
4203+ }
4204
4205- /****************************************************************//**
4206++ thr->run_node = que_node_get_parent(node);
4207++
4208++ return(thr);
4209++}
4210++
4211++/****************************************************************//**
4212 +*/
4213 +UNIV_INTERN
4214 +que_thr_t*
4215@@ -336,15 +342,9 @@
4216 + return(NULL);
4217 + }
4218 +
4219-+ thr->run_node = que_node_get_parent(node);
4220-+
4221-+ return(thr);
4222-+}
4223-+
4224-+/****************************************************************//**
4225- Creates the foreign key constraints system tables inside InnoDB
4226- at database creation or database start if they are not found or are
4227- not of the right form.
4228+ thr->run_node = que_node_get_parent(node);
4229+
4230+ return(thr);
4231 --- a/storage/innobase/dict/dict0dict.c
4232 +++ b/storage/innobase/dict/dict0dict.c
4233 @@ -755,7 +755,7 @@
4234@@ -356,7 +356,7 @@
4235 }
4236
4237 return(table);
4238-@@ -4344,6 +4344,295 @@
4239+@@ -4354,6 +4354,295 @@
4240 }
4241
4242 /*********************************************************************//**
4243@@ -652,7 +652,7 @@
4244 Calculates new estimates for table and index statistics. The statistics
4245 are used in query optimization. */
4246 UNIV_INTERN
4247-@@ -4351,10 +4640,11 @@
4248+@@ -4361,10 +4650,11 @@
4249 dict_update_statistics(
4250 /*===================*/
4251 dict_table_t* table, /*!< in/out: table */
4252@@ -665,7 +665,7 @@
4253 {
4254 dict_index_t* index;
4255 ulint sum_of_index_sizes = 0;
4256-@@ -4371,6 +4661,27 @@
4257+@@ -4381,6 +4671,27 @@
4258 return;
4259 }
4260
4261@@ -693,7 +693,7 @@
4262 /* Find out the sizes of the indexes and how many different values
4263 for the key they approximately have */
4264
4265-@@ -4435,6 +4746,11 @@
4266+@@ -4445,6 +4756,11 @@
4267 index = dict_table_get_next_index(index);
4268 } while (index);
4269
4270@@ -705,7 +705,7 @@
4271 index = dict_table_get_first_index(table);
4272
4273 table->stat_n_rows = index->stat_n_diff_key_vals[
4274-@@ -4452,6 +4768,78 @@
4275+@@ -4462,6 +4778,78 @@
4276 dict_table_stats_unlock(table, RW_X_LATCH);
4277 }
4278
4279@@ -784,7 +784,7 @@
4280 /**********************************************************************//**
4281 Prints info of a foreign key constraint. */
4282 static
4283-@@ -4529,7 +4917,8 @@
4284+@@ -4539,7 +4927,8 @@
4285
4286 ut_ad(mutex_own(&(dict_sys->mutex)));
4287
4288@@ -961,7 +961,7 @@
4289 break;
4290 case DB_RECORD_NOT_FOUND:
4291 error = HA_ERR_KEY_NOT_FOUND;
4292-@@ -6197,6 +6217,11 @@
4293+@@ -6196,6 +6216,11 @@
4294 case DB_SUCCESS:
4295 error = 0;
4296 table->status = 0;
4297@@ -973,7 +973,7 @@
4298 break;
4299 case DB_RECORD_NOT_FOUND:
4300 error = HA_ERR_END_OF_FILE;
4301-@@ -8150,11 +8175,35 @@
4302+@@ -8149,11 +8174,35 @@
4303 /* In sql_show we call with this flag: update
4304 then statistics so that they are up-to-date */
4305
4306@@ -1010,7 +1010,7 @@
4307
4308 prebuilt->trx->op_info = "returning various info to MySQL";
4309 }
4310-@@ -8239,7 +8288,7 @@
4311+@@ -8238,7 +8287,7 @@
4312 are asked by MySQL to avoid locking. Another reason to
4313 avoid the call is that it uses quite a lot of CPU.
4314 See Bug#38185. */
4315@@ -1019,7 +1019,7 @@
4316 || !(flag & HA_STATUS_VARIABLE_EXTRA)) {
4317 /* We do not update delete_length if no
4318 locking is requested so the "old" value can
4319-@@ -11512,6 +11561,26 @@
4320+@@ -11511,6 +11560,26 @@
4321 "The number of index pages to sample when calculating statistics (default 8)",
4322 NULL, NULL, 8, 1, ~0ULL, 0);
4323
4324@@ -1046,7 +1046,7 @@
4325 static MYSQL_SYSVAR_BOOL(adaptive_hash_index, btr_search_enabled,
4326 PLUGIN_VAR_OPCMDARG,
4327 "Enable InnoDB adaptive hash index (enabled by default). "
4328-@@ -11844,6 +11913,9 @@
4329+@@ -11883,6 +11952,9 @@
4330 MYSQL_SYSVAR(recovery_update_relay_log),
4331 MYSQL_SYSVAR(rollback_on_timeout),
4332 MYSQL_SYSVAR(stats_on_metadata),
4333@@ -1056,7 +1056,7 @@
4334 MYSQL_SYSVAR(stats_sample_pages),
4335 MYSQL_SYSVAR(adaptive_hash_index),
4336 MYSQL_SYSVAR(stats_method),
4337-@@ -11915,7 +11987,10 @@
4338+@@ -11957,7 +12029,10 @@
4339 i_s_innodb_sys_columns,
4340 i_s_innodb_sys_fields,
4341 i_s_innodb_sys_foreign,
4342
4343=== modified file 'patches/innodb_thread_concurrency_timer_based.patch'
4344--- patches/innodb_thread_concurrency_timer_based.patch 2011-12-27 15:32:16 +0000
4345+++ patches/innodb_thread_concurrency_timer_based.patch 2012-02-06 05:02:26 +0000
4346@@ -25,7 +25,7 @@
4347 #ifdef UNIV_LOG_ARCHIVE
4348 srv_log_archive_on = (ulint) innobase_log_archive;
4349 #endif /* UNIV_LOG_ARCHIVE */
4350-@@ -11602,6 +11606,12 @@
4351+@@ -11601,6 +11605,12 @@
4352 "Maximum delay between polling for a spin lock (6 by default)",
4353 NULL, NULL, 6L, 0L, ~0L, 0);
4354
4355@@ -38,7 +38,7 @@
4356 static MYSQL_SYSVAR_ULONG(thread_concurrency, srv_thread_concurrency,
4357 PLUGIN_VAR_RQCMDARG,
4358 "Helps in performance tuning in heavily concurrent environments. Sets the maximum number of threads allowed inside InnoDB. Value 0 will disable the thread throttling.",
4359-@@ -11820,6 +11830,7 @@
4360+@@ -11859,6 +11869,7 @@
4361 MYSQL_SYSVAR(spin_wait_delay),
4362 MYSQL_SYSVAR(table_locks),
4363 MYSQL_SYSVAR(thread_concurrency),
4364@@ -67,7 +67,7 @@
4365 UNIV_INTERN ulong srv_thread_concurrency = 0;
4366
4367 /* this mutex protects srv_conc data structures */
4368-@@ -1145,6 +1146,75 @@
4369+@@ -1148,6 +1149,75 @@
4370 /*********************************************************************//**
4371 Puts an OS thread to wait if there are too many concurrent threads
4372 (>= srv_thread_concurrency) inside InnoDB. The threads wait in a FIFO queue. */
4373@@ -143,7 +143,7 @@
4374 UNIV_INTERN
4375 void
4376 srv_conc_enter_innodb(
4377-@@ -1179,6 +1249,13 @@
4378+@@ -1182,6 +1252,13 @@
4379 return;
4380 }
4381
4382@@ -157,7 +157,7 @@
4383 os_fast_mutex_lock(&srv_conc_mutex);
4384 retry:
4385 if (trx->declared_to_be_inside_innodb) {
4386-@@ -1332,6 +1409,14 @@
4387+@@ -1335,6 +1412,14 @@
4388 }
4389
4390 ut_ad(srv_conc_n_threads >= 0);
4391@@ -172,7 +172,7 @@
4392
4393 os_fast_mutex_lock(&srv_conc_mutex);
4394
4395-@@ -1365,6 +1450,13 @@
4396+@@ -1368,6 +1453,13 @@
4397 return;
4398 }
4399
4400
4401=== modified file 'patches/log_connection_error.patch'
4402--- patches/log_connection_error.patch 2011-09-07 14:00:24 +0000
4403+++ patches/log_connection_error.patch 2012-02-06 05:02:26 +0000
4404@@ -16,7 +16,7 @@
4405 +Comment=
4406 --- a/sql/mysqld.cc
4407 +++ b/sql/mysqld.cc
4408-@@ -5098,6 +5098,10 @@
4409+@@ -4959,6 +4959,10 @@
4410
4411 DBUG_PRINT("error",("Too many connections"));
4412 close_connection(thd, ER_CON_COUNT_ERROR);
4413@@ -27,7 +27,7 @@
4414 delete thd;
4415 DBUG_VOID_RETURN;
4416 }
4417-@@ -5481,6 +5485,10 @@
4418+@@ -5342,6 +5346,10 @@
4419 if (!(thd->net.vio= vio_new_win32pipe(hConnectedPipe)) ||
4420 my_net_init(&thd->net, thd->net.vio))
4421 {
4422@@ -38,7 +38,7 @@
4423 close_connection(thd, ER_OUT_OF_RESOURCES);
4424 delete thd;
4425 continue;
4426-@@ -5676,6 +5684,10 @@
4427+@@ -5537,6 +5545,10 @@
4428 event_conn_closed)) ||
4429 my_net_init(&thd->net, thd->net.vio))
4430 {
4431
4432=== modified file 'patches/log_warnings_suppress.patch'
4433--- patches/log_warnings_suppress.patch 2011-12-27 15:32:16 +0000
4434+++ patches/log_warnings_suppress.patch 2012-02-06 05:02:26 +0000
4435@@ -19,7 +19,7 @@
4436 +2011-02-21 rename patch log_warning_silence.patch to log_warnings_suppress.patch. Also rename variable "log_warning_silence" to "log_warning_suppress".
4437 --- a/sql/mysqld.cc
4438 +++ b/sql/mysqld.cc
4439-@@ -628,6 +628,8 @@
4440+@@ -632,6 +632,8 @@
4441 SHOW_COMP_OPTION have_crypt, have_compress;
4442 SHOW_COMP_OPTION have_profiling;
4443
4444@@ -30,7 +30,7 @@
4445 pthread_key(MEM_ROOT**,THR_MALLOC);
4446 --- a/sql/mysqld.h
4447 +++ b/sql/mysqld.h
4448-@@ -228,6 +228,8 @@
4449+@@ -229,6 +229,8 @@
4450 extern TYPELIB thread_handling_typelib;
4451 extern my_decimal decimal_zero;
4452
4453@@ -41,7 +41,7 @@
4454 using my_pthread_setspecific_ptr()/my_thread_getspecific_ptr().
4455 --- a/sql/sql_class.cc
4456 +++ b/sql/sql_class.cc
4457-@@ -5024,7 +5024,7 @@
4458+@@ -5029,7 +5029,7 @@
4459 ER_BINLOG_UNSAFE_STATEMENT,
4460 ER(ER_BINLOG_UNSAFE_STATEMENT),
4461 ER(LEX::binlog_stmt_unsafe_errcode[unsafe_type]));
4462@@ -62,7 +62,7 @@
4463 SLAVE_EXEC_MODE_LAST_BIT};
4464 --- a/sql/sys_vars.cc
4465 +++ b/sql/sys_vars.cc
4466-@@ -1499,6 +1499,15 @@
4467+@@ -1572,6 +1572,15 @@
4468 READ_ONLY GLOBAL_VAR(mysqld_port), CMD_LINE(REQUIRED_ARG, 'P'),
4469 VALID_RANGE(0, UINT_MAX32), DEFAULT(0), BLOCK_SIZE(1));
4470
4471
4472=== modified file 'patches/mysql-test.diff'
4473--- patches/mysql-test.diff 2012-01-10 11:28:15 +0000
4474+++ patches/mysql-test.diff 2012-02-06 05:02:26 +0000
4475@@ -1823,7 +1823,3 @@
4476 @@ -0,0 +1,2 @@
4477 +--source include/have_nodebug.inc
4478 +--source include/percona_server_variables.inc
4479---- a/mysql-test/suite/innodb/t/innodb_cmp_drop_table-master.opt
4480-+++ /dev/null
4481-@@ -1 +0,0 @@
4482----innodb-buffer-pool-size=8M
4483
4484=== modified file 'patches/optimizer_fix.patch'
4485--- patches/optimizer_fix.patch 2011-12-27 15:32:16 +0000
4486+++ patches/optimizer_fix.patch 2012-02-06 05:02:26 +0000
4487@@ -18,7 +18,7 @@
4488 +Ported to 5.1.42
4489 --- a/sql/mysqld.cc
4490 +++ b/sql/mysqld.cc
4491-@@ -430,6 +430,7 @@
4492+@@ -434,6 +434,7 @@
4493 MYSQL_PLUGIN_IMPORT uint opt_debug_sync_timeout= 0;
4494 #endif /* defined(ENABLED_DEBUG_SYNC) */
4495 my_bool opt_old_style_user_limits= 0, trust_function_creators= 0;
4496@@ -138,7 +138,7 @@
4497 DBUG_RETURN(HA_POS_ERROR); /* This shouldn't happend */
4498 --- a/sql/sys_vars.cc
4499 +++ b/sql/sys_vars.cc
4500-@@ -2186,6 +2186,12 @@
4501+@@ -2259,6 +2259,12 @@
4502 VALID_RANGE(1, IF_WIN(INT_MAX32/1000, LONG_TIMEOUT)),
4503 DEFAULT(NET_WAIT_TIMEOUT), BLOCK_SIZE(1));
4504
4505
4506=== modified file 'patches/processlist_row_stats.patch'
4507--- patches/processlist_row_stats.patch 2011-12-27 15:32:16 +0000
4508+++ patches/processlist_row_stats.patch 2012-02-06 05:02:26 +0000
4509@@ -7,7 +7,7 @@
4510 # should be done or reviewed by the maintainer!
4511 --- a/sql/sql_class.cc
4512 +++ b/sql/sql_class.cc
4513-@@ -2419,6 +2419,7 @@
4514+@@ -2424,6 +2424,7 @@
4515
4516 thd->sent_row_count++;
4517 thd->sent_row_count_2++;
4518
4519=== modified file 'patches/query_cache_enhance.patch'
4520--- patches/query_cache_enhance.patch 2011-12-27 15:32:16 +0000
4521+++ patches/query_cache_enhance.patch 2012-02-06 05:02:26 +0000
4522@@ -25,7 +25,7 @@
4523 +2010-11 - Ported to 5.5
4524 --- a/sql/mysqld.cc
4525 +++ b/sql/mysqld.cc
4526-@@ -904,6 +904,7 @@
4527+@@ -909,6 +909,7 @@
4528 #endif
4529 #ifdef HAVE_QUERY_CACHE
4530 ulong query_cache_min_res_unit= QUERY_CACHE_MIN_RESULT_DATA_SIZE;
4531@@ -719,7 +719,7 @@
4532 NET net; // client connection descriptor
4533 --- a/sql/sys_vars.cc
4534 +++ b/sql/sys_vars.cc
4535-@@ -1815,6 +1815,11 @@
4536+@@ -1888,6 +1888,11 @@
4537 NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
4538 ON_UPDATE(fix_query_cache_size));
4539
4540
4541=== modified file 'patches/response_time_distribution.patch'
4542--- patches/response_time_distribution.patch 2011-12-27 15:32:16 +0000
4543+++ patches/response_time_distribution.patch 2012-02-06 05:02:26 +0000
4544@@ -2886,7 +2886,7 @@
4545 +2010-09-15 add column 'total'
4546 --- a/sql/CMakeLists.txt
4547 +++ b/sql/CMakeLists.txt
4548-@@ -51,7 +51,7 @@
4549+@@ -52,7 +52,7 @@
4550 message.h mf_iocache.cc my_decimal.cc ../sql-common/my_time.c
4551 mysqld.cc net_serv.cc keycaches.cc
4552 ../sql-common/client_plugin.c
4553@@ -2895,7 +2895,7 @@
4554 ../sql-common/pack.c parse_file.cc password.c procedure.cc
4555 protocol.cc records.cc repl_failsafe.cc rpl_filter.cc set_var.cc
4556 slave.cc sp.cc sp_cache.cc sp_head.cc sp_pcontext.cc
4557-@@ -59,7 +59,7 @@
4558+@@ -60,7 +60,7 @@
4559 sql_cache.cc sql_class.cc sql_client.cc sql_crypt.cc sql_crypt.h
4560 sql_cursor.cc sql_db.cc sql_delete.cc sql_derived.cc sql_do.cc
4561 sql_error.cc sql_handler.cc sql_help.cc sql_insert.cc sql_lex.cc
4562@@ -2935,7 +2935,7 @@
4563 #ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
4564 #include "../storage/perfschema/pfs_server.h"
4565 #endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
4566-@@ -611,7 +613,7 @@
4567+@@ -615,7 +617,7 @@
4568 MY_LOCALE *my_default_lc_messages;
4569 MY_LOCALE *my_default_lc_time_names;
4570
4571@@ -2944,7 +2944,7 @@
4572 SHOW_COMP_OPTION have_geometry, have_rtree_keys;
4573 SHOW_COMP_OPTION have_crypt, have_compress;
4574 SHOW_COMP_OPTION have_profiling;
4575-@@ -912,6 +914,10 @@
4576+@@ -917,6 +919,10 @@
4577 my_bool opt_enable_shared_memory;
4578 HANDLE smem_event_connect_request= 0;
4579 #endif
4580@@ -2955,7 +2955,7 @@
4581
4582 my_bool opt_use_ssl = 0;
4583 char *opt_ssl_ca= NULL, *opt_ssl_capath= NULL, *opt_ssl_cert= NULL,
4584-@@ -1483,6 +1489,9 @@
4585+@@ -1488,6 +1494,9 @@
4586 my_free(opt_bin_logname);
4587 bitmap_free(&temp_pool);
4588 free_max_user_conn();
4589@@ -2965,7 +2965,7 @@
4590 #ifdef HAVE_REPLICATION
4591 end_slave_list();
4592 #endif
4593-@@ -4010,6 +4019,9 @@
4594+@@ -3860,6 +3869,9 @@
4595 if (!DEFAULT_ERRMSGS[0][0])
4596 unireg_abort(1);
4597
4598@@ -2975,7 +2975,7 @@
4599 /* We have to initialize the storage engines before CSV logging */
4600 if (ha_init())
4601 {
4602-@@ -6905,6 +6917,11 @@
4603+@@ -6773,6 +6785,11 @@
4604 #else
4605 have_query_cache=SHOW_OPTION_NO;
4606 #endif
4607@@ -3374,7 +3374,7 @@
4608 +#endif // QUERY_RESPONSE_TIME_H
4609 --- a/sql/set_var.h
4610 +++ b/sql/set_var.h
4611-@@ -293,6 +293,7 @@
4612+@@ -294,6 +294,7 @@
4613
4614 extern SHOW_COMP_OPTION have_ssl, have_symlink, have_dlopen;
4615 extern SHOW_COMP_OPTION have_query_cache;
4616@@ -3486,7 +3486,7 @@
4617 %token QUICK
4618 %token RANGE_SYM /* SQL-2003-R */
4619 %token READS_SYM /* SQL-2003-R */
4620-@@ -11100,6 +11101,15 @@
4621+@@ -11105,6 +11106,15 @@
4622 {
4623 Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
4624 }
4625@@ -3502,7 +3502,7 @@
4626 | CREATE PROCEDURE_SYM sp_name
4627 {
4628 LEX *lex= Lex;
4629-@@ -11339,6 +11349,12 @@
4630+@@ -11344,6 +11354,12 @@
4631 Lex->type|= REFRESH_SLAVE;
4632 Lex->reset_slave_info.all= false;
4633 }
4634@@ -3515,7 +3515,7 @@
4635 | MASTER_SYM
4636 { Lex->type|= REFRESH_MASTER; }
4637 | DES_KEY_FILE
4638-@@ -12646,6 +12662,7 @@
4639+@@ -12651,6 +12667,7 @@
4640 | PROXY_SYM {}
4641 | QUARTER_SYM {}
4642 | QUERY_SYM {}
4643@@ -3525,15 +3525,15 @@
4644 | REBUILD_SYM {}
4645 --- a/sql/sys_vars.cc
4646 +++ b/sql/sys_vars.cc
4647-@@ -49,6 +49,7 @@
4648- #include "../storage/perfschema/pfs_server.h"
4649- #endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
4650+@@ -51,6 +51,7 @@
4651+
4652+ TYPELIB bool_typelib={ array_elements(bool_values)-1, "", bool_values, 0 };
4653
4654 +#include "query_response_time.h"
4655 /*
4656 This forward declaration is needed because including sql_base.h
4657 causes further includes. [TODO] Eliminate this forward declaration
4658-@@ -1866,6 +1867,26 @@
4659+@@ -1939,6 +1940,26 @@
4660 DEFAULT(FALSE));
4661 #endif /* HAVE_QUERY_CACHE */
4662
4663
4664=== modified file 'patches/show_slave_status_nolock.patch'
4665--- patches/show_slave_status_nolock.patch 2011-12-13 13:49:04 +0000
4666+++ patches/show_slave_status_nolock.patch 2012-02-06 05:02:26 +0000
4667@@ -26,7 +26,7 @@
4668 { "NVARCHAR", SYM(NVARCHAR_SYM)},
4669 --- a/sql/mysqld.cc
4670 +++ b/sql/mysqld.cc
4671-@@ -3121,6 +3121,7 @@
4672+@@ -2971,6 +2971,7 @@
4673 {"show_relaylog_events", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_RELAYLOG_EVENTS]), SHOW_LONG_STATUS},
4674 {"show_slave_hosts", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_HOSTS]), SHOW_LONG_STATUS},
4675 {"show_slave_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_SLAVE_STAT]), SHOW_LONG_STATUS},
4676@@ -105,7 +105,7 @@
4677 %token STDDEV_SAMP_SYM /* SQL-2003-N */
4678 %token STD_SYM
4679 %token STOP_SYM
4680-@@ -11106,6 +11107,11 @@
4681+@@ -11111,6 +11112,11 @@
4682 {
4683 Lex->sql_command = SQLCOM_SHOW_SLAVE_STAT;
4684 }
4685
4686=== modified file 'patches/show_temp.patch'
4687--- patches/show_temp.patch 2011-12-27 15:32:16 +0000
4688+++ patches/show_temp.patch 2012-02-06 05:02:26 +0000
4689@@ -25,7 +25,7 @@
4690 SCH_VARIABLES,
4691 --- a/sql/mysqld.cc
4692 +++ b/sql/mysqld.cc
4693-@@ -3101,6 +3101,7 @@
4694+@@ -2951,6 +2951,7 @@
4695 {"show_storage_engines", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_STORAGE_ENGINES]), SHOW_LONG_STATUS},
4696 {"show_table_status", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLE_STATUS]), SHOW_LONG_STATUS},
4697 {"show_tables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TABLES]), SHOW_LONG_STATUS},
4698@@ -33,7 +33,7 @@
4699 {"show_triggers", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_TRIGGERS]), SHOW_LONG_STATUS},
4700 {"show_variables", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_VARIABLES]), SHOW_LONG_STATUS},
4701 {"show_warnings", (char*) offsetof(STATUS_VAR, com_stat[(uint) SQLCOM_SHOW_WARNS]), SHOW_LONG_STATUS},
4702-@@ -7802,6 +7803,7 @@
4703+@@ -7670,6 +7671,7 @@
4704 PSI_mutex_key key_LOCK_des_key_file;
4705 #endif /* HAVE_OPENSSL */
4706
4707@@ -41,7 +41,7 @@
4708 PSI_mutex_key key_BINLOG_LOCK_index, key_BINLOG_LOCK_prep_xids,
4709 key_delayed_insert_mutex, key_hash_filo_lock, key_LOCK_active_mi,
4710 key_LOCK_connection_count, key_LOCK_crypt, key_LOCK_delayed_create,
4711-@@ -7855,6 +7857,7 @@
4712+@@ -7723,6 +7725,7 @@
4713 { &key_LOCK_system_variables_hash, "LOCK_system_variables_hash", PSI_FLAG_GLOBAL},
4714 { &key_LOCK_table_share, "LOCK_table_share", PSI_FLAG_GLOBAL},
4715 { &key_LOCK_thd_data, "THD::LOCK_thd_data", 0},
4716@@ -387,7 +387,7 @@
4717 OPEN_TRIGGER_ONLY|OPTIMIZE_I_S_TABLE},
4718 --- a/sql/sql_yacc.yy
4719 +++ b/sql/sql_yacc.yy
4720-@@ -10893,6 +10893,15 @@
4721+@@ -10898,6 +10898,15 @@
4722 if (prepare_schema_table(YYTHD, lex, 0, SCH_TABLE_NAMES))
4723 MYSQL_YYABORT;
4724 }
4725@@ -405,7 +405,7 @@
4726 LEX *lex= Lex;
4727 --- a/sql/mysqld.h
4728 +++ b/sql/mysqld.h
4729-@@ -233,6 +233,7 @@
4730+@@ -234,6 +234,7 @@
4731 extern PSI_mutex_key key_LOCK_des_key_file;
4732 #endif
4733
4734
4735=== modified file 'patches/slow_extended.patch'
4736--- patches/slow_extended.patch 2011-12-27 15:32:16 +0000
4737+++ patches/slow_extended.patch 2012-02-06 05:02:26 +0000
4738@@ -411,7 +411,7 @@
4739 ulonglong lock_utime, bool is_command,
4740 --- a/sql/mysqld.cc
4741 +++ b/sql/mysqld.cc
4742-@@ -421,6 +421,10 @@
4743+@@ -425,6 +425,10 @@
4744 char* opt_secure_file_priv;
4745 my_bool opt_log_slow_admin_statements= 0;
4746 my_bool opt_log_slow_slave_statements= 0;
4747@@ -422,7 +422,7 @@
4748 my_bool lower_case_file_system= 0;
4749 my_bool opt_large_pages= 0;
4750 my_bool opt_super_large_pages= 0;
4751-@@ -5892,14 +5896,10 @@
4752+@@ -5753,14 +5757,10 @@
4753 "Don't log extra information to update and slow-query logs.",
4754 &opt_short_log_format, &opt_short_log_format,
4755 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
4756@@ -439,7 +439,7 @@
4757 {"log-slow-queries", OPT_SLOW_QUERY_LOG,
4758 "Log slow queries to a table or log file. Defaults logging to table "
4759 "mysql.slow_log or hostname-slow.log if --log-output=file is used. "
4760-@@ -7288,6 +7288,10 @@
4761+@@ -7156,6 +7156,10 @@
4762
4763 C_MODE_END
4764
4765@@ -450,7 +450,7 @@
4766 /**
4767 Get server options from the command line,
4768 and perform related server initializations.
4769-@@ -7437,6 +7441,8 @@
4770+@@ -7305,6 +7309,8 @@
4771 global_system_variables.long_query_time= (ulonglong)
4772 (global_system_variables.long_query_time_double * 1e6);
4773
4774@@ -569,7 +569,7 @@
4775 }
4776
4777
4778-@@ -3682,8 +3717,6 @@
4779+@@ -3687,8 +3722,6 @@
4780 backup->in_sub_stmt= in_sub_stmt;
4781 backup->enable_slow_log= enable_slow_log;
4782 backup->limit_found_rows= limit_found_rows;
4783@@ -578,7 +578,7 @@
4784 backup->cuted_fields= cuted_fields;
4785 backup->client_capabilities= client_capabilities;
4786 backup->savepoints= transaction.savepoints;
4787-@@ -3691,6 +3724,7 @@
4788+@@ -3696,6 +3729,7 @@
4789 first_successful_insert_id_in_prev_stmt;
4790 backup->first_successful_insert_id_in_cur_stmt=
4791 first_successful_insert_id_in_cur_stmt;
4792@@ -586,7 +586,7 @@
4793
4794 if ((!lex->requires_prelocking() || is_update_query(lex->sql_command)) &&
4795 !is_current_stmt_binlog_format_row())
4796-@@ -3706,13 +3740,74 @@
4797+@@ -3711,13 +3745,74 @@
4798 /* Disable result sets */
4799 client_capabilities &= ~CLIENT_MULTI_RESULTS;
4800 in_sub_stmt|= new_state;
4801@@ -663,7 +663,7 @@
4802
4803 void THD::restore_sub_statement_state(Sub_statement_state *backup)
4804 {
4805-@@ -3753,7 +3848,6 @@
4806+@@ -3758,7 +3853,6 @@
4807 first_successful_insert_id_in_cur_stmt=
4808 backup->first_successful_insert_id_in_cur_stmt;
4809 limit_found_rows= backup->limit_found_rows;
4810@@ -671,7 +671,7 @@
4811 client_capabilities= backup->client_capabilities;
4812 /*
4813 If we've left sub-statement mode, reset the fatal error flag.
4814-@@ -3771,8 +3865,8 @@
4815+@@ -3776,8 +3870,8 @@
4816 The following is added to the old values as we are interested in the
4817 total complexity of the query
4818 */
4819@@ -1072,7 +1072,7 @@
4820 {
4821 --- a/sql/sys_vars.cc
4822 +++ b/sql/sys_vars.cc
4823-@@ -972,6 +972,29 @@
4824+@@ -1045,6 +1045,29 @@
4825 NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
4826 ON_UPDATE(update_cached_long_query_time));
4827
4828@@ -1102,7 +1102,7 @@
4829 static bool fix_low_prio_updates(sys_var *self, THD *thd, enum_var_type type)
4830 {
4831 if (type == OPT_SESSION)
4832-@@ -2904,6 +2927,123 @@
4833+@@ -2977,6 +3000,123 @@
4834 DEFAULT(FALSE), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
4835 ON_UPDATE(fix_log_state));
4836
4837
4838=== modified file 'patches/sql_no_fcache.patch'
4839--- patches/sql_no_fcache.patch 2011-12-13 13:49:04 +0000
4840+++ patches/sql_no_fcache.patch 2012-02-06 05:02:26 +0000
4841@@ -139,7 +139,7 @@
4842 { "SQL_TSI_SECOND", SYM(SECOND_SYM)},
4843 --- a/sql/mysqld.h
4844 +++ b/sql/mysqld.h
4845-@@ -194,6 +194,8 @@
4846+@@ -195,6 +195,8 @@
4847 extern char language[FN_REFLEN];
4848 extern "C" MYSQL_PLUGIN_IMPORT ulong server_id;
4849 extern ulong concurrency;
4850@@ -162,7 +162,7 @@
4851
4852 #include <thr_alarm.h>
4853 #include <ft_global.h>
4854-@@ -487,6 +492,11 @@
4855+@@ -491,6 +496,11 @@
4856 ulong binlog_cache_use= 0, binlog_cache_disk_use= 0;
4857 ulong binlog_stmt_cache_use= 0, binlog_stmt_cache_disk_use= 0;
4858 ulong max_connections, max_connect_errors;
4859@@ -174,7 +174,7 @@
4860 /*
4861 Maximum length of parameter value which can be set through
4862 mysql_send_long_data() call.
4863-@@ -4252,6 +4262,97 @@
4864+@@ -4102,6 +4112,97 @@
4865 #define decrement_handler_count()
4866 #endif /* defined(_WIN32) || defined(HAVE_SMEM) */
4867
4868@@ -272,7 +272,7 @@
4869
4870 #ifndef EMBEDDED_LIBRARY
4871 #ifndef DBUG_OFF
4872-@@ -4510,6 +4611,10 @@
4873+@@ -4363,6 +4464,10 @@
4874 test_lc_time_sz();
4875 #endif
4876
4877@@ -283,7 +283,7 @@
4878 /*
4879 We have enough space for fiddling with the argv, continue
4880 */
4881-@@ -4713,6 +4818,10 @@
4882+@@ -4574,6 +4679,10 @@
4883 }
4884 #endif
4885 clean_up(1);
4886@@ -294,7 +294,7 @@
4887 mysqld_exit(0);
4888 }
4889
4890-@@ -6553,6 +6662,7 @@
4891+@@ -6421,6 +6530,7 @@
4892 {"Delayed_errors", (char*) &delayed_insert_errors, SHOW_LONG},
4893 {"Delayed_insert_threads", (char*) &delayed_insert_threads, SHOW_LONG_NOFLUSH},
4894 {"Delayed_writes", (char*) &delayed_insert_writes, SHOW_LONG},
4895@@ -314,7 +314,7 @@
4896 lex->leaf_tables_insert= 0;
4897 --- a/sql/sql_lex.h
4898 +++ b/sql/sql_lex.h
4899-@@ -2345,6 +2345,7 @@
4900+@@ -2346,6 +2346,7 @@
4901
4902 enum enum_yes_no_unknown tx_chain, tx_release;
4903 bool safe_to_cache_query;
4904@@ -378,7 +378,7 @@
4905 %token SQL_SMALL_RESULT
4906 %token SQL_SYM /* SQL-2003-R */
4907 %token SQL_THREAD
4908-@@ -7357,6 +7358,10 @@
4909+@@ -7362,6 +7363,10 @@
4910 Lex->select_lex.sql_cache= SELECT_LEX::SQL_NO_CACHE;
4911 }
4912 }
4913
4914=== modified file 'patches/subunit.patch'
4915--- patches/subunit.patch 2012-01-10 07:01:07 +0000
4916+++ patches/subunit.patch 2012-02-06 05:02:26 +0000
4917@@ -189,7 +189,7 @@
4918
4919 require "lib/mtr_process.pl";
4920 require "lib/mtr_io.pl";
4921-@@ -291,6 +292,7 @@
4922+@@ -292,6 +293,7 @@
4923 my $opt_valgrind_path;
4924 my $valgrind_reports= 0;
4925 my $opt_callgrind;
4926@@ -197,7 +197,7 @@
4927 my %mysqld_logs;
4928 my $opt_debug_sync_timeout= 300; # Default timeout for WAIT_FOR actions.
4929
4930-@@ -630,6 +632,7 @@
4931+@@ -631,6 +633,7 @@
4932
4933 # Report test status
4934 mtr_report_test($result);
4935@@ -205,7 +205,7 @@
4936
4937 if ( $result->is_failed() ) {
4938
4939-@@ -1142,6 +1145,7 @@
4940+@@ -1144,6 +1147,7 @@
4941 'valgrind-option=s' => \@valgrind_args,
4942 'valgrind-path=s' => \$opt_valgrind_path,
4943 'callgrind' => \$opt_callgrind,
4944@@ -213,7 +213,7 @@
4945 'debug-sync-timeout=i' => \$opt_debug_sync_timeout,
4946
4947 # Directories
4948-@@ -1703,11 +1707,18 @@
4949+@@ -1705,11 +1709,18 @@
4950 unless @valgrind_args;
4951 }
4952
4953@@ -233,7 +233,7 @@
4954
4955 # Don't add --quiet; you will loose the summary reports.
4956
4957-@@ -5796,6 +5807,10 @@
4958+@@ -5831,6 +5842,10 @@
4959 mtr_add_arg($args, "--tool=callgrind");
4960 mtr_add_arg($args, "--base=$opt_vardir/log");
4961 }
4962
4963=== modified file 'patches/userstat.patch'
4964--- patches/userstat.patch 2011-12-27 15:32:16 +0000
4965+++ patches/userstat.patch 2012-02-06 05:02:26 +0000
4966@@ -363,7 +363,7 @@
4967 /*
4968 Log error with all enabled log event handlers
4969
4970-@@ -5026,6 +5033,8 @@
4971+@@ -5062,6 +5069,8 @@
4972 thd->first_successful_insert_id_in_prev_stmt_for_binlog);
4973 if (e.write(file))
4974 goto err;
4975@@ -372,7 +372,7 @@
4976 }
4977 if (thd->auto_inc_intervals_in_cur_stmt_for_binlog.nb_elements() > 0)
4978 {
4979-@@ -5037,12 +5046,16 @@
4980+@@ -5073,12 +5082,16 @@
4981 minimum());
4982 if (e.write(file))
4983 goto err;
4984@@ -389,7 +389,7 @@
4985 }
4986 if (thd->user_var_events.elements)
4987 {
4988-@@ -5065,6 +5078,8 @@
4989+@@ -5101,6 +5114,8 @@
4990 flags);
4991 if (e.write(file))
4992 goto err;
4993@@ -398,7 +398,7 @@
4994 }
4995 }
4996 }
4997-@@ -5076,6 +5091,8 @@
4998+@@ -5112,6 +5127,8 @@
4999 if (event_info->write(file) ||
5000 DBUG_EVALUATE_IF("injecting_fault_writing", 1, 0))
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches