29 #include "trx0rseg.ic"
39 UNIV_INTERN mysql_pfs_key_t rseg_mutex_key;
53 ut_a(
id < TRX_SYS_N_RSEGS);
57 ut_a(rseg == NULL ||
id == rseg->
id);
84 ut_ad(mutex_own(&kernel_mutex));
90 TRX_RSEG + TRX_RSEG_FSEG_HEADER, mtr);
98 buf_block_dbg_add_level(block, SYNC_RSEG_HEADER_NEW);
112 flst_init(rsegf + TRX_RSEG_HISTORY, mtr);
115 for (i = 0; i < TRX_RSEG_N_SLOTS; i++) {
141 mutex_free(&rseg->
mutex);
143 if (! srv_apply_log_only) {
151 while (undo != NULL) {
162 while (undo != NULL) {
201 ulint sum_of_undo_sizes;
203 ut_ad(mutex_own(&kernel_mutex));
210 rseg->zip_size = zip_size;
211 rseg->page_no = page_no;
213 mutex_create(rseg_mutex_key, &rseg->
mutex, SYNC_RSEG);
228 rseg->curr_size =
mtr_read_ulint(rseg_header + TRX_RSEG_HISTORY_SIZE,
230 + 1 + sum_of_undo_sizes;
232 len =
flst_get_len(rseg_header + TRX_RSEG_HISTORY, mtr);
253 rseg_queue.
rseg = rseg;
275 trx_rseg_create_instance(
283 for (i = 0; i < TRX_SYS_N_RSEGS; i++) {
301 rseg = trx_rseg_mem_create(
302 i, space, zip_size, page_no, ib_bh, mtr);
314 trx_rseg_create(
void)
327 mutex_enter(&kernel_mutex);
331 if (slot_no != ULINT_UNDEFINED) {
338 TRX_SYS_SPACE, 0, ULINT_MAX, slot_no, &mtr);
350 rseg = trx_rseg_mem_create(
351 slot_no, space, zip_size, page_no,
355 mutex_exit(&kernel_mutex);
375 trx_rseg_create_instance(sys_header, ib_bh, mtr);
#define UT_LIST_GET_LEN(BASE)
UNIV_INLINE ulint trx_sysf_rseg_get_space(trx_sysf_t *sys_header, ulint i, mtr_t *mtr)
#define UT_LIST_GET_NEXT(NAME, N)
UNIV_INLINE trx_sysf_t * trx_sysf_get(mtr_t *mtr)
UNIV_INLINE fil_addr_t flst_get_last(const flst_base_node_t *base, mtr_t *mtr)
UNIV_INTERN trx_rseg_t * trx_rseg_get_on_id(ulint id)
UNIV_INTERN void trx_rseg_list_and_array_init(trx_sysf_t *sys_header, ib_bh_t *ib_bh, mtr_t *mtr)
UNIV_INTERN void trx_undo_mem_free(trx_undo_t *undo)
UNIV_INTERN void mlog_write_ulint(byte *ptr, ulint val, byte type, mtr_t *mtr)
UNIV_INLINE void flst_init(flst_base_node_t *base, mtr_t *mtr)
UNIV_INTERN ulint fil_space_get_zip_size(ulint id)
UNIV_INLINE void trx_sys_set_nth_rseg(trx_sys_t *sys, ulint n, trx_rseg_t *rseg)
UNIV_INLINE void trx_sysf_rseg_set_page_no(trx_sysf_t *sys_header, ulint i, ulint page_no, mtr_t *mtr)
UNIV_INTERN rw_lock_t * fil_space_get_latch(ulint id, ulint *zip_size)
UNIV_INLINE trx_rsegf_t * trx_rsegf_get_new(ulint space, ulint zip_size, ulint page_no, mtr_t *mtr)
UNIV_INLINE ulint buf_block_get_page_no(const buf_block_t *block) __attribute__((pure))
UNIV_INTERN void mtr_commit(mtr_t *mtr) __attribute__((nonnull))
#define UT_LIST_REMOVE(NAME, BASE, N)
UNIV_INTERN ulint mtr_read_ulint(const byte *ptr, ulint type, mtr_t *mtr)
UNIV_INLINE fil_addr_t trx_purge_get_log_from_hist(fil_addr_t node_addr)
UNIV_INLINE page_t * trx_undo_page_get(ulint space, ulint zip_size, ulint page_no, mtr_t *mtr)
UNIV_INTERN ulint trx_rseg_header_create(ulint space, ulint zip_size, ulint max_size, ulint rseg_slot_no, mtr_t *mtr)
UNIV_INTERN void * ib_bh_push(ib_bh_t *ib_bh, const void *elem)
#define UT_LIST_ADD_LAST(NAME, BASE, N)
#define UT_LIST_GET_FIRST(BASE)
UNIV_INTERN ulint trx_sysf_rseg_find_free(mtr_t *mtr)
UNIV_INTERN buf_block_t * fseg_create(ulint space, ulint page, ulint byte_offset, mtr_t *mtr)
#define mtr_x_lock(B, MTR)
#define UT_LIST_INIT(BASE)
UNIV_INLINE ulint trx_sysf_rseg_get_page_no(trx_sysf_t *sys_header, ulint i, mtr_t *mtr)
UNIV_INLINE void trx_sysf_rseg_set_space(trx_sysf_t *sys_header, ulint i, ulint space, mtr_t *mtr)
UNIV_INTERN void trx_rseg_mem_free(trx_rseg_t *rseg)
UNIV_INLINE void mtr_start(mtr_t *mtr) __attribute__((nonnull))
#define TRX_UNDO_DEL_MARKS
UNIV_INTERN ulint trx_undo_lists_init(trx_rseg_t *rseg)
UNIV_INLINE ib_uint64_t mach_read_from_8(const byte *b) __attribute__((nonnull
trx_rseg_t * rseg_array[TRX_SYS_N_RSEGS]
UNIV_INLINE ulint flst_get_len(const flst_base_node_t *base, mtr_t *mtr)
UNIV_INLINE void trx_rsegf_set_nth_undo(trx_rsegf_t *rsegf, ulint n, ulint page_no, mtr_t *mtr)