diff options
author | Guilhem Bichot <guilhem@mysql.com> | 2009-08-04 13:25:19 +0200 |
---|---|---|
committer | Guilhem Bichot <guilhem@mysql.com> | 2009-08-04 13:25:19 +0200 |
commit | b57e4dbd88671df86e2cf39aff5178976d710b64 (patch) | |
tree | 32be2bfec3ca062c65566c60ecf59b673d1f97e9 /storage/innobase/trx/trx0rseg.c | |
parent | 1a0c2153a036296785dcdfa7b5f4974515616e11 (diff) | |
parent | 94efc1c6b084ed531b513e70fb66e7b7a1186b56 (diff) | |
download | mariadb-git-b57e4dbd88671df86e2cf39aff5178976d710b64.tar.gz |
Creation of mysql-trunk = {summit + "Innodb plugin replacing the builtin"}:
bzr branch mysql-5.1-performance-version mysql-trunk # Summit
cd mysql-trunk
bzr merge mysql-5.1-innodb_plugin # which is 5.1 + Innodb plugin
bzr rm innobase # remove the builtin
Next step: build, test fixes.
Diffstat (limited to 'storage/innobase/trx/trx0rseg.c')
-rw-r--r-- | storage/innobase/trx/trx0rseg.c | 254 |
1 files changed, 0 insertions, 254 deletions
diff --git a/storage/innobase/trx/trx0rseg.c b/storage/innobase/trx/trx0rseg.c deleted file mode 100644 index 020f217c90b..00000000000 --- a/storage/innobase/trx/trx0rseg.c +++ /dev/null @@ -1,254 +0,0 @@ -/****************************************************** -Rollback segment - -(c) 1996 Innobase Oy - -Created 3/26/1996 Heikki Tuuri -*******************************************************/ - -#include "trx0rseg.h" - -#ifdef UNIV_NONINL -#include "trx0rseg.ic" -#endif - -#include "trx0undo.h" -#include "fut0lst.h" -#include "srv0srv.h" -#include "trx0purge.h" - -/********************************************************************** -Looks for a rollback segment, based on the rollback segment id. */ - -trx_rseg_t* -trx_rseg_get_on_id( -/*===============*/ - /* out: rollback segment */ - ulint id) /* in: rollback segment id */ -{ - trx_rseg_t* rseg; - - rseg = UT_LIST_GET_FIRST(trx_sys->rseg_list); - ut_ad(rseg); - - while (rseg->id != id) { - rseg = UT_LIST_GET_NEXT(rseg_list, rseg); - ut_ad(rseg); - } - - return(rseg); -} - -/******************************************************************** -Creates a rollback segment header. This function is called only when -a new rollback segment is created in the database. */ - -ulint -trx_rseg_header_create( -/*===================*/ - /* out: page number of the created segment, - FIL_NULL if fail */ - ulint space, /* in: space id */ - ulint max_size, /* in: max size in pages */ - ulint* slot_no, /* out: rseg id == slot number in trx sys */ - mtr_t* mtr) /* in: mtr */ -{ - ulint page_no; - trx_rsegf_t* rsegf; - trx_sysf_t* sys_header; - ulint i; - page_t* page; - - ut_ad(mtr); - ut_ad(mutex_own(&kernel_mutex)); - ut_ad(mtr_memo_contains(mtr, fil_space_get_latch(space), - MTR_MEMO_X_LOCK)); - sys_header = trx_sysf_get(mtr); - - *slot_no = trx_sysf_rseg_find_free(mtr); - - if (*slot_no == ULINT_UNDEFINED) { - - return(FIL_NULL); - } - - /* Allocate a new file segment for the rollback segment */ - page = fseg_create(space, 0, TRX_RSEG + TRX_RSEG_FSEG_HEADER, mtr); - - if (page == NULL) { - /* No space left */ - - return(FIL_NULL); - } - -#ifdef UNIV_SYNC_DEBUG - buf_page_dbg_add_level(page, SYNC_RSEG_HEADER_NEW); -#endif /* UNIV_SYNC_DEBUG */ - - page_no = buf_frame_get_page_no(page); - - /* Get the rollback segment file page */ - rsegf = trx_rsegf_get_new(space, page_no, mtr); - - /* Initialize max size field */ - mlog_write_ulint(rsegf + TRX_RSEG_MAX_SIZE, max_size, - MLOG_4BYTES, mtr); - - /* Initialize the history list */ - - mlog_write_ulint(rsegf + TRX_RSEG_HISTORY_SIZE, 0, MLOG_4BYTES, mtr); - flst_init(rsegf + TRX_RSEG_HISTORY, mtr); - - /* Reset the undo log slots */ - for (i = 0; i < TRX_RSEG_N_SLOTS; i++) { - - trx_rsegf_set_nth_undo(rsegf, i, FIL_NULL, mtr); - } - - /* Add the rollback segment info to the free slot in the trx system - header */ - - trx_sysf_rseg_set_space(sys_header, *slot_no, space, mtr); - trx_sysf_rseg_set_page_no(sys_header, *slot_no, page_no, mtr); - - return(page_no); -} - -/*************************************************************************** -Creates and initializes a rollback segment object. The values for the -fields are read from the header. The object is inserted to the rseg -list of the trx system object and a pointer is inserted in the rseg -array in the trx system object. */ -static -trx_rseg_t* -trx_rseg_mem_create( -/*================*/ - /* out, own: rollback segment object */ - ulint id, /* in: rollback segment id */ - ulint space, /* in: space where the segment placed */ - ulint page_no, /* in: page number of the segment header */ - mtr_t* mtr) /* in: mtr */ -{ - trx_rsegf_t* rseg_header; - trx_rseg_t* rseg; - trx_ulogf_t* undo_log_hdr; - fil_addr_t node_addr; - ulint sum_of_undo_sizes; - ulint len; - - ut_ad(mutex_own(&kernel_mutex)); - - rseg = mem_alloc(sizeof(trx_rseg_t)); - - rseg->id = id; - rseg->space = space; - rseg->page_no = page_no; - - mutex_create(&rseg->mutex, SYNC_RSEG); - - UT_LIST_ADD_LAST(rseg_list, trx_sys->rseg_list, rseg); - - trx_sys_set_nth_rseg(trx_sys, id, rseg); - - rseg_header = trx_rsegf_get_new(space, page_no, mtr); - - rseg->max_size = mtr_read_ulint(rseg_header + TRX_RSEG_MAX_SIZE, - MLOG_4BYTES, mtr); - - /* Initialize the undo log lists according to the rseg header */ - - sum_of_undo_sizes = trx_undo_lists_init(rseg); - - rseg->curr_size = mtr_read_ulint(rseg_header + TRX_RSEG_HISTORY_SIZE, - MLOG_4BYTES, mtr) - + 1 + sum_of_undo_sizes; - - len = flst_get_len(rseg_header + TRX_RSEG_HISTORY, mtr); - if (len > 0) { - trx_sys->rseg_history_len += len; - - node_addr = trx_purge_get_log_from_hist( - flst_get_last(rseg_header + TRX_RSEG_HISTORY, mtr)); - rseg->last_page_no = node_addr.page; - rseg->last_offset = node_addr.boffset; - - undo_log_hdr = trx_undo_page_get(rseg->space, node_addr.page, - mtr) + node_addr.boffset; - - rseg->last_trx_no = mtr_read_dulint( - undo_log_hdr + TRX_UNDO_TRX_NO, mtr); - rseg->last_del_marks = mtr_read_ulint( - undo_log_hdr + TRX_UNDO_DEL_MARKS, MLOG_2BYTES, mtr); - } else { - rseg->last_page_no = FIL_NULL; - } - - return(rseg); -} - -/************************************************************************* -Creates the memory copies for rollback segments and initializes the -rseg list and array in trx_sys at a database startup. */ - -void -trx_rseg_list_and_array_init( -/*=========================*/ - trx_sysf_t* sys_header, /* in: trx system header */ - mtr_t* mtr) /* in: mtr */ -{ - ulint i; - ulint page_no; - ulint space; - - UT_LIST_INIT(trx_sys->rseg_list); - - trx_sys->rseg_history_len = 0; - - for (i = 0; i < TRX_SYS_N_RSEGS; i++) { - - page_no = trx_sysf_rseg_get_page_no(sys_header, i, mtr); - - if (page_no == FIL_NULL) { - - trx_sys_set_nth_rseg(trx_sys, i, NULL); - } else { - space = trx_sysf_rseg_get_space(sys_header, i, mtr); - - trx_rseg_mem_create(i, space, page_no, mtr); - } - } -} - -/******************************************************************** -Creates a new rollback segment to the database. */ - -trx_rseg_t* -trx_rseg_create( -/*============*/ - /* out: the created segment object, NULL if - fail */ - ulint space, /* in: space id */ - ulint max_size, /* in: max size in pages */ - ulint* id, /* out: rseg id */ - mtr_t* mtr) /* in: mtr */ -{ - ulint page_no; - trx_rseg_t* rseg; - - mtr_x_lock(fil_space_get_latch(space), mtr); - mutex_enter(&kernel_mutex); - - page_no = trx_rseg_header_create(space, max_size, id, mtr); - - if (page_no == FIL_NULL) { - - mutex_exit(&kernel_mutex); - return(NULL); - } - - rseg = trx_rseg_mem_create(*id, space, page_no, mtr); - - mutex_exit(&kernel_mutex); - - return(rseg); -} |