Commit graph

899 commits

Author SHA1 Message Date
marko
7be8ffc2c6 branches/zip: Introduce the function page_zip_fail_func() and
the wrapper macro page_zip_fail() for displaying error messages.
When the error output is enabled (at compile-time), a breakpoint
may be set in page_zip_fail_func to easily debug all decompression
errors in the context where they occur.
2007-11-15 10:56:34 +00:00
vasil
6162deb677 branches/zip:
Remove unnecessary code. Environment variables are passed to children anyway,
no need to export them.

Approved by:	Sunny (via IM)
2007-11-13 09:31:54 +00:00
vasil
13c99e8bc1 branches/zip:
Fix typos in comment.
2007-11-13 07:41:34 +00:00
sunny
cbe16b8704 branches/zip: Minor fix, remove the constant, calculate the length of
string dynamically.
2007-11-12 23:40:36 +00:00
sunny
85ba4bd6b2 branches/zip: Change directory to one level up if export.sh script run from
within the scripts/ directory, so that the relative paths work. This change
was required because the script was moved from the top-level directory to
its sub-directory scripts/.
2007-11-12 23:28:59 +00:00
sunny
ce4099878b branches/zip: Add plugin build scripts, move export.sh to the scripts/ directory 2007-11-12 23:19:06 +00:00
marko
8822b4f94f branches/zip: btr_cur_pessimistic_insert(): For clarity,
use return(DB_...) instead of assigning err = DB_... when possible.
2007-11-09 15:38:48 +00:00
marko
58bea7acaf branches/zip: Undo r2079 and fix the cause of uninitialized data bytes
in page_zip_decompress().

page_zip_decompress_clust(), page_zip_decompress_clust_ext(): Zero-fill
the columns DB_TRX_ID and DB_ROLL_PTR on the uncompressed page.
2007-11-09 15:32:37 +00:00
marko
97a03baf41 branches/zip: page_zip_decompress(): Note that the uncompressed page
may contain uninitialized bytes when the space of a deleted record
is reused by a shorter record.
2007-11-09 12:09:29 +00:00
marko
51d5187137 branches/zip: Remove __attribute__((warn_unused_result)), because it does
not work in GCC 3.3.  It was useful during the development of zip compression,
when some placeholder code ignored the return values of some functions.
2007-11-09 09:41:21 +00:00
vasil
e7c63e2c15 branches/zip:
Add the query in information_schema.innodb_trx.trx_query. Add it even
though it is available in information_schema.processlist.info to make
inconsistencies between those two tables obvious.

It is rather confusting to see a transaction shown in innodb_trx and
innodb_locks that holds a lock on one table and the corresponding query
in processlist executing INSERT on another table. We do not want users
to contact us asking to explain that. It is caused by the fact that the
data for innodb_* tables and processlist is fetched at different time.

Approved by:	Marko
2007-11-07 20:38:07 +00:00
vasil
e3c2d27143 branches/zip:
Fix comment: sync variable name in comment with the actual variable name.
2007-11-07 16:17:52 +00:00
vasil
8424daa64b branches/zip:
Add mysql_addons.(cc|h) to Makefile.am, forgotten in r2072.

Pointyhat to:	Vasil
2007-11-07 16:06:29 +00:00
marko
96c6fe18b1 branches/zip: Improve Valgrind instrumentation.
page_zip_get_trailer_len(), page_zip_write_header(): Correct the
UNIV_MEM_ASSERT_RW() assertions.

page_zip_validate(): Read the validity bits of page, page_zip, and
page_zip->data.
2007-11-07 15:58:39 +00:00
marko
cf7d407119 branches/zip: Improve Valgrind instrumentation.
page_zip_decompress(): Assert that the uncompressed page is completely defined.

page_zip_validate(): Assert that the compressed and uncompressed pages are
completely defined.  Fetch the "valid" bits, so that they can be examined
when run under valgrind --db-attach=yes.
2007-11-07 14:14:47 +00:00
vasil
193e2376b1 branches/zip:
Introduce a generic soultion to the common problem that MySQL do not add
functions needed by us in a reasonable time.

Start with a function that retrieves THD::thread_id, this is needed for
the information_schema.innodb_trx.mysql_thread_id column.

Approved by:	Marko
2007-11-07 14:14:33 +00:00
marko
23d99475e0 branches/zip: row_insert_for_mysql(), row_update_for_mysql(),
row_prebuilt_free(): Add UNIV_UNLIKELY hints around tests for
ROW_PREBUILT_OBSOLETE and some other tests.
2007-11-07 13:52:52 +00:00
marko
98546caa6f branches/zip: page_zip_apply_log(): Write the status bits of the record
before invoking rec_get_offsets().
2007-11-07 13:50:53 +00:00
marko
9a9a952c37 branches/zip: Return a meaningful error message when refusing to create
a compressed table in the system tablespace.

db0err.h: Introduce the error code DB_TABLE_ZIP_NO_IBD.  Replace the
#define directives with an enum, to ease future code merges.  These
error codes are never written out to files or displayed to the user.
Thus they need not remain constant.

dict_build_table_def_step(): Return DB_TABLE_ZIP_NO_IBD instead of DB_ERROR.

create_table_def(): Report ER_ILLEGAL_HA_CREATE_OPTION "KEY_BLOCK_SIZE"
when the table creation fails with DB_TABLE_ZIP_NO_IBD.
2007-11-07 11:03:13 +00:00
marko
2a106e0f3a branches/zip: Deny non-superuser access to the INFORMATION_SCHEMA
tables INNODB_ZIP and INNODB_ZIP_RESET.
2007-11-07 08:44:07 +00:00
vasil
f0e3f1f3fe branches/zip:
Bugfix: In row_raw_format() - fix the return value when printing in
hex; do not forget to count the 2 extra characters "0x" that we wrote
at the beginning of the output.
2007-11-06 16:39:51 +00:00
vasil
1482a2d223 branches/zip:
Deny access to TRX INFORMATION_SCHEMA tables to non-superusers.

Approved by:	Marko
2007-11-05 14:17:07 +00:00
marko
680586464e branches/zip: btr_cur_pessimistic_update(): After btr_cur_pessimistic_insert(),
update page_zip, because rec may be on a different page.
2007-11-05 14:08:18 +00:00
marko
d03bdd38bc branches/zip: btr_free_externally_stored_field(): Clear rec_zip_size when
rec == NULL.
2007-11-05 13:14:11 +00:00
marko
4b23d55164 branches/zip: page_zip_compress(): Do not call deflate(&c_stream, Z_FULL_FLUSH)
unless more than 6 bytes are available for the output.  This should remove
the possibility that deflate() returns Z_OK without consuming all input.
2007-11-05 12:12:28 +00:00
marko
a8635f7e29 branches/zip: buf_page_get_gen(): Ignore "guess" if it does not point to
buf_pool->chunks[]->blocks[].

buf_block_is_uncompressed(): New function, to detect if a block points to
buf_pool->chunks[]->blocks[].
2007-11-05 10:31:41 +00:00
marko
a3c79ebcfc branches/zip: buf_page_hash_get(): Fix a debug assertion that was
accidentally negated in r2043.
2007-11-05 10:17:38 +00:00
marko
89f0e34f2a branches/zip: trx_rollback_or_clean_all_recovered(): Acquire the
kernel_mutex in the beginning of each loop, as was the case until r2040.
The bug was spotted by Heikki.
2007-11-02 12:53:06 +00:00
marko
7187686bda branches/zip: sync0sync.h: Define mutex_free as mutex0_free, because symbols
defined in innodb_redefine.h must not be undefined.  After this change,
innodb_redefine.h will define mutex0_free instead of mutex_free, and
everything is fine.
2007-11-01 20:36:51 +00:00
marko
cf98f66049 branches/zip: Allow the symbols in the dynamic InnoDB plugin to be
redefined so that the dynamic plugin can replace the builtin InnoDB
in MySQL 5.1.

ha_innodb.cc, handler0alter.cc: #include "univ.i" before any other InnoDB
header files or before defining any symbols

innodb_redefine.h: New file, to contain a mapping of symbols.  The idea
is that this file will be replaced in the build process; because this
is a large file that can be generated automatically, it does not make sense
to keep it under version control.

univ.i: #include "innodb_redefine.h" and #define ha_innobase ha_innodb

Makefile.am (ha_innodb_la_CXXFLAGS): Remove -Dha_innobase=ha_innodb

NOTE: there are still some issues in the source code.  One known issue is
the #undef mutex_free in sync0sync.h, which will cause the plugin to call the
function mutex_free in the builtin InnoDB.  The preprocessor symbols defined
in innodb_redefine.h must not be undefined or redefined anywhere in the code.
2007-11-01 15:00:44 +00:00
marko
418d050f91 branches/zip: Remove the parameter innodb_dynamic, and always call the
plugin "InnoDB", not "InnoDBzip".

We can disable the builtin InnoDB by mysqld --skip-innodb.  If the
builtin InnoDB is not disabled, installing the InnoDB plugin by the same
name will not work.

innodb_plugin_init(): Ignore differences in the PLUGIN_VAR_READONLY flag.
2007-11-01 13:25:48 +00:00
marko
1bfa27fb91 branches/zip: Remove warnings for BUILD/compile-... --warning-mode=pedantic.
ha_innobase::write_row(): The printf format %p expects const void*.

STRUCT_FLD: Do not use the GCC extension when __STRICT_ANSI__ is defined.

row_merge_read_clustered_index(): Compound initializers must not contain
variables.  Assign to struct fields instead.
2007-11-01 11:44:49 +00:00
marko
66e193b4ba branches/zip: buf_page_init_low(): Initialize also flush_type. 2007-10-31 22:02:23 +00:00
marko
63968a86e6 branches/zip: page_zip_compress(): Flag the compressed stream completely
initialized, although Valgrind believes that some bits in the 7th or 8th
bytes from the end are uninitialized.  (They might be, but the decompressor
should not care about those bits after encountering the end-of-stream marker
in the compressed bit stream.)
2007-10-31 20:49:16 +00:00
marko
d1ef07b308 branches/zip: Check that page_zip->data is defined, not page_zip itself. 2007-10-31 16:14:18 +00:00
marko
589393da83 branches/zip: Improve Valgrind instrumentation.
btr_cur_optimistic_insert(): On compressed tablespaces, check that both
the compressed and the uncompressed page are completely initialized in
the beginning of the function.

page_zip_compress(): After successful compression, check that the compressed
page is completely initialized.
2007-10-31 14:27:59 +00:00
marko
15d01d3e31 branches/zip: Add some more Valgrind instrumentation.
page_zip_write_rec(), page_zip_write_blob_ptr(), page_zip_write_node_ptr(),
page_zip_write_trx_id_and_roll_ptr(), page_zip_clear_rec(),
page_zip_rec_set_deleted(), page_zip_rec_set_owned(), page_zip_dir_insert(),
page_zip_dir_delete(), page_zip_dir_add_slot(), page_zip_reorganize(),
page_zip_copy(), page_zip_get_trailer_len(), page_zip_write_header():
Assert that the complete contents of the compressed page is defined.
2007-10-31 13:19:38 +00:00
marko
f8e3c447a3 branches/zip: Improve Valgrind instrumentation.
page_zip_compress(): Assert that the contents of the uncompressed page
is entirely initialized.

page_zip_decompress(): Assert that the contents of the compressed page
is entirely initialized.  Assert that the uncompressed page is entirely
writeable.  Flag the uncompressed page uninitialized in the beginning.
2007-10-31 12:42:38 +00:00
marko
dd2dd78cd7 branches/zip: buf_block_align(): Add missing type conversion. 2007-10-31 12:23:03 +00:00
marko
6eb43b3d44 branches/zip: Correct the Valgrind instrumentation of r2041.
Use UNIV_MEM_ASSERT_RW() instead of UNIV_MEM_VALID().  The latter
flags memory defined; the former checks that it is defined.
2007-10-31 10:44:15 +00:00
marko
fe6e780d82 branches/zip: buf_LRU_block_remove_hashed_page(): Add some Valgrind
instrumentation.
2007-10-31 10:40:41 +00:00
marko
a815c47ccb branches/zip: buf_buddy_relocate(): The src block may be partially freed.
Remove the Valgrind check about it.
2007-10-31 10:40:09 +00:00
marko
92df6720be branches/zip: Improve Valgrind instrumentation.
buf_buddy_relocate(): Allow the source block to contain uninitialized data.

buf0buddy.c: Replace the remaining VALGRIND_CHECK_ macros with the wrappers
defined in univ.i.
2007-10-31 09:00:08 +00:00
marko
902893c719 branches/zip: Improve Valgrind instrumentation.
buf_LRU_free_block(): Check that the block descriptor contains valid data.

buf_buddy_relocate(): Check that the source block contains valid data.

buf_page_get_gen(): Do not dereference bpage after calling buf_relocate().
This avoids a bogus Valgrind warning; the memory itself was valid.

buf_page_hash_get(): Check that the returned block descriptor contains
valid data.
2007-10-30 09:27:09 +00:00
marko
281d3966cf branches/zip: trx_rollback_or_clean_all_without_sess(): Rename to
trx_rollback_or_clean_all_recovered().
2007-10-30 08:25:01 +00:00
marko
b013f0d321 branches/zip: page0zip.c: Add some Valgrind instrumentation. 2007-10-30 08:19:48 +00:00
marko
7d5f2f84da branches/zip: trx_rollback_or_clean_all_without_sess(): Distinguish
recovered transactions from new ones.  Until r1594, they were distinguished
by trx->sess == NULL.

trx_t: Add the bitfield is_recovered.

trx_lists_init_at_db_start(): Set trx->is_recovered.

trx_create(): Initialize trx->is_recovered = 0.

trx_print(): Display information about trx->is_recovered.

trx_rollback_or_clean_all_without_sess(): Skip new transactions.
Protect all accesses of trx_sys->trx_list with kernel_mutex.

trx_roll_crash_recv_trx, trx_roll_max_undo_no, trx_roll_progress_printed_pct:
Made these variables static.
2007-10-29 15:32:19 +00:00
marko
b1d3192f45 branches/zip: row_merge_drop_temp_indexes(): Use COMMIT WORK instead of
trx_commit_for_mysql().
2007-10-29 15:25:46 +00:00
marko
a877fffcc9 branches/zip: buf_block_get_frame(): Add missing parenthesis. 2007-10-29 14:03:57 +00:00
vasil
0028e8d1ee branches/zip:
Add innodb_locks.lock_data column and some relevant tests.
For record locks this column represents the ordering fields of the
locked row in a human readable, SQL-valid, format.

Approved by:	Marko
2007-10-29 13:03:53 +00:00