summaryrefslogtreecommitdiff
path: root/storage/innobase/row/row0undo.cc
diff options
context:
space:
mode:
Diffstat (limited to 'storage/innobase/row/row0undo.cc')
-rw-r--r--storage/innobase/row/row0undo.cc45
1 files changed, 16 insertions, 29 deletions
diff --git a/storage/innobase/row/row0undo.cc b/storage/innobase/row/row0undo.cc
index a226bf443f9..3ac8e434f35 100644
--- a/storage/innobase/row/row0undo.cc
+++ b/storage/innobase/row/row0undo.cc
@@ -326,37 +326,30 @@ static bool row_undo_rec_get(undo_node_t* node)
mtr_t mtr;
mtr.start();
- page_t* undo_page = trx_undo_page_get_s_latched(
+ buf_block_t* undo_page = trx_undo_page_get_s_latched(
page_id_t(undo->rseg->space->id, undo->top_page_no), &mtr);
- ulint offset = undo->top_offset;
-
- trx_undo_rec_t* prev_rec = trx_undo_get_prev_rec(
- undo_page + offset, undo->hdr_page_no, undo->hdr_offset,
- true, &mtr);
-
- if (prev_rec == NULL) {
- undo->top_undo_no = IB_ID_MAX;
- ut_ad(undo->empty());
- } else {
- page_t* prev_rec_page = page_align(prev_rec);
-
- if (prev_rec_page != undo_page) {
+ uint16_t offset = undo->top_offset;
+ buf_block_t* prev_page = undo_page;
+ if (trx_undo_rec_t* prev_rec = trx_undo_get_prev_rec(
+ prev_page, offset, undo->hdr_page_no, undo->hdr_offset,
+ true, &mtr)) {
+ if (prev_page != undo_page) {
trx->pages_undone++;
}
- undo->top_page_no = page_get_page_no(prev_rec_page);
- undo->top_offset = ulint(prev_rec - prev_rec_page);
+ undo->top_page_no = prev_page->page.id().page_no();
+ undo->top_offset = page_offset(prev_rec);
undo->top_undo_no = trx_undo_rec_get_undo_no(prev_rec);
ut_ad(!undo->empty());
+ } else {
+ undo->top_undo_no = IB_ID_MAX;
+ ut_ad(undo->empty());
}
- {
- const trx_undo_rec_t* undo_rec = undo_page + offset;
- node->undo_rec = trx_undo_rec_copy(undo_rec, node->heap);
- }
-
+ node->undo_rec = trx_undo_rec_copy(undo_page->frame + offset,
+ node->heap);
mtr.commit();
switch (trx_undo_rec_get_type(node->undo_rec)) {
@@ -431,7 +424,7 @@ row_undo(
err = row_undo_mod(node, thr);
break;
default:
- ut_ad(!"wrong state");
+ ut_ad("wrong state" == 0);
err = DB_CORRUPTION;
}
@@ -461,13 +454,7 @@ row_undo_step(
{
dberr_t err;
undo_node_t* node;
- trx_t* trx;
-
- ut_ad(thr);
-
- srv_inc_activity_count();
-
- trx = thr_get_trx(thr);
+ trx_t* trx = thr_get_trx(thr);
node = static_cast<undo_node_t*>(thr->run_node);