Loading BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -6,3 +6,4 @@ monty@work.mysql.com sasha@mysql.sashanet.com heikki@donna.mysql.fi miguel@light.local monty@donna.mysql.fi include/my_base.h +3 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,9 @@ enum ha_base_keytype { #define HA_ERR_LOCK_TABLE_FULL 147 #define HA_ERR_READ_ONLY_TRANSACTION 148 /* Updates not allowed */ #define HA_ERR_LOCK_DEADLOCK 149 #define HA_ERR_CANNOT_ADD_FOREIGN 150 /* Cannot add a foreign key constr. */ #define HA_ERR_NO_REFERENCED_ROW 151 /* Cannot add a child row */ #define HA_ERR_ROW_IS_REFERENCED 152 /* Cannot delete a parent row */ /* Other constants */ Loading include/mysqld_error.h +13 −2 Original line number Diff line number Diff line Loading @@ -214,5 +214,16 @@ #define ER_NO_PERMISSON_TO_CREATE_USER 1211 #define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 #define ER_LOCK_DEADLOCK 1213 #define ER_TABLE_CANT_HANDLE_FULLTEXT 1214 #define ER_ERROR_MESSAGES 215 #define ER_DUMMY1 1214 #define ER_DUMMY2 1215 #define ER_DUMMY3 1216 #define ER_DUMMY4 1217 #define ER_DUMMY5 1218 #define ER_DUMMY6 1219 #define ER_DUMMY7 1220 #define ER_DUMMY8 1221 #define ER_TABLE_CANT_HANDLE_FULLTEXT 1222 #define ER_CANNOT_ADD_FOREIGN 1223 #define ER_NO_REFERENCED_ROW 1224 #define ER_ROW_IS_REFERENCED 1225 #define ER_ERROR_MESSAGES 226 innobase/btr/btr0btr.c +131 −17 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ Created 6/2/1994 Heikki Tuuri #include "lock0lock.h" #include "ibuf0ibuf.h" /* /** Node pointers ------------- Leaf pages of a B-tree contain the index records stored in the Loading Loading @@ -2255,6 +2255,7 @@ btr_index_rec_validate( ulint len; ulint n; ulint i; char err_buf[1000]; n = dict_index_get_n_fields(index); Loading @@ -2262,6 +2263,9 @@ btr_index_rec_validate( fprintf(stderr, "Record has %lu fields, should have %lu\n", rec_get_n_fields(rec), n); rec_sprintf(err_buf, 900, rec); fprintf(stderr, "InnoDB: record %s\n", err_buf); return(FALSE); } Loading @@ -2276,6 +2280,9 @@ btr_index_rec_validate( "Record field %lu len is %lu, should be %lu\n", i, len, dtype_get_fixed_size(type)); rec_sprintf(err_buf, 900, rec); fprintf(stderr, "InnoDB: record %s\n", err_buf); return(FALSE); } } Loading Loading @@ -2330,7 +2337,6 @@ btr_validate_level( ulint level) /* in: level number */ { ulint space; mtr_t mtr; page_t* page; page_t* right_page; page_t* father_page; Loading @@ -2344,6 +2350,8 @@ btr_validate_level( dtuple_t* node_ptr_tuple; ibool ret = TRUE; dict_index_t* index; mtr_t mtr; char err_buf[1000]; mtr_start(&mtr); Loading Loading @@ -2382,9 +2390,9 @@ btr_validate_level( if (level == 0) { if (!btr_index_page_validate(page, index)) { fprintf(stderr, "Error in page %lu in index %s\n", buf_frame_get_page_no(page), index->name); "Error in page %lu in index %s, level %lu\n", buf_frame_get_page_no(page), index->name, level); ret = FALSE; } } Loading @@ -2402,12 +2410,32 @@ btr_validate_level( right_page = btr_page_get(space, right_page_no, RW_X_LATCH, &mtr); ut_a(cmp_rec_rec(page_rec_get_prev(page_get_supremum_rec(page)), if (cmp_rec_rec(page_rec_get_prev(page_get_supremum_rec(page)), page_rec_get_next(page_get_infimum_rec(right_page)), UT_LIST_GET_FIRST(tree->tree_indexes)) < 0); UT_LIST_GET_FIRST(tree->tree_indexes)) >= 0) { fprintf(stderr, "InnoDB: Error on pages %lu and %lu in index %s\n", buf_frame_get_page_no(page), right_page_no, index->name); fprintf(stderr, "InnoDB: records in wrong order on adjacent pages\n"); rec_sprintf(err_buf, 900, page_rec_get_prev(page_get_supremum_rec(page))); fprintf(stderr, "InnoDB: record %s\n", err_buf); rec_sprintf(err_buf, 900, page_rec_get_next(page_get_infimum_rec(right_page))); fprintf(stderr, "InnoDB: record %s\n", err_buf); ret = FALSE; } } if ((level > 0) && (left_page_no == FIL_NULL)) { if (level > 0 && left_page_no == FIL_NULL) { ut_a(REC_INFO_MIN_REC_FLAG & rec_get_info_bits( page_rec_get_next(page_get_infimum_rec(page)))); } Loading @@ -2418,8 +2446,38 @@ btr_validate_level( node_ptr = btr_page_get_father_node_ptr(tree, page, &mtr); ut_a(node_ptr == btr_page_get_father_for_rec(tree, page, page_rec_get_prev(page_get_supremum_rec(page)), &mtr)); if (btr_node_ptr_get_child_page_no(node_ptr) != buf_frame_get_page_no(page) || node_ptr != btr_page_get_father_for_rec(tree, page, page_rec_get_prev(page_get_supremum_rec(page)), &mtr)) { fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); fprintf(stderr, "InnoDB: node pointer to the page is wrong\n"); rec_sprintf(err_buf, 900, node_ptr); fprintf(stderr, "InnoDB: node ptr %s\n", err_buf); fprintf(stderr, "InnoDB: node ptr child page n:o %lu\n", btr_node_ptr_get_child_page_no(node_ptr)); rec_sprintf(err_buf, 900, btr_page_get_father_for_rec(tree, page, page_rec_get_prev(page_get_supremum_rec(page)), &mtr)); fprintf(stderr, "InnoDB: record on page %s\n", err_buf); ret = FALSE; goto node_ptr_fails; } father_page = buf_frame_align(node_ptr); Loading @@ -2431,7 +2489,33 @@ btr_validate_level( page_rec_get_next( page_get_infimum_rec(page)), 0, heap); ut_a(cmp_dtuple_rec(node_ptr_tuple, node_ptr) == 0); if (cmp_dtuple_rec(node_ptr_tuple, node_ptr) != 0) { fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); fprintf(stderr, "InnoDB: Error: node ptrs differ on levels > 0\n"); rec_sprintf(err_buf, 900, node_ptr); fprintf(stderr, "InnoDB: node ptr %s\n", err_buf); rec_sprintf(err_buf, 900, page_rec_get_next( page_get_infimum_rec(page))); fprintf(stderr, "InnoDB: first rec %s\n", err_buf); ret = FALSE; mem_heap_free(heap); goto node_ptr_fails; } mem_heap_free(heap); } Loading @@ -2454,21 +2538,51 @@ btr_validate_level( if (page_rec_get_next(node_ptr) != page_get_supremum_rec(father_page)) { ut_a(right_node_ptr == page_rec_get_next(node_ptr)); if (right_node_ptr != page_rec_get_next(node_ptr)) { ret = FALSE; fprintf(stderr, "InnoDB: node pointer to the right page is wrong\n"); fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); } } else { right_father_page = buf_frame_align( right_node_ptr); ut_a(right_node_ptr == page_rec_get_next( if (right_node_ptr != page_rec_get_next( page_get_infimum_rec( right_father_page))); ut_a(buf_frame_get_page_no(right_father_page) == btr_page_get_next(father_page, &mtr)); right_father_page))) { ret = FALSE; fprintf(stderr, "InnoDB: node pointer 2 to the right page is wrong\n"); fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); } if (buf_frame_get_page_no(right_father_page) != btr_page_get_next(father_page, &mtr)) { ret = FALSE; fprintf(stderr, "InnoDB: node pointer 3 to the right page is wrong\n"); fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); } } } } node_ptr_fails: mtr_commit(&mtr); if (right_page_no != FIL_NULL) { Loading innobase/buf/buf0flu.c +8 −3 Original line number Diff line number Diff line Loading @@ -410,9 +410,9 @@ buf_flush_try_page( block->io_fix = BUF_IO_WRITE; block->flush_type = flush_type; if (buf_pool->n_flush[block->flush_type] == 0) { if (buf_pool->n_flush[flush_type] == 0) { os_event_reset(buf_pool->no_flush[block->flush_type]); os_event_reset(buf_pool->no_flush[flush_type]); } (buf_pool->n_flush[flush_type])++; Loading Loading @@ -460,6 +460,11 @@ buf_flush_try_page( block->io_fix = BUF_IO_WRITE; block->flush_type = flush_type; if (buf_pool->n_flush[flush_type] == 0) { os_event_reset(buf_pool->no_flush[flush_type]); } (buf_pool->n_flush[flush_type])++; rw_lock_s_lock_gen(&(block->lock), BUF_IO_WRITE); Loading Loading
BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -6,3 +6,4 @@ monty@work.mysql.com sasha@mysql.sashanet.com heikki@donna.mysql.fi miguel@light.local monty@donna.mysql.fi
include/my_base.h +3 −0 Original line number Diff line number Diff line Loading @@ -215,6 +215,9 @@ enum ha_base_keytype { #define HA_ERR_LOCK_TABLE_FULL 147 #define HA_ERR_READ_ONLY_TRANSACTION 148 /* Updates not allowed */ #define HA_ERR_LOCK_DEADLOCK 149 #define HA_ERR_CANNOT_ADD_FOREIGN 150 /* Cannot add a foreign key constr. */ #define HA_ERR_NO_REFERENCED_ROW 151 /* Cannot add a child row */ #define HA_ERR_ROW_IS_REFERENCED 152 /* Cannot delete a parent row */ /* Other constants */ Loading
include/mysqld_error.h +13 −2 Original line number Diff line number Diff line Loading @@ -214,5 +214,16 @@ #define ER_NO_PERMISSON_TO_CREATE_USER 1211 #define ER_UNION_TABLES_IN_DIFFERENT_DIR 1212 #define ER_LOCK_DEADLOCK 1213 #define ER_TABLE_CANT_HANDLE_FULLTEXT 1214 #define ER_ERROR_MESSAGES 215 #define ER_DUMMY1 1214 #define ER_DUMMY2 1215 #define ER_DUMMY3 1216 #define ER_DUMMY4 1217 #define ER_DUMMY5 1218 #define ER_DUMMY6 1219 #define ER_DUMMY7 1220 #define ER_DUMMY8 1221 #define ER_TABLE_CANT_HANDLE_FULLTEXT 1222 #define ER_CANNOT_ADD_FOREIGN 1223 #define ER_NO_REFERENCED_ROW 1224 #define ER_ROW_IS_REFERENCED 1225 #define ER_ERROR_MESSAGES 226
innobase/btr/btr0btr.c +131 −17 Original line number Diff line number Diff line Loading @@ -21,7 +21,7 @@ Created 6/2/1994 Heikki Tuuri #include "lock0lock.h" #include "ibuf0ibuf.h" /* /** Node pointers ------------- Leaf pages of a B-tree contain the index records stored in the Loading Loading @@ -2255,6 +2255,7 @@ btr_index_rec_validate( ulint len; ulint n; ulint i; char err_buf[1000]; n = dict_index_get_n_fields(index); Loading @@ -2262,6 +2263,9 @@ btr_index_rec_validate( fprintf(stderr, "Record has %lu fields, should have %lu\n", rec_get_n_fields(rec), n); rec_sprintf(err_buf, 900, rec); fprintf(stderr, "InnoDB: record %s\n", err_buf); return(FALSE); } Loading @@ -2276,6 +2280,9 @@ btr_index_rec_validate( "Record field %lu len is %lu, should be %lu\n", i, len, dtype_get_fixed_size(type)); rec_sprintf(err_buf, 900, rec); fprintf(stderr, "InnoDB: record %s\n", err_buf); return(FALSE); } } Loading Loading @@ -2330,7 +2337,6 @@ btr_validate_level( ulint level) /* in: level number */ { ulint space; mtr_t mtr; page_t* page; page_t* right_page; page_t* father_page; Loading @@ -2344,6 +2350,8 @@ btr_validate_level( dtuple_t* node_ptr_tuple; ibool ret = TRUE; dict_index_t* index; mtr_t mtr; char err_buf[1000]; mtr_start(&mtr); Loading Loading @@ -2382,9 +2390,9 @@ btr_validate_level( if (level == 0) { if (!btr_index_page_validate(page, index)) { fprintf(stderr, "Error in page %lu in index %s\n", buf_frame_get_page_no(page), index->name); "Error in page %lu in index %s, level %lu\n", buf_frame_get_page_no(page), index->name, level); ret = FALSE; } } Loading @@ -2402,12 +2410,32 @@ btr_validate_level( right_page = btr_page_get(space, right_page_no, RW_X_LATCH, &mtr); ut_a(cmp_rec_rec(page_rec_get_prev(page_get_supremum_rec(page)), if (cmp_rec_rec(page_rec_get_prev(page_get_supremum_rec(page)), page_rec_get_next(page_get_infimum_rec(right_page)), UT_LIST_GET_FIRST(tree->tree_indexes)) < 0); UT_LIST_GET_FIRST(tree->tree_indexes)) >= 0) { fprintf(stderr, "InnoDB: Error on pages %lu and %lu in index %s\n", buf_frame_get_page_no(page), right_page_no, index->name); fprintf(stderr, "InnoDB: records in wrong order on adjacent pages\n"); rec_sprintf(err_buf, 900, page_rec_get_prev(page_get_supremum_rec(page))); fprintf(stderr, "InnoDB: record %s\n", err_buf); rec_sprintf(err_buf, 900, page_rec_get_next(page_get_infimum_rec(right_page))); fprintf(stderr, "InnoDB: record %s\n", err_buf); ret = FALSE; } } if ((level > 0) && (left_page_no == FIL_NULL)) { if (level > 0 && left_page_no == FIL_NULL) { ut_a(REC_INFO_MIN_REC_FLAG & rec_get_info_bits( page_rec_get_next(page_get_infimum_rec(page)))); } Loading @@ -2418,8 +2446,38 @@ btr_validate_level( node_ptr = btr_page_get_father_node_ptr(tree, page, &mtr); ut_a(node_ptr == btr_page_get_father_for_rec(tree, page, page_rec_get_prev(page_get_supremum_rec(page)), &mtr)); if (btr_node_ptr_get_child_page_no(node_ptr) != buf_frame_get_page_no(page) || node_ptr != btr_page_get_father_for_rec(tree, page, page_rec_get_prev(page_get_supremum_rec(page)), &mtr)) { fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); fprintf(stderr, "InnoDB: node pointer to the page is wrong\n"); rec_sprintf(err_buf, 900, node_ptr); fprintf(stderr, "InnoDB: node ptr %s\n", err_buf); fprintf(stderr, "InnoDB: node ptr child page n:o %lu\n", btr_node_ptr_get_child_page_no(node_ptr)); rec_sprintf(err_buf, 900, btr_page_get_father_for_rec(tree, page, page_rec_get_prev(page_get_supremum_rec(page)), &mtr)); fprintf(stderr, "InnoDB: record on page %s\n", err_buf); ret = FALSE; goto node_ptr_fails; } father_page = buf_frame_align(node_ptr); Loading @@ -2431,7 +2489,33 @@ btr_validate_level( page_rec_get_next( page_get_infimum_rec(page)), 0, heap); ut_a(cmp_dtuple_rec(node_ptr_tuple, node_ptr) == 0); if (cmp_dtuple_rec(node_ptr_tuple, node_ptr) != 0) { fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); fprintf(stderr, "InnoDB: Error: node ptrs differ on levels > 0\n"); rec_sprintf(err_buf, 900, node_ptr); fprintf(stderr, "InnoDB: node ptr %s\n", err_buf); rec_sprintf(err_buf, 900, page_rec_get_next( page_get_infimum_rec(page))); fprintf(stderr, "InnoDB: first rec %s\n", err_buf); ret = FALSE; mem_heap_free(heap); goto node_ptr_fails; } mem_heap_free(heap); } Loading @@ -2454,21 +2538,51 @@ btr_validate_level( if (page_rec_get_next(node_ptr) != page_get_supremum_rec(father_page)) { ut_a(right_node_ptr == page_rec_get_next(node_ptr)); if (right_node_ptr != page_rec_get_next(node_ptr)) { ret = FALSE; fprintf(stderr, "InnoDB: node pointer to the right page is wrong\n"); fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); } } else { right_father_page = buf_frame_align( right_node_ptr); ut_a(right_node_ptr == page_rec_get_next( if (right_node_ptr != page_rec_get_next( page_get_infimum_rec( right_father_page))); ut_a(buf_frame_get_page_no(right_father_page) == btr_page_get_next(father_page, &mtr)); right_father_page))) { ret = FALSE; fprintf(stderr, "InnoDB: node pointer 2 to the right page is wrong\n"); fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); } if (buf_frame_get_page_no(right_father_page) != btr_page_get_next(father_page, &mtr)) { ret = FALSE; fprintf(stderr, "InnoDB: node pointer 3 to the right page is wrong\n"); fprintf(stderr, "InnoDB: Error on page %lu in index %s\n", buf_frame_get_page_no(page), index->name); } } } } node_ptr_fails: mtr_commit(&mtr); if (right_page_no != FIL_NULL) { Loading
innobase/buf/buf0flu.c +8 −3 Original line number Diff line number Diff line Loading @@ -410,9 +410,9 @@ buf_flush_try_page( block->io_fix = BUF_IO_WRITE; block->flush_type = flush_type; if (buf_pool->n_flush[block->flush_type] == 0) { if (buf_pool->n_flush[flush_type] == 0) { os_event_reset(buf_pool->no_flush[block->flush_type]); os_event_reset(buf_pool->no_flush[flush_type]); } (buf_pool->n_flush[flush_type])++; Loading Loading @@ -460,6 +460,11 @@ buf_flush_try_page( block->io_fix = BUF_IO_WRITE; block->flush_type = flush_type; if (buf_pool->n_flush[flush_type] == 0) { os_event_reset(buf_pool->no_flush[flush_type]); } (buf_pool->n_flush[flush_type])++; rw_lock_s_lock_gen(&(block->lock), BUF_IO_WRITE); Loading