Commit graph

1161 commits

Author SHA1 Message Date
vasil
6367b36c50 branches/zip:
Non-functional change: add "out:" comment for the return value.
2007-12-17 10:03:15 +00:00
vasil
dbc6cbe30a branches/zip:
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
2007-12-16 16:13:53 +00:00
marko
9e26020ceb branches/zip: page_zip_decompress(): Implement a proper check if there
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.
2007-12-13 13:12:20 +00:00
vasil
85f1c90d74 branches/zip:
Add some clarification to a comment.
2007-12-13 13:04:47 +00:00
marko
c2505f9bb3 branches/zip: page_zip_decompress_node_ptrs(): Remove the local variable
is_clust, to avoid a warning about unused variable when the definition
of page_zip_fail() is empty.
2007-12-13 12:45:43 +00:00
marko
3802ff3f8c branches/zip: page0zip.c: Add more page_zip_fail() diagnostics to
some decompression functions.

page_zip_apply_log_ext(), page_zip_apply_log(): Call page_zip_fail()
with appropriate diagnostics before returning NULL.

page_zip_decompress_node_ptrs(), page_zip_decompress_sec(),
page_zip_decompress_clust(): When detecting that the zlib stream
followed by the modification log overlaps the trailer, do not
let an assertion fail, but invoke page_zip_fail() and return FALSE.
Corrupt data should never lead into assertion failures in decompression
functions.
2007-12-13 11:32:11 +00:00
marko
48eb4c4b67 branches/zip: page0zip.c: Define and use the auxiliary macros
ASSERT_ZERO() and ASSERT_ZERO_BLOB() for asserting that certain
blocks of memory are filled with zero.
2007-12-13 10:57:30 +00:00
marko
8b00501bea branches/zip: Clarify that buf_buddy_alloc() should only be used for
allocating compressed page frames or their control blocks.  Also note
that if buf_buddy_alloc() is used for allocating a control block,
it must be initialized before releasing buf_pool->mutex.

buf_page_init_for_read(): When the page hash check fails after
buf_buddy_alloc(), free the uninitialized control block before freeing
the compressed page frame.  This fixes a potential error in
buf_buddy_relocate_block().
2007-12-12 14:12:52 +00:00
marko
b7acbef614 branches/zip: Document how the data structures of the buddy allocator
are interfaced with the buffer pool.
2007-12-12 13:42:03 +00:00
marko
6d604a10a0 branches/zip: buf_page_get_gen(): Check the return status of
buf_zip_decompress() and return NULL on decompression failure.
2007-12-10 12:54:53 +00:00
marko
c94791e13a branches/zip: Correct an off-by-one error in the debug assertion that was
supposed to be fixed in r2163.
2007-12-10 10:10:21 +00:00
marko
33e082be24 branches/zip: buf_buddy_alloc(): Assign *lru = TRUE whenever the buffer pool
mutex is temporarily released.

buf_LRU_free_block(), buf_buddy_alloc_clean(): Add an output parameter that
will be assigned TRUE when the buffer pool mutex is released.

This bug was spotted by and fix provided by Sunny.
2007-12-10 09:48:28 +00:00
marko
15ef4c8f0b branches/zip: rec_convert_dtuple_to_rec_comp(): Allow externally stored
columns to be up to REC_MAX_INDEX_COL_LEN + BTR_EXTERN_FIELD_REF_SIZE
bytes in a debug assertion.  This assertion could fail since r2159 in
trx_undo_prev_version_build(), because the undo log records for updates
and deletes would contain longer prefixes of externally stored columns.

The assertion failure was reported by Sunny.
2007-12-07 09:47:53 +00:00
marko
7c5511ef98 branches/zip: dict_table_copy_types(): Initialize all fields to the SQL NULL
value.  Document this change in behaviour, and make all callers invoke
the function right after dtuple_create().

dict_create_sys_fields_tuple(): Add a missing "break" statement to the loop
that checks if there are any column prefixes in the index.

row_get_prebuilt_insert_row(): Do not set the fields to the SQL NULL value,
now that dict_table_copy_types() takes care of it.
2007-12-07 09:12:57 +00:00
marko
a65020d27f branches/zip: When logging updates or deletes in the undo log, store long
enough prefixes of externally stored columns, so that purge will not have
to dereference any BLOB pointers, which may be invalid.  This will not be
necessary for logging inserts, because inserts are no-ops in purge, and
the record will remain locked during transaction rollback.

TODO: in dict_build_table_def_step() or dict_build_index_def_step(),
prevent the creation of tables with too many columns for which a
prefix index is defined.  This is because there is a size limit of undo
log records, and for each prefix-indexed column, the log must store
REC_MAX_INDEX_COL_LEN + BTR_EXTERN_FIELD_REF_SIZE bytes.

trx_undo_page_report_insert(): Assert that the index is clustered.

trx_undo_page_fetch_ext(): New function, for fetching the BLOB prefix
in trx_undo_page_report_modify().

trx_undo_page_report_modify(): Write long enough prefixes of the externally
stored columns to the undo log.

trx_undo_rec_get_partial_row(): Remove the parameter "ext".  Assert that
the undo log contains long enough prefixes of the externally stored columns.

purge_node_t: Remove the field "ext".
2007-12-05 14:10:15 +00:00
marko
3044ef3523 branches/zip: row_build_index_entry(): Add assertions that prevent improper
prefix indexes from being built on externally stored columns.
2007-12-05 13:26:06 +00:00
marko
c440688147 branches/zip: btr_cur_pessimistic_update(), btr_cur_pessimistic_delete():
Use rec_offs_any_extern() as a condition for freeing externally stored
columns.  This is only a performance optimization.
2007-12-05 09:49:09 +00:00
marko
244c9eeda3 branches/zip: Merge r2154 from trunk:
innodb.result, innodb.test: Revert the changes in r2145.

The tests that were removed by MySQL

ChangeSet@1.2598.2.6  2007-11-06 15:42:58-07:00  tsmith@hindu.god

were moved to a new test, innodb_autoinc_lock_mode_zero, which is
kept in the MySQL BitKeeper tree.
2007-12-04 08:37:43 +00:00
marko
3978843916 branches/zip: Fix a bug in fast index creation that was introduced in r2131
when row_build() was changed to prefetch all externally stored column
prefixes that occur in ordering fields of an index.

row_build(): Add the parameter col_table for determining which
externally stored columns need to be fetched.

row_merge_read_clustered_index(): Pass new_table as the said parameter,
so that newly added indexes containing column prefix indexes of externally
stored columns will work.
2007-12-03 12:16:07 +00:00
marko
71cf1edf8d branches/zip: btr_store_big_rec_extern_fields(): Note that the page number
of the record containing the field reference may change.
2007-12-03 10:25:20 +00:00
marko
771ed4070c branches/zip: row_ext_cache_fill(): Add a missing "else" that should have
been added in r2131.
2007-11-30 15:32:36 +00:00
marko
b385d9abd2 branches/zip: Merge 2116:2146 from trunk. 2007-11-30 12:30:21 +00:00
marko
44387227d7 branches/zip: row_ext_cache_fill(): Add an assertion that some BLOB data
was actually fetched.  ext->len[i] == 0 is reserved to mean an uninitialized
BLOB pointer.
2007-11-30 08:48:36 +00:00
vasil
6a6d7a9b09 branches/zip:
* Change terminology:
  wait lock -> requested lock
  waited lock -> blocking lock
  new: requesting transaction (the trx what owns the requested lock)
  new: blocking transaction (the trx that owns the blocking lock)

* Add transaction ids to INFORMATION_SCHEMA.INNODB_LOCK_WAITS. This is
  somewhat redundant because transaction ids can be found in INNODB_LOCKS
  (which can be joined with INNODB_LOCK_WAITS) but would help users to
  write shorter joins (one table less) in some cases where they want to
  find which transaction is blocking which.

Suggested by:	Ken
Approved by:	Heikki
2007-11-29 13:47:09 +00:00
marko
5784e7debb branches/zip: row_ext_create(): Remove unused variables that were added
in r2131.
2007-11-29 12:54:43 +00:00
marko
603defd2de branches/zip: row_ext_create(): Remove the UNIV_INLINE that should
have been removed in r2131.
2007-11-29 12:52:49 +00:00
marko
8fb8584e75 branches/zip: row_ext: Fetch the BLOB prefixes already at row_ext_create().
Only add indexed BLOBs to row_ext.

trx_undo_rec_get_partial_row(): Move the BLOB fetching to row_ext_create().

row_build(): Pass only those BLOBs to row_ext_create() that are referenced by
ordering columns of some indexes, similar to trx_undo_rec_get_partial_row().

row_ext_create(): Add the parameter "tuple".  Move the implementation
from row0ext.ic to row0ext.c.

row_ext_lookup_ith(), row_ext_lookup(): Return a const pointer.  Remove
the parameters "field" and "f_len".  Make the row_ext_t* parameter const.

row_ext_t: Remove the field zip_size.

field_ref_zero[]: Declare in btr0types.h instead of btr0cur.h.

row_ext_lookup_low(): Rename to row_ext_cache_fill() and change the
signature.
2007-11-29 12:47:18 +00:00
marko
962ed52317 branches/zip: Clean up after r2129:
univ.i: Do not define UNIV_DEBUG, UNIV_ZIP_DEBUG.

btr_cur_del_unmark_for_ibuf(): Use the same comment in both btr0cur.c and
btr0cur.h.  Wrap long lines.
2007-11-29 12:36:53 +00:00
sunny
eca3cb2378 branches/zip: Fix a bug where the zipped page and the uncompressed page
contents end up with conflicting versions of a record's state. The zipped
page record was not being marked as "(un)deleted" because we were not
passing the zipped page contents to the (un)delete function, which first
(un)delete marks the uncompressed version and then based on whether
page_zip is NULL or not (un)delete marks the record in the compressed page.
2007-11-29 12:23:48 +00:00
marko
1a4db95edf branches/zip: ha_innobase::final_drop_index(): Allocate a separate transaction
for dropping the index trees, and set the dictionary operation flag, similar
to what ha_innobase::add_index() does.  This should ensure correct crash
recovery.
2007-11-29 10:34:55 +00:00
marko
cf7d5b774f branches/zip: trx_undo_rec_get_partial_row(): Set up the row_ext cache
only for those externally stored columns that occur in the ordering columns
of indexes.  Prefetch the prefixes of those columns, because the clustered
index record and the BLOBs may have been deleted by the time when the
purge thread needs to read the BLOB prefixes.

row_ext_create(): Add the debug assertion ut_ad(ut_is_2pow(zip_size)).
2007-11-29 10:07:47 +00:00
marko
dae1fdd6b9 branches/zip: Remove the warnings about pointer targets differing
in signedness that were introduced in r2114.

row_upd_index_replace_new_col_vals_index_pos(),
row_upd_index_replace_new_col_vals(): Declare "data" as const byte*
instead of const char*, and add casts to the dtype_get_at_most_n_mbchars()
calls.
2007-11-29 09:04:42 +00:00
marko
95d04ddb90 branches/zip: Fix a bug that was introduced in r2123.
buf_block_is_uncompressed(): Check that the pointer is aligned.  Use the
C modulus operator % instead of ut_align_offset(), because sizeof(buf_block_t)
is not guaranteed to be a power of 2.
2007-11-28 13:45:22 +00:00
marko
15d8cc6e64 branches/zip: row_vers_impl_x_locked_off_kernel(): In follow-up to r2119,
assert ut_a(entry) instead of playing it safe.
2007-11-28 13:09:50 +00:00
marko
a3190b1f49 branches/zip: buf_page_get_gen(): Note that the guessed block may also
point to a buffer pool chunk that has been released when resizing the
buffer pool.

buf_block_is_uncompressed(): Check that the pointer is aligned.  Thanks
to this check, it is safe to pass an arbitrary pointer as a guess
to buf_page_get_gen().
2007-11-28 11:31:12 +00:00
marko
4e37e2f826 branches/zip: Minor cleanup.
buf_page_get_release_on_io(): Removed this unused function.

ibuf_build_entry_from_ibuf_rec(): Justify why it is not necessary to
add system columns to the dummy table pointed to by the dummy secondary index.

page_zip_rec_set_deleted(): Add a page_zip_validate() assertion.
2007-11-28 11:22:25 +00:00
vasil
d4db2cf5e3 branches/zip:
Add the transaction's weight to information_schema.innodb_trx table.

Suggested by:	Ken
Approved by:	Heikki
2007-11-28 07:07:23 +00:00
marko
2bf6fc8f36 branches/zip: lock_sec_rec_some_has_impl_off_kernel(): Make the function
static.  It is only called from lock0lock.c.
2007-11-27 09:20:40 +00:00
marko
06299dddd4 branches/zip: In purge, avoid dereferencing unset BLOB pointers of freshly
inserted, uncommitted clustered index records when determining if a
secondary index record that contains a column prefix of an externally
stored column is referencing the clustered index record.

field_ref_zero[]: A BLOB pointer full of zero, for use in comparisons.

btr_copy_externally_stored_field_prefix(): Assert that the BLOB pointer is set.

row_ext_lookup_ith(), row_ext_lookup(), row_ext_lookup_low(): Document
that field_ref_zero is returned when the BLOB cannot be fetched.

row_ext_lookup_low(): Return field_ref_zero and *len = 0 when the
BLOB pointer is unset.

row_build_index_entry(): Return NULL when a needed BLOB pointer cannot
be dereferenced (row_ext_lookup returns field_ref_zero).  Check the
return value for NULL in callers.

row_vers_impl_x_locked_off_kernel(): Avoid comparisons when
row_build_index_entry() returns NULL.

row_vers_old_has_index_entry(): Ignore records for which
row_build_index_entry() returns NULL.  The entry should never be NULL
in rollback, but it may be NULL in purge.

row_merge_buf_add(): Assert that row_ext_lookup() does not return
field_ref_zero.  The table will be locked during index creation.
2007-11-27 09:11:45 +00:00
marko
110781a39e branches/zip: btr_cur_pessimistic_insert(): When calling
btr_cur_optimistic_insert(), pass big_rec to it, so that
the field references of externally stored columns (BLOB pointers)
will not be left uninitialized after a successful optimistic insert.
This bug was spotted by Sunny.
2007-11-27 07:57:03 +00:00
vasil
5243af9c87 branches/zip: Merge 2093:2116 from trunk. 2007-11-23 17:12:35 +00:00
marko
30358fe698 branches/zip: Correct mistakes made in r2114.
row_upd_index_replace_new_col_vals(): Declare fetch_ext.

row_upd_index_replace_new_col_vals_index_pos(): Add a type conversion
to the initialization expression of fetch_ext, to avoid a warning about
comparison between signed and unsigned.
2007-11-23 12:51:29 +00:00
marko
36874d65f0 branches/zip: Fix a bug in the updates of index records that contain a
column prefix of an externally stored column.

row_upd_ext_fetch(): New function.

row_upd_index_replace_new_col_vals(),
row_upd_index_replace_new_col_vals_index_pos(): Fetch prefixes of
externally stored columns when they are needed for column prefix
indexes.  For memory allocation, add the parameter ext_heap.  Avoid
repeating the inner loop after finding a  matching upd_field->field_no.
2007-11-23 12:40:19 +00:00
marko
138ca85a9d branches/zip: row_ext_create(), row_ext_lookup(): Clarify that the
column numbers are relative to the InnoDB table object, or numbers
returned by dict_col_get_no().  This will have to be ensured in
all calling code.
2007-11-22 14:09:19 +00:00
marko
05e8d405de branches/zip: dict_col_get_clust_pos(): Split a debug assertion, and
make use of dict_index_is_clust().
2007-11-22 10:29:02 +00:00
marko
57b3081135 branches/zip: row_ext_create(), row_ext_lookup(): Clarify that the column
numbers are relative to the clustered index record.
2007-11-22 10:22:44 +00:00
marko
404d94b38c branches/zip: btr_store_big_rec_extern_fields(),
btr_free_externally_stored_field(): Add some page type assertions
that were suggested by Sunny.
2007-11-22 10:02:50 +00:00
vasil
759af55181 branches/zip:
Fix the size of the static buffer for lock_table and lock_index.
I was not realizing that NAME_LEN contains the mbmaxlen multiplier and thus
a quote, when converted to 2 quotes, will take 2 bytes while there are 3
bytes reserved.

Spotted by:	Marko
Pointyhat to:	Vasil
2007-11-21 17:15:27 +00:00
vasil
5c8a9ce25a branches/zip:
Add C test for innobase_convert_name() in addition to the mysql-test one.
2007-11-21 17:02:46 +00:00
marko
71b3c265b8 branches/zip: When writing an externally stored column to the undo log,
set the "external storage" flag.  When parsing the undo log, do not
misinterpret a SQL NULL column for externally stored.

These bugs were spotted by Heikki and Sunny.

trx_undo_page_report_modify(): Set the UNIV_EXTERN_STORAGE_FIELD flag
when needed.

trx_undo_rec_get_partial_row(): Check for len == UNIV_SQL_NULL.
2007-11-21 13:08:15 +00:00