mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Applying InnoDB snapshot
Detailed revision comments: r6559 | marko | 2010-02-04 13:21:18 +0200 (Thu, 04 Feb 2010) | 14 lines branches/zip: Pass the file name and line number of the caller of the b-tree cursor functions to the buffer pool requests, in order to make the latch diagnostics more accurate. buf_page_optimistic_get_func(): Renamed to buf_page_optimistic_get(). btr_page_get_father_node_ptr(), btr_insert_on_non_leaf_level(), btr_pcur_open(), btr_pcur_open_with_no_init(), btr_pcur_open_on_user_rec(), btr_pcur_open_at_rnd_pos(), btr_pcur_restore_position(), btr_cur_open_at_index_side(), btr_cur_open_at_rnd_pos(): Rename the function to _func and add the parameters file, line. Define wrapper macros with __FILE__, __LINE__. btr_cur_search_to_nth_level(): Add the parameters file, line.
This commit is contained in:
@@ -1,3 +1,12 @@
|
|||||||
|
2010-02-04 The InnoDB Team
|
||||||
|
|
||||||
|
* btr/btr0btr.c, btr/btr0cur.c, btr/btr0pcur.c, buf/buf0buf.c,
|
||||||
|
include/btr0btr.h, include/btr0cur.h, include/btr0pcur.h,
|
||||||
|
include/btr0pcur.ic, include/buf0buf.h, row/row0ins.c, row/row0sel.c:
|
||||||
|
Pass the file name and line number of the caller of the
|
||||||
|
b-tree cursor functions to the buffer pool requests, in order
|
||||||
|
to make the latch diagnostics more accurate.
|
||||||
|
|
||||||
2010-02-03 The InnoDB Team
|
2010-02-03 The InnoDB Team
|
||||||
|
|
||||||
* buf/buf0lru.c:
|
* buf/buf0lru.c:
|
||||||
|
@@ -592,13 +592,15 @@ an x-latch on the tree.
|
|||||||
@return rec_get_offsets() of the node pointer record */
|
@return rec_get_offsets() of the node pointer record */
|
||||||
static
|
static
|
||||||
ulint*
|
ulint*
|
||||||
btr_page_get_father_node_ptr(
|
btr_page_get_father_node_ptr_func(
|
||||||
/*=========================*/
|
/*==============================*/
|
||||||
ulint* offsets,/*!< in: work area for the return value */
|
ulint* offsets,/*!< in: work area for the return value */
|
||||||
mem_heap_t* heap, /*!< in: memory heap to use */
|
mem_heap_t* heap, /*!< in: memory heap to use */
|
||||||
btr_cur_t* cursor, /*!< in: cursor pointing to user record,
|
btr_cur_t* cursor, /*!< in: cursor pointing to user record,
|
||||||
out: cursor on node pointer record,
|
out: cursor on node pointer record,
|
||||||
its page x-latched */
|
its page x-latched */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
dtuple_t* tuple;
|
dtuple_t* tuple;
|
||||||
@@ -622,7 +624,8 @@ btr_page_get_father_node_ptr(
|
|||||||
tuple = dict_index_build_node_ptr(index, user_rec, 0, heap, level);
|
tuple = dict_index_build_node_ptr(index, user_rec, 0, heap, level);
|
||||||
|
|
||||||
btr_cur_search_to_nth_level(index, level + 1, tuple, PAGE_CUR_LE,
|
btr_cur_search_to_nth_level(index, level + 1, tuple, PAGE_CUR_LE,
|
||||||
BTR_CONT_MODIFY_TREE, cursor, 0, mtr);
|
BTR_CONT_MODIFY_TREE, cursor, 0,
|
||||||
|
file, line, mtr);
|
||||||
|
|
||||||
node_ptr = btr_cur_get_rec(cursor);
|
node_ptr = btr_cur_get_rec(cursor);
|
||||||
ut_ad(!page_rec_is_comp(node_ptr)
|
ut_ad(!page_rec_is_comp(node_ptr)
|
||||||
@@ -670,6 +673,9 @@ btr_page_get_father_node_ptr(
|
|||||||
return(offsets);
|
return(offsets);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define btr_page_get_father_node_ptr(of,heap,cur,mtr) \
|
||||||
|
btr_page_get_father_node_ptr_func(of,heap,cur,__FILE__,__LINE__,mtr)
|
||||||
|
|
||||||
/************************************************************//**
|
/************************************************************//**
|
||||||
Returns the upper level node pointer to a page. It is assumed that mtr holds
|
Returns the upper level node pointer to a page. It is assumed that mtr holds
|
||||||
an x-latch on the tree.
|
an x-latch on the tree.
|
||||||
@@ -1662,11 +1668,13 @@ Inserts a data tuple to a tree on a non-leaf level. It is assumed
|
|||||||
that mtr holds an x-latch on the tree. */
|
that mtr holds an x-latch on the tree. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_insert_on_non_leaf_level(
|
btr_insert_on_non_leaf_level_func(
|
||||||
/*=========================*/
|
/*==============================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint level, /*!< in: level, must be > 0 */
|
ulint level, /*!< in: level, must be > 0 */
|
||||||
dtuple_t* tuple, /*!< in: the record to be inserted */
|
dtuple_t* tuple, /*!< in: the record to be inserted */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
big_rec_t* dummy_big_rec;
|
big_rec_t* dummy_big_rec;
|
||||||
@@ -1678,7 +1686,7 @@ btr_insert_on_non_leaf_level(
|
|||||||
|
|
||||||
btr_cur_search_to_nth_level(index, level, tuple, PAGE_CUR_LE,
|
btr_cur_search_to_nth_level(index, level, tuple, PAGE_CUR_LE,
|
||||||
BTR_CONT_MODIFY_TREE,
|
BTR_CONT_MODIFY_TREE,
|
||||||
&cursor, 0, mtr);
|
&cursor, 0, file, line, mtr);
|
||||||
|
|
||||||
err = btr_cur_pessimistic_insert(BTR_NO_LOCKING_FLAG
|
err = btr_cur_pessimistic_insert(BTR_NO_LOCKING_FLAG
|
||||||
| BTR_KEEP_SYS_FLAG
|
| BTR_KEEP_SYS_FLAG
|
||||||
|
@@ -342,6 +342,8 @@ btr_cur_search_to_nth_level(
|
|||||||
ulint has_search_latch,/*!< in: info on the latch mode the
|
ulint has_search_latch,/*!< in: info on the latch mode the
|
||||||
caller currently has on btr_search_latch:
|
caller currently has on btr_search_latch:
|
||||||
RW_S_LATCH, or 0 */
|
RW_S_LATCH, or 0 */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
page_cur_t* page_cursor;
|
page_cur_t* page_cursor;
|
||||||
@@ -520,7 +522,7 @@ btr_cur_search_to_nth_level(
|
|||||||
retry_page_get:
|
retry_page_get:
|
||||||
block = buf_page_get_gen(space, zip_size, page_no,
|
block = buf_page_get_gen(space, zip_size, page_no,
|
||||||
rw_latch, guess, buf_mode,
|
rw_latch, guess, buf_mode,
|
||||||
__FILE__, __LINE__, mtr);
|
file, line, mtr);
|
||||||
if (block == NULL) {
|
if (block == NULL) {
|
||||||
/* This must be a search to perform an insert;
|
/* This must be a search to perform an insert;
|
||||||
try insert to the insert buffer */
|
try insert to the insert buffer */
|
||||||
@@ -677,13 +679,15 @@ func_exit:
|
|||||||
Opens a cursor at either end of an index. */
|
Opens a cursor at either end of an index. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_cur_open_at_index_side(
|
btr_cur_open_at_index_side_func(
|
||||||
/*=======================*/
|
/*============================*/
|
||||||
ibool from_left, /*!< in: TRUE if open to the low end,
|
ibool from_left, /*!< in: TRUE if open to the low end,
|
||||||
FALSE if to the high end */
|
FALSE if to the high end */
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint latch_mode, /*!< in: latch mode */
|
ulint latch_mode, /*!< in: latch mode */
|
||||||
btr_cur_t* cursor, /*!< in: cursor */
|
btr_cur_t* cursor, /*!< in: cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
page_cur_t* page_cursor;
|
page_cur_t* page_cursor;
|
||||||
@@ -728,7 +732,7 @@ btr_cur_open_at_index_side(
|
|||||||
page_t* page;
|
page_t* page;
|
||||||
block = buf_page_get_gen(space, zip_size, page_no,
|
block = buf_page_get_gen(space, zip_size, page_no,
|
||||||
RW_NO_LATCH, NULL, BUF_GET,
|
RW_NO_LATCH, NULL, BUF_GET,
|
||||||
__FILE__, __LINE__, mtr);
|
file, line, mtr);
|
||||||
page = buf_block_get_frame(block);
|
page = buf_block_get_frame(block);
|
||||||
ut_ad(0 == ut_dulint_cmp(index->id,
|
ut_ad(0 == ut_dulint_cmp(index->id,
|
||||||
btr_page_get_index_id(page)));
|
btr_page_get_index_id(page)));
|
||||||
@@ -808,11 +812,13 @@ btr_cur_open_at_index_side(
|
|||||||
Positions a cursor at a randomly chosen position within a B-tree. */
|
Positions a cursor at a randomly chosen position within a B-tree. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_cur_open_at_rnd_pos(
|
btr_cur_open_at_rnd_pos_func(
|
||||||
/*====================*/
|
/*=========================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_cur_t* cursor, /*!< in/out: B-tree cursor */
|
btr_cur_t* cursor, /*!< in/out: B-tree cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
page_cur_t* page_cursor;
|
page_cur_t* page_cursor;
|
||||||
@@ -847,7 +853,7 @@ btr_cur_open_at_rnd_pos(
|
|||||||
|
|
||||||
block = buf_page_get_gen(space, zip_size, page_no,
|
block = buf_page_get_gen(space, zip_size, page_no,
|
||||||
RW_NO_LATCH, NULL, BUF_GET,
|
RW_NO_LATCH, NULL, BUF_GET,
|
||||||
__FILE__, __LINE__, mtr);
|
file, line, mtr);
|
||||||
page = buf_block_get_frame(block);
|
page = buf_block_get_frame(block);
|
||||||
ut_ad(0 == ut_dulint_cmp(index->id,
|
ut_ad(0 == ut_dulint_cmp(index->id,
|
||||||
btr_page_get_index_id(page)));
|
btr_page_get_index_id(page)));
|
||||||
@@ -3100,7 +3106,8 @@ btr_estimate_n_rows_in_range(
|
|||||||
|
|
||||||
btr_cur_search_to_nth_level(index, 0, tuple1, mode1,
|
btr_cur_search_to_nth_level(index, 0, tuple1, mode1,
|
||||||
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
||||||
&cursor, 0, &mtr);
|
&cursor, 0,
|
||||||
|
__FILE__, __LINE__, &mtr);
|
||||||
} else {
|
} else {
|
||||||
btr_cur_open_at_index_side(TRUE, index,
|
btr_cur_open_at_index_side(TRUE, index,
|
||||||
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
||||||
@@ -3117,7 +3124,8 @@ btr_estimate_n_rows_in_range(
|
|||||||
|
|
||||||
btr_cur_search_to_nth_level(index, 0, tuple2, mode2,
|
btr_cur_search_to_nth_level(index, 0, tuple2, mode2,
|
||||||
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
||||||
&cursor, 0, &mtr);
|
&cursor, 0,
|
||||||
|
__FILE__, __LINE__, &mtr);
|
||||||
} else {
|
} else {
|
||||||
btr_cur_open_at_index_side(FALSE, index,
|
btr_cur_open_at_index_side(FALSE, index,
|
||||||
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
BTR_SEARCH_LEAF | BTR_ESTIMATE,
|
||||||
|
@@ -205,10 +205,12 @@ record and it can be restored on a user record whose ordering fields
|
|||||||
are identical to the ones of the original user record */
|
are identical to the ones of the original user record */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
ibool
|
ibool
|
||||||
btr_pcur_restore_position(
|
btr_pcur_restore_position_func(
|
||||||
/*======================*/
|
/*===========================*/
|
||||||
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_pcur_t* cursor, /*!< in: detached persistent cursor */
|
btr_pcur_t* cursor, /*!< in: detached persistent cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
dict_index_t* index;
|
dict_index_t* index;
|
||||||
@@ -257,7 +259,8 @@ btr_pcur_restore_position(
|
|||||||
if (UNIV_LIKELY(buf_page_optimistic_get(
|
if (UNIV_LIKELY(buf_page_optimistic_get(
|
||||||
latch_mode,
|
latch_mode,
|
||||||
cursor->block_when_stored,
|
cursor->block_when_stored,
|
||||||
cursor->modify_clock, mtr))) {
|
cursor->modify_clock,
|
||||||
|
file, line, mtr))) {
|
||||||
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
||||||
|
|
||||||
buf_block_dbg_add_level(btr_pcur_get_block(cursor),
|
buf_block_dbg_add_level(btr_pcur_get_block(cursor),
|
||||||
@@ -312,8 +315,8 @@ btr_pcur_restore_position(
|
|||||||
mode = PAGE_CUR_L;
|
mode = PAGE_CUR_L;
|
||||||
}
|
}
|
||||||
|
|
||||||
btr_pcur_open_with_no_init(index, tuple, mode, latch_mode,
|
btr_pcur_open_with_no_init_func(index, tuple, mode, latch_mode,
|
||||||
cursor, 0, mtr);
|
cursor, 0, file, line, mtr);
|
||||||
|
|
||||||
/* Restore the old search mode */
|
/* Restore the old search mode */
|
||||||
cursor->search_mode = old_mode;
|
cursor->search_mode = old_mode;
|
||||||
@@ -553,8 +556,8 @@ before first in tree. The latching mode must be BTR_SEARCH_LEAF or
|
|||||||
BTR_MODIFY_LEAF. */
|
BTR_MODIFY_LEAF. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_pcur_open_on_user_rec(
|
btr_pcur_open_on_user_rec_func(
|
||||||
/*======================*/
|
/*===========================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
||||||
ulint mode, /*!< in: PAGE_CUR_L, ... */
|
ulint mode, /*!< in: PAGE_CUR_L, ... */
|
||||||
@@ -562,9 +565,12 @@ btr_pcur_open_on_user_rec(
|
|||||||
BTR_MODIFY_LEAF */
|
BTR_MODIFY_LEAF */
|
||||||
btr_pcur_t* cursor, /*!< in: memory buffer for persistent
|
btr_pcur_t* cursor, /*!< in: memory buffer for persistent
|
||||||
cursor */
|
cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
btr_pcur_open(index, tuple, mode, latch_mode, cursor, mtr);
|
btr_pcur_open_func(index, tuple, mode, latch_mode, cursor,
|
||||||
|
file, line, mtr);
|
||||||
|
|
||||||
if ((mode == PAGE_CUR_GE) || (mode == PAGE_CUR_G)) {
|
if ((mode == PAGE_CUR_GE) || (mode == PAGE_CUR_G)) {
|
||||||
|
|
||||||
|
@@ -2358,8 +2358,8 @@ page.
|
|||||||
@return TRUE if success */
|
@return TRUE if success */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
ibool
|
ibool
|
||||||
buf_page_optimistic_get_func(
|
buf_page_optimistic_get(
|
||||||
/*=========================*/
|
/*====================*/
|
||||||
ulint rw_latch,/*!< in: RW_S_LATCH, RW_X_LATCH */
|
ulint rw_latch,/*!< in: RW_S_LATCH, RW_X_LATCH */
|
||||||
buf_block_t* block, /*!< in: guessed buffer block */
|
buf_block_t* block, /*!< in: guessed buffer block */
|
||||||
ib_uint64_t modify_clock,/*!< in: modify clock value if mode is
|
ib_uint64_t modify_clock,/*!< in: modify clock value if mode is
|
||||||
|
@@ -317,12 +317,16 @@ Inserts a data tuple to a tree on a non-leaf level. It is assumed
|
|||||||
that mtr holds an x-latch on the tree. */
|
that mtr holds an x-latch on the tree. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_insert_on_non_leaf_level(
|
btr_insert_on_non_leaf_level_func(
|
||||||
/*=========================*/
|
/*==============================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint level, /*!< in: level, must be > 0 */
|
ulint level, /*!< in: level, must be > 0 */
|
||||||
dtuple_t* tuple, /*!< in: the record to be inserted */
|
dtuple_t* tuple, /*!< in: the record to be inserted */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
# define btr_insert_on_non_leaf_level(i,l,t,m) \
|
||||||
|
btr_insert_on_non_leaf_level_func(i,l,t,__FILE__,__LINE__,m)
|
||||||
#endif /* !UNIV_HOTBACKUP */
|
#endif /* !UNIV_HOTBACKUP */
|
||||||
/****************************************************************//**
|
/****************************************************************//**
|
||||||
Sets a record as the predefined minimum record. */
|
Sets a record as the predefined minimum record. */
|
||||||
|
@@ -152,29 +152,39 @@ btr_cur_search_to_nth_level(
|
|||||||
ulint has_search_latch,/*!< in: latch mode the caller
|
ulint has_search_latch,/*!< in: latch mode the caller
|
||||||
currently has on btr_search_latch:
|
currently has on btr_search_latch:
|
||||||
RW_S_LATCH, or 0 */
|
RW_S_LATCH, or 0 */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
Opens a cursor at either end of an index. */
|
Opens a cursor at either end of an index. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_cur_open_at_index_side(
|
btr_cur_open_at_index_side_func(
|
||||||
/*=======================*/
|
/*============================*/
|
||||||
ibool from_left, /*!< in: TRUE if open to the low end,
|
ibool from_left, /*!< in: TRUE if open to the low end,
|
||||||
FALSE if to the high end */
|
FALSE if to the high end */
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint latch_mode, /*!< in: latch mode */
|
ulint latch_mode, /*!< in: latch mode */
|
||||||
btr_cur_t* cursor, /*!< in: cursor */
|
btr_cur_t* cursor, /*!< in: cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
#define btr_cur_open_at_index_side(f,i,l,c,m) \
|
||||||
|
btr_cur_open_at_index_side_func(f,i,l,c,__FILE__,__LINE__,m)
|
||||||
/**********************************************************************//**
|
/**********************************************************************//**
|
||||||
Positions a cursor at a randomly chosen position within a B-tree. */
|
Positions a cursor at a randomly chosen position within a B-tree. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_cur_open_at_rnd_pos(
|
btr_cur_open_at_rnd_pos_func(
|
||||||
/*====================*/
|
/*=========================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_cur_t* cursor, /*!< in/out: B-tree cursor */
|
btr_cur_t* cursor, /*!< in/out: B-tree cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
#define btr_cur_open_at_rnd_pos(i,l,c,m) \
|
||||||
|
btr_cur_open_at_rnd_pos_func(i,l,c,__FILE__,__LINE__,m)
|
||||||
/*************************************************************//**
|
/*************************************************************//**
|
||||||
Tries to perform an insert to a page in an index tree, next to cursor.
|
Tries to perform an insert to a page in an index tree, next to cursor.
|
||||||
It is assumed that mtr holds an x-latch on the page. The operation does
|
It is assumed that mtr holds an x-latch on the page. The operation does
|
||||||
|
@@ -82,8 +82,8 @@ Initializes and opens a persistent cursor to an index tree. It should be
|
|||||||
closed with btr_pcur_close. */
|
closed with btr_pcur_close. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
btr_pcur_open(
|
btr_pcur_open_func(
|
||||||
/*==========*/
|
/*===============*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
||||||
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
||||||
@@ -94,14 +94,18 @@ btr_pcur_open(
|
|||||||
record! */
|
record! */
|
||||||
ulint latch_mode,/*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode,/*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_pcur_t* cursor, /*!< in: memory buffer for persistent cursor */
|
btr_pcur_t* cursor, /*!< in: memory buffer for persistent cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
#define btr_pcur_open(i,t,md,l,c,m) \
|
||||||
|
btr_pcur_open_func(i,t,md,l,c,__FILE__,__LINE__,m)
|
||||||
/**************************************************************//**
|
/**************************************************************//**
|
||||||
Opens an persistent cursor to an index tree without initializing the
|
Opens an persistent cursor to an index tree without initializing the
|
||||||
cursor. */
|
cursor. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
btr_pcur_open_with_no_init(
|
btr_pcur_open_with_no_init_func(
|
||||||
/*=======================*/
|
/*============================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
||||||
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
||||||
@@ -119,7 +123,12 @@ btr_pcur_open_with_no_init(
|
|||||||
ulint has_search_latch,/*!< in: latch mode the caller
|
ulint has_search_latch,/*!< in: latch mode the caller
|
||||||
currently has on btr_search_latch:
|
currently has on btr_search_latch:
|
||||||
RW_S_LATCH, or 0 */
|
RW_S_LATCH, or 0 */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
#define btr_pcur_open_with_no_init(ix,t,md,l,cur,has,m) \
|
||||||
|
btr_pcur_open_with_no_init_func(ix,t,md,l,cur,has,__FILE__,__LINE__,m)
|
||||||
|
|
||||||
/*****************************************************************//**
|
/*****************************************************************//**
|
||||||
Opens a persistent cursor at either end of an index. */
|
Opens a persistent cursor at either end of an index. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
@@ -160,8 +169,8 @@ before first in tree. The latching mode must be BTR_SEARCH_LEAF or
|
|||||||
BTR_MODIFY_LEAF. */
|
BTR_MODIFY_LEAF. */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
void
|
void
|
||||||
btr_pcur_open_on_user_rec(
|
btr_pcur_open_on_user_rec_func(
|
||||||
/*======================*/
|
/*===========================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
||||||
ulint mode, /*!< in: PAGE_CUR_L, ... */
|
ulint mode, /*!< in: PAGE_CUR_L, ... */
|
||||||
@@ -169,17 +178,25 @@ btr_pcur_open_on_user_rec(
|
|||||||
BTR_MODIFY_LEAF */
|
BTR_MODIFY_LEAF */
|
||||||
btr_pcur_t* cursor, /*!< in: memory buffer for persistent
|
btr_pcur_t* cursor, /*!< in: memory buffer for persistent
|
||||||
cursor */
|
cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
#define btr_pcur_open_on_user_rec(i,t,md,l,c,m) \
|
||||||
|
btr_pcur_open_on_user_rec_func(i,t,md,l,c,__FILE__,__LINE__,m)
|
||||||
/**********************************************************************//**
|
/**********************************************************************//**
|
||||||
Positions a cursor at a randomly chosen position within a B-tree. */
|
Positions a cursor at a randomly chosen position within a B-tree. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
btr_pcur_open_at_rnd_pos(
|
btr_pcur_open_at_rnd_pos_func(
|
||||||
/*=====================*/
|
/*==========================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_pcur_t* cursor, /*!< in/out: B-tree pcur */
|
btr_pcur_t* cursor, /*!< in/out: B-tree pcur */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
#define btr_pcur_open_at_rnd_pos(i,l,c,m) \
|
||||||
|
btr_pcur_open_at_rnd_pos_func(i,l,c,__FILE__,__LINE__,m)
|
||||||
/**************************************************************//**
|
/**************************************************************//**
|
||||||
Frees the possible old_rec_buf buffer of a persistent cursor and sets the
|
Frees the possible old_rec_buf buffer of a persistent cursor and sets the
|
||||||
latch mode of the persistent cursor to BTR_NO_LATCHES. */
|
latch mode of the persistent cursor to BTR_NO_LATCHES. */
|
||||||
@@ -218,11 +235,15 @@ record and it can be restored on a user record whose ordering fields
|
|||||||
are identical to the ones of the original user record */
|
are identical to the ones of the original user record */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
ibool
|
ibool
|
||||||
btr_pcur_restore_position(
|
btr_pcur_restore_position_func(
|
||||||
/*======================*/
|
/*===========================*/
|
||||||
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_pcur_t* cursor, /*!< in: detached persistent cursor */
|
btr_pcur_t* cursor, /*!< in: detached persistent cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr); /*!< in: mtr */
|
mtr_t* mtr); /*!< in: mtr */
|
||||||
|
#define btr_pcur_restore_position(l,cur,mtr) \
|
||||||
|
btr_pcur_restore_position_func(l,cur,__FILE__,__LINE__,mtr)
|
||||||
/**************************************************************//**
|
/**************************************************************//**
|
||||||
If the latch mode of the cursor is BTR_LEAF_SEARCH or BTR_LEAF_MODIFY,
|
If the latch mode of the cursor is BTR_LEAF_SEARCH or BTR_LEAF_MODIFY,
|
||||||
releases the page latch and bufferfix reserved by the cursor.
|
releases the page latch and bufferfix reserved by the cursor.
|
||||||
|
@@ -483,8 +483,8 @@ Initializes and opens a persistent cursor to an index tree. It should be
|
|||||||
closed with btr_pcur_close. */
|
closed with btr_pcur_close. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
btr_pcur_open(
|
btr_pcur_open_func(
|
||||||
/*==========*/
|
/*===============*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
||||||
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
||||||
@@ -495,6 +495,8 @@ btr_pcur_open(
|
|||||||
record! */
|
record! */
|
||||||
ulint latch_mode,/*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode,/*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_pcur_t* cursor, /*!< in: memory buffer for persistent cursor */
|
btr_pcur_t* cursor, /*!< in: memory buffer for persistent cursor */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
btr_cur_t* btr_cursor;
|
btr_cur_t* btr_cursor;
|
||||||
@@ -511,7 +513,7 @@ btr_pcur_open(
|
|||||||
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
||||||
|
|
||||||
btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,
|
btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,
|
||||||
btr_cursor, 0, mtr);
|
btr_cursor, 0, file, line, mtr);
|
||||||
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
||||||
|
|
||||||
cursor->trx_if_known = NULL;
|
cursor->trx_if_known = NULL;
|
||||||
@@ -522,8 +524,8 @@ Opens an persistent cursor to an index tree without initializing the
|
|||||||
cursor. */
|
cursor. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
btr_pcur_open_with_no_init(
|
btr_pcur_open_with_no_init_func(
|
||||||
/*=======================*/
|
/*============================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
const dtuple_t* tuple, /*!< in: tuple on which search done */
|
||||||
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
ulint mode, /*!< in: PAGE_CUR_L, ...;
|
||||||
@@ -541,6 +543,8 @@ btr_pcur_open_with_no_init(
|
|||||||
ulint has_search_latch,/*!< in: latch mode the caller
|
ulint has_search_latch,/*!< in: latch mode the caller
|
||||||
currently has on btr_search_latch:
|
currently has on btr_search_latch:
|
||||||
RW_S_LATCH, or 0 */
|
RW_S_LATCH, or 0 */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
btr_cur_t* btr_cursor;
|
btr_cur_t* btr_cursor;
|
||||||
@@ -553,7 +557,8 @@ btr_pcur_open_with_no_init(
|
|||||||
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
btr_cursor = btr_pcur_get_btr_cur(cursor);
|
||||||
|
|
||||||
btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,
|
btr_cur_search_to_nth_level(index, 0, tuple, mode, latch_mode,
|
||||||
btr_cursor, has_search_latch, mtr);
|
btr_cursor, has_search_latch,
|
||||||
|
file, line, mtr);
|
||||||
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
||||||
|
|
||||||
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
||||||
@@ -600,11 +605,13 @@ btr_pcur_open_at_index_side(
|
|||||||
Positions a cursor at a randomly chosen position within a B-tree. */
|
Positions a cursor at a randomly chosen position within a B-tree. */
|
||||||
UNIV_INLINE
|
UNIV_INLINE
|
||||||
void
|
void
|
||||||
btr_pcur_open_at_rnd_pos(
|
btr_pcur_open_at_rnd_pos_func(
|
||||||
/*=====================*/
|
/*==========================*/
|
||||||
dict_index_t* index, /*!< in: index */
|
dict_index_t* index, /*!< in: index */
|
||||||
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
ulint latch_mode, /*!< in: BTR_SEARCH_LEAF, ... */
|
||||||
btr_pcur_t* cursor, /*!< in/out: B-tree pcur */
|
btr_pcur_t* cursor, /*!< in/out: B-tree pcur */
|
||||||
|
const char* file, /*!< in: file name */
|
||||||
|
ulint line, /*!< in: line where called */
|
||||||
mtr_t* mtr) /*!< in: mtr */
|
mtr_t* mtr) /*!< in: mtr */
|
||||||
{
|
{
|
||||||
/* Initialize the cursor */
|
/* Initialize the cursor */
|
||||||
@@ -614,8 +621,9 @@ btr_pcur_open_at_rnd_pos(
|
|||||||
|
|
||||||
btr_pcur_init(cursor);
|
btr_pcur_init(cursor);
|
||||||
|
|
||||||
btr_cur_open_at_rnd_pos(index, latch_mode,
|
btr_cur_open_at_rnd_pos_func(index, latch_mode,
|
||||||
btr_pcur_get_btr_cur(cursor), mtr);
|
btr_pcur_get_btr_cur(cursor),
|
||||||
|
file, line, mtr);
|
||||||
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
cursor->pos_state = BTR_PCUR_IS_POSITIONED;
|
||||||
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
cursor->old_stored = BTR_PCUR_OLD_NOT_STORED;
|
||||||
|
|
||||||
|
@@ -202,20 +202,14 @@ with care. */
|
|||||||
#define buf_page_get_with_no_latch(SP, ZS, OF, MTR) buf_page_get_gen(\
|
#define buf_page_get_with_no_latch(SP, ZS, OF, MTR) buf_page_get_gen(\
|
||||||
SP, ZS, OF, RW_NO_LATCH, NULL,\
|
SP, ZS, OF, RW_NO_LATCH, NULL,\
|
||||||
BUF_GET_NO_LATCH, __FILE__, __LINE__, MTR)
|
BUF_GET_NO_LATCH, __FILE__, __LINE__, MTR)
|
||||||
/**************************************************************//**
|
|
||||||
NOTE! The following macros should be used instead of
|
|
||||||
buf_page_optimistic_get_func, to improve debugging. Only values RW_S_LATCH and
|
|
||||||
RW_X_LATCH are allowed as LA! */
|
|
||||||
#define buf_page_optimistic_get(LA, BL, MC, MTR) \
|
|
||||||
buf_page_optimistic_get_func(LA, BL, MC, __FILE__, __LINE__, MTR)
|
|
||||||
/********************************************************************//**
|
/********************************************************************//**
|
||||||
This is the general function used to get optimistic access to a database
|
This is the general function used to get optimistic access to a database
|
||||||
page.
|
page.
|
||||||
@return TRUE if success */
|
@return TRUE if success */
|
||||||
UNIV_INTERN
|
UNIV_INTERN
|
||||||
ibool
|
ibool
|
||||||
buf_page_optimistic_get_func(
|
buf_page_optimistic_get(
|
||||||
/*=========================*/
|
/*====================*/
|
||||||
ulint rw_latch,/*!< in: RW_S_LATCH, RW_X_LATCH */
|
ulint rw_latch,/*!< in: RW_S_LATCH, RW_X_LATCH */
|
||||||
buf_block_t* block, /*!< in: guessed block */
|
buf_block_t* block, /*!< in: guessed block */
|
||||||
ib_uint64_t modify_clock,/*!< in: modify clock value if mode is
|
ib_uint64_t modify_clock,/*!< in: modify clock value if mode is
|
||||||
|
@@ -1991,7 +1991,7 @@ row_ins_index_entry_low(
|
|||||||
|
|
||||||
btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
|
btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
|
||||||
mode | BTR_INSERT | ignore_sec_unique,
|
mode | BTR_INSERT | ignore_sec_unique,
|
||||||
&cursor, 0, &mtr);
|
&cursor, 0, __FILE__, __LINE__, &mtr);
|
||||||
|
|
||||||
if (cursor.flag == BTR_CUR_INSERT_TO_IBUF) {
|
if (cursor.flag == BTR_CUR_INSERT_TO_IBUF) {
|
||||||
/* The insertion was made to the insert buffer already during
|
/* The insertion was made to the insert buffer already during
|
||||||
@@ -2049,7 +2049,8 @@ row_ins_index_entry_low(
|
|||||||
btr_cur_search_to_nth_level(index, 0, entry,
|
btr_cur_search_to_nth_level(index, 0, entry,
|
||||||
PAGE_CUR_LE,
|
PAGE_CUR_LE,
|
||||||
mode | BTR_INSERT,
|
mode | BTR_INSERT,
|
||||||
&cursor, 0, &mtr);
|
&cursor, 0,
|
||||||
|
__FILE__, __LINE__, &mtr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2104,7 +2105,8 @@ function_exit:
|
|||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
|
btr_cur_search_to_nth_level(index, 0, entry, PAGE_CUR_LE,
|
||||||
BTR_MODIFY_TREE, &cursor, 0, &mtr);
|
BTR_MODIFY_TREE, &cursor, 0,
|
||||||
|
__FILE__, __LINE__, &mtr);
|
||||||
rec = btr_cur_get_rec(&cursor);
|
rec = btr_cur_get_rec(&cursor);
|
||||||
offsets = rec_get_offsets(rec, index, NULL,
|
offsets = rec_get_offsets(rec, index, NULL,
|
||||||
ULINT_UNDEFINED, &heap);
|
ULINT_UNDEFINED, &heap);
|
||||||
|
Reference in New Issue
Block a user