7
7
# should be done or reviewed by the maintainer!
8
8
--- a/storage/innobase/btr/btr0btr.c
9
9
+++ b/storage/innobase/btr/btr0btr.c
11
root_page_no = dict_index_get_page(index);
13
block = btr_block_get(space, zip_size, root_page_no, RW_X_LATCH, mtr);
12
block = btr_block_get(space, zip_size, root_page_no, RW_X_LATCH,
15
15
+ if (srv_pass_corrupt_table && !block) {
33
33
if (flag == BTR_N_LEAF_PAGES) {
34
34
seg_header = root + PAGE_HEADER + PAGE_BTR_SEG_LEAF;
36
@@ -1433,6 +1445,13 @@
36
@@ -1437,6 +1449,13 @@
39
root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH, &mtr);
38
root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH,
41
41
+ if (srv_pass_corrupt_table && !root) {
42
42
+ mtr_commit(&mtr);
47
47
#ifdef UNIV_BTR_DEBUG
48
48
ut_a(btr_root_fseg_validate(FIL_PAGE_DATA + PAGE_BTR_SEG_LEAF
50
@@ -1455,6 +1474,12 @@
50
@@ -1460,6 +1479,12 @@
53
root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH, &mtr);
52
root = btr_page_get(space, zip_size, root_page_no, RW_X_LATCH,
55
55
+ if (srv_pass_corrupt_table && !root) {
56
56
+ mtr_commit(&mtr);
74
74
header = buf_block_get_frame(block) + PAGE_HEADER + PAGE_BTR_SEG_TOP;
75
75
--- a/storage/innobase/btr/btr0cur.c
76
76
+++ b/storage/innobase/btr/btr0cur.c
79
78
mode = latch_mode == BTR_SEARCH_LEAF ? RW_S_LATCH : RW_X_LATCH;
80
get_block = btr_block_get(space, zip_size, page_no, mode, mtr);
82
+ if (srv_pass_corrupt_table && !get_block) {
87
ut_a(page_is_comp(get_block->frame) == page_is_comp(page));
88
#endif /* UNIV_BTR_DEBUG */
90
get_block = btr_block_get(space, zip_size,
94
+ if (srv_pass_corrupt_table && !get_block) {
99
ut_a(page_is_comp(get_block->frame)
100
== page_is_comp(page));
103
get_block = btr_block_get(space, zip_size, page_no,
106
+ if (srv_pass_corrupt_table && !get_block) {
110
#ifdef UNIV_BTR_DEBUG
111
ut_a(page_is_comp(get_block->frame) == page_is_comp(page));
112
#endif /* UNIV_BTR_DEBUG */
114
get_block = btr_block_get(space, zip_size,
118
+ if (srv_pass_corrupt_table && !get_block) {
122
#ifdef UNIV_BTR_DEBUG
123
ut_a(page_is_comp(get_block->frame)
124
== page_is_comp(page));
126
get_block = btr_block_get(space, zip_size,
127
left_page_no, mode, mtr);
79
get_block = btr_block_get(
80
space, zip_size, page_no, mode, cursor->index, mtr);
82
+ if (srv_pass_corrupt_table && !get_block) {
87
ut_a(page_is_comp(get_block->frame) == page_is_comp(page));
88
#endif /* UNIV_BTR_DEBUG */
90
get_block = btr_block_get(
91
space, zip_size, left_page_no,
92
RW_X_LATCH, cursor->index, mtr);
94
+ if (srv_pass_corrupt_table && !get_block) {
99
ut_a(page_is_comp(get_block->frame)
100
== page_is_comp(page));
102
get_block = btr_block_get(
103
space, zip_size, page_no,
104
RW_X_LATCH, cursor->index, mtr);
106
+ if (srv_pass_corrupt_table && !get_block) {
110
#ifdef UNIV_BTR_DEBUG
111
ut_a(page_is_comp(get_block->frame) == page_is_comp(page));
112
#endif /* UNIV_BTR_DEBUG */
114
get_block = btr_block_get(
115
space, zip_size, right_page_no,
116
RW_X_LATCH, cursor->index, mtr);
118
+ if (srv_pass_corrupt_table && !get_block) {
122
#ifdef UNIV_BTR_DEBUG
123
ut_a(page_is_comp(get_block->frame)
124
== page_is_comp(page));
127
left_page_no, mode, cursor->index, mtr);
128
128
cursor->left_block = get_block;
130
130
+ if (srv_pass_corrupt_table && !get_block) {
134
134
#ifdef UNIV_BTR_DEBUG
135
135
ut_a(page_is_comp(get_block->frame)
136
136
== page_is_comp(page));
140
get_block = btr_block_get(space, zip_size, page_no, mode, mtr);
139
get_block = btr_block_get(
140
space, zip_size, page_no, mode, cursor->index, mtr);
142
142
+ if (srv_pass_corrupt_table && !get_block) {
277
277
index = btr_cur_get_index(btr_pcur_get_btr_cur(cursor));
279
279
page_cursor = btr_pcur_get_page_cur(cursor);
281
next_block = btr_block_get(space, zip_size, next_page_no,
282
cursor->latch_mode, mtr);
282
btr_pcur_get_btr_cur(cursor)->index, mtr);
283
283
next_page = buf_block_get_frame(next_block);
285
285
+ if (srv_pass_corrupt_table && !next_page) {
404
404
+ bpage->is_corrupt = TRUE;
406
406
if (srv_force_recovery < SRV_FORCE_IGNORE_CORRUPT) {
407
fputs("InnoDB: Ending processing because of"
408
" a corrupt database page.\n",
409
@@ -3893,6 +3932,7 @@
407
/* If page space id is larger than TRX_SYS_SPACE
408
(0), we will attempt to mark the corresponding
409
@@ -3956,6 +3995,7 @@
415
415
if (recv_recovery_is_on()) {
416
416
/* Pages must be uncompressed for crash recovery. */
417
@@ -3902,8 +3942,11 @@
417
@@ -3965,8 +4005,11 @@
419
419
if (uncompressed && !recv_no_ibuf_operations) {
420
420
ibuf_merge_or_delete_for_page(