Lines Matching refs:undo

631 void trx_undo_gtid_set(trx_t *trx, trx_undo_t *undo) {  in trx_undo_gtid_set()  argument
633 undo->flag &= ~TRX_UNDO_FLAG_GTID; in trx_undo_gtid_set()
640 if (!undo->gtid_allocated) { in trx_undo_gtid_set()
646 undo->flag |= TRX_UNDO_FLAG_GTID; in trx_undo_gtid_set()
677 void trx_undo_gtid_write(trx_t *trx, trx_ulogf_t *undo_header, trx_undo_t *undo, in trx_undo_gtid_write() argument
679 if ((undo->flag & TRX_UNDO_FLAG_GTID) == 0) { in trx_undo_gtid_write()
684 undo->flag &= ~TRX_UNDO_FLAG_GTID; in trx_undo_gtid_write()
687 if (!undo->gtid_allocated) { in trx_undo_gtid_write()
705 undo->flag |= TRX_UNDO_FLAG_GTID; in trx_undo_gtid_write()
707 mlog_write_ulint(undo_header + TRX_UNDO_FLAGS, undo->flag, MLOG_1BYTE, mtr); in trx_undo_gtid_write()
864 trx_undo_t *undo, /*!< in: undo log memory object */ in trx_undo_add_page() argument
887 header_page = trx_undo_page_get(page_id_t(undo->space, undo->hdr_page_no), in trx_undo_add_page()
888 undo->page_size, mtr); in trx_undo_add_page()
890 if (!fsp_reserve_free_extents(&n_reserved, undo->space, 1, FSP_UNDO, mtr)) { in trx_undo_add_page()
896 undo->top_page_no + 1, FSP_UP, TRUE, mtr, mtr); in trx_undo_add_page()
898 fil_space_release_free_extents(undo->space, n_reserved); in trx_undo_add_page()
908 undo->last_page_no = new_block->page.id.page_no(); in trx_undo_add_page()
912 trx_undo_page_init(new_page, undo->type, mtr); in trx_undo_add_page()
916 undo->size++; in trx_undo_add_page()
981 trx_undo_t *undo, /*!< in/out: undo log memory copy */ in trx_undo_free_last_page_func() argument
987 ut_ad(undo->hdr_page_no != undo->last_page_no); in trx_undo_free_last_page_func()
988 ut_ad(undo->size > 0); in trx_undo_free_last_page_func()
990 undo->last_page_no = in trx_undo_free_last_page_func()
991 trx_undo_free_page(undo->rseg, FALSE, undo->space, undo->hdr_page_no, in trx_undo_free_last_page_func()
992 undo->last_page_no, mtr); in trx_undo_free_last_page_func()
994 undo->size--; in trx_undo_free_last_page_func()
1032 int trx_undo_page_truncate_offset(trx_undo_t *undo, page_t *undo_page, in trx_undo_page_truncate_offset() argument
1034 auto rec = trx_undo_page_get_last_rec(undo_page, undo->hdr_page_no, in trx_undo_page_truncate_offset()
1035 undo->hdr_offset); in trx_undo_page_truncate_offset()
1052 rec = trx_undo_page_get_prev_rec(rec, undo->hdr_page_no, undo->hdr_offset); in trx_undo_page_truncate_offset()
1056 if (undo->last_page_no == undo->hdr_page_no) { in trx_undo_page_truncate_offset()
1085 trx_undo_t *undo, undo_no_t limit) { in trx_undo_truncate_end_func() argument
1087 ut_ad(mutex_own(&undo->rseg->mutex)); in trx_undo_truncate_end_func()
1095 if (fsp_is_system_temporary(undo->rseg->space_id)) { in trx_undo_truncate_end_func()
1096 ut_ad(trx->rsegs.m_noredo.rseg == undo->rseg); in trx_undo_truncate_end_func()
1099 ut_ad(trx->rsegs.m_redo.rseg == undo->rseg); in trx_undo_truncate_end_func()
1102 const page_id_t page_id(undo->space, undo->last_page_no); in trx_undo_truncate_end_func()
1104 auto undo_page = trx_undo_page_get(page_id, undo->page_size, &mtr); in trx_undo_truncate_end_func()
1106 int trunc_offset = trx_undo_page_truncate_offset(undo, undo_page, limit); in trx_undo_truncate_end_func()
1121 ut_ad(undo->last_page_no != undo->hdr_page_no); in trx_undo_truncate_end_func()
1122 trx_undo_free_last_page(trx, undo, &mtr); in trx_undo_truncate_end_func()
1194 static void trx_undo_seg_free(const trx_undo_t *undo, bool noredo) { in trx_undo_seg_free() argument
1202 rseg = undo->rseg; in trx_undo_seg_free()
1213 seg_header = trx_undo_page_get(page_id_t(undo->space, undo->hdr_page_no), in trx_undo_seg_free()
1214 undo->page_size, &mtr) + in trx_undo_seg_free()
1225 trx_rsegf_set_nth_undo(rseg_header, undo->id, FIL_NULL, &mtr); in trx_undo_seg_free()
1227 rseg->decr_curr_size(undo->size); in trx_undo_seg_free()
1251 trx_undo_t *undo; in trx_undo_mem_init() local
1293 undo = trx_undo_mem_create(rseg, id, type, trx_id, &xid, page_no, offset); in trx_undo_mem_init()
1295 undo->dict_operation = in trx_undo_mem_init()
1298 undo->flag = flag; in trx_undo_mem_init()
1299 undo->gtid_allocated = gtid_exists; in trx_undo_mem_init()
1301 undo->state = state; in trx_undo_mem_init()
1302 undo->size = flst_get_len(seg_header + TRX_UNDO_PAGE_LIST); in trx_undo_mem_init()
1311 undo->last_page_no = last_addr.page; in trx_undo_mem_init()
1312 undo->top_page_no = last_addr.page; in trx_undo_mem_init()
1314 last_page = trx_undo_page_get(page_id_t(rseg->space_id, undo->last_page_no), in trx_undo_mem_init()
1320 undo->empty = TRUE; in trx_undo_mem_init()
1322 undo->empty = FALSE; in trx_undo_mem_init()
1323 undo->top_offset = rec - last_page; in trx_undo_mem_init()
1324 undo->top_undo_no = trx_undo_rec_get_undo_no(rec); in trx_undo_mem_init()
1329 UT_LIST_ADD_LAST(rseg->insert_undo_list, undo); in trx_undo_mem_init()
1331 UT_LIST_ADD_LAST(rseg->insert_undo_cached, undo); in trx_undo_mem_init()
1338 UT_LIST_ADD_LAST(rseg->update_undo_list, undo); in trx_undo_mem_init()
1345 UT_LIST_ADD_LAST(rseg->update_undo_cached, undo); in trx_undo_mem_init()
1351 return (undo); in trx_undo_mem_init()
1383 trx_undo_t *undo; in trx_undo_lists_init() local
1385 undo = trx_undo_mem_init(rseg, i, page_no, &mtr); in trx_undo_lists_init()
1387 size += undo->size; in trx_undo_lists_init()
1418 trx_undo_t *undo; in trx_undo_mem_create() local
1422 undo = static_cast<trx_undo_t *>(ut_malloc_nokey(sizeof(*undo))); in trx_undo_mem_create()
1424 if (undo == nullptr) { in trx_undo_mem_create()
1428 undo->id = id; in trx_undo_mem_create()
1429 undo->type = type; in trx_undo_mem_create()
1430 undo->state = TRX_UNDO_ACTIVE; in trx_undo_mem_create()
1431 undo->del_marks = FALSE; in trx_undo_mem_create()
1432 undo->trx_id = trx_id; in trx_undo_mem_create()
1433 undo->xid = *xid; in trx_undo_mem_create()
1435 undo->dict_operation = FALSE; in trx_undo_mem_create()
1436 undo->flag = 0; in trx_undo_mem_create()
1437 undo->gtid_allocated = false; in trx_undo_mem_create()
1439 undo->rseg = rseg; in trx_undo_mem_create()
1441 undo->space = rseg->space_id; in trx_undo_mem_create()
1442 undo->page_size.copy_from(rseg->page_size); in trx_undo_mem_create()
1443 undo->hdr_page_no = page_no; in trx_undo_mem_create()
1444 undo->hdr_offset = offset; in trx_undo_mem_create()
1445 undo->last_page_no = page_no; in trx_undo_mem_create()
1446 undo->size = 1; in trx_undo_mem_create()
1448 undo->empty = TRUE; in trx_undo_mem_create()
1449 undo->top_page_no = page_no; in trx_undo_mem_create()
1450 undo->guess_block = nullptr; in trx_undo_mem_create()
1451 undo->withdraw_clock = 0; in trx_undo_mem_create()
1453 return (undo); in trx_undo_mem_create()
1458 trx_undo_t *undo, /*!< in: undo log to init */ in trx_undo_mem_init_for_reuse() argument
1464 ut_ad(mutex_own(&((undo->rseg)->mutex))); in trx_undo_mem_init_for_reuse()
1466 ut_a(undo->id < TRX_RSEG_N_SLOTS); in trx_undo_mem_init_for_reuse()
1468 undo->state = TRX_UNDO_ACTIVE; in trx_undo_mem_init_for_reuse()
1469 undo->del_marks = FALSE; in trx_undo_mem_init_for_reuse()
1470 undo->trx_id = trx_id; in trx_undo_mem_init_for_reuse()
1471 undo->xid = *xid; in trx_undo_mem_init_for_reuse()
1473 undo->dict_operation = FALSE; in trx_undo_mem_init_for_reuse()
1474 undo->flag = 0; in trx_undo_mem_init_for_reuse()
1475 undo->gtid_allocated = false; in trx_undo_mem_init_for_reuse()
1477 undo->hdr_offset = offset; in trx_undo_mem_init_for_reuse()
1478 undo->empty = TRUE; in trx_undo_mem_init_for_reuse()
1482 void trx_undo_mem_free(trx_undo_t *undo) /*!< in: the undo object to be freed */ in trx_undo_mem_free() argument
1484 ut_a(undo->id < TRX_RSEG_N_SLOTS); in trx_undo_mem_free()
1486 ut_free(undo); in trx_undo_mem_free()
1504 const XID *xid, bool is_gtid, trx_undo_t **undo, in trx_undo_create() argument
1542 *undo = trx_undo_mem_create(rseg, id, type, trx_id, xid, page_no, offset); in trx_undo_create()
1543 if (*undo == nullptr) { in trx_undo_create()
1546 (*undo)->gtid_allocated = add_space_gtid; in trx_undo_create()
1567 trx_undo_t *undo; in trx_undo_reuse_cached() local
1572 undo = UT_LIST_GET_FIRST(rseg->insert_undo_cached); in trx_undo_reuse_cached()
1573 if (undo == nullptr) { in trx_undo_reuse_cached()
1577 UT_LIST_REMOVE(rseg->insert_undo_cached, undo); in trx_undo_reuse_cached()
1583 undo = UT_LIST_GET_FIRST(rseg->update_undo_cached); in trx_undo_reuse_cached()
1584 if (undo == nullptr) { in trx_undo_reuse_cached()
1588 UT_LIST_REMOVE(rseg->update_undo_cached, undo); in trx_undo_reuse_cached()
1593 ut_ad(undo->size == 1); in trx_undo_reuse_cached()
1594 ut_a(undo->id < TRX_RSEG_N_SLOTS); in trx_undo_reuse_cached()
1596 auto undo_page = trx_undo_page_get(page_id_t(undo->space, undo->hdr_page_no), in trx_undo_reuse_cached()
1597 undo->page_size, mtr); in trx_undo_reuse_cached()
1618 trx_undo_mem_init_for_reuse(undo, trx_id, xid, offset); in trx_undo_reuse_cached()
1619 undo->gtid_allocated = add_space_gtid; in trx_undo_reuse_cached()
1621 return (undo); in trx_undo_reuse_cached()
1628 trx_undo_t *undo, /*!< in: assigned undo log */ in trx_undo_mark_as_dict_operation() argument
1633 hdr_page = trx_undo_page_get(page_id_t(undo->space, undo->hdr_page_no), in trx_undo_mark_as_dict_operation()
1634 undo->page_size, mtr); in trx_undo_mark_as_dict_operation()
1636 mlog_write_ulint(hdr_page + undo->hdr_offset + TRX_UNDO_DICT_TRANS, TRUE, in trx_undo_mark_as_dict_operation()
1639 undo->dict_operation = TRUE; in trx_undo_mark_as_dict_operation()
1655 trx_undo_t *undo; in trx_undo_assign_undo() local
1705 undo = in trx_undo_assign_undo()
1714 if (undo == nullptr) { in trx_undo_assign_undo()
1715 err = trx_undo_create(trx, rseg, type, trx->id, trx->xid, is_gtid, &undo, in trx_undo_assign_undo()
1723 UT_LIST_ADD_FIRST(rseg->insert_undo_list, undo); in trx_undo_assign_undo()
1725 undo_ptr->insert_undo = undo; in trx_undo_assign_undo()
1727 UT_LIST_ADD_FIRST(rseg->update_undo_list, undo); in trx_undo_assign_undo()
1729 undo_ptr->update_undo = undo; in trx_undo_assign_undo()
1738 trx_undo_mark_as_dict_operation(trx, undo, &mtr); in trx_undo_assign_undo()
1745 undo->set_prepared(trx->xid); in trx_undo_assign_undo()
1758 trx_undo_t *undo, /*!< in: undo log memory copy */ in trx_undo_set_state_at_finish() argument
1766 ut_a(undo->id < TRX_RSEG_N_SLOTS); in trx_undo_set_state_at_finish()
1768 undo_page = trx_undo_page_get(page_id_t(undo->space, undo->hdr_page_no), in trx_undo_set_state_at_finish()
1769 undo->page_size, mtr); in trx_undo_set_state_at_finish()
1774 if (undo->size == 1 && mach_read_from_2(page_hdr + TRX_UNDO_PAGE_FREE) < in trx_undo_set_state_at_finish()
1778 } else if (undo->type == TRX_UNDO_INSERT) { in trx_undo_set_state_at_finish()
1784 undo->state = state; in trx_undo_set_state_at_finish()
1797 page_t *trx_undo_set_state_at_prepare(trx_t *trx, trx_undo_t *undo, in trx_undo_set_state_at_prepare() argument
1804 ut_ad(trx && undo && mtr); in trx_undo_set_state_at_prepare()
1806 ut_a(undo->id < TRX_RSEG_N_SLOTS); in trx_undo_set_state_at_prepare()
1808 undo_page = trx_undo_page_get(page_id_t(undo->space, undo->hdr_page_no), in trx_undo_set_state_at_prepare()
1809 undo->page_size, mtr); in trx_undo_set_state_at_prepare()
1817 trx_undo_gtid_write(trx, undo_header, undo, mtr); in trx_undo_set_state_at_prepare()
1820 ut_ad(undo->state == TRX_UNDO_PREPARED); in trx_undo_set_state_at_prepare()
1826 ut_ad(undo->state == TRX_UNDO_ACTIVE); in trx_undo_set_state_at_prepare()
1827 undo->set_prepared(trx->xid); in trx_undo_set_state_at_prepare()
1829 mlog_write_ulint(seg_hdr + TRX_UNDO_STATE, undo->state, MLOG_2BYTES, mtr); in trx_undo_set_state_at_prepare()
1831 mlog_write_ulint(undo_header + TRX_UNDO_FLAGS, undo->flag, MLOG_1BYTE, mtr); in trx_undo_set_state_at_prepare()
1833 trx_undo_write_xid(undo_header, &undo->xid, mtr); in trx_undo_set_state_at_prepare()
1854 trx_undo_t *undo; in trx_undo_update_cleanup() local
1856 undo = undo_ptr->update_undo; in trx_undo_update_cleanup()
1864 UT_LIST_REMOVE(rseg->update_undo_list, undo); in trx_undo_update_cleanup()
1868 if (undo->state == TRX_UNDO_CACHED) { in trx_undo_update_cleanup()
1869 UT_LIST_ADD_FIRST(rseg->update_undo_cached, undo); in trx_undo_update_cleanup()
1873 ut_ad(undo->state == TRX_UNDO_TO_PURGE); in trx_undo_update_cleanup()
1875 trx_undo_mem_free(undo); in trx_undo_update_cleanup()
1885 trx_undo_t *undo; in trx_undo_insert_cleanup() local
1888 undo = undo_ptr->insert_undo; in trx_undo_insert_cleanup()
1889 ut_ad(undo != nullptr); in trx_undo_insert_cleanup()
1897 UT_LIST_REMOVE(rseg->insert_undo_list, undo); in trx_undo_insert_cleanup()
1900 if (undo->state == TRX_UNDO_CACHED) { in trx_undo_insert_cleanup()
1901 UT_LIST_ADD_FIRST(rseg->insert_undo_cached, undo); in trx_undo_insert_cleanup()
1905 ut_ad(undo->state == TRX_UNDO_TO_FREE); in trx_undo_insert_cleanup()
1911 trx_undo_seg_free(undo, noredo); in trx_undo_insert_cleanup()
1915 trx_undo_mem_free(undo); in trx_undo_insert_cleanup()
1966 bool trx_undo_truncate_tablespace(undo::Tablespace *marked_space) { in trx_undo_truncate_tablespace()
1968 static undo::Inject_failure_once injector("ib_undo_trunc_fail_truncate"); in trx_undo_truncate_tablespace()
1977 auto space_num = undo::id2num(old_space_id); in trx_undo_truncate_tablespace()
1980 undo::unuse_space_id(old_space_id); in trx_undo_truncate_tablespace()
1982 auto new_space_id = undo::use_next_space_id(space_num); in trx_undo_truncate_tablespace()
1996 ut_d(undo::inject_crash("ib_undo_trunc_empty_file")); in trx_undo_truncate_tablespace()
2027 ut_d(undo::inject_crash("ib_undo_trunc_before_rsegs")); in trx_undo_truncate_tablespace()
2053 for (trx_undo_t *undo = UT_LIST_GET_FIRST(rseg->update_undo_cached); in trx_undo_truncate_tablespace() local
2054 undo != nullptr; undo = next_undo) { in trx_undo_truncate_tablespace()
2055 next_undo = UT_LIST_GET_NEXT(undo_list, undo); in trx_undo_truncate_tablespace()
2056 UT_LIST_REMOVE(rseg->update_undo_cached, undo); in trx_undo_truncate_tablespace()
2058 trx_undo_mem_free(undo); in trx_undo_truncate_tablespace()
2061 for (trx_undo_t *undo = UT_LIST_GET_FIRST(rseg->insert_undo_cached); in trx_undo_truncate_tablespace() local
2062 undo != nullptr; undo = next_undo) { in trx_undo_truncate_tablespace()
2063 next_undo = UT_LIST_GET_NEXT(undo_list, undo); in trx_undo_truncate_tablespace()
2064 UT_LIST_REMOVE(rseg->insert_undo_cached, undo); in trx_undo_truncate_tablespace()
2066 trx_undo_mem_free(undo); in trx_undo_truncate_tablespace()