Commit graph

183 commits

Author SHA1 Message Date
marko
766fb4d1c7 branches/zip: Zero out the BLOB pointers when decoding deleted records.
Improve diagnostics.

btr_cur_pessimistic_update(): Add page_zip_validate() assertion.

page_zip_decompress(): Initialize all BLOB pointers.

page_zip_clear_rec(): Add page_zip_header_cmp() assertion.

page_delete_rec_list_end(): Add page_zip_validate() assertion.
2006-08-03 08:06:45 +00:00
marko
441c29e94f branches/zip: Fix some crash recovery bugs.
dict_load_table(): Initialize table->flags with zip_size.

mlog_parse_nbytes(), mlog_parse_string(): Add parameter page_zip and
write the changes also to the compressed page if one is specified.
Assert that these functions are not called on FIL_PAGE_INDEX pages.

buf_page_io_complete(): Replace block->frame with frame where appropriate.

recv_parse_or_apply_log_rec_body(): Add ut_a(!page_zip) where appropriate.

page_parse_delete_rec_list(): Add parameter page_zip.
2006-08-02 05:49:15 +00:00
marko
e4077d5651 branches/zip: buf_flush_init_for_writing(): Invoke page_zip_calc_checksum()
on page_zip->data, so that the freshly written fields will be included.

page_cur_delete_rec(): Add a page_zip_validate() assertion to the end.
2006-08-01 12:05:04 +00:00
marko
555c8af6ef branches/zip: Properly merge records to compressed pages. 2006-08-01 10:11:04 +00:00
marko
f9755e8018 branches/zip: Improve debugging.
page_zip_decompress(): Move the function body to page_zip_decompress_low(),
add the parameter do_validate() to enable page_validate() assertion.  Wrap
page_zip_decompress_low() with do_validate=TRUE.

page_zip_validate(): Invoke page_zip_decompress_low() with do_validate=FALSE,
as page_validate() may fail when the compressed page is being updated
in-place.

page_dir_slot_check(): Replace buf_frame_align() with ut_align_down()
in order to avoid an assertion failure in page_zip_validate(), which
will now invoke page_validate() via page_zip_decompress().
2006-08-01 08:53:55 +00:00
marko
8f7bbe15ca branches/zip: Bug fixes.
buf_page_io_complete(): On FIL_PAGE_TYPE_ZBLOB (compressed BLOB pages),
read the space_id from a different location.

page_zip_compress(), page_zip_write_rec(), page_zip_write_blob_ptr():
Replace page_simple_validate_new() with page_validate().

page_zip_clear_rec(): When running out of log space, do not attempt to
recompress the page, because the directory slots might be unbalanced and
the page_validate() assertion in page_zip_compress() would fail.
Instead, clear the BLOB pointers of the deleted record on the
uncompressed page, so that page_zip_validate() will succeed.

page_zip_validate(): Remove the comment about page_zip_clear_rec().
A mismatch always indicates a serious inconsistency.
2006-08-01 07:58:38 +00:00
marko
8c55373635 branches/zip: Stamp some header fields to compressed BLOB pages.
buf_flush_init_for_writing(): On FIL_PAGE_TYPE_ZBLOB, write to
page_zip->data instead of page.

page_zip_write_rec(), page_zip_write_blob_ptr(), page_zip_write_node_ptr():
Add ut_ad(page_simple_validate_new()).
2006-07-31 18:27:17 +00:00
marko
62adcfabeb branches/zip: Fix a bug in consistent reads of rows containing BLOB data.
btr_rec_copy_externally_stored_field(): Add parameter zip_size.
Do not call buf_block_align(rec), because rec can also be in
dynamically allocated memory.  buf_block_align() can only be invoked
on addresses inside the buffer pool.

page_zip_clear_rec(): Improve formatting.
2006-07-31 06:43:25 +00:00
marko
5ac7833038 branches/zip: page_zip_validate(): Replace buf_frame_alloc() with
ut_malloc() to avoid breaking the latching order.

page_rec_check(), page_dir_slot_get_rec(): Replace buf_frame_align()
with ut_align_down() to avoid assertion failures in page_zip_validate().
2006-07-28 07:34:33 +00:00
marko
1ef8a89c98 branches/zip: btr_store_big_rec_extern_fields(),
btr_free_externally_stored_field(): Replace mlog_write_ulint()
with mach_write_to_4() when page_zip != NULL.  The operation is
logged by page_zip_write_blob_ptr().
2006-07-27 12:32:12 +00:00
marko
ffab57c6c2 branches/zip: Remove a bogus page_zip_validate() assertion failure found
by running index_merge_ror_cpk on 1-kilobyte compressed pages.

page_delete_rec_list_start(): Remove the page_zip_validate() assertion.

btr_page_split_and_insert(): Add page_zip_validate() assertions about
page and new_page after moving the records.
2006-07-07 10:42:41 +00:00
marko
06030f00ce branches/zip: dict_build_table_def_step(): Refuse to create a compressed
table in the system tablespace.
2006-07-06 19:24:53 +00:00
marko
8b8617af79 branches/zip: page_zip_fields_encode(): Fuse fixed-length fields to a maximum
of DICT_MAX_INDEX_COL_LEN (768 bytes).
2006-07-06 11:40:28 +00:00
marko
a437de8eb3 branches/zip: page_zip_fields_encode(): Assign to trx_id_col after
encoding any pending data.
2006-07-06 10:39:09 +00:00
marko
7d369a60a2 branches/zip: page_zip_fields_encode(): Do not increment "col" without
encoding a column.
2006-07-06 08:31:26 +00:00
marko
66f6beaedc mlog_parse_index(): Remove an off-by-one error in the bounds check that
would cause the crash recovery of MLOG_COMP_PAGE_REORGANIZE to fail.
(Bug #20855)
2006-07-04 21:34:25 +00:00
marko
81fca4d1ea branches/zip: btr_parse_page_reorganize(): Add parameter page_zip. 2006-07-04 21:15:30 +00:00
marko
de4b2a1a98 branches/zip: Eliminate some duplicated code to release btr_search_latch
that was found while investigating Bug #19081.
2006-07-04 11:55:26 +00:00
marko
51fb42bfa8 branches/zip: page_cur_insert_rec_low(): Replace page_zip_alloc()
with page_zip_available() in order to avoid an extra page_zip_compress().

page_zip_available(): Make the function public.

page0zip.ic: Sort the inline function declarations in order to avoid
forward references, which do not work on some compilers.
2006-07-03 19:12:21 +00:00
marko
5d5bdb1b43 branches/zip: page_zip_dir_size(): Remove bogus debug assertion.
The function will be invoked in page_zip_decompress() before setting
page_zip->m_start or page_zip->m_end.
2006-06-30 11:59:28 +00:00
marko
7279a72289 branches/zip: Improve assertions related to the linked lists of records
on B-tree index pages.

page_rec_set_next(): Assert that rec != next.

rec_get_next_ptr(), rec_get_next_offs(): On compact pages, assert that
there are at least REC_N_NEW_EXTRA_BYTES + 1 between records.

page_cur_insert_rec_write_log(): Replace a buf_frame_align() call
with ut_align_offset().

page_cur_insert_rec_low(): Assert that current_rec != insert_rec.
2006-06-30 09:49:32 +00:00
marko
9972604267 branches/zip: Eliminate page corruption in btr_compress() when
page_zip_reorganize() was invoked.

btr_compress(): Obtain orig_pred and orig_succ after copying the records.
Add a debug assertion about FIL_PAGE_PREV.

page_copy_rec_list_end(), page_copy_rec_list_start(): Change the return
type from ibool to rec_t.  Adjust the return value after invoking
page_zip_reorganize().
2006-06-28 12:01:29 +00:00
marko
05c16ac6d2 branches/zip: buf_page_io_complete(): Copy also uninitialized pages to
uncompressed storage, to avoid bogus warnings about page number mismatch.
2006-06-21 12:38:42 +00:00
marko
f7e2b57faa branches/zip: Tighten the assertions about page_zip->m_end. 2006-06-21 11:24:47 +00:00
marko
bfb9c2d0fb branches/zip: fsp_fill_free_list(): Replace % with ut_2pow_remainder(). 2006-06-21 11:14:11 +00:00
marko
bbd6d812d3 branches/zip: Add debug assertions about page_zip->m_end < paeg_zip->m_size. 2006-06-21 09:15:09 +00:00
marko
7bc09e8c18 branches/zip: Make page_zip_validate() independent of UNIV_DEBUG.
Replace most occurrences of #if defined UNIV_DEBUG || defined UNIV_ZIP_DEBUG
with #ifdef UNIV_ZIP_DEBUG.
2006-06-20 19:35:59 +00:00
marko
0d5392310b branches/zip: fil_space_truncate_start(): Fix an incorrect assertion,
disable unless #ifdef UNIV_LOG_ARCHIVE.
2006-06-20 11:35:41 +00:00
marko
c8a574bb5a branches/zip: fsp_fill_free_list(): Compute "init_xdes" properly. 2006-06-20 11:32:26 +00:00
marko
4e913e2440 branches/zip: Add assertions.
btr_compress(): Invoke page_zip_validate() on the page being compressed.

recv_parse_or_apply_log_rec_body(): Assert that MLOG_WRITE_STRING is
never used on compressed B-tree pages.
2006-06-19 11:08:46 +00:00
marko
3e02b8dbe5 branches/zip: page_zip_reorganize(): On success, write to the redo log. 2006-06-19 11:07:21 +00:00
marko
be7add3b56 branches/zip: Add parameter zip_size to fil_io().
fil_read(), fil_write(): Make these inlined functions in fil0fil.c.

fil_write_lsn_and_arch_no_to_file(): Remove the parameter space_id and
note that this function is to be called on the system tablespace, which
is uncompressed.
2006-06-15 07:27:13 +00:00
marko
77fa0fd682 branches/zip: Improve some assertions.
recv_parse_or_apply_log_rec_body(): Assert that mlog_parse_nbytes() is
never called on compressed B-tree pages.

page_zip_simple_validate(): Correct a typo in a debug assertion.

xdes_calc_descriptor_page(): Fix an incorrect debug assertion.
2006-06-14 11:19:08 +00:00
marko
fa846a7be5 branches/zip: page_zip_validate(): First compare the page headers
and obey the added flag page_zip_validate_header_only.
2006-06-14 08:15:44 +00:00
marko
fa63e363c2 branches/zip: buf_flush_init_for_writing(): Determine zip_size from
page_zip instead of calling fil_space_get_zip_size().  In
fil_create_new_single_table_tablespace(), the table space has not yet
been created.  Handle also FIL_PAGE_TYPE_ALLOCATED.
2006-06-14 07:47:32 +00:00
marko
9bc27fe8b3 branches/zip: Fix some bugs in the crash recovery of compressed tablespaces.
fil_node_open_file(): Set node->size correctly for compressed tablespaces.

fsp_header_write_space_id(): Rename to fsp_header_write_fields(),
add parameter zip_size.

fil_io(): Add UNIV_UNLIKELY hints to assertion-like tests.
2006-06-14 06:29:41 +00:00
marko
645e56909f branches/zip: Merge revisions 583:634 from trunk. 2006-06-13 20:23:26 +00:00
marko
ecb6a00408 branches/zip: fsp_try_extend_data_file(): Extend the data file by
one megabyte at a time, no matter what the compressed page size is.
2006-06-13 19:27:40 +00:00
marko
781f1ca5b0 branches/zip: Add page_zip_validate() assertions and remove a bogus
page_zip_assertion() failure in page_copy_rec_list_end().

btr_root_raise_and_insert(), btr_lift_page_up(), btr_compress():
Add page_zip_validate() assertions.

btr_compress(): Only copy FIL_PAGE_PREV when UNIV_BTR_DEBUG is defined.

page_cur_delete_rec(): Document why the page_zip_validate() assertion
was removed.

page_copy_rec_list_end(): Remove the page_zip_validate() assertion and
document why.

page_move_rec_list_end(): Add page_zip_validate() assertion.
2006-06-13 08:24:26 +00:00
marko
d228053315 branches/zip: Add page_zip_validate() checks.
page_cur_delete_rec(): Do not call page_zip_validate() in the beginning,
because btr_set_min_rec_mark() in btr_cur_pessimistic_delete() will
cause a temporary mismatch.

Document temporary mismatches caused by btr_set_min_rec_mark() calls
and explain why they will not cause any problems.
2006-06-12 12:37:54 +00:00
marko
0260ba1f0f branches/zip: Cleanup suggested by Osku.
ut_is_2pow(): New function for testing if a number is zero or a power of two.
Use this function instead of bitwise arithmetics or ut_2_power_up() where
possible.
2006-06-07 11:23:21 +00:00
marko
0e6236a625 branches/zip: Replace all ut_ad(page_zip_validate()) assertions with
ut_a(page_zip_validate()) that are enabled if UNIV_DEBUG or
UNIV_ZIP_DEBUG is defined.
2006-06-07 11:06:12 +00:00
marko
4cda2f9d0c branches/zip: Remove remaining occurrences of XDES_DESCRIBED_PER_PAGE.
mlog_parse_string(): Remove an off-by-one error in an assertion.

fil_extend_space_to_desired_size(): fsp_header_get_free_limit(),
fsp_try_extend_data_file(): Replace UNIV_PAGE_SIZE with the actual page size.

PAGE_ZIP_MIN_SIZE: New constant, to be used in assertions.

FSP_SEG_INODES_PER_PAGE: Add parameter zip_size.

fsp_seg_inode_page_get_nth_inode(), fsp_seg_inode_page_find_used(),
fsp_seg_inode_page_find_free(): Add parameter zip_size.
2006-06-07 10:41:58 +00:00
marko
5e6324b7e7 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.
2006-06-06 07:42:04 +00:00
marko
fe5474851a branches/zip: When identifying insert buffer bitmap pages, note that the
pages occur every zip_size pages in compressed tablespaces, instead of
UNIV_PAGESIZE (or XDES_DESCRIBED_PER_PAGE).

ibuf_bitmap_page(): Add parameter zip_size.

ibuf_fixed_addr_page(): Add parameter space.
2006-06-05 09:04:19 +00:00
marko
831916878d branches/zip: Write compressed pages to disk.
os_aio_simulated_handle(): Temporarily disable os_file_check_page_trailers(),
which cannot be invoked on compressed pages.

dict_table_add_system_columns(): New function, split from
dict_table_add_to_cache().

mlog_parse_index(): Add system columns to the dummy table and identify
DB_TRX_ID and DB_ROLL_PTR in the dummy index.

buf_LRU_get_free_block(): Note that page_zip->data should be allocated from
an aligned memory pool.

buf_flush_buffered_writes(): Write compressed pages to disk.

buf_flush_post_to_doublewrite_buf(): Copy compressed pages to the
doublewrite buffer.  Zero fill any excess space.

buf_flush_init_for_writing(): Treat all compressed pages the same.

buf_read_page_low(): Read compressed pages from disk.

buf_page_io_complete(): Process compressed pages.

trx_sys_doublewrite_init_or_restore_page(): Process compressed pages.

mlog_write_initial_log_record_fast(): Enable a debug printout
#ifdef UNIV_LOG_DEBUG.

fsp_header_init(), fsp_fill_free_list(): Pass the compressed page size
to buf_page_create().

page_zip_compress_write_log(): Flatten the if-else if-else logic.

page_zip_parse_write_blob_ptr(): Do not test page_zip if page==NULL.

page_zip_parse_write_node_ptr(): Do not test page_zip if page==NULL.
Invoke mlog_close() correctly.

row_sel_store_row_id_to_prebuilt(): Add UNIV_UNLIKELY hint to an
assertion-like test.
2006-05-30 09:04:57 +00:00
marko
b560b0ea20 branches/zip: buf_flush_buffered_writes(): Disable the checks on compressed
pages.

buf_flush_post_to_doublewrite_buf(): Add a TODO comment about compressed pages.
2006-05-24 14:35:22 +00:00
marko
c432dc4b9c branches/zip: Merge revisions 560:583 from trunk. 2006-05-22 09:30:34 +00:00
marko
3979344d88 branches/zip: buf_flush_buffered_writes(): Replace four occurrences of
mach_read_from_4(...) != mach_read_from_4(...) with memcmp(..., ..., 4).
2006-05-22 09:23:30 +00:00
marko
93ea672ae3 branches/zip: Write the compressed page size to SYS_TABLES.TYPE and adjust
a few places accordingly.

os_aio_simulated_handle(): Add TODO comments about skipping the write
checks for compressed pages.

dict_create_sys_tables_tuple(): Write the compressed page size to
the TYPE column.

open_or_create_data_files(): Simplify the fil_node_create() call.

fil_node_create(): Do not touch space->zip_size.  It was already initialized
by fil_space_create().

fil_reset_too_high_lsns(), buf_flush_buffered_writes(): Add TODO comment
about compressed pages.

buf_flush_init_for_writing(): Handle pages of type FIL_PAGE_INODE,
FIL_PAGE_IBUF_BITMAP, and FIL_PAGE_TYPE_FSP_HDR as uncompressed ones.
2006-05-17 12:03:32 +00:00