Commit graph

1186 commits

Author SHA1 Message Date
marko
775fd54ddb branches/zip: Makefile.am: Disable the generation of
position-independent code in the compilation of ha_innodb.so.

ha_innodb_la_CXXFLAGS, ha_innodb_la_CFLAGS: Add -prefer-non-pic.
This flag is interpreted by the ../../libtool script that acts
as a front-end to the compiler and linker.
2008-02-11 10:31:55 +00:00
marko
4d1a1c2347 branches/zip: Add the necessary #include "univ.i" that was removed in the
unapproved change r2290.
2008-02-08 13:50:28 +00:00
vasil
00fdbcc019 branches/zip:
Do not include univ.i in mysql_addons.h, it was included for the sole
purpose of innodb_redefine.h to work and now innodb_redefine.h has been
removed. See r2251 and r2288.
2008-02-08 13:19:56 +00:00
marko
345422f65b branches/zip: scripts/dynconfig: Correct misleading usage message.
At present, the script only accepts one command line parameter.
Append newline to some die messages, so that the Perl interpreter
will not print the file name and line number of the failing statement.
2008-02-08 12:31:13 +00:00
marko
2c521319f2 branches/zip: Remove innodb_redefine.h and all references to it. The
file has been redundant since r2278.

include/innodb_redefine.h: Remove.

include/sync0sync.h: Remove the definition of mutex_free that was added
because of innodb_redefine.h.

include/univ.i: Remove references to innodb_redefine.h.  Explain why
the C++ classes need to be renamed.

scripts/build-plugin.sh: Build InnoDB only once.  The file
innodb_redefine.h is no longer needed.
2008-02-08 12:23:17 +00:00
marko
70a539b087 branches/zip: scripts/dynconfig: Minor cleanup (spelling and formatting). 2008-02-08 12:18:06 +00:00
marko
23961f575e branches/zip: trx_sys_doublewrite_init_or_restore_pages(): Print out the
space identifier in the corruption message.
2008-02-08 10:22:47 +00:00
inaam
044e405df0 branches/zip:
srv_log_file_size is misspelled as srv_log_filen_size in r2276

reviewed by: non-functional change.
2008-02-07 20:12:11 +00:00
marko
c5c5fdc535 branches/zip: make_flex.sh, lexyy.c: Remove some GCC warnings about unused
static symbol definitions.

yy_scan_buffer, yy_scan_string, yy_scan_bytes: Leave these unused extern
function declarations alone.

yypush_buffer_state, yypop_buffer_state, yyswitch_to_buffer, yyget*, yyset*,
yylex_destroy: Add __attribute__((unused)).

This closes Mantis issue #8.
2008-02-07 10:03:54 +00:00
marko
3ab0d2d14a branches/zip: trx_undo_prev_version_build(): Remove a bogus warning
about undo_rec possibly being uninitialized.  When trx_undo_get_undo_rec()
leaves undo_rec uninitialized, both functions will return DB_MISSING_HISTORY
without dereferencing undo_rec.

This closes Mantis issue #7.
2008-02-07 09:08:28 +00:00
marko
468d425d53 branches/zip: Hide some global variables that were accidentally not hidden
in r2276.  Now the following symbols will be exported when InnoDB is built
as a dynamic plugin:

* the virtual method pointer table of class ha_innodb
* the three variables that MySQL will reference when linking at runtime:

	_mysql_plugin_declarations_
	_mysql_plugin_interface_version_
	_mysql_sizeof_struct_st_plugin_

Furthermore, the following symbols are weak globals, to allow us to access
the built-in InnoDB in the mysqld executable, in case it contains a statically
linked InnoDB:

	builtin_innobase_plugin
	innodb_hton_ptr
2008-02-06 16:11:46 +00:00
marko
fe5e0b7245 branches/zip: Make the changes to pars0grm.c that were promised in r2276.
pars/pars0grm.h: Remove.  The primary file is include/pars0grm.h.

pars/make_bison.sh: Add from trunk.  Somehow, this file was not merged
at the same time with make_flex.sh.  Add sed magic for replacing the
file name and for hiding yychars, yynerrs, yylval, and yyparse.

pars/pars0grm.c: Apply the changes made by make_bison.sh.
2008-02-06 16:01:57 +00:00
marko
1d1dc31a06 branches/zip: Introduce UNIV_INTERN, a linkage specifier for InnoDB-global
symbols.  Use it for all definitions of non-static variables and functions.

lexyy.c, make_flex.sh: Declare yylex as UNIV_INTERN, not static.  It is
referenced from pars0grm.c.

Actually, according to
	nm .libs/ha_innodb.so|grep -w '[ABCE-TVXYZ]'
the following symbols are still global:

* The vtable for class ha_innodb
* pars0grm.c: The function yyparse() and the variables yychar, yylval, yynerrs

The required changes to the Bison-generated file pars0grm.c will be addressed
in a separate commit, which will add a script similar to make_flex.sh.

The class ha_innodb is renamed from class ha_innobase by a #define.  Thus,
there will be no clash with the builtin InnoDB.  However, there will be some
overhead for invoking virtual methods of class ha_innodb.  Ideas for making
the vtable hidden are welcome.  -fvisibility=hidden is not available in GCC 3.
2008-02-06 14:17:36 +00:00
marko
891074b0c4 branches/zip: Make static all declarations in the Flex-generated
lexical analyzer of the InnoDB SQL parser.
2008-02-06 13:14:42 +00:00
marko
dc7d5448a0 branches/zip: Remove unused definitions from include/trx0xa.h. 2008-02-06 08:19:56 +00:00
marko
c9087d7d90 branches/zip: Apply some fixes suggested by Heikki.
btr_cur_pessimistic_update(): Note why the externally stored columns
of a record on a latched page cannot have been purged.

trx_undo_get_undo_rec(): Clarify that the stack of versions is locked
all the way down to the purge view.

trx_undo_prev_version_build(): Set *old_vers = NULL also when the record
could have been purged already.  Add some clarifying comments.
2008-02-04 12:47:00 +00:00
marko
efc7639dac row_merge_buf_add(): Add a missing const qualifier to "ext". 2008-01-30 21:15:41 +00:00
vasil
c80d5da05e branches/zip:
Require PROCESS privileges instead of SUPER to view INFORMATION_SCHEMA tables.

Suggested by:	Sergei Golubchik <serg@mysql.com> (in a private email,
		pointed http://bugs.mysql.com/32710)
2008-01-29 09:54:46 +00:00
marko
3e4b5e287b branches/zip: Merge 2236:2263 from branches/5.1. 2008-01-28 15:54:46 +00:00
marko
993c02cf04 branches/zip: Assert in the adaptive hash that the insert buffer B-tree
is not indexed.

btr_search_update_hash_ref(), btr_search_drop_page_hash_index(),
btr_search_build_page_hash_index(), btr_search_update_hash_on_delete(),
btr_search_update_hash_node_on_insert(), btr_search_update_hash_on_insert(),
btr_search_validate():
Assert that hashed blocks do not belong to the insert buffer tree.

btr_search_move_or_delete_hash_entries():
When invoked on the insert buffer tree, assert that neither block is hashed.
2008-01-25 14:37:11 +00:00
marko
e1e958d444 branches/zip: Fast index creation: Release locks on system tables before
creating indexes.  Lock the user table inside the user transaction.

enum trx_dict_op: Remove TRX_OP_INDEX_MAY_WAIT.

ha_innobase::add_index(): Lock the user tables within prebuilt->trx.
Commit the data dictionary transaction before creating indexes.

ha_innobase::final_drop_index(): Lock the user table within prebuilt->trx.
2008-01-25 14:26:07 +00:00
marko
0a63ed9c4e branches/zip: Introduce the accessor function dict_index_is_ibuf()
for determining if an index is the insert buffer B-tree.
2008-01-25 08:13:12 +00:00
marko
aca23dda60 branches/zip: row_sel_sec_rec_is_for_clust_rec(): If the record in the
clustered index is delete-marked, return FALSE without comparing any columns.
2008-01-24 09:58:03 +00:00
marko
8958f06278 branches/zip: Introduce the page type code FIL_PAGE_TYPE_ZBLOB2 for
continuation pages containing compressed BLOBs.  The first compressed
BLOB page will be of type FIL_PAGE_TYPE_ZBLOB.
2008-01-24 08:12:02 +00:00
marko
b52a30e09d branches/zip: When storing a longer prefix of an externally stored column
to the undo log, also store the original length of the column, so that the
changes will be correctly undone in transaction rollback or when fetching
previous versions of the row.

innodb-zip.test: New file, for tests of the compression.

upd_field_t: Add orig_len, the original length of new_val.

btr_push_update_extern_fields(): Restore the original prefix of the column.
Add the parameter heap where memory will be allocated if necessary.

trx_undo_rec_get_col_val(): Add the output parameter orig_len.

trx_undo_page_report_modify_ext(): New function: Write an externally
stored column to the undo log.  This is only called from
trx_undo_page_report_modify(), and this is the only caller of
trx_undo_page_fetch_ext().

trx_undo_update_rec_get_update(): Read the original length of the column
prefix to upd_field->orig_len.
2008-01-23 13:46:45 +00:00
vasil
5ee41a15d0 branches/zip:
Include univ.i in mysql_addons.h because univ.i includes innodb_redefine.h
which is needed to rename the functions in this file with ibd_ prefix in
the dynamic InnoDB plugin. Aka the renaming magic, required for the dynamic
plugin to work.

Approved by:	Marko
2008-01-23 09:38:23 +00:00
inaam
5c087094e3 branches/zip:
Cast to  ib_uint64_t the mask for align down before doing the '~' operation on it.

Reviewed by: Heikki
2008-01-22 18:50:44 +00:00
marko
793b1fe3fb branches/zip: row_sel_get_clust_rec_for_mysql(): Similar to the function
row_sel_get_clust_rec(), return if a previous version of the clustered index
record does not exist in the read view.  This bug was made and found by
Heikki.  It was harmless as long as the clustered index record contained
a long enough local prefix of externally stored columns, to allow secondary
index records to be built without fetching BLOBs.

InnoDB transactions should never look at a clustered index record whose
transaction identifier (DB_TRX_ID) is not visible in the transaction's
read view.
2008-01-21 09:51:40 +00:00
marko
0d59bf8ee6 branches/zip: Avoid infinite page splits on compressed tables.
btr_page_get_sure_split_rec(): Remove the check if insert_size
exceeds free_space.

btr_page_split_and_insert(): If a compressed page has already been split,
avoid further splits by inserting the record to an empty page.  As a
performance optimization, avoid invoking btr_page_insert_fits() on
compressed tables.
2008-01-17 12:29:03 +00:00
marko
b060f8baad branches/zip: btr_page_get_sure_split_rec(): Return NULL when the record
is not guaranteed to fit on a compressed page, instead of letting
an assertion fail.
2008-01-16 14:14:36 +00:00
marko
038ac6e2ae branches/zip: os_mem_alloc_large(), os_mem_free_large():
Update ut_total_allocated_memory.
2008-01-16 12:45:27 +00:00
marko
214ced4e36 branches/zip: Free the buffer pool at shutdown.
buf_pool_free(): New function: Free all chunks of the buffer pool.

innobase_shutdown_for_mysql(): Call buf_pool_free() right before
ut_free_all_mem().
2008-01-16 12:44:44 +00:00
marko
e693d5170d branches/zip: Add comments about the lock and latch protection of externally
stored columns (BLOBs).

btr_copy_blob_prefix(), btr_copy_zblob_prefix(),
btr_copy_externally_stored_field_prefix_low(),
btr_copy_externally_stored_field_prefix(),
btr_copy_externally_stored_field(),
btr_rec_copy_externally_stored_field():
Note that the page containing the clustered index record that points to
the BLOB must be latched.

btr_copy_zblob_prefix(): Note that there is no latch on the page, and thus
all accesses to a given page via this function must be covered by the same
set of locks or latches.

btr_copy_zblob_prefix(): Note that the block acquired by
buf_page_get_zip() is protected by an exclusive table lock or
or by a latch on the clustered index record.
2008-01-16 10:45:14 +00:00
marko
da25388ddc branches/zip: Fetch externally stored columns only when the clustered index
record is protected by a latch or a lock.

dtuple_copy(): New function: Copy a data tuple.

row_upd_replace(): New function: Apply on a row an update vector that
was built for the clustered index.  Set up a cache of externally stored
column prefixes if needed.

undo_node_t: Add the fields undo_row, undo_ext.

row_undo_search_clust_to_pcur(): Initialize undo_row and undo_ext.

row_undo_mod_upd_exist_sec(): Instead of fetching prefixes of
externally stored columns, use the undo_row and undo_ext that were
initialized in row_undo_search_clust_to_pcur().

upd_node_t: Remove the field n_ext.  Add the fields upd_row and upd_ext.

row_upd_store_row(): Initialize the upd_row and upd_ext fields of upd_node_t.

row_upd_sec_index_entry(), row_upd_clust_rec_by_insert(): Instead of
fetching prefixes of externally stored columns, use the upd_row
and upd_ext that were initialized in row_upd_store_row().
2008-01-16 10:10:32 +00:00
marko
9188a049e9 branches/zip: row_undo_ins_parse_undo_rec(): Initialize node->update
so that it will not be uninitialized when the undo record is being
processed.
2008-01-16 09:45:22 +00:00
vasil
12c03b4306 branches/zip:
Move the column trx_weight near the end in the
information_schema.innodb_trx table.

Suggested by:	Ken
Approved by:	Marko
2008-01-16 06:45:16 +00:00
marko
d4de2116e0 branches/zip: buf_pool_init(): Initialize buf_pool_zip_mutex before
acquiring buf_pool_mutex.  This avoids triggering the debug assertion
that was added in r2227.
2008-01-15 09:43:14 +00:00
inaam
a21e427e09 branches/zip: Merge r2213:2236 from branches/5.1.
Forward port of r2236
Introduce retry/sleep logic as a workaround for a transient bug
where ::open fails for partitioned tables randomly if we are using
one file per table.  (Bug #33349)


Reviewed by: Heikki
2008-01-15 04:27:03 +00:00
marko
3b2e1b23cc branches/zip: row_undo_mod(): Eliminate a local variable. 2008-01-14 14:18:21 +00:00
marko
e4d814ff12 branches/zip: row_upd_clust_rec_by_insert(): Do not release the latch on
the clustered index record before calling row_upd_index_replace_new_col_vals().
2008-01-14 14:13:11 +00:00
marko
44340b6e8e branches/zip: Add comments that clarify why the remaining calls to
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().
2008-01-14 10:04:45 +00:00
marko
aaccf9264f branches/zip: Clarify why certain calls of
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.
2008-01-11 19:59:47 +00:00
marko
d837c2040f branches/zip: eval_node_copy_and_alloc_val(): Add const qualifier. 2008-01-11 19:51:19 +00:00
marko
f6f4a52b30 branches/zip: Add clarifying comments that the clustered index record must
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.
2008-01-11 12:19:59 +00:00
marko
0d02593440 branches/zip: buf_LRU_search_and_free_block(): Do not forbid the release
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()].
2008-01-10 12:34:25 +00:00
marko
1cbf67cdbf branches/zip: btr_copy_zblob_prefix(): Print d_stream->msg on decompression
failure.
2008-01-10 11:06:01 +00:00
marko
7ac6a34347 branches/zip: Add instrumentation for prohibiting the release of
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().
2008-01-10 09:51:57 +00:00
marko
cdb5b46445 branches/zip: Implement wrappers for all operations on the buffer pool mutex.
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.
2008-01-10 09:37:13 +00:00
marko
4c8c6f378a branches/zip: Clean up index->to_be_dropped after a failed DROP INDEX.
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.
2008-01-09 13:03:51 +00:00
marko
4800aa4672 branches/zip: page_zip_reorganize(): Drop the adaptive search index before
attempting to reorganize the page, not after the reorganization has succeeded.
2008-01-07 13:40:12 +00:00