- 14 Jan, 2008 3 commits
-
-
marko authored
-
marko authored
the clustered index record before calling row_upd_index_replace_new_col_vals().
-
marko authored
row_build(), row_upd_index_replace_new_col_vals_index_pos(), and row_upd_index_replace_new_col_vals() are safe. btr_cur_optimistic_update(), btr_cur_pessimistic_update(): Note that the B-tree page of the clustered index record is latched in mtr. trx_undo_prev_version_build(): Add const qualifiers to index_rec and rec. Note that the page of index_rec is latched in index_mtr. row_vers_impl_x_locked_off_kernel(), row_vers_old_has_index_entry(): Note that the stack of versions is locked by mtr and thus it is safe to call row_build().
-
- 11 Jan, 2008 3 commits
-
-
marko authored
btr_rec_copy_externally_stored_field() are safe. row_merge_copy_blobs(): Note that the table is locked during index creation. Therefore, none of its BLOBs can be freed. row_sel_fetch_columns(): Note that rec must be protected by a page latch. Add const qualifier to rec. row_sel_get_clust_rec(): Note that the clustered index record is protected by a page latch that was acquired when the persistent cursor was positioned and that the latch will be freed by mini-transaction commit. row_sel_try_search_shortcut(): Check the delete-mark flag before fetching the columns. Note that the clustered index record is protected by a page latch that was acquired when the persistent cursor was positioned and that the latch will be freed by mini-transaction commit. row_sel(), row_search_for_mysql(): Note that the clustered index record is protected by a page latch that was acquired when the persistent cursor was positioned and that the latch will be freed by mini-transaction commit. row_sel_field_store_in_mysql_format(): Add const qualifier to data. row_sel_store_mysql_rec(), row_sel_push_cache_row_for_mysql(): Add const qualifier to rec. Note that rec must be protected by a page latch.
-
marko authored
-
marko authored
be protected from being deleted while any externally stored columns are being fetched. row_ext_create(), row_upd_index_replace_new_col_vals(), row_upd_index_replace_new_col_vals_index_pos(), row_sel_sec_rec_is_for_blob(), row_sel_sec_rec_is_for_clust_rec(): Note that the clustered index record must be covered by a lock or a page latch. row_upd_sec_index_entry(), row_upd_clust_rec_by_insert(), row_undo_mod_upd_exist_sec(): Note that these functions probably do not obtain an appropriate lock on the clustered index record before fetching any externally stored columns.
-
- 10 Jan, 2008 4 commits
-
-
marko authored
of the buffer pool mutex. Apparently, it is temporarily released also in older versions of MySQL/InnoDB for the duration of the btr_search_drop_page_hash_index() call [in buf_LRU_free_block()].
-
marko authored
failure.
-
marko authored
the buffer pool mutex. The instrumentation can be activated by defining UNIV_DEBUG or UNIV_BUF_DEBUG at compilation time. buf_pool_mutex_exit_forbidden: New variable. When this is nonzero, an assertion will fail in buf_pool_mutex_exit(). buf_pool_mutex_exit_forbid(): Macro for declaring that the buffer pool mutex must not be released. Calls may be nested. buf_pool_mutex_exit_allow(): Macro for declaring that the buffer pool mutex may be released. Calls may be nested. buf_LRU_search_and_free_block(): Prohibit buf_pool_mutex_exit() in the scope of the function. buf_LRU_free_block(): Prohibit buf_pool_mutex_exit() in buf_buddy_alloc() and buf_buddy_free(). buf_LRU_block_remove_hashed_page(): Prohibit buf_pool_mutex_exit() in buf_buddy_free().
-
marko authored
buf_pool->mutex: Rename to buf_pool_mutex, so that the wrappers will have to be used when changes are merged from other source trees. buf_pool->zip_mutex: Rename to buf_pool_zip_mutex. buf_pool_mutex_own(), buf_pool_mutex_enter(), buf_pool_mutex_exit(): Wrappers for buf_pool_mutex.
-
- 09 Jan, 2008 1 commit
-
-
marko authored
ha_innobase::final_drop_index(): If row_merge_drop_table() fails, clear the to_be_dropped flags. This was the error fixed in this commit; the rest is just additional safety. ha_innobase::final_drop_index(): After dropping the flagged indexes, assert that none of the remaining indexes are flagged to_be_dropped. ha_innobase::prepare_drop_index(): Assert that no index has been flagged for deletion. When checking foreign key constraints, simply traverse the list of indexes and check if any of the indexes that were just flagged to_be_dropped. On error, clear the to_be_dropped flags with simple list traversal.
-
- 07 Jan, 2008 2 commits
- 04 Jan, 2008 4 commits
-
-
marko authored
indexes.
-
marko authored
buf_buddy_min_n_frames into two, also buf_buddy_max_n_frames. Set the default values in such a way that a strict LRU policy will apply for replacing compressed or uncompressed page frames in the buffer pool. These parameters have not yet been exposed to the MySQL layer.
-
marko authored
Add a call to rec_offs_any_extern() as an optimization.
-
marko authored
-
- 03 Jan, 2008 2 commits
-
-
marko authored
-
marko authored
decompression failures. page_zip_fields_decode(): Add page_zip_fail() diagnostics. page_zip_apply_log(): Remove double space in page_zip_fail() printout. page_zip_decompress_node_ptrs(), page_zip_decompress_sec(), page_zip_decompress_clust_ext(), page_zip_decompress_clust(), page_zip_decompress(): Add page_zip_fail() diagnostics for inflate() failures and other errors.
-
- 20 Dec, 2007 7 commits
-
-
marko authored
TRX_RSEG_N_SLOTS: Make the definition dependent of UNIV_PAGE_SIZE. FSP_EXTENT_SIZE: Define as 1 megabyte, as assumed by the code elsewhere. fseg_create_general(): Add a debug assertion against page overflow.
-
marko authored
UNIV_PAGE_SIZE than the default 16384. MEM_BLOCK_STANDARD_SIZE: Cap to MEM_MAX_ALLOC_IN_BUF when UNIV_PAGE_SIZE is less than 16384. ha_create_func(): Invoke mem_heap_create_in_btr_search() with ut_min(4096, MEM_MAX_ALLOC_IN_BUF) instead of 4096. The memory will be allocated from the buffer pool, and with UNIV_PAGE_SIZE defined to 4096, there would not be any space for the mem_heap data structure overhead.
-
vasil authored
Change the format of TRX_IDs in INFORMATION_SCHEMA tables from DEC to HEX. The current TRX_IDs are hard to remember and track down: 426355, 428466, 428566, etc. In HEX: * there are less "digits", the strings are shorter; * since there are 16 instead of 10 "digits", the chance of having repeating ones are smaller. The above look like 68173, 689B2, 68A16 in HEX. Discussed with: Ken Approved by: Heikki (via IM)
-
vasil authored
Change the output format of transaction ids from 2 32bit numbers separated by space to a single hex number. Suggested by: Heikki Approved by: Heikki
-
marko authored
is at least 4 kilobytes.
-
marko authored
just one parameter: UNIV_PAGE_SIZE_SHIFT. UNIV_PAGE_SIZE, BUF_BUDDY_SIZES: Define in terms of UNIV_PAGE_SIZE_SHIFT. BUF_BUDDY_LOW_SHIFT: New macro, to simplify the definition of BUF_BUDDY_LOW and BUF_BUDDY_SIZES. PAGE_ZIP_DIR_SLOT_MASK: Relax the compile-time check. This bitmask must be one less than a power of two, and at least UNIV_PAGE_SIZE - 1.
-
marko authored
btr_copy_blob_prefix(), btr_copy_externally_stored_field_prefix_low(): Document the return value as "number of bytes written", not "bytes written". trx_undo_page_fetch_ext(): Explain the assertion ut_a(ext_len). row_build_index_entry(): Explain the assertion ut_a(!ext).
-
- 19 Dec, 2007 4 commits
-
-
marko authored
row_create_index_graph_for_mysql(): Move from row0mysql.c to row0merge.c and rename to row_merge_create_index_graph(). Also change the function comment to say that the function will create and execute the query graph for creating the index. row_merge_create_index(): Remove redundant assignment to trx->error_state.
-
marko authored
acquiring the table lock. The data dictionary should not be locked for long periods. Before this change, in the worst case, the dictionary would be locked until the expiration of innodb_lock_wait_timeout. Virtually, transaction-level locks (locks on database objects, such as records and tables) have a latching order level of SYNC_USER_TRX_LOCK, which is above any InnoDB rw-locks or mutexes. However, the latching order of SYNC_USER_TRX_LOCK is never checked, not even by UNIV_SYNC_DEBUG. ha_innobase::add_index(), ha_innobase::final_drop_index(): Invoke row_mysql_lock_data_dictionary(trx) only after row_merge_lock_table().
-
marko authored
innodb-index.test: Add a test with a large number of externally stored columns. Check that there may not be prefix indexes on too many columns. dict_index_too_big_for_undo(): New function: Check if the undo log may overflow. dict_index_add_to_cache(): Return DB_SUCCESS or DB_TOO_BIG_RECORD. Postpone the creation and linking of some data structures, so that when dict_index_too_big_for_undo() holds, it will be easier to clean up. Check the return status in all callers.
-
marko authored
dict_index_copy(): Remove the prototype, because this static function will be defined before its first use. Add const qualifier to "table". dict_index_build_internal_clust(), dict_index_build_internal_non_clust(): Add const qualifier to "table". Correct the comment about setting indexed[].
-
- 18 Dec, 2007 1 commit
-
-
vasil authored
Non-functional change: Do not include the terminating '\0' in TRX_I_S_LOCK_ID_MAX_LEN.
-
- 17 Dec, 2007 7 commits
-
-
marko authored
row_merge_lock_table(). ha_innobase::final_drop_index(): Set the dictionary operation mode to TRX_DICT_OP_INDEX_MAY_WAIT for the duration of the row_merge_lock_table() call.
-
marko authored
-
marko authored
Active transactions must not switch table or index definitions on the fly, for several reasons, including the following: * copied indexes do not carry any history or locking information; that is, rollbacks, read views, and record locking would be broken * huge potential for race conditions, inconsistent reads and writes, loss of data, and corruption Instead of trying to track down if the table was changed during a transaction, acquire appropriate locks that protect the creation and dropping of indexes. innodb-index.test: Test the locking of CREATE INDEX and DROP INDEX. Test that consistent reads work across dropped indexes. lock_rec_insert_check_and_lock(): Relax the lock_table_has() assertion. When inserting a record into an index, the table must be at least IX-locked. However, when an index is being created, an IS-lock on the table is sufficient. row_merge_lock_table(): Add the parameter enum lock_mode mode, which must be LOCK_X or LOCK_S. row_merge_drop_table(): Assert that n_mysql_handles_opened == 0. Unconditionally drop the table. ha_innobase::add_index(): Acquire an X or S lock on the table, as appropriate. After acquiring an X lock, assert that n_mysql_handles_opened == 1. Remove the comments about dropping tables in the background. ha_innobase::final_drop_index(): Acquire an X lock on the table. dict_table_t: Remove version_number, to_be_dropped, and prebuilts. ins_node_t: Remove table_version_number. enum lock_mode: Move the definition from lock0lock.h to lock0types.h. ROW_PREBUILT_OBSOLETE, row_update_prebuilt(), row_prebuilt_table_obsolete(): Remove. row_prebuilt_t: Remove the declaration from row0types.h. row_drop_table_for_mysql_no_commit(): Always print a warning if a table was added to the background drop queue.
-
marko authored
of thr_get_trx(thr).
-
marko authored
kernel_mutex must be released before calling this function. innobase_mysql_end_print_arbitrary_thd(), innobase_mysql_prepare_print_arbitrary_thd(): Assert that the kernel_mutex is not being held by the current thread.
-
vasil authored
Bugfix: Lock the MySQL mutex LOCK_thread_count before accessing trx->mysql_query_str to avoid race conditions where MySQL sets it to NULL after we have checked that it is not NULL and before we access it. Approved by: Marko
-
vasil authored
Non-functional change: add "out:" comment for the return value.
-
- 16 Dec, 2007 1 commit
-
-
vasil authored
Non-functional change: Move the prototypes of innobase_mysql_prepare_print_arbitrary_thd() and innobase_mysql_end_print_arbitrary_thd() from lock0lock.c to ha_prototypes.h Suggested by: Marko Approved by: Marko
-
- 13 Dec, 2007 1 commit
-
-
marko authored
is an overlap between BLOB pointers and the modification log or the zlib stream. page_zip_decompress_clust_ext(): Remove the improper check. The d_stream->avail_in cannot be decremented here, because we do not know at this point if the record is deleted. No space is reserved for the BLOB pointers in deleted records. page_zip_decompress_clust(): Check for the overlap here, right before copying the BLOB pointers. page_zip_decompress_clust(): Also check that the target column is long enough, and return FALSE instead of ut_ad() failure.
-