Commit graph

411 commits

Author SHA1 Message Date
marko
7d6a4e7058 branches/zip: page_cur_insert_rec_low(): Write a log record of
recompressing the page.
2006-04-28 10:53:24 +00:00
marko
bb6387683a branches/zip: Minor improvements.
buf_flush_init_for_writing(): Calculate the checksum with the actual zip_size.

buf_calc_zblob_page_checksum(): Skip the field FIL_PAGE_SPACE_OR_CHKSUM.

trx_sys_doublewrite_init_or_restore_page(): Use the actual zip_size.

page_cur_insert_rec_low(): If page_zip_alloc() fails, try compressing the
whole page afterwards.
2006-04-28 09:30:40 +00:00
marko
5d591705bb branches/zip: btr_lift_page_up(): Set level before page_zip_compress(). 2006-04-27 10:48:12 +00:00
marko
ed354ce80c branches/zip: Minor cleanup and bug fixes
btr_page_reorganize_low(): Rename new_page to temp_page.

btr_store_big_rec_extern_fields(): FIL_PAGE_TYPE is 2 bytes, not 4.

buf_page_init(), buf_page_create(), buf_read_page_low(),
buf_page_init_for_read(): Add parameter zip_size.

buf_page_init_for_backup_restore(),
recv_apply_log_recs_for_backup(): Enclose in #ifdef UNIV_HOTBACKUP.

Enclose some debug code in #ifdef UNIV_LOG_REPLICATE.

page_zip_write_header_log(): Replace page_zip with a pointer to
the uncompressed page.

page_zip_write_rec(): Relax an assertion about blob_no + n_ext.

page_copy_rec_list_to_created_page_write_log(): Allow logging to be disabled.
2006-04-26 09:35:18 +00:00
marko
6dd1d8c4fe branches/zip: Write the compressed page size to SYS_TABLES.TYPE
and to the file space header (FSP_PAGE_ZIP_SIZE, renamed from
FSP_LOWEST_NO_WRITE).

fil_space_struct: Add zip_size.

dict_table_struct: Embed zip_size in flags.

dict_table_zip_size(): Infer zip_size from table->flags.

dict_sys_tables_get_zip_size(): Read zip_size from SYS_TABLES.TYPE.

fil_space_get_zip_size(): Read zip_size from the file space header.

Add the redo log entry type MLOG_ZIP_FILE_CREATE.
2006-04-25 07:12:32 +00:00
marko
802c09ad0a branches/zip: Merge revisions 459:465 from trunk. 2006-04-12 12:39:58 +00:00
marko
0c4dfda3be branches/zip: Merge revisions 265:459 from trunk. 2006-04-12 09:32:17 +00:00
marko
483faa7720 branches/zip: Fix some crash recovery bugs.
page_zip_alloc(): Add parameter "mtr" and log successful calls
to page_zip_compress().

page_zip_write_blob_ptr(), page_zip_write_node_ptr(): Write the offset on
the uncompressed page, because mlog_write_initial_log_record_fast()
does not do so.

page_zip_write_header_log(), page_zip_parse_write_header(): Encode the
offset in one byte.
2006-04-11 18:40:44 +00:00
marko
f119108ff3 branches/zip: Add the redo log type MLOG_ZIP_PAGE_COMPRESS. Remove
MLOG_ZIP_LIST_START_COPY and MLOG_ZIP_LIST_END_COPY.

btr_compress(): Simplify a debug assertion.

page_zip_compress_write_log(), page_zip_parse_compress(): New functions.

page_cur_parse_insert_rec(): Simplify the code.

page_parse_create_zip(): Removed.

page_create_zip(), page_copy_rec_list_end(),
page_copy_rec_list_start(): Invoke page_zip_compress_write_log().
2006-04-11 12:27:06 +00:00
marko
c65c50ae69 branches/zip: Minor cleanup. Remove MLOG_ZIP_ROOT_RAISE.
btr_page_create(): Remove parameters "prev" and "next".  The pointers
to adjacent B-tree pages will be set in the caller before any user
records are inserted.

Remove the redo log entry type MLOG_ZIP_ROOT_RAISE, since
btr_root_raise_and_insert() will not defer modifications to
the compressed page.

btr_attach_half_pages(): Add parameter new_page_zip.
2006-04-11 09:02:27 +00:00
marko
e20dfbc0ce branches/zip: Disable accidentally committed debug code that would break
crash recovery of uncompressed tables.
2006-04-11 08:12:39 +00:00
marko
9b6200978d branches/zip: Replace the redo log entry types
MLOG_ZIP_COMPRESS and MLOG_ZIP_DECOMPRESS with higher-level entry types.
Implement the logging and crash recovery of MLOG_ZIP_PAGE_CREATE.

page_create_zip(): New function for creating a compressed B-tree page.

page_parse_create_zip(): New function for applying a MLOG_ZIP_PAGE_CREATE
redo log record.

btr_page_create(): Remove the prototype.  Add parameters page_zip, level,
prev, and next.

btr0btr.c: Eliminate page_zip_compress() calls where possible.

page_zip_alloc(), page_zip_compress(), page_zip_decompress(),
page_zip_clear_rec(): Remove parameter mtr.

recv_parse_or_apply_log_rec_body(): Handle MLOG_ZIP_PAGE_CREATE.
Add TODO comments for the other added redo log entry types.
2006-04-10 19:48:37 +00:00
marko
b4fe38d5f4 branches/zip: btr_lift_page_up(): Remove return value;
assume that the operation always succeeds.
2006-04-10 06:54:14 +00:00
marko
0906cd0cae branches/zip: Implement crash recovery of writing BLOB pointers.
page_zip_parse_write_blob_ptr(): New function for applying the redo log
record MLOG_ZIP_WRITE_BLOB_PTR.

page_zip_write_blob_ptr(): Write the necessary information to the redo log.

page0zip.c: Tighten the assertions to ensure that blob_ptr < page_zip->n_blobs.

page_zip_write_node_ptr(): Use memcpy() instead of mach_write_to_4().
2006-04-07 12:56:22 +00:00
marko
44b22ebec4 branches/zip: Implement crash recovery of writing to the page header.
page_zip_parse_write_header(): New function for applying the redo log of
MLOG_ZIP_WRITE_HEADER.

page_zip_parse_write_node_ptr(): Mark the log corrupted if !page_zip.
2006-04-07 11:44:14 +00:00
marko
52b7eb50c2 branches/zip: Implement the crash recovery of MLOG_ZIP_WRITE_NODE_PTR.
page_zip_parse_write_node_ptr(): New function to apply a redo log of
MLOG_ZIP_WRITE_NODE_PTR.

page_zip_write_node_ptr(): Write all needed information to the redo log.

page_zip_write_header_log(): Write all necessary information to the redo log.
2006-04-07 11:04:08 +00:00
marko
a1661efb8d branches/zip: Initial steps towards disk-based storage of compressed pages.
dict_mem_table_create(): Account for DICT_TF_COMPRESSED in a debug assertion.

btr_store_big_rec_extern_fields(), btr_free_externally_stored_field(),
btr_copy_externally_stored_field(): Implement the disk format for
compressed BLOB pages.

btr_copy_externally_stored_field(): Improve error reporting and handling
when decompressing BLOB pages.

buf_flush_init_for_writing(), buf_page_is_corrupted(), buf_page_print():
Account for compressed BLOB pages (FIL_PAGE_TYPE_ZBLOB).

buf_calc_zblob_page_checksum(): New function.
2006-04-05 13:41:12 +00:00
marko
7b57df2298 branches/zip: Minor cleanup.
Replace btr_page_get_level() with page_is_leaf() where possible.

row_purge_upd_exist_or_extern(): Remove obsolete TODO comment.

dtuple_convert_big_rec(): Replace a flag variable with goto.
2006-04-04 10:42:05 +00:00
marko
e14e718664 branches/zip: Fix some BLOB handling bugs.
btr_store_big_rec_extern_fields(): Assert that page_zip is non-NULL
if and only if dict_table_is_zip() holds.

btr_free_externally_stored_field(): Observe dict_table_is_zip().
Allow page_zip==NULL even if dict_table_is_zip().  Remove the
related TODO comment in row_purge_upd_exist_or_extern().

page_zip_available(): uncompressed_size already includes
PAGE_ZIP_DIR_SLOT_SIZE.

page_zip_decompress(): Remove bogus assertion d_stream.next_out == last.
Do not subtract BTR_EXTERN_FIELD_REF_SIZE from d_stream.avail_in when
decompressing records, because the records may be deleted later in
page_zip_apply_log(), and no BLOB pointers are allocated for deleted
records.
2006-04-03 20:33:31 +00:00
marko
c7edc2198f branches/zip: Add TODO comment to
row_purge_upd_exist_or_extern().
2006-04-03 12:40:09 +00:00
marko
f4a69e0185 branches/zip: Fix some bugs
btr_page_split_and_insert(): Avoid dereferencing pointers to garbage on
the old page.

btr_cur_pessimistic_insert(): Pass pointer to big_rec_vec to
btr_cur_optimistic_insert().

trx_undo_prev_version_build(): Only invoke rec_set_field_extern_bits()
if n_ext_vect > 0.

row_ins_index_entry_low(): Simplify a debug assertion.

page_copy_rec_list_end_no_locks(): Make the loop slightly more readable.

page_delete_rec_list_end(): Delete records on compressed pages one by one.
2006-04-03 11:19:01 +00:00
marko
b63ff3bedb branches/zip: Minor fixes for BLOB handling.
page_zip_get_n_prev_extern(): Ignore deleted records.

page_zip_write_rec(): Remove bogus debug assertion about the BLOB pointer
being zero-filled.  It would fail when reallocating records from the page
heap or when updating records in place.
2006-03-30 11:47:10 +00:00
marko
3595891399 branches/zip: Correctly identify deleted records when deciding whether to
copy BLOB pointers.

page_zip_dir_find_free_low(): New function,
split from page_zip_dir_find_free().

Add comments about processing the records in heap_no order.

Fix some typographic errors in comments and improve formatting.

page_zip_decompress(): Initialize (clear) the BLOB pointers in deleted records.

page_zip_clear_rec(): Relocate page_zip_validate() assertions, so that they
will not fail if a record containing BLOB pointers is being deleted.

Note that page_zip_validate() will fail if page_zip_clear_rec() is unable
to clear the record.
2006-03-29 14:08:57 +00:00
marko
8c7b1d22ee branches/zip: Fix two bugs.
page_zip_decompress(): Pass size = d_stream.avail_in + 1
to page_zip_apply_log(), since the terminating NUL byte is not included
in the space reserved for the compressed data stream.

page_zip_clear_rec(): Clear also node pointer fields.
2006-03-28 07:57:47 +00:00
marko
98eea391b9 Rename the static page_zip_alloc() to page_zip_malloc() to resolve a clash. 2006-03-27 12:30:25 +00:00
marko
744192c148 branches/zip: Implement custom memory management for zlib.
Wrap ut_malloc() and ut_free() as page_zip_alloc() and page_zip_free().
2006-03-27 12:27:53 +00:00
marko
c720009294 branches/zip: Do not clear the records in page_delete_rec_list_end().
page_delete_rec_list_end(): Do not invoke page_zip_clear_rec().

page_zip_clear_rec(): Remove the global declaration.  Add an assertion
that the record must be on the free list.  Copy onl rec_offs_data_size()
bytes before attempting to clear the record and to compress the page.

page_zip_compress(), page_zip_write_rec(): Remove debug assertions that
trx_id, roll_ptr and node_ptr of deleted records be zero-filled.
2006-03-23 08:13:08 +00:00
marko
3c2576fdd1 branches/zip: Remove a bogus assertion.
page_zip_write_rec(): Allow the record to be delete-marked.
2006-03-22 14:10:09 +00:00
marko
dfebdee95d branches/zip: Bug fix
page_zip_write_trx_id_and_roll_ptr(): Write roll_ptr after trx_id,
not over it.
2006-03-22 10:31:18 +00:00
marko
3b88de21a1 branches/zip: Minor improvements.
page_cur_search_with_match(): Add a page_zip_validate() debug assertion.

page_validate(): Add a missing space to a fprintf() format string.
2006-03-22 08:05:06 +00:00
marko
6ecd734f70 branches/zip: Minor improvements.
page_zip_compress(): Add a debug check that the trx_id and roll_ptr columns
of deleted records are zero-filled.  This should provide some detection
against misdirected writes.

page_zip_decompress(): Correct typos in comments.
2006-03-20 15:14:38 +00:00
marko
6ba1aed1d6 branches/zip: Minor improvements
btr_page_get_father_for_rec(): Remove redundant assertion.
Add UNIV_UNLIKELY to an assertion-like test.

btr_validate_level(): Add debug assertions on page_zip_validate().

page_zip_compress(): Remove bogus assertion.

page_zip_write_rec(): Assert that the record written is neither delete-marked
nor deleted.
2006-03-20 13:21:11 +00:00
marko
4596d491aa branches/zip: Minor bug fix. test-insert still does not pass.
page_zip_compress(): Assert that trx_id and roll_ptr are zero for
deleted records.

page_zip_clear_rec(): Remove comment about need for redo logging.
This operationg is already logged on a higher level.

page_delete_rec_list_end(): Always invoke page_zip_clear_rec()
on compressed pages.
2006-03-17 15:36:25 +00:00
marko
f220444716 branches/zip: Minor fixes
Restore page_zip_clear_rec() to the global scope.
Invoke it in page_delete_rec_list_end().

Add debug assertions to page0zip.c to guard against overwriting data
on the compressed page.
2006-03-17 14:11:57 +00:00
marko
f137c03847 branches/zip: Improve the clearing of deleted records. Try to support
operations on BLOB columns.  There are some bugs in the code, because
test-insert and a few other tests fail.

page_mem_free(): Add parameter index.  Decrement PAGE_N_RECS here.
Move some operations to page_zip_dir_delete().

page_zip_clear_rec(): Make this a static function.

page_zip_dir_delete(): Add parameters index and offsets.
Decrement PAGE_N_RECS and clear info_bits and n_owned.

page_zip_get_n_prev_extern(): Correct the synopsis and the algorithm.
Add parameter page_zip.  Search the records in heap_no order instead
of collation order.

page_zip_compress(), page_zip_decompress(): Only copy BLOB pointers
and increment n_blobs for records that have not been deleted.

page_zip_clear_rec(): Clear trx_id and roll_ptr on the compressed page.

page_zip_dir_delete(): Decrement PAGE_N_RECS.  Shift the array of
BLOB pointers.  Call page_zip_clear_rec().

page_zip_dir_add_slot(): Shift the array of BLOB pointers to make
space of roll_ptr and trx_id.

page_cur_delete_rec(): Do not decrement PAGE_N_RECS or call
page_zip_clear_rec(), as page_mem_free() already does it.
2006-03-16 14:02:22 +00:00
marko
cd7583af1f branches/zip: Minor fixes
trx-undo_prev_version_build(): Pass offsets==NULL to
rec_set_field_extern_bits().

rec_set_field_extern_bits(), rec_set_field_extern_bits_new():
Accept offsets==NULL.

row_upd_rec_in_place(): Remove the bogus comment that the function
would only be invoked on a clustered index.  Remove the related
debug assertion.
2006-03-16 09:44:52 +00:00
marko
9d91b4bd9a branches/zip: Bug fixes for BLOB handling. At least one bug remains:
page_zip_dir_delete() will need to handle BLOBs.

rec_set_field_extern_bits(), rec_set_field_extern_bits_new():
Add parameter offsets.

rec_offs_set_nth_extern(): New function to set an extern bit in offsets.
This will be called when an extern bit is set in a record.

page_cur_rec_insert(), page_cur_insert_rec_low(): Document that the
parameter "offsets" is in/out.

page_zip_dir_delete(): Note that the array of BLOB pointers will need
to be shifted.

page0zip.ic: Document the entry type for clearing a record.

page_zip_available(): Add parameter "index".  Remove parameters
"is_leaf" and "is_clustered".

page_zip_get_trailer_len(): New function for computing the trailer length
of the compressed page.

page_zip_apply_log(): Implement the modification log entry type for
clearing the data bytes of a record.

page_zip_decompress(): Initialize n_blobs when actually copying the
BLOB pointers to place.

page_zip_validate(): Add diagnostic messages for failures.  Check
also m_start, m_end, and n_blobs.

page_zip_write_blob_ptr(): Add page_zip_validate() assertion.
2006-03-14 14:38:45 +00:00
marko
65dfefe2c2 branches/zip: Implement in-place updates of BLOB pointers.
There are still some bugs in the code.

btr_store_big_rec_extern_fields(): Remove assertion on dict_table_is_zip()
to ease testing.

btr_free_externally_stored_field(): Test page_zip instead of
dict_table_is_zip().

page_zip_write_rec(): Add parameter "create".  Try to handle externally
stored columns.

rec_offs_any_extern(): Correct the function comment.

Add rec_offs_n_extern() and page_zip_get_n_prev_extern().

page_zip_dir_decode(): Replace assertion with if (...) return(FALSE).

page_zip_decompress(): Do not clear page_zip->n_blobs after counting the
BLOBs.

page_zip_write_blob_ptr(): Use page_zip_get_n_prev_extern().
Correct an off-by-one error in memcpy().
2006-03-13 15:02:16 +00:00
marko
23d19f8f4b branches/zip: Minor improvements.
btr_cur_pessimistic_update(): Remove extraneous page_zip_write_rec() call.

btr_cur_set_ownership_of_extern_field(): Simplify the logic.

row_upd_rec_in_place(): Make use of parameter "index" in debug assertions.

page_zip_write_rec(): Remove TODO comment about redo log record.
The write will already be covered by higher-level log entries.
2006-03-13 07:42:31 +00:00
marko
2dc343f60e branches/zip: Remove unused parameter "index" of page_mem_free(). 2006-03-10 12:29:22 +00:00
marko
8848914bdd branches/zip: Replace buf_block_align(btr_cur_get_page()) with
buf_block_align(btr_cur_get_rec()).
2006-03-10 12:10:47 +00:00
marko
9d135b3069 branches/zip: Make test-insert --small-test pass.
btr_compress(): Pass the correct page_zip to btr_node_ptr_set_child_page_no().

page_mem_free(): Remove parameter mtr.  Do not call page_zip_clear_rec() here.

page_cur_delete_rec(): Call page_zip_clear_rec() here.  Decrement PAGE_N_RECS
only after calling page_mem_free().  Assert page_zip_validate().
2006-03-10 10:30:56 +00:00
marko
e8e9fb28b4 branches/zip: Note that TRX_ID and ROLL_PTR only exist on B-tree leaf pages
of clustered indexes.  Previously, parts of the code assumed that these
columns would exist on all leaf pages.  Simplify the update-in-place of
these columns.

Add inline function dict_index_is_clust() to replace all tests
index->type & DICT_CLUSTERED.

Remove the redo log entry types MLOG_ZIP_WRITE_TRX_ID and
MLOG_ZIP_WRITE_ROLL_PTR, because the modifications to these columns
are covered by logical logging.

Fuse page_zip_write_trx_id() and page_zip_write_roll_ptr() into
page_zip_write_trx_id_and_roll_ptr().

page_zip_dir_add_slot(), page_zip_available(): Add flag "is_clustered",
so that no space will be reserved for TRX_ID and ROLL_PTR on leaf pages
of secondary indexes.

page_zip_apply_log(): Flag an error when val==0 is encoded with two bytes.

page_zip_write_rec(): Add debug assertions that there is enough space
available for the entry before copying the data bytes of the record.
2006-03-09 17:26:02 +00:00
marko
e677258a67 branches/zip: Fix a bug in optimistic update.
btr_cur_update_in_place(): Remove the page_zip_write_rec() call,
because row_upd_rec_in_place() already calls it.
2006-03-09 16:48:25 +00:00
marko
bee191b716 branches/zip: Fix a bug in the insertion of a record.
page_dir_split_slot(): Do not pass page_zip to page_dir_slot_set_n_owned(),
because the caller will rewrite the dense page directory later.  At this
point of execution, the dense directory will not contain the newly inserted
record, which may end up being written to new_slot.
2006-03-09 13:35:04 +00:00
marko
4ea9fe182f branches/zip: Fix various bugs.
btr_root_raise_and_insert(): Because btr_page_set_level() must not
change level from non-zero to zero on compressed pages, invoke
btr_page_set_level() with page_zip==NULL and compress the entire
root page after creating it from the scratch.

btr_attach_half_pages(): Simplify the computation of lower_page_zip
and upper_page_zip.  Invoke btr_node_ptr_set_child_page_no() with
the correct page_zip.

page0page.h: Add __attribute__((const)) to functions testing for
infimum or supremum.

page_zip_dir_delete(): Note that the third parameter may be NULL.
Correct offset errors.

page_zip_available(): Use n_heap instead of n_recs.

page_zip_dir_find(), page_zip_dir_find_free(): Fix off-by-one error.

page_zip_fields_encode(), page_zip_fields_decode(): Encode and decode
index->n_nullable for non-leaf pages.

page_zip_apply_log(): Write REC_NEW_HEAP_NO before calling
rec_offs_make_valid().

page_zip_write_node_ptr(): Correct off-by-one error.

page_cur_search_with_match(): Make use of page_is_leaf().

page_dir_add_slots(): Replaced with page_dir_add_slot().  Use memmove().
2006-03-08 22:19:20 +00:00
marko
4e22f34042 branches/zip: btr_page_reorganize_low(): Assert page_zip_validate()
before and after the operation.
2006-03-08 09:57:54 +00:00
marko
4a09767df0 branches/zip: Minor bug fix
buf_flush_init_for_writing(): Copy FIL_PAGE_LSN to the compressed page.

page_cur_insert_rec_low(): Add debug assertion.
2006-03-07 13:47:33 +00:00
marko
ab747690f8 branches/zip: Fix errors in bit arithmetics.
page_zip_fixed_field_encode(), page_zip_fields_encode(),
page_zip_fields_decode(): Do not waste one bit when encoding quantities
larger than 127.

page_zip_apply_log(), page_zip_write_rec(): Decode and encode
heap_no >= 127 correctly.
2006-03-07 11:41:56 +00:00
marko
a67a162849 branches/zip: Correctly restore extra bytes in page_zip_apply_log().
page_zip_apply_log(): Correct an off-by-one error.

page_zip_write_rec(): Correct a debug assertion.
Encode heap_no as soon as possible.
2006-03-07 09:41:31 +00:00