← Back to team overview

maria-developers team mailing list archive

Re: XtraDB merge into MariaDB

 

Vadim Tkachenko <vadim@xxxxxxxxxxx> 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;



Follow ups

References