Commit graph

667 commits

Author SHA1 Message Date
vasil
3c9bec1100 branches/zip:
Implement a check whether pthread_t objects can be used by GCC atomic
builtin functions. This check is implemented in plug.in and defines the
macro HAVE_ATOMIC_PTHREAD_T. This macro is checked in univ.i and the
relevant part of the code enabled (the one that uses GCC atomics against
pthread_t objects).

In addition to this, the same program that is compiled as part of the
plug.in check is added in ut/ut0auxconf.c. In the InnoDB Plugin source
archives that are shipped to the users, a generated Makefile.in is added.
That Makefile.in will be modified to compile ut/ut0auxconf.c and define
the macro HAVE_ATOMIC_PTHREAD_T if the compilation succeeds. I.e.
Makefile.in will emulate the work that is done by plug.in. This is done in
order to make the check happen and HAVE_ATOMIC_PTHREAD_T eventually
defined without regenerating MySQL's ./configure from
./storage/innobase/plug.in. The point is not to ask users to install the
autotools and regenerate ./configure.

rb://95

Approved by:	Marko
2009-03-05 14:38:59 +00:00
vasil
94ea323ea8 branches/zip:
Add FreeBSD to the list of the operating systems that have
sizeof(pthread_t) == sizeof(void*) (i.e. word size).

On FreeBSD pthread_t is defined like:

  /usr/include/sys/_pthreadtypes.h:

  typedef struct  pthread                 *pthread_t;

I did the following tests (per Inaam's recommendation):

a) appropriate version of GCC is available on that platform (4.1.2 or
higher for atomics to be available)

  On FreeBSD 6.x the default compiler is 3.4.6, on FreeBSD 7.x the default
  one is 4.2.1. One can always install the version of choice from the ports
  collection. If gcc 3.x is used then HAVE_GCC_ATOMIC_BUILTINS will not be
  defined and thus the change I am committing will make no difference.

b) find out if sizeof(pthread_t) == sizeof(long)

  On 32 bit both are 4 bytes, on 64 bit both are 8 bytes.

c) find out the compiler generated platform define (e.g.: __aix, __sunos__
etc.)

  The macro is __FreeBSD__.

d) patch univ.i with the appropriate platform define
e) build the mysql
f) ensure it is using atomic builtins (look at the err.log message at
system startup. It should say we are using atomics for both mutexes and
rw-locks)
g) do sanity testing (keeping in view the smp changes)

  I ran the mysql-test suite. All tests pass.
2009-02-27 11:27:18 +00:00
inaam
4b020d3ad5 branches/zip
This is a fix for issue#178. Instead of using UNIV_LINUX which is
defined through CFLAGS we use compiler generated define __linux__
that is effective for both .c and .cc files.
2009-02-27 00:16:46 +00:00
marko
93ec81bb6d branches/zip: Correct the initialization of the memory subsystem once
again, to finally put Issue #181 to rest.

Revert some parts of r4274.  It is best not to call ut_malloc() before
srv_general_init().

mem_init(): Do not call ut_mem_init().

srv_general_init(): Initialize the memory subsystem in two phases:
first ut_mem_init(), then mem_init().  This is because os_sync_init()
and sync_init() depend on ut_mem_init() and mem_init() depends on
os_sync_init() or sync_init().

srv_parse_data_file_paths_and_sizes(),
srv_parse_log_group_home_dirs(): Remove the output parameters.  Assign
to the global variables directly.  Allocate memory with malloc()
instead of ut_malloc(), because these functions will be called before
srv_general_init().

srv_free_paths_and_sizes(): New function, for cleaning up after
srv_parse_data_file_paths_and_sizes() and
srv_parse_log_group_home_dirs().

rb://92 approved by Sunny Bains
2009-02-25 10:09:15 +00:00
marko
174bdfcebb branches/zip: Remove the unused function dict_index_get_type(). 2009-02-24 14:02:48 +00:00
marko
98ea8e30ba branches/zip: Remove unused function os_mem_alloc_nocache(). 2009-02-24 13:14:59 +00:00
marko
d25cf61788 branches/zip: Fix bugs in the fix of Issue #181. Tested inside and
outside Valgrind, with innodb_use_sys_malloc set to 0 and 1.

mem_init(): Invoke ut_mem_init() before mem_pool_create(), because
the latter one will invoke ut_malloc().

srv_general_init(): Do not initialize the memory subsystem (mem_init()).

innobase_init(): Initialize the memory subsystem (mem_init()) before
calling srv_parse_data_file_paths_and_sizes(), which needs ut_malloc().
Call ut_free_all_mem() in error handling to clean up after the mem_init().
2009-02-23 22:14:38 +00:00
marko
e2196c3419 branches/zip: Initialize ut_list_mutex at startup. Without this fix,
ut_list_mutex would be used uninitialized when innodb_use_sys_malloc=1.
This fix addresses Issue #181.

ut_mem_block_list_init(): Rename to ut_mem_init() and make public.

ut_malloc_low(), ut_free_all_mem(): Add ut_a(ut_mem_block_list_inited).

mem_init(): Call ut_mem_init().
2009-02-23 10:43:51 +00:00
marko
1a86ae1771 branches/zip: page_zip_set_size(): Fix a g++ 4.3.2 warning
about an empty body in a "for" statement.  This closes Issue #176.
2009-02-19 09:52:39 +00:00
marko
732f9dd7fb branches/zip: Protect ut_total_allocated_memory with ut_list_mutex.
Unprotected updates to ut_total_allocated_memory in
os_mem_alloc_large() and os_mem_free_large(), called during
fast index creation, may corrupt the variable and cause assertion failures.

Also, add UNIV_MEM_ALLOC() and UNIV_MEM_FREE() instrumentation around
os_mem_alloc_large() and os_mem_free_large(), so that Valgrind can
detect more errors.

rb://90 approved by Heikki Tuuri.  This addresses Issue #177.
2009-02-18 15:25:45 +00:00
marko
b10078d34f branches/zip: buf_buddy_get_slot(): Fix a gcc 4.3.2 warning
about an empty body of a "for" statement.
This fixes part of Issue #176.
2009-02-18 15:04:03 +00:00
marko
f1d6c5592f branches/zip: UT_DBG_STOP: Use do{} while(0) to silence a g++-4.3.2 warning
about a while(0); statement.  This should fix (part of) Issue #176.
2009-02-18 15:01:09 +00:00
marko
a5304a28a8 branches/zip: When assigning lock->recursive = FALSE, also flag
lock->writer_thread invalid, so that Valgrind will catch more errors.
This is related to Issue #175.
2009-02-17 12:59:54 +00:00
marko
a5d1b1cee7 Minor cleanup of the Google SMP patch.
sync_array_object_signalled(): Add a (void) cast to eliminate a gcc warning
about the return value of os_atomic_increment() being ignored.

rw_lock_create_func(): Properly indent the preprocessor directives.

rw_lock_x_lock_low(), rw_lock_x_lock_func_nowait(): Split lines correctly.

rw_lock_set_writer_id_and_recursion_flag(): Silence a Valgrind warning.
Do not mix statements and variable declarations.
2009-02-17 12:26:53 +00:00
vasil
d77e348fbd branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 22/28]
2009-02-17 09:50:12 +00:00
vasil
b769ee8722 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 21/28]
2009-02-17 09:46:52 +00:00
vasil
600b41888d branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 20/28]
2009-02-17 09:43:50 +00:00
vasil
78866060a3 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 19/28]
2009-02-17 09:41:24 +00:00
vasil
bcd9af2b76 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 18/28]
2009-02-17 09:39:11 +00:00
vasil
3f2cffabca branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 17/28]
2009-02-17 09:36:44 +00:00
vasil
3755fe658c branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 16/28]
2009-02-17 09:33:38 +00:00
vasil
f2e8426752 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 15/28]
2009-02-17 09:29:55 +00:00
vasil
13d548f932 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 13/28]
2009-02-17 09:27:31 +00:00
vasil
a12c1a05e5 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 13/28]
2009-02-17 09:24:40 +00:00
vasil
ea68867dd7 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 12/28]
2009-02-17 09:18:35 +00:00
vasil
3a5070562f branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 11/28]
2009-02-17 09:14:40 +00:00
vasil
156ed23fe1 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 10/28]
2009-02-17 09:12:41 +00:00
vasil
52f0c662d2 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 9/28]
2009-02-17 09:10:18 +00:00
vasil
98af6f74d5 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 8/28]
2009-02-17 09:06:49 +00:00
vasil
cb7c66d0d2 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 7/28]
2009-02-17 09:04:28 +00:00
vasil
54d835ad05 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 6/28]
2009-02-17 09:02:27 +00:00
vasil
d8aa953d08 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 5/28]
2009-02-17 08:59:22 +00:00
vasil
7736c6fe08 branches/zip:
* Remove old Innobase copyright lines from C source files
* Add a reference to the GPLv2 license as recommended by the lawyers
at Oracle Legal

[Step 4/28]
2009-02-17 08:55:41 +00:00
vasil
c6232c06fa branches/zip:
To the files touched by the Google patch from c4144 (excluding
include/os0sync.ic because later we removed Google code from that file):

* Remove the Google license
* Remove old Innobase copyright lines
* Add a reference to the Google license and to the GPLv2 license at the top,
as recommended by the lawyers at Oracle Legal.
2009-02-17 07:56:33 +00:00
vasil
3c6d991778 branches/zip:
(followup to r4145) Non-functional change:

Change the os_atomic_increment() and os_compare_and_swap() functions
to macros to avoid artificial limitations on the types of those
functions' arguments. As a consequence typecasts from the source
code can be removed.

Also remove Google's copyright from os0sync.ic because that file no longer
contains code from Google.

Approved by:	Marko (rb://88), also ok from Inaam via IM
2009-02-10 20:58:17 +00:00
inaam
a1bb700fd2 branches/zip rb://30
This patch changes the innodb mutexes and rw_locks implementation.
On supported platforms it uses GCC builtin atomics. These changes
are based on the patch sent by Mark Callaghan of Google under BSD
license. More technical discussion can be found at rb://30

Approved by: Heikki
2009-02-09 23:36:25 +00:00
marko
e97b5d3e3a branches/zip: Enclose some backup functions in #ifdef UNIV_HOTBACKUP.
recv_read_cp_info_for_backup(), recv_scan_log_seg_for_backup():
These functions are only called by InnoDB Hot Backup.
2009-02-02 12:28:17 +00:00
marko
11d57d9369 branches/zip: innobase_start_or_create_for_mysql(): Remove a factual error
in the function comment.  Parameters are not read from a file "srv_init".
2009-02-02 08:48:05 +00:00
marko
6aab391620 branches/zip: Make innodb_adaptive_hash_index settable.
btr_search_disabled: Rename to btr_search_enabled and change the type
to char, so that it can be directly linked to the MySQL parameters.
Note that the variable is protected by btr_search_latch and
btr_search_enabled_mutex, a new mutex introduced in this patch.

btr_search_enabled_mutex: A new mutex, to protect btr_search_enabled
together with btr_search_latch.

buf_pool_drop_hash_index(): New function, to be called from
btr_search_disable().

btr_search_disable(), btr_search_enable(): Fix bugs.  These functions
were previously unused.

btr_search_guess_on_hash(), btr_search_build_page_hash_index():
Check btr_search_enabled once more, while holding btr_search_latch.

btr_cur_search_to_nth_level(): Note that the reads of btr_search_enabled
may be dirty and explain why it should not be a problem.

innobase_adaptive_hash_index: Remove. The variable btr_search_enabled will be used directly instead.

innodb_adaptive_hash_index_update(): New function, an update callback for
innodb_adaptive_hash_index.  This will call either btr_search_disable()
or btr_search_enable() when the value is assigned.  The functions will
be called even if the value does not appear to be changed, e.g., when
setting from TRUE to TRUE or FALSE to FALSE.

rb://85 approved by Heikki Tuuri.  This addresses Issue #163.
2009-01-30 21:30:29 +00:00
marko
635268b769 branches/zip: ibuf_use_t: Add the constant IBUF_USE_COUNT, to eliminate
a gcc warning about an assertion that trivially holds.
The warning was introduced in r4061, in the merge of
branches/innodb+ -r4053.

ibuf_insert(): Let an assertion fail if ibuf_use is unknown.
2009-01-30 10:58:56 +00:00
marko
8b025adba6 branches/zip: Port the applicable parts of r4053 from branches/innodb+:
Implement the global variable innodb_change_buffering, with the
following values:

none - buffer nothing
inserts - buffer inserts (the default)

Approved by Ken Jacobs.
2009-01-29 09:27:09 +00:00
marko
15b9f877ec branches/zip: Enclose some functions inside #ifdef UNIV_HOTBACKUP:
ut_sprintf_timestamp_without_extra_chars(), ut_get_year_month_day(),
log_reset_first_header_and_checkpoint(): These functions are only used
in InnoDB Hot Backup.
2009-01-28 13:21:45 +00:00
marko
0f8dcc7cb7 branches/zip: trx0sys.ic: Remove unnecessary #include <data0type.h>. 2009-01-28 12:35:49 +00:00
marko
0a2e4aa324 branches/zip: Revert the change to univ.i that was accidentally
committed in r4045.
2009-01-27 22:33:20 +00:00
marko
938c8ee6b7 branches/zip: btr_search_validate(): Fix a bogus UNIV_DEBUG
assertion failure that was accidentally introduced in r4036.
Instead of calling buf_block_get_frame(), which asserts that the
block must be buffer-fixed, access block->frame directly.  That
is safe, because changes of block->page.state are protected by
the buffer pool mutex, which we are holding.

This bug was reported by Michael.
2009-01-27 22:31:17 +00:00
marko
b707b2e3b1 branches/zip: In r988, the function buf_block_align() was enclosed
within UNIV_DEBUG. The two remaining callers in non-debug builds,
btr_search_guess_on_hash() and btr_search_validate(), were rewritten
to call buf_page_hash_get().

To implement support for a resizeable buffer pool, the function
buf_block_align() had been rewritten to perform a page hash lookup in
the buffer pool. The caller was also made responsible for holding the
buffer pool mutex.

Because the page hash lookup is expensive and it has to be done while
holding the buffer pool mutex, implement buf_block_align() by pointer
arithmetics again, and make btr_search_guess_on_hash() call it. Note
that this will have to be adjusted if the interface to the resizeable
buffer pool is actually implemented.

rb://83 approved by Heikki Tuuri, to address Issue #161.

As a deviation from the approved patch, this patch also makes
btr_search_validate() (invoked by CHECK TABLE) check that
buf_pool->page_hash is consistent with buf_block_align().
2009-01-26 20:33:20 +00:00
marko
5dceabc908 branches/zip: buf_page_get_gen(): Remove the unused mode BUF_GET_NOWAIT.
This was noticed while investigating Issue #160.
2009-01-23 13:31:36 +00:00
marko
0bd67bdba1 branches/zip: Remove some redundant #include directives. 2009-01-23 12:07:38 +00:00
marko
70ca1bee38 branches/zip: Enclose some more unused code in #ifdef UNIV_LOG_ARCHIVE.
This will help trim the dependencies of InnoDB Hot Backup.

recv_recovery_from_checkpoint_start(): Rename to
recv_recovery_from_checkpoint_start_func(), and remove the two first
parameters unless UNIV_LOG_ARCHIVE is defined.  Define and use
the auxiliary macros TYPE_CHECKPOINT and LIMIT_LSN in the function.

struct recv_sys_struct: Remove archive_group unless UNIV_LOG_ARCHIVE
is defined.

Do not define LOG_ARCHIVE unless UNIV_LOG_ARCHIVE is defined.
2009-01-23 09:26:10 +00:00
marko
bef98e3442 branches/zip: Remove some redundant #include statements. 2009-01-23 09:04:49 +00:00