Commit f82647ab authored by marko's avatar marko

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.
parent 8a5da89f
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. ...@@ -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( ...@@ -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( ...@@ -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 ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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 @@ btr_cur_search_to_nth_level( ...@@ -677,13 +679,15 @@ btr_cur_search_to_nth_level(
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( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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 ...@@ -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( ...@@ -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( ...@@ -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 ...@@ -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( ...@@ -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. ...@@ -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 ...@@ -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( ...@@ -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 ...@@ -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( ...@@ -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( ...@@ -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 ...@@ -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( ...@@ -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 ...@@ -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 ...@@ -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( ...@@ -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( ...@@ -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 ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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. */ ...@@ -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( ...@@ -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( ...@@ -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 @@ row_ins_index_entry_low( ...@@ -2104,7 +2105,8 @@ row_ins_index_entry_low(
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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment