diff options
author | unknown <heikki@hundin.mysql.fi> | 2002-06-22 20:41:14 +0300 |
---|---|---|
committer | unknown <heikki@hundin.mysql.fi> | 2002-06-22 20:41:14 +0300 |
commit | 1081513a12851d432103eaabcb6533c84062196c (patch) | |
tree | cd94be28879d52101bd7438dc97dc04856d81739 /innobase/page | |
parent | b7b988b3c36fa7a1f0a284d6478bbccbe706c09f (diff) | |
download | mariadb-git-1081513a12851d432103eaabcb6533c84062196c.tar.gz |
Many files:
Merge 3.23.52
innobase/btr/btr0btr.c:
Merge 3.23.52
innobase/btr/btr0cur.c:
Merge 3.23.52
innobase/btr/btr0sea.c:
Merge 3.23.52
innobase/include/btr0btr.h:
Merge 3.23.52
innobase/include/btr0cur.h:
Merge 3.23.52
innobase/include/btr0sea.h:
Merge 3.23.52
innobase/include/buf0buf.h:
Merge 3.23.52
innobase/include/buf0rea.h:
Merge 3.23.52
innobase/include/data0data.h:
Merge 3.23.52
innobase/include/data0data.ic:
Merge 3.23.52
innobase/include/log0log.h:
Merge 3.23.52
innobase/include/log0log.ic:
Merge 3.23.52
innobase/include/os0file.h:
Merge 3.23.52
innobase/include/page0page.h:
Merge 3.23.52
innobase/include/page0page.ic:
Merge 3.23.52
innobase/include/row0mysql.h:
Merge 3.23.52
innobase/include/trx0roll.h:
Merge 3.23.52
innobase/include/trx0sys.h:
Merge 3.23.52
innobase/include/trx0trx.h:
Merge 3.23.52
innobase/include/ut0ut.h:
Merge 3.23.52
innobase/include/univ.i:
Merge 3.23.52
innobase/include/ut0ut.ic:
Merge 3.23.52
innobase/buf/buf0buf.c:
Merge 3.23.52
innobase/buf/buf0rea.c:
Merge 3.23.52
innobase/data/data0data.c:
Merge 3.23.52
innobase/dict/dict0crea.c:
Merge 3.23.52
innobase/dict/dict0dict.c:
Merge 3.23.52
innobase/dict/dict0load.c:
Merge 3.23.52
innobase/dict/dict0mem.c:
Merge 3.23.52
innobase/fsp/fsp0fsp.c:
Merge 3.23.52
innobase/ibuf/ibuf0ibuf.c:
Merge 3.23.52
innobase/lock/lock0lock.c:
Merge 3.23.52
innobase/log/log0log.c:
Merge 3.23.52
innobase/log/log0recv.c:
Merge 3.23.52
innobase/mtr/mtr0log.c:
Merge 3.23.52
innobase/mtr/mtr0mtr.c:
Merge 3.23.52
innobase/os/os0file.c:
Merge 3.23.52
innobase/page/page0cur.c:
Merge 3.23.52
innobase/page/page0page.c:
Merge 3.23.52
innobase/rem/rem0cmp.c:
Merge 3.23.52
innobase/row/row0ins.c:
Merge 3.23.52
innobase/row/row0mysql.c:
Merge 3.23.52
innobase/row/row0purge.c:
Merge 3.23.52
innobase/row/row0upd.c:
Merge 3.23.52
innobase/srv/srv0srv.c:
Merge 3.23.52
innobase/srv/srv0start.c:
Merge 3.23.52
innobase/trx/trx0roll.c:
Merge 3.23.52
innobase/trx/trx0sys.c:
Merge 3.23.52
innobase/trx/trx0trx.c:
Merge 3.23.52
innobase/trx/trx0undo.c:
Merge 3.23.52
innobase/ut/ut0mem.c:
Merge 3.23.52
innobase/ut/ut0ut.c:
Merge 3.23.52
Diffstat (limited to 'innobase/page')
-rw-r--r-- | innobase/page/page0cur.c | 9 | ||||
-rw-r--r-- | innobase/page/page0page.c | 60 |
2 files changed, 69 insertions, 0 deletions
diff --git a/innobase/page/page0cur.c b/innobase/page/page0cur.c index 0b233b4dd72..dfe28fd40c4 100644 --- a/innobase/page/page0cur.c +++ b/innobase/page/page0cur.c @@ -403,6 +403,8 @@ page_cur_insert_rec_write_log( byte* log_ptr; ulint i; + ut_a(rec_size < UNIV_PAGE_SIZE); + log_ptr = mlog_open(mtr, 30 + MLOG_BUF_MARGIN); if (log_ptr == NULL) { @@ -491,6 +493,8 @@ page_cur_insert_rec_write_log( mlog_close(mtr, log_ptr); + ut_a(rec_size - i < UNIV_PAGE_SIZE); + if (rec_size - i >= MLOG_BUF_MARGIN) { mlog_catenate_string(mtr, ins_ptr, rec_size - i); } @@ -602,6 +606,9 @@ page_cur_parse_insert_rec( /* Build the inserted record to buf */ + ut_a(mismatch_index < UNIV_PAGE_SIZE); + ut_a(end_seg_len < UNIV_PAGE_SIZE); + ut_memcpy(buf, rec_get_start(cursor_rec), mismatch_index); ut_memcpy(buf + mismatch_index, ptr, end_seg_len); @@ -937,6 +944,8 @@ page_copy_rec_list_end_to_created_page( log_data_len = dyn_array_get_data_size(&(mtr->log)) - log_data_len; + ut_a(log_data_len < 100 * UNIV_PAGE_SIZE); + mach_write_to_4(log_ptr, log_data_len); rec_set_next_offs(insert_rec, PAGE_SUPREMUM); diff --git a/innobase/page/page0page.c b/innobase/page/page0page.c index a75a7279fb5..f3f6776bf13 100644 --- a/innobase/page/page0page.c +++ b/innobase/page/page0page.c @@ -17,6 +17,7 @@ Created 2/2/1994 Heikki Tuuri #include "lock0lock.h" #include "fut0lst.h" #include "btr0sea.h" +#include "buf0buf.h" /* A cached template page used in page_create */ page_t* page_template = NULL; @@ -63,6 +64,65 @@ Assuming a page size of 8 kB, a typical index page of a secondary index contains 300 index entries, and the size of the page directory is 50 x 4 bytes = 200 bytes. */ +/******************************************************************* +Looks for the directory slot which owns the given record. */ + +ulint +page_dir_find_owner_slot( +/*=====================*/ + /* out: the directory slot number */ + rec_t* rec) /* in: the physical record */ +{ + ulint i; + ulint steps = 0; + page_t* page; + page_dir_slot_t* slot; + rec_t* original_rec = rec; + char err_buf[1000]; + + ut_ad(page_rec_check(rec)); + + while (rec_get_n_owned(rec) == 0) { + steps++; + rec = page_rec_get_next(rec); + } + + page = buf_frame_align(rec); + + i = page_dir_get_n_slots(page) - 1; + slot = page_dir_get_nth_slot(page, i); + + while (page_dir_slot_get_rec(slot) != rec) { + + if (i == 0) { + fprintf(stderr, + "InnoDB: Probable data corruption on page %lu\n", + buf_frame_get_page_no(page)); + + rec_sprintf(err_buf, 900, original_rec); + + fprintf(stderr, + "InnoDB: Original record %s\n" + "InnoDB: on that page. Steps %lu.\n", err_buf, steps); + + rec_sprintf(err_buf, 900, rec); + + fprintf(stderr, + "InnoDB: Cannot find the dir slot for record %s\n" + "InnoDB: on that page!\n", err_buf); + + buf_page_print(page); + + ut_a(0); + } + + i--; + slot = page_dir_get_nth_slot(page, i); + } + + return(i); +} + /****************************************************************** Used to check the consistency of a directory slot. */ static |