List:Commits« Previous MessageNext Message »
From:Mikael Ronstrom Date:September 23 2009 3:29pm
Subject:bzr commit into mysql-5.4.3-trunk branch (mikael:2888) WL#4948
View as plain text  
#At file:///home/mikael/mysql_clones/mysql-trunk-multiple_rollback_segments/

 2888 Mikael Ronstrom	2009-09-23
      WL#4948 Multiple rollback segments in InnoDB
      modified:
        storage/innobase/include/trx0rseg.h
        storage/innobase/include/trx0sys.h
        storage/innobase/srv/srv0start.c
        storage/innobase/trx/trx0rseg.c

=== modified file 'storage/innobase/include/trx0rseg.h'
--- a/storage/innobase/include/trx0rseg.h	2009-05-27 09:45:59 +0000
+++ b/storage/innobase/include/trx0rseg.h	2009-09-23 15:29:35 +0000
@@ -30,6 +30,11 @@ Created 3/26/1996 Heikki Tuuri
 #include "trx0types.h"
 #include "trx0sys.h"
 
+/**********************************************************************
+Add more rollback segments at startup. */
+void
+trx_rseg_add_more(void);
+
 /******************************************************************//**
 Gets a rollback segment header.
 @return	rollback segment header, page x-latched */

=== modified file 'storage/innobase/include/trx0sys.h'
--- a/storage/innobase/include/trx0sys.h	2009-07-30 12:42:56 +0000
+++ b/storage/innobase/include/trx0sys.h	2009-09-23 15:29:35 +0000
@@ -457,11 +457,12 @@ trx_sys_file_format_id_to_name(
 					slots */
 /*------------------------------------------------------------- @} */
 
-/** Maximum number of rollback segments: the number of segment
+/** Number of rollback segments: the number of segment
 specification slots in the transaction system array; rollback segment
 id must fit in one byte, therefore 256; each slot is currently 8 bytes
 in size */
 #define	TRX_SYS_N_RSEGS		256
+#define TRX_SYS_N_RSEGS_USED    8
 
 /** Maximum length of MySQL binlog file name, in bytes.
 @see trx_sys_mysql_master_log_name

=== modified file 'storage/innobase/srv/srv0start.c'
--- a/storage/innobase/srv/srv0start.c	2009-07-30 12:42:56 +0000
+++ b/storage/innobase/srv/srv0start.c	2009-09-23 15:29:35 +0000
@@ -1533,6 +1533,7 @@ innobase_start_or_create_for_mysql(void)
 		dict_create();
 		srv_startup_is_before_trx_rollback_phase = FALSE;
 
+                trx_rseg_add_more();
 #ifdef UNIV_LOG_ARCHIVE
 	} else if (srv_archive_recovery) {
 		fprintf(stderr,

=== modified file 'storage/innobase/trx/trx0rseg.c'
--- a/storage/innobase/trx/trx0rseg.c	2009-05-27 09:45:59 +0000
+++ b/storage/innobase/trx/trx0rseg.c	2009-09-23 15:29:35 +0000
@@ -218,6 +218,7 @@ trx_rseg_list_and_array_init(
 	mtr_t*		mtr)		/*!< in: mtr */
 {
 	ulint	i;
+        ulint   rseg_id;
 	ulint	page_no;
 	ulint	space;
 
@@ -244,6 +245,29 @@ trx_rseg_list_and_array_init(
 	}
 }
 
+/********************************************************************
+Adds more rollback segment to the database as part of startup. */
+UNIV_INTERN
+void
+trx_rseg_add_more()
+{
+	ulint	i;
+        ulint   rseg_id;
+        mtr_t   mtr;
+
+        mtr_start(&mtr);
+        for (i = 1; i < TRX_SYS_N_RSEGS_USED; i++) {
+                if (!trx_rseg_create(TRX_SYS_SPACE, ULINT_MAX, &rseg_id,
+                                     &mtr)) {
+                         fprintf(stderr,
+                         "Couldn't create rollback segments.\n");
+                         ut_a(0);
+                }
+                ut_a(rseg_id == i);
+        }
+        mtr_commit(&mtr);
+}
+
 /****************************************************************//**
 Creates a new rollback segment to the database.
 @return	the created segment object, NULL if fail */

Thread
bzr commit into mysql-5.4.3-trunk branch (mikael:2888) WL#4948Mikael Ronstrom23 Sep