Vadim Tkachenko <vadim@percona.com> writes:
I made push to
lp:~maria-captains/maria/mariadb-xtradb6-merge
(not proposed for merge yet).
If everything is fine we can merge it to maria.
I am now looking into this. I have a hard time understanding this merge. It seems you just applied manually a patch against latest lp:maria, omitting most (but not all?) of the necessary fixes I already made in the tree lp:~maria-captains/maria/mariadb-xtradb-merge2 I think we need to work instead from my merged tree, as that includes the full bzr history of both lp:maria and lp:percona-xtradb. This is necessary to allow smooth merging of future changes in XtraDB (and MariaDB). Basically, the merge should be a simple `bzr merge` from the xtradb6 branch into my mariadb-xtradb-merge2 branch, and then a merge of that result into lp:maria. However, I do not know which branch contains the xtradb6 code (is it pushed to Launchpad yet?). I assumed 'lp:percona-xtradb/release-6', but that code seems to be missing the changes listed below compared to mariadb-xtradb-merge. Can you tell me which branch to merge to get the correct changes? - Kristian. ----------------------------------------------------------------------- diff -u --recursive ./buf/buf0rea.c ../mariadb-xtradb6-merge/storage/xtradb/buf/buf0rea.c --- ./buf/buf0rea.c 2009-07-07 14:08:24.000000000 +0200 +++ ../mariadb-xtradb6-merge/storage/xtradb/buf/buf0rea.c 2009-07-07 14:02:21.000000000 +0200 @@ -134,6 +134,46 @@ bpage = buf_page_init_for_read(err, mode, space, zip_size, unzip, tablespace_version, offset); if (bpage == NULL) { + /* bugfix: http://bugs.mysql.com/bug.php?id=43948 */ + if (recv_recovery_is_on() && *err == DB_TABLESPACE_DELETED) { + /* hashed log recs must be treated here */ + recv_addr_t* recv_addr; + + mutex_enter(&(recv_sys->mutex)); + + if (recv_sys->apply_log_recs == FALSE) { + mutex_exit(&(recv_sys->mutex)); + goto not_to_recover; + } + + /* recv_get_fil_addr_struct() */ + recv_addr = HASH_GET_FIRST(recv_sys->addr_hash, + hash_calc_hash(ut_fold_ulint_pair(space, offset), + recv_sys->addr_hash)); + while (recv_addr) { + if ((recv_addr->space == space) + && (recv_addr->page_no == offset)) { + break; + } + recv_addr = HASH_GET_NEXT(addr_hash, recv_addr); + } + + if ((recv_addr == NULL) + || (recv_addr->state == RECV_BEING_PROCESSED) + || (recv_addr->state == RECV_PROCESSED)) { + mutex_exit(&(recv_sys->mutex)); + goto not_to_recover; + } + + fprintf(stderr, " (cannot find space: %lu)", space); + recv_addr->state = RECV_PROCESSED; + + ut_a(recv_sys->n_addrs); + recv_sys->n_addrs--; + + mutex_exit(&(recv_sys->mutex)); + } +not_to_recover: return(0); } @@ -784,11 +824,11 @@ while (buf_pool->n_pend_reads >= recv_n_pool_free_frames / 2) { os_aio_simulated_wake_handler_threads(); - os_thread_sleep(500000); + os_thread_sleep(10000); count++; - if (count > 100) { + if (count > 5000) { fprintf(stderr, "InnoDB: Error: InnoDB has waited for" " 50 seconds for pending\n" diff -u --recursive ./handler/innodb_patch_info.h ../mariadb-xtradb6-merge/storage/xtradb/handler/innodb_patch_info.h --- ./handler/innodb_patch_info.h 2009-07-07 14:08:24.000000000 +0200 +++ ../mariadb-xtradb6-merge/storage/xtradb/handler/innodb_patch_info.h 2009-07-07 14:02:21.000000000 +0200 @@ -37,5 +37,6 @@ {"innodb_dict_size_limit","Limit dictionary cache size","Variable innodb_dict_size_limit in bytes","http://www.percona.com/docs/wiki/percona-xtradb"}, {"innodb_split_buf_pool_mutex","More fix of buffer_pool mutex","Spliting buf_pool_mutex and optimizing based on innodb_opt_lru_count","http://www.percona.com/docs/wiki/percona-xtradb"}, {"innodb_stats","Additional features about InnoDB statistics/optimizer","","http://www.percona.com/docs/wiki/percona-xtradb"}, +{"innodb_recovery_patches","Bugfixes and adjustments about recovery process","","http://www.percona.com/docs/wiki/percona-xtradb"}, {NULL, NULL, NULL, NULL} }; diff -u --recursive ./include/univ.i ../mariadb-xtradb6-merge/storage/xtradb/include/univ.i --- ./include/univ.i 2009-07-07 14:08:24.000000000 +0200 +++ ../mariadb-xtradb6-merge/storage/xtradb/include/univ.i 2009-07-07 14:02:43.000000000 +0200 @@ -35,7 +35,7 @@ #define INNODB_VERSION_MAJOR 1 #define INNODB_VERSION_MINOR 0 #define INNODB_VERSION_BUGFIX 3 -#define PERCONA_INNODB_VERSION 5a +#define PERCONA_INNODB_VERSION 6 /* The following is the InnoDB version as shown in SELECT plugin_version FROM information_schema.plugins; diff -u --recursive ./log/log0recv.c ../mariadb-xtradb6-merge/storage/xtradb/log/log0recv.c --- ./log/log0recv.c 2009-07-07 14:08:24.000000000 +0200 +++ ../mariadb-xtradb6-merge/storage/xtradb/log/log0recv.c 2009-07-07 14:02:21.000000000 +0200 @@ -110,7 +110,7 @@ use these free frames to read in pages when we start applying the log records to the database. */ -UNIV_INTERN ulint recv_n_pool_free_frames = 256; +UNIV_INTERN ulint recv_n_pool_free_frames = 1024; /* The maximum lsn we see for a page during the recovery process. If this is bigger than the lsn we are able to scan up to, that is an indication that @@ -1225,6 +1225,8 @@ buf_block_get_page_no(block)); if ((recv_addr == NULL) + /* bugfix: http://bugs.mysql.com/bug.php?id=44140 */ + || (recv_addr->state == RECV_BEING_READ && !just_read_in) || (recv_addr->state == RECV_BEING_PROCESSED) || (recv_addr->state == RECV_PROCESSED)) { diff -u --recursive ./mysql-test/patches/events_stress.diff ../mariadb-xtradb6-merge/storage/xtradb/mysql-test/patches/events_stress.diff --- ./mysql-test/patches/events_stress.diff 2009-07-07 14:08:24.000000000 +0200 +++ ../mariadb-xtradb6-merge/storage/xtradb/mysql-test/patches/events_stress.diff 2009-07-07 14:03:00.000000000 +0200 @@ -1,5 +1,5 @@ ---- mysql-test/t/events_stress.test.orig 2009-04-16 19:39:47.000000000 +0000 -+++ mysql-test/t/events_stress.test 2009-04-16 19:41:16.000000000 +0000 +--- mysql-test/t/events_stress.test.orig 2009-07-05 10:29:14.000000000 +0000 ++++ mysql-test/t/events_stress.test 2009-07-05 10:30:49.000000000 +0000 @@ -61,6 +61,7 @@ } --enable_query_log @@ -8,13 +8,15 @@ SET GLOBAL event_scheduler=on; --sleep 2.5 DROP DATABASE events_conn1_test2; -@@ -135,3 +136,4 @@ - # - +@@ -137,5 +138,5 @@ DROP DATABASE events_test; + + # Cleanup +-SET GLOBAL event_scheduler=off; +SET GLOBAL event_scheduler=@old_event_scheduler; ---- mysql-test/r/events_stress.result.orig 2009-04-16 19:41:48.000000000 +0000 -+++ mysql-test/r/events_stress.result 2009-04-16 19:42:07.000000000 +0000 + --source include/check_events_off.inc +--- mysql-test/r/events_stress.result.orig 2009-07-05 10:54:30.000000000 +0000 ++++ mysql-test/r/events_stress.result 2009-07-05 10:54:48.000000000 +0000 @@ -32,6 +32,7 @@ SELECT COUNT(*) FROM INFORMATION_SCHEMA.EVENTS WHERE EVENT_SCHEMA='events_conn1_test2'; COUNT(*) @@ -23,8 +25,9 @@ SET GLOBAL event_scheduler=on; DROP DATABASE events_conn1_test2; SET GLOBAL event_scheduler=off; -@@ -63,3 +64,4 @@ +@@ -63,4 +64,4 @@ DROP TABLE fill_it2; DROP TABLE fill_it3; DROP DATABASE events_test; +-SET GLOBAL event_scheduler=off; +SET GLOBAL event_scheduler=@old_event_scheduler;