Commit graph

269 commits

Author SHA1 Message Date
marko
138ee61049 branches/zip: Remove more references to buf_block_align().
ibuf_reset_free_bits(): Remove, as there already is a similar function
ibuf_reset_free_bits_with_type().

ibuf_reset_free_bits_with_type(), ibuf_set_free_bits(),
ibuf_update_free_bits_if_full(), btr_leaf_page_release(),
buf_page_make_young(): Replace page_t with buf_block_t.

btr_compress(): Replace btr_page_get() with btr_block_get().
2006-10-13 07:45:52 +00:00
marko
6064200df2 branches/zip: Eliminate some more buf_block_align() calls.
mlog_write_initial_log_record_fast(): Remove the buf_block_align() call
unless #ifdef UNIV_DEBUG.

btr_cur_update_in_place(): Replace buf_frame_get_page_zip() with
buf_block_get_page_zip().

btr_page_create(), btr_page_empty(): Replace the parameter page with block.

btr_attach_half_pages(): Use btr_block_get() instead of btr_page_get().
Remove buf_block_align() calls.

btr_cur_latch_leaves(): Remove duplicated code.  Use btr_block_get()
instead of btr_page_get().  Remove buf_block_align() calls.
2006-10-12 18:39:43 +00:00
marko
82de286dc6 branches/zip: mem_heap_create_block(): Correct an error introduced in r909:
When allocating a block from heap->free_block, set buf_block.
2006-10-12 12:44:46 +00:00
marko
a208526186 branches/zip: Replace buf_frame_alloc() and buf_frame_free()
with buf_block_alloc() and buf_block_free(), in order to
avoid buf_block_align() calls.
2006-10-12 12:38:29 +00:00
marko
c755e88727 branches/zip: Reduce the number of buf_block_align() calls.
btr_block_get(): New function to return buf_block_t.

btr_page_alloc(), buf_page_get_release_on_io(), buf_page_get_gen(),
buf_page_create(), fseg_create(), fseg_create_general(): Return buf_block_t.

buf_page_get_known_nowait(): Expect buf_block_t instead of buf_frame_t.

buf_frame_get_newest_modification(): Replace with
buf_block_get_newest_modification().

buf_page_dbg_add_level(): Replace with buf_block_dbg_add_level().

buf_block_get_zip_size(): New function.

buf_block_get_page_zip(): Reintroduce.

recv_recover_page(): Replace page, space, page_no with block.

ibuf_bitmap_page_init(): Replace page, zip_size with block.

ibuf_parse_bitmap_init(): Remove the parameter zip_size.

btr_search_drop_page_hash_index(): Replace page with block.
2006-10-12 11:05:22 +00:00
marko
d61d296ccd branches/zip: Replace buf_frame_get_page_no() and buf_frame_get_space_id()
with page_get_page_no() and page_get_space_id().  We want to avoid
buf_block_align() calls, and the page_no and space_id are now stamped
on the pages early on.
2006-10-12 07:02:36 +00:00
marko
a370fdc766 branches/zip: Move the assertion about holding dict_sys->mutex from
dict_table_add_system_columns() to dict_table_add_to_cache().
2006-10-12 06:33:43 +00:00
marko
606bd38428 branches/zip: Stamp (space_id, page_no) on buffer pool pages early on.
buf_flush_init_for_writing(): Remove parameters space, page_no.

fsp_init_file_page_low(): Wriet space_id and page_no to the page.

fil_create_new_single_table_tablespace(): Write space_id to the page.
2006-10-10 12:26:37 +00:00
marko
d699fde33a row_ext_create(): Allocate enough space for the structure.
This error was introduced in r867.
2006-10-10 10:21:04 +00:00
marko
5a10ee2721 branches/zip: Add function mtr_memo_contains_page() #ifdef UNIV_DEBUG.
Replace ut_ad(mtr_memo_contains(mtr, buf_block_align(ptr), ...))
with ut_ad(mtr_memo_contains_page(mtr, ptr, ...)) in order to reduce the
number of buf_block_align() calls.
2006-10-09 19:36:58 +00:00
marko
3fffefd3d6 branches/zip: Replace buf_frame_align() with page_align(), page_offset(),
ut_align_down(), or ut_align_offset().
2006-10-09 16:22:47 +00:00
marko
11cd834bb1 branches/zip: buf_block_get_page_zip(): Replace with buf_frame_get_page_zip(). 2006-10-09 15:37:19 +00:00
marko
152fbb78a2 branches/zip: Remove compilation errors with -DUNIV_HOTBACKUP.
dict_load_foreigns(): Enclose in #ifndef UNIV_HOTBACKUP.

fil_extend_tablespaces_to_stored_len(): Pass zip_size to fil_read().

buf_page_init_for_backup_restore(): Add parameter zip_size.
Enclose the declaration in buf0buf.h in #ifdef UNIV_HOTBACKUP.

recv_apply_log_recs_for_backup(): Replace the local variable "page"
with the local variable "block".  Add local variable zip_size.
2006-10-06 11:23:19 +00:00
marko
250ea1ab02 branches/zip: fil_reset_too_high_lsns(): Adapt for compressed tablespaces.
TODO: test this with InnoDB Hot Backup 3.0
2006-10-04 11:47:25 +00:00
marko
cea48e8a36 branches/zip: Merge revisions 869:887 from trunk. 2006-10-03 13:10:20 +00:00
marko
a4c9d38ee8 branches/zip: Fix all bugs detected by mysql-test-run. The exactly same set
of tests are failing with trunk -r869, with this revision using uncompressed
storage, and with this revision hard-wired to use 1-kilobyte compressed pages
and innodb_file_per_table.

btr_push_update_extern_fields(): Do not call ut_ulint_sort() if n_pushed == 0.

btr_copy_externally_stored_field_prefix_low(): Replace ut_max() with ut_min().
2006-10-02 08:42:42 +00:00
marko
346431193e branches/zip: Merge revisions 861:869 from trunk. 2006-09-29 12:12:47 +00:00
marko
cc605cfea1 branches/zip: Remove os_file_check_page_trailers(). It was used in
os_aio_simulated_handle() before and after initiating a write.  We
cannot easily pass the compressed page sizes to this function.  The
check could only be performed on uncompressed pages.
2006-09-29 11:26:20 +00:00
marko
285f1e1d0a branches/zip: Remove the unused function ut_clock(). 2006-09-29 10:43:42 +00:00
marko
77ebaf6f33 branches/zip: dtuple_convert_big_rec(): Do not store anything locally
of externally stored columns, and fix bugs introduced in r873.  (Bug #22496)

btr_page_get_sure_split_rec(), btr_page_insert_fits(),
rec_get_converted_size(), rec_convert_dtuple_to_rec(),
rec_convert_dtuple_to_rec_old(), rec_convert_dtuple_to_rec_new():
Add parameters ext and n_ext.  Flag external fields during the
conversion.

rec_set_field_extern_bits(), rec_set_field_extern_bits_new(),
rec_offs_set_nth_extern(), rec_set_nth_field_extern_bit_old():
Remove.  The bits are set by rec_convert_dtuple_to_rec().

page_cur_insert_rec_low(): Remove the parameters ext and n_ext.

btr_cur_add_ext(): New utility function for updating and sorting ext[].
Low-level functions now expect the array to be in ascending order
for performance reasons.  Used in btr_cur_optimistic_insert(),
btr_cur_pessimistic_insert(), and btr_cur_pessimistic_update().

btr_cur_optimistic_insert(): Remove some defensive code, because we cannot
compute the added parameters of rec_get_converted_size().

btr_push_update_extern_fields(): Sort the array.  Require the array to
be twice the maximum usage, so that ut_ulint_sort() can be used.

dtuple_convert_big_rec(): Allocate new space for the BLOB pointer,
to avoid overwriting prefix indexes to the same column.  Adapt
dtuple_convert_back_big_rec().

row_build_index_entry(): Fetch the columns also for prefix indexes of
the clustered index.

page_zip_apply_log(), page_zip_decompress_clust(): Allow externally
stored fields to lack a locally stored part.
2006-09-29 10:40:42 +00:00
marko
b02b07bc9a btr_page_get_sure_split_rec(): Revert the change from r875:
"On compressed pages, return NULL if incl_data > free_space."

btr_page_split_and_insert(): Remove the limit check of n_iterations
on compressed pages.  After enough many invocations of
btr_page_get_sure_split_rec(), the record will finally fit.
2006-09-28 11:02:04 +00:00
marko
ab0f3d6b81 branches/zip: btr_page_get_sure_split_rec(): Rewrite the
for (;;) { ... if (condition) { ... return }} loop as
do { ... } while (!condition); ... return.

On compressed pages, return NULL if incl_data > free_space.
2006-09-28 10:40:07 +00:00
marko
9d2146e431 branches/zip: Replace FIL_PAGE_ZBLOB_SPACE_ID and FIL_PAGE_ZBLOB_DATA
with FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID and FIL_PAGE_DATA.  The doublewrite
buffer needs to read the space_id in order to determine the type of the page.
Because FIL_PAGE_TYPE could contain garbage in MySQL/InnoDB 5.0 and earlier
versions, we cannot trust fil_page_get_type().  Instead, we have to always
store the space_id at the same location.  This modification wastes 12 bytes
per compressed BLOB page (1.2% on 1-kilobyte pages).
2006-09-27 10:51:05 +00:00
marko
2884c83de6 branches/zip: dtuple_convert_big_rec(): Reduce the locally stored part
of externally stored columns to REC_1BYTE_OFFS_LIMIT (128) bytes.
TODO: only store BTR_EXTERN_FIELD_REF_SIZE (20) bytes with the record,
and store the entire column externally.  (Bug #22496)

dict_col_t::min_prefix: Remove.
2006-09-26 19:50:21 +00:00
marko
e4f227c122 branches/zip: row_build_index_entry(): Fix errors introduced in r870.
Do not augment clustered index records.  When computing the prefix,
use dfield (where the prefix was copied), not dfield2 (the record in
the clustered index).
2006-09-26 14:26:19 +00:00
marko
8325ef9b27 branches/zip: fil_create_new_single_table_tablespace(): Remove the
unnecessary memset() introduced in r852.  When zip_size != 0,
write the compressed page to disk, not the uncompressed one.
2006-09-26 14:21:28 +00:00
marko
83ef74df8b branches/zip: Allow the locally stored part of externally stored columns
in the clustered index to be smaller than the indexed prefix in secondary
indexes.

row_ext_lookup(): Return NULL if the column is not stored externally.

trx_undo_rec_get_partial_row(): row_build(): Add parameter row_ext_t** ext.

row_build_index_entry(): Add the parameter row_ext_t* ext.
Invoke row_ext_lookup() to fetch prefixes of externally stored columns.

upd_node_t, undo_node_t, purge_node_t: Add the field row_ext_t* ext.
2006-09-26 11:50:54 +00:00
marko
22c95e9a63 branches/zip: Add const qualifiers to the pointer parameters of
mach_read_...() functions.  Remove unnecessary casts.
2006-09-26 07:39:02 +00:00
marko
c60a8c2f55 branches/zip: Add row_ext_t for caching prefixes of externally stored columns.
This will be needed for fixing Bug #22496.

REC_MAX_INDEX_COL_LEN: New constant, copied from DICT_MAX_INDEX_COL_LEN.

row_ext_create(), row_ext_lookup(), row_ext_lookup_low(): New functions.
2006-09-26 07:28:23 +00:00
marko
6e269ddf34 branches/zip: Implement the ability to fetch a prefix of an externally
stored column.  This is the first part of fixing Bug #22496.

btr_copy_externally_stored_field_prefix(): New function.

btr_copy_externally_stored_field(): Split to
btr_copy_externally_stored_field_prefix_low().

row_sel_sec_rec_is_for_blob(): New function, used by
row_sel_sec_rec_is_for_clust_rec() in selects via
a secondary index.
2006-09-26 06:22:16 +00:00
marko
ee923f5cbe branches/zip: Minor cleanup in update related code.
btr_push_update_extern_fields(): Instead of iterating all upd_get_n_fields(),
stop at the first match.

row_search_index_entry(): Simplify the return statements.

row_upd_sec_step(): Eliminate the local variable "err".

row_upd_clust_step(): Add a UNIV_UNLIKELY hint.
2006-09-25 12:17:33 +00:00
marko
d8d03e6b1e branches/zip: ibuf_merge_or_delete_for_page(): Check for
ibuf_fixed_addr_page() and fsp_descr_page() before invoking
fil_inc_pending_ibuf_merges().  That function call should
always be paired with a call to fil_decr_pending_ibuf_merges().
2006-09-22 11:30:03 +00:00
marko
35905f6266 branches/zip: Merge revisions 838:861 from trunk. 2006-09-22 10:22:03 +00:00
marko
8c6526d6d2 branches/zip: srv_master_thread(): Remove unnecessary assignments to
n_pages_purged.
2006-09-22 06:56:50 +00:00
marko
1d2380cbcc branches/zip: page_zip_decompress(): Split into
page_zip_decompress_node_ptrs(), page_zip_decompress_sec(), and
page_zip_decompress_clust().  See also r856.
2006-09-21 19:09:25 +00:00
marko
62a0a8bfee branches/zip: ibuf_merge_or_delete_for_page(): Do not invoke
fil_space_get_zip_size() unless zip_size is really needed
(update_ibuf_bitmap || page).  This avoids an assertion failure
when discarding ibuf entries for a deleted tablespace, for which
fil_space_get_zip_size() would return ULINT_UNDEFINED.

Also, reindent ibuf0ibuf.c.
2006-09-21 08:01:50 +00:00
marko
caba470265 branches/zip: page_zip_compress(): Split into page_zip_compress_node_ptrs(),
page_zip_compress_sec(), and page_zip_compress_clust().
2006-09-21 07:27:35 +00:00
marko
75e478a01b branches/zip: page_zip_empty_size(): New function to compute the
guaranteed free space available for inserting one record.

btr_page_get_sure_split_rec(), btr_cur_pessimistic_insert():
Use page_zip_empty_size().

btr_page_split_and_insert(): Relax a debug assertion that there should
be at least two user records on the page.  On compressed pages, we may
be able to write only one record.
2006-09-20 14:26:53 +00:00
marko
c12e237a09 branches/zip: Instrument the buffer pool allocator and deallocator
for more accurate Valgrind debugging.

univ.i: Introduce UNIV_DEBUG_VALGRIND, UNIV_MEM_VALID, and UNIV_MEM_INVALID.

buf_LRU_block_free_non_file_page(): Invalidate the buffer frame
with UNIV_MEM_INVALID().

buf_LRU_get_free_block(): Declare the buffer frame valid
with UNIV_MEM_VALID().

Other memory is allocated and deallocated via malloc() and free(),
which are already overridden by Valgrind.  Without the added
instrumentation, accesses to free pages in the buffer pool cannot
be caught.

The diagnostics could probably be improved further by declaring all
non-latched buffer frames invalid.
2006-09-20 12:42:08 +00:00
marko
9b59bd8575 branches/zip: Fix bugs #ifdef UNIV_DEBUG.
rec_convert_dtuple_to_rec_old(): Initialize the record in order to avoid
bogus Valgrind warnings about the ut_ad() in mach_write_to_1() and
mach_write_to_2().

page_zip_compress(), page_zip_write_rec(), page_zip_write_blob_ptr():
Replace ut_ad(page_validate(...)) with ut_ad(page_simple_validate_new(...)),
because otherwise crash recovery would fail.
2006-09-20 12:23:25 +00:00
marko
3b14ab95d3 branches/zip: fil_create_new_single_table_tablespace():
Make page_zip->data point to an address different from page,
to avoid calling memcpy() with overlapping source and destination.
2006-09-20 11:14:54 +00:00
marko
7f057a4b18 branches/zip: mlog_parse_index(): After merge fix (r841):
Identify DB_TRX_ID and DB_ROLL_PTR in the index.
2006-09-20 05:05:58 +00:00
marko
a1bca48c85 branches/zip: Remove page_zip_decompress_low(). Do not call page_validate()
on the ZIP_DUMMY index.  Because it does not contain valid collation
information, the ordering check in page_validate() may fail on pages
containing non-binary data.

Instead, let the callers of page_zip_decompress() invoke page_validate()
when the index information is available.
2006-09-19 13:56:56 +00:00
marko
9a16aac783 branches/zip: Merge revisions 804:838 from trunk. 2006-09-19 10:14:07 +00:00
marko
e4dc19ba38 branches/zip: Merge revisions 789:804 from trunk. 2006-09-12 07:29:57 +00:00
marko
425bcadf3c branches/zip: btr_store_big_rec_extern_fields(): When adjusting the
"next BLOB page" pointer, write it also to the compressed page,
which is the one that will be flushed to disk.
2006-09-06 14:17:20 +00:00
marko
49a0fbd018 branches/zip: btr_copy_externally_stored_field(): Add diagnostics for
unexpected end of compressed BLOB.
2006-09-06 09:51:00 +00:00
marko
eb4e17a4a6 branches/zip: btr_copy_externally_stored_field(): Correct the
reporting and handling of inflate() errors.
2006-09-05 19:41:05 +00:00
marko
de5b892a99 branches/zip: Split lines before operators, not after them. 2006-09-05 19:37:43 +00:00
marko
d92cdad1fa branches/zip: btr_cur_optimistic_insert(): When returning DB_FAIL,
always convert back big_rec_vec.
2006-09-05 12:49:35 +00:00