mirror of
https://github.com/MariaDB/server.git
synced 2025-02-01 03:21:53 +01:00
branches/zip: Remove some more references to XDES_DESCRIBED_PER_PAGE.
ibuf_parse_bitmap_init(), ibuf_bitmap_page_init(), ibuf_bitmap_page_get_bits(), ibuf_bitmap_set_bits(), ibuf_bitmap_page_no_calc(), ibuf_bitmap_get_map_page(), xdes_calc_descriptor_page(), xdes_calc_descriptor_index(), fsp_descr_page(): Add parameter zip_size.
This commit is contained in:
parent
fe5474851a
commit
5e6324b7e7
6 changed files with 189 additions and 80 deletions
|
@ -606,14 +606,24 @@ ulint
|
||||||
xdes_calc_descriptor_page(
|
xdes_calc_descriptor_page(
|
||||||
/*======================*/
|
/*======================*/
|
||||||
/* out: descriptor page offset */
|
/* out: descriptor page offset */
|
||||||
|
ulint zip_size, /* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint offset) /* in: page offset */
|
ulint offset) /* in: page offset */
|
||||||
{
|
{
|
||||||
#if UNIV_PAGE_SIZE <= XDES_ARR_OFFSET \
|
#if UNIV_PAGE_SIZE <= XDES_ARR_OFFSET \
|
||||||
+ (XDES_DESCRIBED_PER_PAGE / FSP_EXTENT_SIZE) * XDES_SIZE
|
+ (UNIV_PAGE_SIZE / FSP_EXTENT_SIZE) * XDES_SIZE
|
||||||
# error
|
# error
|
||||||
#endif
|
#endif
|
||||||
|
#if 1024 <= XDES_ARR_OFFSET + (1024 / FSP_EXTENT_SIZE) * XDES_SIZE
|
||||||
return(ut_2pow_round(offset, XDES_DESCRIBED_PER_PAGE));
|
# error /* extent descriptor will not fit on smallest page_zip */
|
||||||
|
#endif
|
||||||
|
ut_ad(zip_size <= XDES_ARR_OFFSET
|
||||||
|
+ (zip_size / FSP_EXTENT_SIZE) * XDES_SIZE);
|
||||||
|
if (!zip_size) {
|
||||||
|
return(ut_2pow_round(offset, UNIV_PAGE_SIZE));
|
||||||
|
} else {
|
||||||
|
return(ut_2pow_round(offset, zip_size));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -623,10 +633,16 @@ ulint
|
||||||
xdes_calc_descriptor_index(
|
xdes_calc_descriptor_index(
|
||||||
/*=======================*/
|
/*=======================*/
|
||||||
/* out: descriptor index */
|
/* out: descriptor index */
|
||||||
|
ulint zip_size, /* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint offset) /* in: page offset */
|
ulint offset) /* in: page offset */
|
||||||
{
|
{
|
||||||
return(ut_2pow_remainder(offset, XDES_DESCRIBED_PER_PAGE) /
|
if (!zip_size) {
|
||||||
FSP_EXTENT_SIZE);
|
return(ut_2pow_remainder(offset, UNIV_PAGE_SIZE)
|
||||||
|
/ FSP_EXTENT_SIZE);
|
||||||
|
} else {
|
||||||
|
return(ut_2pow_remainder(offset, zip_size) / FSP_EXTENT_SIZE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -652,15 +668,21 @@ xdes_get_descriptor_with_space_hdr(
|
||||||
{
|
{
|
||||||
ulint limit;
|
ulint limit;
|
||||||
ulint size;
|
ulint size;
|
||||||
|
ulint zip_size;
|
||||||
ulint descr_page_no;
|
ulint descr_page_no;
|
||||||
page_t* descr_page;
|
page_t* descr_page;
|
||||||
|
|
||||||
ut_ad(mtr);
|
ut_ad(mtr);
|
||||||
ut_ad(mtr_memo_contains(mtr, fil_space_get_latch(space),
|
ut_ad(mtr_memo_contains(mtr, fil_space_get_latch(space),
|
||||||
MTR_MEMO_X_LOCK));
|
MTR_MEMO_X_LOCK));
|
||||||
|
ut_ad(mtr_memo_contains(mtr,
|
||||||
|
buf_block_align(sp_header), MTR_MEMO_PAGE_S_FIX)
|
||||||
|
|| mtr_memo_contains(mtr,
|
||||||
|
buf_block_align(sp_header), MTR_MEMO_PAGE_X_FIX));
|
||||||
/* Read free limit and space size */
|
/* Read free limit and space size */
|
||||||
limit = mtr_read_ulint(sp_header + FSP_FREE_LIMIT, MLOG_4BYTES, mtr);
|
limit = mach_read_from_4(sp_header + FSP_FREE_LIMIT);
|
||||||
size = mtr_read_ulint(sp_header + FSP_SIZE, MLOG_4BYTES, mtr);
|
size = mach_read_from_4(sp_header + FSP_SIZE);
|
||||||
|
zip_size = mach_read_from_4(sp_header + FSP_PAGE_ZIP_SIZE);
|
||||||
|
|
||||||
/* If offset is >= size or > limit, return NULL */
|
/* If offset is >= size or > limit, return NULL */
|
||||||
|
|
||||||
|
@ -675,7 +697,7 @@ xdes_get_descriptor_with_space_hdr(
|
||||||
fsp_fill_free_list(FALSE, space, sp_header, mtr);
|
fsp_fill_free_list(FALSE, space, sp_header, mtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
descr_page_no = xdes_calc_descriptor_page(offset);
|
descr_page_no = xdes_calc_descriptor_page(zip_size, offset);
|
||||||
|
|
||||||
if (descr_page_no == 0) {
|
if (descr_page_no == 0) {
|
||||||
/* It is on the space header page */
|
/* It is on the space header page */
|
||||||
|
@ -690,7 +712,7 @@ xdes_get_descriptor_with_space_hdr(
|
||||||
}
|
}
|
||||||
|
|
||||||
return(descr_page + XDES_ARR_OFFSET
|
return(descr_page + XDES_ARR_OFFSET
|
||||||
+ XDES_SIZE * xdes_calc_descriptor_index(offset));
|
+ XDES_SIZE * xdes_calc_descriptor_index(zip_size, offset));
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -1304,7 +1326,7 @@ fsp_fill_free_list(
|
||||||
#endif /* UNIV_SYNC_DEBUG */
|
#endif /* UNIV_SYNC_DEBUG */
|
||||||
fsp_init_file_page(ibuf_page, &ibuf_mtr);
|
fsp_init_file_page(ibuf_page, &ibuf_mtr);
|
||||||
|
|
||||||
ibuf_bitmap_page_init(ibuf_page, &ibuf_mtr);
|
ibuf_bitmap_page_init(ibuf_page, zip_size, &ibuf_mtr);
|
||||||
|
|
||||||
mtr_commit(&ibuf_mtr);
|
mtr_commit(&ibuf_mtr);
|
||||||
}
|
}
|
||||||
|
@ -1313,8 +1335,11 @@ fsp_fill_free_list(
|
||||||
mtr);
|
mtr);
|
||||||
xdes_init(descr, mtr);
|
xdes_init(descr, mtr);
|
||||||
|
|
||||||
#if XDES_DESCRIBED_PER_PAGE % FSP_EXTENT_SIZE
|
#if UNIV_PAGE_SIZE % FSP_EXTENT_SIZE
|
||||||
# error "XDES_DESCRIBED_PER_PAGE % FSP_EXTENT_SIZE != 0"
|
# error "UNIV_PAGE_SIZE % FSP_EXTENT_SIZE != 0"
|
||||||
|
#endif
|
||||||
|
#if 1024 % FSP_EXTENT_SIZE /* smallest page_zip->size */
|
||||||
|
# error "1024 % FSP_EXTENT_SIZE != 0"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (0 == i % XDES_DESCRIBED_PER_PAGE) {
|
if (0 == i % XDES_DESCRIBED_PER_PAGE) {
|
||||||
|
|
201
ibuf/ibuf0ibuf.c
201
ibuf/ibuf0ibuf.c
|
@ -566,18 +566,23 @@ void
|
||||||
ibuf_bitmap_page_init(
|
ibuf_bitmap_page_init(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
page_t* page, /* in: bitmap page */
|
page_t* page, /* in: bitmap page */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
mtr_t* mtr) /* in: mtr */
|
mtr_t* mtr) /* in: mtr */
|
||||||
{
|
{
|
||||||
ulint bit_offset;
|
|
||||||
ulint byte_offset;
|
ulint byte_offset;
|
||||||
|
|
||||||
|
ut_ad(!(zip_size & (zip_size - 1))); /* must be a power of 2 */
|
||||||
|
|
||||||
|
fil_page_set_type(page, FIL_PAGE_IBUF_BITMAP);
|
||||||
|
|
||||||
/* Write all zeros to the bitmap */
|
/* Write all zeros to the bitmap */
|
||||||
|
|
||||||
bit_offset = XDES_DESCRIBED_PER_PAGE * IBUF_BITS_PER_PAGE;
|
if (!zip_size) {
|
||||||
|
byte_offset = (UNIV_PAGE_SIZE * IBUF_BITS_PER_PAGE + 7) / 8;
|
||||||
byte_offset = bit_offset / 8 + 1; /* better: (bit_offset + 7) / 8 */
|
} else {
|
||||||
|
byte_offset = (zip_size * IBUF_BITS_PER_PAGE + 7) / 8;
|
||||||
fil_page_set_type(page, FIL_PAGE_IBUF_BITMAP);
|
}
|
||||||
|
|
||||||
memset(page + IBUF_BITMAP, 0, byte_offset);
|
memset(page + IBUF_BITMAP, 0, byte_offset);
|
||||||
|
|
||||||
|
@ -596,12 +601,14 @@ ibuf_parse_bitmap_init(
|
||||||
byte* ptr, /* in: buffer */
|
byte* ptr, /* in: buffer */
|
||||||
byte* end_ptr __attribute__((unused)), /* in: buffer end */
|
byte* end_ptr __attribute__((unused)), /* in: buffer end */
|
||||||
page_t* page, /* in: page or NULL */
|
page_t* page, /* in: page or NULL */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
mtr_t* mtr) /* in: mtr or NULL */
|
mtr_t* mtr) /* in: mtr or NULL */
|
||||||
{
|
{
|
||||||
ut_ad(ptr && end_ptr);
|
ut_ad(ptr && end_ptr);
|
||||||
|
|
||||||
if (page) {
|
if (page) {
|
||||||
ibuf_bitmap_page_init(page, mtr);
|
ibuf_bitmap_page_init(page, zip_size, mtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
return(ptr);
|
return(ptr);
|
||||||
|
@ -616,6 +623,8 @@ ibuf_bitmap_page_get_bits(
|
||||||
/* out: value of bits */
|
/* out: value of bits */
|
||||||
page_t* page, /* in: bitmap page */
|
page_t* page, /* in: bitmap page */
|
||||||
ulint page_no,/* in: page whose bits to get */
|
ulint page_no,/* in: page whose bits to get */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint bit, /* in: IBUF_BITMAP_FREE, IBUF_BITMAP_BUFFERED, ... */
|
ulint bit, /* in: IBUF_BITMAP_FREE, IBUF_BITMAP_BUFFERED, ... */
|
||||||
mtr_t* mtr __attribute__((unused))) /* in: mtr containing an
|
mtr_t* mtr __attribute__((unused))) /* in: mtr containing an
|
||||||
x-latch to the bitmap
|
x-latch to the bitmap
|
||||||
|
@ -630,11 +639,17 @@ ibuf_bitmap_page_get_bits(
|
||||||
#if IBUF_BITS_PER_PAGE % 2
|
#if IBUF_BITS_PER_PAGE % 2
|
||||||
# error "IBUF_BITS_PER_PAGE % 2 != 0"
|
# error "IBUF_BITS_PER_PAGE % 2 != 0"
|
||||||
#endif
|
#endif
|
||||||
|
ut_ad(!(zip_size & (zip_size - 1))); /* must be a power of 2 */
|
||||||
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
|
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
|
||||||
MTR_MEMO_PAGE_X_FIX));
|
MTR_MEMO_PAGE_X_FIX));
|
||||||
|
|
||||||
bit_offset = (page_no % XDES_DESCRIBED_PER_PAGE) * IBUF_BITS_PER_PAGE
|
if (!zip_size) {
|
||||||
+ bit;
|
bit_offset = (page_no % UNIV_PAGE_SIZE) * IBUF_BITS_PER_PAGE
|
||||||
|
+ bit;
|
||||||
|
} else {
|
||||||
|
bit_offset = (page_no & (zip_size - 1)) * IBUF_BITS_PER_PAGE
|
||||||
|
+ bit;
|
||||||
|
}
|
||||||
|
|
||||||
byte_offset = bit_offset / 8;
|
byte_offset = bit_offset / 8;
|
||||||
bit_offset = bit_offset % 8;
|
bit_offset = bit_offset % 8;
|
||||||
|
@ -662,6 +677,8 @@ ibuf_bitmap_page_set_bits(
|
||||||
/*======================*/
|
/*======================*/
|
||||||
page_t* page, /* in: bitmap page */
|
page_t* page, /* in: bitmap page */
|
||||||
ulint page_no,/* in: page whose bits to set */
|
ulint page_no,/* in: page whose bits to set */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint bit, /* in: IBUF_BITMAP_FREE, IBUF_BITMAP_BUFFERED, ... */
|
ulint bit, /* in: IBUF_BITMAP_FREE, IBUF_BITMAP_BUFFERED, ... */
|
||||||
ulint val, /* in: value to set */
|
ulint val, /* in: value to set */
|
||||||
mtr_t* mtr) /* in: mtr containing an x-latch to the bitmap page */
|
mtr_t* mtr) /* in: mtr containing an x-latch to the bitmap page */
|
||||||
|
@ -674,6 +691,7 @@ ibuf_bitmap_page_set_bits(
|
||||||
#if IBUF_BITS_PER_PAGE % 2
|
#if IBUF_BITS_PER_PAGE % 2
|
||||||
# error "IBUF_BITS_PER_PAGE % 2 != 0"
|
# error "IBUF_BITS_PER_PAGE % 2 != 0"
|
||||||
#endif
|
#endif
|
||||||
|
ut_ad(!(zip_size & (zip_size - 1))); /* must be a power of 2 */
|
||||||
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
|
ut_ad(mtr_memo_contains(mtr, buf_block_align(page),
|
||||||
MTR_MEMO_PAGE_X_FIX));
|
MTR_MEMO_PAGE_X_FIX));
|
||||||
#ifdef UNIV_IBUF_DEBUG
|
#ifdef UNIV_IBUF_DEBUG
|
||||||
|
@ -681,8 +699,13 @@ ibuf_bitmap_page_set_bits(
|
||||||
|| (0 == ibuf_count_get(buf_frame_get_space_id(page),
|
|| (0 == ibuf_count_get(buf_frame_get_space_id(page),
|
||||||
page_no)));
|
page_no)));
|
||||||
#endif
|
#endif
|
||||||
bit_offset = (page_no % XDES_DESCRIBED_PER_PAGE) * IBUF_BITS_PER_PAGE
|
if (!zip_size) {
|
||||||
+ bit;
|
bit_offset = (page_no % UNIV_PAGE_SIZE) * IBUF_BITS_PER_PAGE
|
||||||
|
+ bit;
|
||||||
|
} else {
|
||||||
|
bit_offset = (page_no & (zip_size - 1)) * IBUF_BITS_PER_PAGE
|
||||||
|
+ bit;
|
||||||
|
}
|
||||||
|
|
||||||
byte_offset = bit_offset / 8;
|
byte_offset = bit_offset / 8;
|
||||||
bit_offset = bit_offset % 8;
|
bit_offset = bit_offset % 8;
|
||||||
|
@ -714,11 +737,19 @@ ibuf_bitmap_page_no_calc(
|
||||||
/*=====================*/
|
/*=====================*/
|
||||||
/* out: the bitmap page number where
|
/* out: the bitmap page number where
|
||||||
the file page is mapped */
|
the file page is mapped */
|
||||||
|
ulint zip_size, /* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint page_no) /* in: tablespace page number */
|
ulint page_no) /* in: tablespace page number */
|
||||||
{
|
{
|
||||||
return(FSP_IBUF_BITMAP_OFFSET
|
ut_ad(!(zip_size & (zip_size - 1))); /* must be a power of 2 */
|
||||||
+ XDES_DESCRIBED_PER_PAGE
|
|
||||||
* (page_no / XDES_DESCRIBED_PER_PAGE));
|
if (!zip_size) {
|
||||||
|
return(FSP_IBUF_BITMAP_OFFSET
|
||||||
|
+ (page_no & ~(UNIV_PAGE_SIZE - 1)));
|
||||||
|
} else {
|
||||||
|
return(FSP_IBUF_BITMAP_OFFSET
|
||||||
|
+ (page_no & ~(zip_size - 1)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -734,11 +765,13 @@ ibuf_bitmap_get_map_page(
|
||||||
x-latched */
|
x-latched */
|
||||||
ulint space, /* in: space id of the file page */
|
ulint space, /* in: space id of the file page */
|
||||||
ulint page_no,/* in: page number of the file page */
|
ulint page_no,/* in: page number of the file page */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
mtr_t* mtr) /* in: mtr */
|
mtr_t* mtr) /* in: mtr */
|
||||||
{
|
{
|
||||||
page_t* page;
|
page_t* page;
|
||||||
|
|
||||||
page = buf_page_get(space, ibuf_bitmap_page_no_calc(page_no),
|
page = buf_page_get(space, ibuf_bitmap_page_no_calc(zip_size, page_no),
|
||||||
RW_X_LATCH, mtr);
|
RW_X_LATCH, mtr);
|
||||||
#ifdef UNIV_SYNC_DEBUG
|
#ifdef UNIV_SYNC_DEBUG
|
||||||
buf_page_dbg_add_level(page, SYNC_IBUF_BITMAP);
|
buf_page_dbg_add_level(page, SYNC_IBUF_BITMAP);
|
||||||
|
@ -763,6 +796,9 @@ ibuf_set_free_bits_low(
|
||||||
mtr_t* mtr) /* in: mtr */
|
mtr_t* mtr) /* in: mtr */
|
||||||
{
|
{
|
||||||
page_t* bitmap_page;
|
page_t* bitmap_page;
|
||||||
|
ulint space;
|
||||||
|
ulint page_no;
|
||||||
|
ulint zip_size;
|
||||||
|
|
||||||
if (type & DICT_CLUSTERED) {
|
if (type & DICT_CLUSTERED) {
|
||||||
|
|
||||||
|
@ -774,8 +810,10 @@ ibuf_set_free_bits_low(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(buf_frame_get_space_id(page),
|
space = buf_frame_get_space_id(page);
|
||||||
buf_frame_get_page_no(page), mtr);
|
page_no = buf_frame_get_page_no(page);
|
||||||
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, zip_size, mtr);
|
||||||
#ifdef UNIV_IBUF_DEBUG
|
#ifdef UNIV_IBUF_DEBUG
|
||||||
/* fprintf(stderr,
|
/* fprintf(stderr,
|
||||||
"Setting page no %lu free bits to %lu should be %lu\n",
|
"Setting page no %lu free bits to %lu should be %lu\n",
|
||||||
|
@ -784,9 +822,8 @@ ibuf_set_free_bits_low(
|
||||||
|
|
||||||
ut_a(val <= ibuf_index_page_calc_free(page));
|
ut_a(val <= ibuf_index_page_calc_free(page));
|
||||||
#endif
|
#endif
|
||||||
ibuf_bitmap_page_set_bits(bitmap_page, buf_frame_get_page_no(page),
|
ibuf_bitmap_page_set_bits(bitmap_page, page_no, zip_size,
|
||||||
IBUF_BITMAP_FREE, val, mtr);
|
IBUF_BITMAP_FREE, val, mtr);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -808,6 +845,9 @@ ibuf_set_free_bits(
|
||||||
{
|
{
|
||||||
mtr_t mtr;
|
mtr_t mtr;
|
||||||
page_t* bitmap_page;
|
page_t* bitmap_page;
|
||||||
|
ulint space;
|
||||||
|
ulint page_no;
|
||||||
|
ulint zip_size;
|
||||||
|
|
||||||
if (type & DICT_CLUSTERED) {
|
if (type & DICT_CLUSTERED) {
|
||||||
|
|
||||||
|
@ -821,16 +861,18 @@ ibuf_set_free_bits(
|
||||||
|
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(buf_frame_get_space_id(page),
|
space = buf_frame_get_space_id(page);
|
||||||
buf_frame_get_page_no(page), &mtr);
|
page_no = buf_frame_get_page_no(page);
|
||||||
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, zip_size, &mtr);
|
||||||
|
|
||||||
if (max_val != ULINT_UNDEFINED) {
|
if (max_val != ULINT_UNDEFINED) {
|
||||||
#ifdef UNIV_IBUF_DEBUG
|
#ifdef UNIV_IBUF_DEBUG
|
||||||
ulint old_val;
|
ulint old_val;
|
||||||
|
|
||||||
old_val = ibuf_bitmap_page_get_bits(bitmap_page,
|
old_val = ibuf_bitmap_page_get_bits(
|
||||||
buf_frame_get_page_no(page),
|
bitmap_page, page_no, zip_size,
|
||||||
IBUF_BITMAP_FREE, &mtr);
|
IBUF_BITMAP_FREE, &mtr);
|
||||||
if (old_val != max_val) {
|
if (old_val != max_val) {
|
||||||
/* fprintf(stderr,
|
/* fprintf(stderr,
|
||||||
"Ibuf: page %lu old val %lu max val %lu\n",
|
"Ibuf: page %lu old val %lu max val %lu\n",
|
||||||
|
@ -847,7 +889,7 @@ ibuf_set_free_bits(
|
||||||
|
|
||||||
ut_a(val <= ibuf_index_page_calc_free(page));
|
ut_a(val <= ibuf_index_page_calc_free(page));
|
||||||
#endif
|
#endif
|
||||||
ibuf_bitmap_page_set_bits(bitmap_page, buf_frame_get_page_no(page),
|
ibuf_bitmap_page_set_bits(bitmap_page, page_no, zip_size,
|
||||||
IBUF_BITMAP_FREE, val, &mtr);
|
IBUF_BITMAP_FREE, val, &mtr);
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
}
|
}
|
||||||
|
@ -953,10 +995,12 @@ ibuf_fixed_addr_page(
|
||||||
/*=================*/
|
/*=================*/
|
||||||
/* out: TRUE if a fixed address ibuf i/o page */
|
/* out: TRUE if a fixed address ibuf i/o page */
|
||||||
ulint space, /* in: space id */
|
ulint space, /* in: space id */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint page_no)/* in: page number */
|
ulint page_no)/* in: page number */
|
||||||
{
|
{
|
||||||
return((space == 0 && page_no == IBUF_TREE_ROOT_PAGE_NO)
|
return((space == 0 && page_no == IBUF_TREE_ROOT_PAGE_NO)
|
||||||
|| ibuf_bitmap_page(fil_space_get_zip_size(space), page_no));
|
|| ibuf_bitmap_page(zip_size, page_no));
|
||||||
}
|
}
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
@ -972,6 +1016,7 @@ ibuf_page(
|
||||||
page_t* bitmap_page;
|
page_t* bitmap_page;
|
||||||
mtr_t mtr;
|
mtr_t mtr;
|
||||||
ibool ret;
|
ibool ret;
|
||||||
|
ulint zip_size;
|
||||||
|
|
||||||
if (recv_no_ibuf_operations) {
|
if (recv_no_ibuf_operations) {
|
||||||
/* Recovery is running: no ibuf operations should be
|
/* Recovery is running: no ibuf operations should be
|
||||||
|
@ -980,7 +1025,9 @@ ibuf_page(
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ibuf_fixed_addr_page(space, page_no)) {
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
|
||||||
|
if (ibuf_fixed_addr_page(space, zip_size, page_no)) {
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
@ -995,10 +1042,10 @@ ibuf_page(
|
||||||
|
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, &mtr);
|
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, zip_size, &mtr);
|
||||||
|
|
||||||
ret = ibuf_bitmap_page_get_bits(bitmap_page, page_no, IBUF_BITMAP_IBUF,
|
ret = ibuf_bitmap_page_get_bits(bitmap_page, page_no, zip_size,
|
||||||
&mtr);
|
IBUF_BITMAP_IBUF, &mtr);
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
|
|
||||||
return(ret);
|
return(ret);
|
||||||
|
@ -1018,7 +1065,7 @@ ibuf_page_low(
|
||||||
address ibuf pages */
|
address ibuf pages */
|
||||||
{
|
{
|
||||||
page_t* bitmap_page;
|
page_t* bitmap_page;
|
||||||
ibool ret;
|
ulint zip_size;
|
||||||
|
|
||||||
#ifdef UNIV_LOG_DEBUG
|
#ifdef UNIV_LOG_DEBUG
|
||||||
if (space % 2 != 0) {
|
if (space % 2 != 0) {
|
||||||
|
@ -1028,16 +1075,17 @@ ibuf_page_low(
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ibuf_fixed_addr_page(space, page_no)) {
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
|
||||||
|
if (ibuf_fixed_addr_page(space, zip_size, page_no)) {
|
||||||
|
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, mtr);
|
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, zip_size, mtr);
|
||||||
|
|
||||||
ret = ibuf_bitmap_page_get_bits(bitmap_page, page_no, IBUF_BITMAP_IBUF,
|
return(ibuf_bitmap_page_get_bits(bitmap_page, page_no, zip_size,
|
||||||
mtr);
|
IBUF_BITMAP_IBUF, mtr));
|
||||||
return(ret);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
|
@ -1633,6 +1681,7 @@ ibuf_add_free_page(
|
||||||
page_t* page;
|
page_t* page;
|
||||||
page_t* root;
|
page_t* root;
|
||||||
page_t* bitmap_page;
|
page_t* bitmap_page;
|
||||||
|
ulint zip_size;
|
||||||
|
|
||||||
ut_a(space == 0);
|
ut_a(space == 0);
|
||||||
|
|
||||||
|
@ -1689,10 +1738,12 @@ ibuf_add_free_page(
|
||||||
/* Set the bit indicating that this page is now an ibuf tree page
|
/* Set the bit indicating that this page is now an ibuf tree page
|
||||||
(level 2 page) */
|
(level 2 page) */
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, &mtr);
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
|
||||||
ibuf_bitmap_page_set_bits(bitmap_page, page_no, IBUF_BITMAP_IBUF,
|
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, zip_size, &mtr);
|
||||||
TRUE, &mtr);
|
|
||||||
|
ibuf_bitmap_page_set_bits(bitmap_page, page_no, zip_size,
|
||||||
|
IBUF_BITMAP_IBUF, TRUE, &mtr);
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
|
|
||||||
mutex_exit(&ibuf_mutex);
|
mutex_exit(&ibuf_mutex);
|
||||||
|
@ -1715,6 +1766,7 @@ ibuf_remove_free_page(
|
||||||
mtr_t mtr2;
|
mtr_t mtr2;
|
||||||
page_t* header_page;
|
page_t* header_page;
|
||||||
ulint page_no;
|
ulint page_no;
|
||||||
|
ulint zip_size;
|
||||||
page_t* page;
|
page_t* page;
|
||||||
page_t* root;
|
page_t* root;
|
||||||
page_t* bitmap_page;
|
page_t* bitmap_page;
|
||||||
|
@ -1806,10 +1858,12 @@ ibuf_remove_free_page(
|
||||||
/* Set the bit indicating that this page is no more an ibuf tree page
|
/* Set the bit indicating that this page is no more an ibuf tree page
|
||||||
(level 2 page) */
|
(level 2 page) */
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, &mtr);
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
|
||||||
ibuf_bitmap_page_set_bits(bitmap_page, page_no, IBUF_BITMAP_IBUF,
|
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, zip_size, &mtr);
|
||||||
FALSE, &mtr);
|
|
||||||
|
ibuf_bitmap_page_set_bits(bitmap_page, page_no, zip_size,
|
||||||
|
IBUF_BITMAP_IBUF, FALSE, &mtr);
|
||||||
#ifdef UNIV_DEBUG_FILE_ACCESSES
|
#ifdef UNIV_DEBUG_FILE_ACCESSES
|
||||||
buf_page_set_file_page_was_freed(space, page_no);
|
buf_page_set_file_page_was_freed(space, page_no);
|
||||||
#endif
|
#endif
|
||||||
|
@ -2529,6 +2583,7 @@ ibuf_insert_low(
|
||||||
ulint page_nos[IBUF_MAX_N_PAGES_MERGED];
|
ulint page_nos[IBUF_MAX_N_PAGES_MERGED];
|
||||||
ulint n_stored;
|
ulint n_stored;
|
||||||
ulint bits;
|
ulint bits;
|
||||||
|
ulint zip_size;
|
||||||
mtr_t mtr;
|
mtr_t mtr;
|
||||||
mtr_t bitmap_mtr;
|
mtr_t bitmap_mtr;
|
||||||
|
|
||||||
|
@ -2625,7 +2680,10 @@ ibuf_insert_low(
|
||||||
#endif
|
#endif
|
||||||
mtr_start(&bitmap_mtr);
|
mtr_start(&bitmap_mtr);
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, &bitmap_mtr);
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
|
||||||
|
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, zip_size,
|
||||||
|
&bitmap_mtr);
|
||||||
|
|
||||||
/* We check if the index page is suitable for buffered entries */
|
/* We check if the index page is suitable for buffered entries */
|
||||||
|
|
||||||
|
@ -2638,7 +2696,7 @@ ibuf_insert_low(
|
||||||
goto function_exit;
|
goto function_exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
bits = ibuf_bitmap_page_get_bits(bitmap_page, page_no,
|
bits = ibuf_bitmap_page_get_bits(bitmap_page, page_no, zip_size,
|
||||||
IBUF_BITMAP_FREE, &bitmap_mtr);
|
IBUF_BITMAP_FREE, &bitmap_mtr);
|
||||||
|
|
||||||
if (buffered + entry_size + page_dir_calc_reserved_space(1)
|
if (buffered + entry_size + page_dir_calc_reserved_space(1)
|
||||||
|
@ -2659,10 +2717,11 @@ ibuf_insert_low(
|
||||||
/* Set the bitmap bit denoting that the insert buffer contains
|
/* Set the bitmap bit denoting that the insert buffer contains
|
||||||
buffered entries for this index page, if the bit is not set yet */
|
buffered entries for this index page, if the bit is not set yet */
|
||||||
|
|
||||||
old_bit_value = ibuf_bitmap_page_get_bits(bitmap_page, page_no,
|
old_bit_value = ibuf_bitmap_page_get_bits(
|
||||||
IBUF_BITMAP_BUFFERED, &bitmap_mtr);
|
bitmap_page, page_no, zip_size,
|
||||||
|
IBUF_BITMAP_BUFFERED, &bitmap_mtr);
|
||||||
if (!old_bit_value) {
|
if (!old_bit_value) {
|
||||||
ibuf_bitmap_page_set_bits(bitmap_page, page_no,
|
ibuf_bitmap_page_set_bits(bitmap_page, page_no, zip_size,
|
||||||
IBUF_BITMAP_BUFFERED, TRUE, &bitmap_mtr);
|
IBUF_BITMAP_BUFFERED, TRUE, &bitmap_mtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2878,6 +2937,10 @@ ibuf_insert_to_index_page(
|
||||||
&page_cur, NULL,
|
&page_cur, NULL,
|
||||||
entry, index, NULL, 0, mtr))) {
|
entry, index, NULL, 0, mtr))) {
|
||||||
|
|
||||||
|
ulint space;
|
||||||
|
ulint page_no;
|
||||||
|
ulint zip_size;
|
||||||
|
|
||||||
ut_print_timestamp(stderr);
|
ut_print_timestamp(stderr);
|
||||||
|
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
@ -2892,13 +2955,14 @@ ibuf_insert_to_index_page(
|
||||||
"InnoDB: is now probably corrupt. Please run CHECK TABLE on\n"
|
"InnoDB: is now probably corrupt. Please run CHECK TABLE on\n"
|
||||||
"InnoDB: that table.\n", stderr);
|
"InnoDB: that table.\n", stderr);
|
||||||
|
|
||||||
|
space = buf_frame_get_space_id(page);
|
||||||
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
page_no = buf_frame_get_page_no(page);
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(
|
bitmap_page = ibuf_bitmap_get_map_page(
|
||||||
buf_frame_get_space_id(page),
|
space, page_no, zip_size, mtr);
|
||||||
buf_frame_get_page_no(page),
|
|
||||||
mtr);
|
|
||||||
old_bits = ibuf_bitmap_page_get_bits(
|
old_bits = ibuf_bitmap_page_get_bits(
|
||||||
bitmap_page,
|
bitmap_page, page_no, zip_size,
|
||||||
buf_frame_get_page_no(page),
|
|
||||||
IBUF_BITMAP_FREE, mtr);
|
IBUF_BITMAP_FREE, mtr);
|
||||||
|
|
||||||
fprintf(stderr, "Bitmap bits %lu\n", (ulong) old_bits);
|
fprintf(stderr, "Bitmap bits %lu\n", (ulong) old_bits);
|
||||||
|
@ -3053,6 +3117,7 @@ ibuf_merge_or_delete_for_page(
|
||||||
#ifdef UNIV_IBUF_DEBUG
|
#ifdef UNIV_IBUF_DEBUG
|
||||||
ulint volume;
|
ulint volume;
|
||||||
#endif
|
#endif
|
||||||
|
ulint zip_size;
|
||||||
ibool tablespace_being_deleted = FALSE;
|
ibool tablespace_being_deleted = FALSE;
|
||||||
ibool corruption_noticed = FALSE;
|
ibool corruption_noticed = FALSE;
|
||||||
mtr_t mtr;
|
mtr_t mtr;
|
||||||
|
@ -3070,8 +3135,14 @@ ibuf_merge_or_delete_for_page(
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (ibuf_fixed_addr_page(space, page_no) || fsp_descr_page(page_no)
|
if (trx_sys_hdr_page(space, page_no)) {
|
||||||
|| trx_sys_hdr_page(space, page_no)) {
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
zip_size = fil_space_get_zip_size(space);
|
||||||
|
|
||||||
|
if (ibuf_fixed_addr_page(space, zip_size, page_no)
|
||||||
|
|| fsp_descr_page(zip_size, page_no)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3094,9 +3165,10 @@ ibuf_merge_or_delete_for_page(
|
||||||
|
|
||||||
if (update_ibuf_bitmap) {
|
if (update_ibuf_bitmap) {
|
||||||
mtr_start(&mtr);
|
mtr_start(&mtr);
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, &mtr);
|
bitmap_page = ibuf_bitmap_get_map_page(
|
||||||
|
space, page_no, zip_size, &mtr);
|
||||||
|
|
||||||
if (!ibuf_bitmap_page_get_bits(bitmap_page, page_no,
|
if (!ibuf_bitmap_page_get_bits(bitmap_page, page_no, zip_size,
|
||||||
IBUF_BITMAP_BUFFERED, &mtr)) {
|
IBUF_BITMAP_BUFFERED, &mtr)) {
|
||||||
/* No inserts buffered for this page */
|
/* No inserts buffered for this page */
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
|
@ -3147,8 +3219,8 @@ ibuf_merge_or_delete_for_page(
|
||||||
fputs(" InnoDB: Dump of the ibuf bitmap page:\n",
|
fputs(" InnoDB: Dump of the ibuf bitmap page:\n",
|
||||||
stderr);
|
stderr);
|
||||||
|
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no,
|
bitmap_page = ibuf_bitmap_get_map_page(
|
||||||
&mtr);
|
space, page_no, zip_size, &mtr);
|
||||||
buf_page_print(bitmap_page, 0);
|
buf_page_print(bitmap_page, 0);
|
||||||
|
|
||||||
mtr_commit(&mtr);
|
mtr_commit(&mtr);
|
||||||
|
@ -3271,12 +3343,13 @@ reset_bit:
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (update_ibuf_bitmap) {
|
if (update_ibuf_bitmap) {
|
||||||
bitmap_page = ibuf_bitmap_get_map_page(space, page_no, &mtr);
|
bitmap_page = ibuf_bitmap_get_map_page(
|
||||||
ibuf_bitmap_page_set_bits(bitmap_page, page_no,
|
space, page_no, zip_size, &mtr);
|
||||||
|
ibuf_bitmap_page_set_bits(bitmap_page, page_no, zip_size,
|
||||||
IBUF_BITMAP_BUFFERED, FALSE, &mtr);
|
IBUF_BITMAP_BUFFERED, FALSE, &mtr);
|
||||||
if (page) {
|
if (page) {
|
||||||
ulint old_bits = ibuf_bitmap_page_get_bits(bitmap_page,
|
ulint old_bits = ibuf_bitmap_page_get_bits(bitmap_page,
|
||||||
page_no, IBUF_BITMAP_FREE, &mtr);
|
page_no, zip_size, IBUF_BITMAP_FREE, &mtr);
|
||||||
ulint new_bits = ibuf_index_page_calc_free(page);
|
ulint new_bits = ibuf_index_page_calc_free(page);
|
||||||
#ifdef UNIV_IBUF_DEBUG
|
#ifdef UNIV_IBUF_DEBUG
|
||||||
/* fprintf(stderr, "Old bits %lu new bits %lu max size %lu\n",
|
/* fprintf(stderr, "Old bits %lu new bits %lu max size %lu\n",
|
||||||
|
@ -3284,9 +3357,9 @@ reset_bit:
|
||||||
page_get_max_insert_size_after_reorganize(page, 1)); */
|
page_get_max_insert_size_after_reorganize(page, 1)); */
|
||||||
#endif
|
#endif
|
||||||
if (old_bits != new_bits) {
|
if (old_bits != new_bits) {
|
||||||
ibuf_bitmap_page_set_bits(bitmap_page, page_no,
|
ibuf_bitmap_page_set_bits(
|
||||||
IBUF_BITMAP_FREE,
|
bitmap_page, page_no, zip_size,
|
||||||
new_bits, &mtr);
|
IBUF_BITMAP_FREE, new_bits, &mtr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,6 +315,8 @@ ibool
|
||||||
fsp_descr_page(
|
fsp_descr_page(
|
||||||
/*===========*/
|
/*===========*/
|
||||||
/* out: TRUE if a descriptor page */
|
/* out: TRUE if a descriptor page */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint page_no);/* in: page number */
|
ulint page_no);/* in: page number */
|
||||||
/***************************************************************
|
/***************************************************************
|
||||||
Parses a redo log record of a file page init. */
|
Parses a redo log record of a file page init. */
|
||||||
|
|
|
@ -13,12 +13,16 @@ ibool
|
||||||
fsp_descr_page(
|
fsp_descr_page(
|
||||||
/*===========*/
|
/*===========*/
|
||||||
/* out: TRUE if a descriptor page */
|
/* out: TRUE if a descriptor page */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
ulint page_no)/* in: page number */
|
ulint page_no)/* in: page number */
|
||||||
{
|
{
|
||||||
if (page_no % XDES_DESCRIBED_PER_PAGE == FSP_XDES_OFFSET) {
|
ut_ad(!(zip_size & (zip_size - 1))); /* must be a power of 2 */
|
||||||
|
|
||||||
return(TRUE);
|
if (!zip_size) {
|
||||||
|
return(UNIV_UNLIKELY((page_no & (UNIV_PAGE_SIZE - 1))
|
||||||
|
== FSP_XDES_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
||||||
return(FALSE);
|
return(UNIV_UNLIKELY((page_no & (zip_size - 1)) == FSP_XDES_OFFSET));
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,6 +53,8 @@ void
|
||||||
ibuf_bitmap_page_init(
|
ibuf_bitmap_page_init(
|
||||||
/*==================*/
|
/*==================*/
|
||||||
page_t* page, /* in: bitmap page */
|
page_t* page, /* in: bitmap page */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
mtr_t* mtr); /* in: mtr */
|
mtr_t* mtr); /* in: mtr */
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
Resets the free bits of the page in the ibuf bitmap. This is done in a
|
Resets the free bits of the page in the ibuf bitmap. This is done in a
|
||||||
|
@ -268,6 +270,8 @@ ibuf_parse_bitmap_init(
|
||||||
byte* ptr, /* in: buffer */
|
byte* ptr, /* in: buffer */
|
||||||
byte* end_ptr,/* in: buffer end */
|
byte* end_ptr,/* in: buffer end */
|
||||||
page_t* page, /* in: page or NULL */
|
page_t* page, /* in: page or NULL */
|
||||||
|
ulint zip_size,/* in: compressed page size in bytes;
|
||||||
|
0 for uncompressed pages */
|
||||||
mtr_t* mtr); /* in: mtr or NULL */
|
mtr_t* mtr); /* in: mtr or NULL */
|
||||||
#ifdef UNIV_IBUF_DEBUG
|
#ifdef UNIV_IBUF_DEBUG
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
|
@ -878,7 +878,8 @@ recv_parse_or_apply_log_rec_body(
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MLOG_IBUF_BITMAP_INIT:
|
case MLOG_IBUF_BITMAP_INIT:
|
||||||
ptr = ibuf_parse_bitmap_init(ptr, end_ptr, page, mtr);
|
ptr = ibuf_parse_bitmap_init(ptr, end_ptr, page,
|
||||||
|
page_zip ? page_zip->size : 0, mtr);
|
||||||
break;
|
break;
|
||||||
case MLOG_INIT_FILE_PAGE:
|
case MLOG_INIT_FILE_PAGE:
|
||||||
ptr = fsp_parse_init_file_page(ptr, end_ptr, page);
|
ptr = fsp_parse_init_file_page(ptr, end_ptr, page);
|
||||||
|
|
Loading…
Add table
Reference in a new issue