otherwise like INNODB_ZIP, but resets the cumulated counts.
Rename innodb_buddy to innodb_zip in some comments.
innobase_stat_zip_fill(): Add parameter "reset". Document the race condition
with the compression statistics counters.
trx_undo_report_row_operation(), trx_undo_report_dict_operation():
Reduce the scope of some variables. Move the return(DB_SUCCESS)
case inside the for loop.
Replace row0merge.h with row0mysql.h.
Remove redundant test trx->dict_operation_lock_mode == 0.
Fix typos in comments.
row_undo_ins(): Make the function more similar to the one in trunk.
exactly. Rename the local variable "ulint level" to "ibool leaf".
Document that if the function returns DB_SUCCESS on a compressed page that
is covered by the insert buffer, the mini-transaction must be committed
before latching any further pages. Verify that this is the case on all
execution paths.
the insert buffer bitmap.
ibuf_set_free_bits_func(): Never disable redo logging.
ibuf_update_free_bits_zip(): Remove.
btr_page_reorganize_low(), page_zip_reorganize(): Do not update the insert
buffer bitmap. Instead, document that callers will have to take care of it,
and adapt the callers.
btr_compress(): On error, reset the insert buffer free bits.
btr_cur_insert_if_possible(): Do not modify the insert buffer bitmap.
btr_compress(), btr_cur_optimistic_insert(): On compressed pages,
reset the insert buffer bitmap. Document why.
btr_cur_update_alloc_zip(): Document why it is necessary and sufficient
to reset the insert buffer free bits.
btr_cur_update_in_place(), btr_cur_optimistic_update(),
btr_cur_pessimistic_update(): Update the free bits in the same
mini-transaction. Document that the mini-transaction must be
committed before latching any further pages. Verify that this
is the case in all execution paths.
row_ins_sec_index_entry_by_modify(), row_ins_clust_index_entry_by_modify(),
row_undo_mod_clust_low(): Because these functions call
btr_cur_update_in_place(), btr_cur_optimistic_update(), or
btr_cur_pessimistic_update(), document that the mini-transaction must be
committed before latching any further pages. Verify that this is the case
in all execution paths.
page_cur_tuple_insert(), page_cur_rec_insert(): Improve the documentation.
Note that the physical position of page_cursor may change.
page_cur_rec_insert(), page_cur_insert_rec_low(), page_cur_insert_rec_zip():
Add a const qualifier to the parameter rec.
mtr_commit(): Do not acquire the log mutex if no log records are to be written.
ibuf_set_free_bits_func(): Do not clear mtr.modifications, because that would
prevent the dirty insert buffer bitmap block from being moved to the flush
list. Instead, assume that mtr_commit() will not acquire log_sys->mutex
because redo logging is disabled.
buf_page_init_for_read(): I/O-fix the block before buf_buddy_alloc(), because
the newly allocated block could otherwise be reused by the compressed page.
crash recovery is in progress. This avoids a hang when
btr_parse_page_reorganize(), called from an I/O handler thread,
attempts to acquire log_sys->mutex while it is being held by
the main thread (the one that runs innobase_init()). This change
was committed accidentally. It may be unsafe to clear
mtr.modifications, because buf_page_release() at mtr_commit() may
forget to put modified pages to the flush list.
Cleanup: Remove the "type" parameter from many ibuf functions.
Let the caller check that !dict_index_is_clust(). This should avoid
function calls and register spilling.
ibuf_set_free_bits_func(), ibuf_set_free_bits(): Remove the parameter "type".
ibuf_reset_free_bits_with_type(): Rename to ibuf_reset_free_bits().
Remove the parameter "type".
ibuf_update_free_bits_if_full(), ibuf_update_free_bits_zip(),
ibuf_update_free_bits_low(), ibuf_update_free_bits_for_two_pages_low():
Remove the parameter "index".
log_write_up_to(): Replace if-else if-else with a switch block.
log_archive_do(): Remove an excess mutex_enter(). Replace if-else if-else
with a switch block. (This function is not included unless UNIV_LOG_ARCHIVE
is defined.)
was broken in one of the earlier cleanups.
row_merge_block_merge(): Remove the variable "selected". Clear the record
count of new_block1 and new_block2. Anticipate the right return values
from row_merge_cmp().
Add __attribute__((const)) or __attribute__((pure)) to various
mach_read functions.
dtype_new_read_for_order_and_null_size(): Remove a statement
without effect: mach_read_from_2(buf + 4).
in r1445. They are needed after all, but apparently the tests do not
actually verify that the records are sorted. (Also, a buffer overflow
will occur in index_merge_innodb.test if MERGE_BLOCK_SIZE is made smaller.)
dict_index_is_unique(): New function.
row_merge_rec_fits_to_block(), row_merge_store_rec_to_block():
Add const qualifiers to rec, offsets.
row_merge_select(): Rename to row_merge_cmp(), simplify the interface.
row_merge_sort_linked_list(): Change the return type to ibool.
Replace sec_offs1,sec_offs2 with offsets1,offsets2. Replace offset_heap
with heap. Define a func_exit label.
row_merge_block_merge(): Reduce the scope of rec_offsets.
and os_file_write(), and return DB_CORRUPTION when they fail. Minor cleanup.
row_mege_insert_index_tuples(): Use a shared heap for dtuple and rec.
Use fewer gotos.
row_merge_sort_linked_list_in_disk(): Free the merge blocks at error exit.
row_merge_read(), row_merge_write(): Add UNIV_LIKELY hints.
row_merge_sort_linked_list_in_disk(): Reduce the scope of many variables.
Eliminate the variable "selected".
Replace byte offsets of type dulint with block offsets of type ulint.
Avoid references to MERGE_BLOCK_SIZE.
Improve the language of some comments.
row_merge_insert_index_tuples(), row_merge_sort_linked_list_in_disk():
Make the offset a ulint.
row_merge_read(), row_merge_write(): Helper functions. Return the
status of os_file_read() and os_file_write(). TO DO: check the status
in the callers.
innobase_create_temporary_tablename(): Add static qualifier. Allocate
the memory from heap. Return a fixed identifier.
ha_innobase::add_index(): Allocate all memory from a single heap.
Simplify error handling. Use a fixed prefix for temporary table names,
because only one add_index() can be active for a given table.
mem_heap_empty_noninline(): New function, to be called from ha_innodb.cc.
row_build_index_for_mysql(): Remove the parameter new_primary.
Move more definitions from row0mysql.h to row0mysql.c. Remove the
unused definition of merge_thread.
merge_index_def_t: Replace merge_index_field_t** with merge_index_field_t*.
Use mem_heap_strdup() when copying strings.
ha_innobase::add_index(): Avoid excessive use of current_thd.
assignments. A memory leak remains at "goto error_handling": the memory
allocated with row_merge_block_create() in the beginning of this function
will not be freed.
Define the merge_rec_ structures in row0merge.c instead of
row0merge.h. They are not used in the interface defined in row0merge.h.
row_merge_create_file_structure(): Rename to row_merge_file_create().
Input a pointer to a pre-allocated block of memory.
row_merge_read_clustered_index(): Replace merge_file_t** with merge_file_t*.
row_merge_sort_and_insert_thread(): Remove the declaration.
This function was never defined or called.
row_merge_is_index_usable(): Correct the formatting.
row_build_index_for_mysql(): Allocate an array of merge_file_t instead
of an array of pointers to merge_file_t.
ha_innodb.cc: Add the columns COMPRESSED, COMPRESSED_OK, DECOMPRESSED
to INFORMATION_SCHEMA.INNODB_BUDDY.
page_zip_compress_count[], page_zip_compress_ok[]: New statistic counters,
incremented in page_zip_compress().
page_zip_decompress_count[]: New statistic counter,
incremented in page_zip_decompress().
innodb.test: The error code 1540 has been renumbered to 1542.
innodb.result: Adjust the expected value of Innodb_buffer_pool_pages_total.
Something may have changed in the BLOB handling in branches/zip.
ha_innodb.cc: Add ha_innobase:: prefix to some DBUG_ENTER macros.
row_merge_create_temporary_table(): Free the heap only after invoking
row_create_table_for_mysql(). The table->col_names points to the heap
until the system columns are added by row_create_table_for_mysql().
TODO: use the filename-safe encoding in temporary table names. Test
extensively under Valgrind and fix all errors found. Eliminate
merge_rec_t and rewrite row0merge.c to write the records directly to
the merge blocks.
dict_truncate_index_tree(): Add the parameter space for specifying the
new tablespace identifier of a single-table tablespace that has been
recreated. When SYS_INDEXES.PAGE_NO == FIL_NULL, do not abort but
create the index tree.
fil_discard_tablespace(): Pass the return code from fil_delete_tablespace().
row_truncate_table_for_mysql(): Attempt to discard and recreate
single-table tablespaces. Reassign the tablespace identifier both in
the data dictionary (SYS_TABLES and SYS_INDEXES) and in the data
dictionary cache.
trx_undo_left(): Add const qualifiers.
trx_undo_page_report_insert(): Use exact trx_undo_left() limit.
Remove a duplicated trx_undo_left() check.
trx_undo_page_report_modify(): Eliminate the local variable len.
Document that no prefix for BLOBs needs to be stored in the undo log.
Lump two trx_undo_left() checks together.
Previously, when big_rec was returned, the fields would point to
freed memory. The memory heap was allocated locally, and the data tuple
was allocated from the heap, and the big_rec would point to some fields
in the data tuple.
row_ins_clust_index_entry_by_modify(): Add parameter heap,
for the same reason.
allocated before overwriting some fields and flagging the frame freed.
Some of the buffer frame may have been flagged freed by the user
(such as mem_heap).
functions.
ut_malloc_low(): Flag the block with UNIV_MEM_ALLOC(). Do not flag the
block with UNIV_MEM_FREE() in ut_free(), because it would cause bogus
Valgrind warnings in the underlying memory allocator.
mem_pool_create(): Flag the data area with UNIV_MEM_FREE().
mem_pool_fill_free_list(): Flag the area header with UNIV_MEM_ALLOC().
mem_area_alloc(): Flag the data area with UNIV_MEM_ALLOC().
mem_area_free(): Flag the data area with UNIV_MEM_FREE().
mem_heap_alloc(): Flag the buffer with UNIV_MEM_ALLOC().
mem_heap_block_free(): Flag the block with UNIV_MEM_FREE().
mem_heap_free_top(): Flag the block with UNIV_MEM_FREE().
btr_rec_free_updated_extern_fields(): Remove the parameter
do_not_free_inherited, which is always passed as TRUE.
btr_cur_unmark_extern_fields(): Invoke rec_offs_any_extern().
btr_cur_unmark_dtuple_extern_fields(): Remove a local variable.
for displaying buddy allocator statistics.
buf_buddy_used[], buf_buddy_relocated[]: Declare as global symbols.
mysql_declare_plugin(innobase): Add MYSQL_INFORMATION_SCHEMA_PLUGIN
for innobase_is_buddy ("INNODB_BUDDY").