Commit graph

56043 commits

Author SHA1 Message Date
Guilhem Bichot
45521d9710 Fix for pushbuild failure (test which can't run in embedded mode) and compiler warning
mysql-test/suite/maria/t/maria_showlog_error.test:
  test which can't run in embedded mode
storage/innobase/handler/ha_innodb.cc:
  compiler warning
2008-12-05 10:15:23 +01:00
Guilhem Bichot
fb945ef224 Fixing Valgrind error: deadlock detector was set to random; seen in many InnoDB tests like innodb-replace.test
storage/innobase/handler/ha_innodb.cc:
  Fixing Valgrind error: deadlock detector was set to random. Making the recently added lines closer
  to the InnoDB style (tabs not spaces)
2008-12-04 22:17:47 +01:00
Michael Widenius
d83f647024 Fixed warnings and errors discovered by pushbuild2
mysys/my_init.c:
  Fixed link error when compiling without thread support
sql/item_create.cc:
  Fixed compiler warning
sql/mysqld.cc:
  Fixed compile error on windows
sql/protocol.cc:
  Fixed compiler warning
sql/sql_class.cc:
  Fixed compiler warning
sql/sql_class.h:
  Fixed compiler warning
storage/myisam/mi_open.c:
  Fixed compiler warning
storage/myisammrg/ha_myisammrg.cc:
  Fixed compiler warning (shadow variable)
2008-12-04 02:36:55 +02:00
Michael Widenius
fb68158856 Merge with base MySQL-5.1-maria 2008-12-03 06:07:50 +02:00
Michael Widenius
ea7cb6c273 Add missing file: Testing of mutex-wrong-usage-detector 2008-12-03 00:09:37 +02:00
Michael Widenius
32f81bab7d WL#3262 add mutex lock order checking to safemutex (also called safe_mutex_deadlock_detector)
This writes a warning on stderr if one uses mutex in different order,
like if one in one case would lock mutex in the order A,B and in another case
would lock mutex in the order B,A
This is inspired by and loosely based on the LOCKDEP patch by Jonas
Wrong mutex order is either fixed or mutex are marked with MYF_NO_DEADLOCK_DETECTION
if used inconsistently (need to be fixed by server team)

KNOWN_BUGS.txt:
  Added information that one need to dump and restore Maria tables
include/hash.h:
  Added prototype function for walking over all elements in a hash
include/my_pthread.h:
  Added my_pthread_mutex_init() and my_pthread_mutex_lock(); These should be used if one wants to disable mutex order checking.
  Changed names of the nonposix mutex_init functions to not conflict with my_phread_mutex_init()
  Added and extended structures for mutex deadlock detection.
  New arguments to sage_mutex_init() and safe_mutex_lock() to allow one to disable mutex order checking.
  Added variable 'safe_mutex_deadlock_detector' to enable/disable deadlock detection for all pthread_mutex_init()
mysys/Makefile.am:
  Added cleaning of test files
  Added test_thr_mutex
mysys/hash.c:
  Added hash_iterate() to iterate over all elements in a hash
  More comments
mysys/my_init.c:
  Added calls to destory all mutex uses by mysys()
  Added waiting for threads to end before calling TERMINATE() to list not freed memory
mysys/my_pthread.c:
  Changed names to free my_pthread_mutex_init() for mutex-lock-order-checking
mysys/my_sleep.c:
  Fixed too long wait if using 1000000L as argument
mysys/my_thr_init.c:
  Mark THR_LOCK_threads and THR_LOCK_malloc to not have mutex deadlock detection.
  (We can't have it enabled for this as these are internal mutex used by the detector  
  Call my_thread_init() early as we need thread specific variables enabled for the following pthread_mutex_init()
  Move code to wait for threads to end to my_wait_for_other_threads_to_die()
  Don't destroy mutex and conditions unless all threads have died
  Added my_thread_destroy_mutex() to destroy all mutex used by the mysys thread system
  Name the thread specific mutex as "mysys_var->mutex"
  Added my_thread_var_mutex_in_use() to return pointer to mutex in use or 0 if thread variables are not initialized
mysys/mysys_priv.h:
  Added prototypes for functions used internally with mutex-wrong-usage detection
mysys/thr_mutex.c:
  Added runtime detection of mutex used in conflicting order
  See WL#3262 or test_thr_mutex.c for examples
  The base idea is for each mutex have two hashes:
  - mutex->locked_mutex points to all mutex used after this one
  - mutex->used_mutex points to all mutex which has this mutex in it's mutex->locked_mutex
  There is a wrong mutex order if any mutex currently locked before this mutex is in the mutex->locked_mutex hash
sql/event_queue.cc:
  Mark mutex used inconsistently (need to be fixed by server team)
sql/event_scheduler.cc:
  Declare the right order to take the mutex
sql/events.cc:
  Mark mutex used inconsistently (need to be fixed by server team)
sql/ha_ndbcluster_binlog.cc:
  Mark mutex used inconsistently (need to be fixed by server team)
sql/log.cc:
  Mark mutex used inconsistently (need to be fixed by server team)
sql/mysqld.cc:
  Use pthread_mutex_trylock instead of pthread_mutex_unlock() when sending kill signal to thread
  This is needed to avoid wrong mutex order as normally one takes 'current_mutex' before mysys_var->mutex.
  Added call to free sp cache.
  Add destruction of LOCK_server_started and COND_server_started.
  Added register_mutex_order() function to register in which order mutex should be taken
  (to initiailize mutex_deadlock_detector).
  Added option to turn off safe_mutex_deadlock_detector
sql/protocol.cc:
  Fixed wrong argument to DBUG_PRINT (found by valgrind)
sql/rpl_mi.cc:
  Mark mutex used inconsistently (need to be fixed by server team)
sql/set_var.cc:
  Remove wrong locking of LOCK_global_system_variables when reading and setting log variables
  (would cause inconsistent mutex order).
  Update global variables outside of logger.unlock() as LOCK_global_system_variables has to be taken before logger locks
  Reviewed by gluh
sql/sp_cache.cc:
  Added function to destroy mutex used by sp cache
sql/sp_cache.h:
  Added function to destroy mutex used by sp cache
sql/sql_class.cc:
  Use pthread_mutex_trylock instead of pthread_mutex_unlock() when sending kill signal to thread
  This is needed to avoid wrong mutex order as normally one takes 'current_mutex' before mysys_var->mutex.
  Register order in which LOCK_delete and mysys_var->mutex is taken
sql/sql_insert.cc:
  Give a name for Delayed_insert::mutex
  Mark mutex used inconsistently (need to be fixed by server team)
  Move closing of tables outside of di->mutex (to avoid wrong mutex order)
sql/sql_show.cc:
  Don't keep LOCK_global_system_variables locked over value->show_type() as this leads to wrong mutex order
storage/innobase/handler/ha_innodb.cc:
  Disable safe_muted_deadlock_detector for innobase intern mutex (to speed up page cache initialization)
storage/maria/ha_maria.cc:
  Added flag to ha_maria::info() to signal if we need to lock table share or not.
  This is needed to avoid locking mutex in wrong order
storage/maria/ha_maria.h:
  Added flag to ha_maria::info() to signal if we need to lock table share or not.
storage/maria/ma_close.c:
  Destroy key_del_lock
  Simplify freeing ftparser_param
storage/maria/ma_key.c:
  Better comment
storage/maria/ma_loghandler.c:
  Mark mutex used inconsistently (need to be fixed by sanja)
storage/maria/ma_state.c:
  More comments
storage/maria/ma_test1.c:
  Ensure that safe_mutex_deadlock_detector is always on (should be, this is just for safety)
storage/maria/ma_test2.c:
  Ensure that safe_mutex_deadlock_detector is always on (should be, this is just for safety)
2008-12-03 00:02:52 +02:00
Michael Widenius
a6b67c50f5 Remove not used signal handling for ending a thread
Ensure that if we send 'sigint' to mysqld started with --gdb it's taken down nicely
Clear THR_THD when thread ends to get a valid stack trace if we die late
Bug #37869 mysqld stopped reacting to SIGINT when run with --gdb
2008-12-02 22:00:29 +02:00
unknown
2b51150231 Do not use MY_WME in the stat call which errors we process on high level.
(BUG#41127: Maria: assertion when SHOW ENGINE MARIA LOGS and missing logs)

mysql-test/suite/maria/r/maria_showlog_error.result:
  test suite for the BUG#41127
mysql-test/suite/maria/t/maria_showlog_error.test:
  test suite for the BUG#41127
storage/maria/ha_maria.cc:
  Do not use MY_WME in the stat call which errors we process on high level.
2008-12-01 15:21:37 +02:00
Sergei Golubchik
f1906c62d5 Bug#34374: mysql generates incorrect warning
an item was evaluated unnecessary, fix that by checking preconditions before evaluating the item

sql/sql_select.cc:
  an item was evaluated unnecessary, fix that by checking preconditions before evaluating the item
2008-11-29 00:27:13 +01:00
Guilhem Bichot
255f8feb4c Fix for BUG#40661 "Maria: crash in embedded server (when detecting deadlock?)"
bug is actually a weirdness in test system, so moving test portion into maria_notembedded.test

mysql-test/suite/maria/r/maria.result:
  result update
mysql-test/suite/maria/r/maria_notembedded.result:
  result update
mysql-test/suite/maria/t/maria.test:
      Removing test portion into maria_notembedded.test. Explanation below.
      Running maria.test with --mem --embedded --valgrind I got:
      ==378== Invalid read of size 4
      ==378==    at 0x857C755: _lf_pinbox_real_free (lf_alloc-pin.c:342)
      ==378==    by 0x857C640: _lf_pinbox_free (lf_alloc-pin.c:267)
      ==378==    by 0x857D50C: ldelete (lf_hash.c:226)
      ==378==    by 0x857DBC1: lf_hash_delete (lf_hash.c:429)
      ==378==    by 0x8243D82: unlock_lock_and_free_resource
      (waiting_threads.c:676)
      ==378==    by 0x8244A79: wt_thd_release (waiting_threads.c:948)
      ==378==    by 0x83F301D: wt_thd_release_self (trnman.c:98)
      ==378==    by 0x83F3D49: trnman_end_trn (trnman.c:431)
      ==378==    by 0x837C437: ma_commit (ma_commit.c:60)
      ==378==    by 0x835F082: ha_maria::external_lock(THD*, int)
      (ha_maria.cc:2387)
      ==378==    by 0x84D1011: handler::ha_external_lock(THD*, int)
      (handler.cc:4433)
      ==378==    by 0x856DA92: unlock_external(THD*, st_table**, unsigned)
      (lock.cc:786)
      ==378==    by 0x856DD6F: mysql_unlock_tables(THD*, st_mysql_lock*)
      (lock.cc:389)
      ==378==    by 0x8274A57: close_thread_tables(THD*) (sql_base.cc:1307)
      ==378==    by 0x82ABEC3: unlock_locked_tables(THD*) (sql_parse.cc:99)
      ==378==    by 0x82B0BB3: mysql_execute_command(THD*)
      (sql_parse.cc:3372)
      ==378==  Address 0x5894a0c is 164 bytes inside a block of size 184
      free'd
      ==378==    at 0x40233FC: free (vg_replace_malloc.c:323)
      ==378==    by 0x823CF92: my_thread_end (my_thr_init.c:348)
      ==378==    by 0x8200FEE: mysql_thread_end (libmysql.c:250)
      ==378==    by 0x81A9487: send_one_query (mysqltest.c:535)
      ==378==    by 0x4050111: start_thread (in /lib/libpthread-2.5.so)
      ==378==    by 0x41A52ED: clone (in /lib/libc-2.5.so)
      
      (among other errors). The line where the invalid read happens is:
        if (available_stack_size(&pinbox, *pins->stack_ends_here) >
      alloca_size)
      and stack_ends_here was previously set here:
        el->stack_ends_here= & my_thread_var->stack_ends_here;
      The mysqltest "send" command, in embedded mode, is implemented this way
      (mysqltest.c:do_send_query()): a *new OS thread* is created in
      mysqltest, and does this:
      
        mysql_thread_init();
        VOID(mysql_send_query(&cn->mysql, cn->cur_query,
      cn->cur_query_len));
        mysql_thread_end();
      
      So, con_d "send insert t1 values (2)" creates a new OS thread, which
      gets a thread-specific data (mysql_thread_init()), then sends the
      query; in particular, this sets el->stack_ends_here to a pointer inside
      the thread-specific data (see my_thread_var above), that is, thd->pins
      depends on the thread-specific data.
      This sent "insert" blocks as expected, thread-specific data is free()d
      (my_thread_end() above), OS thread terminates.
      Then "default" connection runs "insert t1 values (3)"
      which blocks on the 3 already inserted by the con_d.
      This blocking (see waiting_threads.c) creates a WT_RESOURCE, which has,
      as owner, con_d's WT_THD.
      When con_d calls "unlock tables" (see stack trace), it wants to release
      this resource, which involves con_d's thd->pins, so it ends up reading
      stack_ends_here which points inside the freed thread-specific data =>
      Valgrind error, crashes...
      So this is an effect of having one single connection (con_d) for which
      two queries:
      send insert t1 values (2)
      unlock tables
      are done by different OS threads. That is indeed weird design of
      mysqltest, and it breaks on the dependency of lf_alloc-pin.c on
      thread-specific data. It is maybe already explained in those comments
      in lf_alloc-pin.c:
      "  It is assumed that pins belong to a THD and are not transferable
        between THD's (LF_PINS::stack_ends_here being a primary reason
        for this limitation)."
      "    It is assumed that pins belong to a thread and are not
      transferable
          between threads."
      
      In correct usage of libmysqld (no two queries sent for one connection
      by two threads), this problem would not happen, so I call it a
      deficiency of the test system.
mysql-test/suite/maria/t/maria_notembedded.test:
  moving test portion into maria_notembedded.test
2008-11-27 16:13:02 +01:00
unknown
bb7ae40a7a Fix of the small merge bug. 2008-11-25 17:34:05 +02:00
Guilhem Bichot
3c1e153a82 Manually applying the patch for BUG40954 "Crash in MyISAM index code with concurrency test using partitioned tables"
so that it stops crashing pushbuild2/5.1-maria and we can see the other failures which it hid.

mysql-test/r/partition.result:
  Manually applying the patch for BUG40954 "Crash in MyISAM index code with concurrency test using partitioned tables"
mysql-test/t/partition.test:
  Manually applying the patch for BUG40954 "Crash in MyISAM index code with concurrency test using partitioned tables"
sql/ha_partition.cc:
  Manually applying the patch for BUG40954 "Crash in MyISAM index code with concurrency test using partitioned tables"
2008-11-25 10:05:48 +01:00
Guilhem Bichot
d55161b75a Two tests which I recently copied from MyISAM to Maria take much longer in Maria (20x, 15 minutes)
so cause timeouts. Probably normal as ALTER TABLE does many syncs in Maria, but have to mark them "big"
for pushbuild2.

mysql-test/suite/parts/t/partition_alter2_1_maria.test:
  test takes 15 minutes with Maria (ALTER TABLE does many syncs in Maria)
mysql-test/suite/parts/t/partition_alter2_2_maria.test:
  test takes 15 minutes with Maria (ALTER TABLE does many syncs in Maria)
2008-11-24 15:53:10 +01:00
Guilhem Bichot
f2d05437d5 In pushbuild2 when testing Maria's recovery, it can happen that a page was not entirely written
(i.e. file's size % 8192 != 0). Don't assert on this, Recovery is supposed to fix it.
2008-11-24 15:23:48 +01:00
Guilhem Bichot
1889e8b075 Under Windows one can get \ instead of / in file names in error messages (fix for pushbuild warning)
mysql-test/lib/mtr_report.pl:
  Under Windows one can get \ instead of / in file names in error messages
2008-11-24 14:57:34 +01:00
unknown
ef5d498348 merge 2008-11-24 09:54:07 +02:00
unknown
094d92e242 Prevent reenabling logging by thread which tries to lock table used by bulk insert.
Scenario of the BUG#40731 ("Maria: hang (probably in page cache) under concurrency"):
      T1: Disable logging for the table
      T1: Start inserting into the table
      T2: Tries to lock the table so waits.
      T2: Tries unlock and relock during the process see that the table has disabled logging and reenables it
      T1: Got DBUG_ASSERT because suddenly start use table with transaction switched on which is not expected during bulk insert

storage/maria/ma_pagecache.c:
  Page type print added for debugging purposes.
storage/maria/ma_recovery.c:
  Check that it was this thred which switched off logging (transactional mode).
storage/maria/maria_def.h:
  Flag for controling which thread switched off transactiona mode for the table added.
2008-11-24 09:48:21 +02:00
Guilhem Bichot
a4c0b51bdc post-merge fix (compiler warning) 2008-11-22 16:21:07 +01:00
Guilhem Bichot
33b194c36e Merge of 5.1-main into 5.1-maria. There were no changes to storage/myisam, or mysql-test/t/*myisam*.
However there were three new tests mysql-test/suite/parts/t/partition*myisam.test, of which I make here
copies for Maria.
2008-11-21 15:21:50 +01:00
Guilhem Bichot
8d96bcda72 During Maria's checkpoint, use the proper mutex to read transaction's short_id
storage/maria/trnman.c:
  During Maria's checkpoint, we walk the list of active transactions; in this list we may find a transaction with a short_id of 0 which means "uninitialized" (is being created right now) and want to ignore this transaction. Such short_id is set under trn->state_lock, so use this mutex to reliably read short_id during checkpoint.
2008-11-20 15:11:00 +01:00
unknown
f36a9625e3 Added correct reaction on find operation status during writing the page. (BUG#40308)
storage/maria/ma_pagecache.c:
  Added correct reaction on find operation status during writing the page.
2008-11-13 00:06:18 +02:00
unknown
bbb68f4cf3 Added correct reaction on find operation status during writing the page. (BUG#40308)
storage/maria/ma_pagecache.c:
  Added correct reaction on find operation status during writing the page.
2008-11-12 23:59:06 +02:00
Joerg Bruehe
1d521f6c20 Upmerge merge changesets 5.0-build -> 5.1-build, no code changes. 2008-11-11 14:03:00 +01:00
Joerg Bruehe
a1e2d2d146 Merge main 5.1 -> 5.1-build 2008-11-10 20:32:45 +01:00
Sergei Golubchik
4f91e07266 compile_time_assert 2008-11-10 20:11:27 +01:00
Joerg Bruehe
b0c90810c0 Merge main 5.0 -> 5.0-build 2008-11-10 17:01:51 +01:00
Matthias Leich
9a0637750a Merge 2008-11-07 15:19:27 +01:00
Kristofer Pettersson
66f8501d96 Automerge 2008-11-07 14:52:43 +01:00
Kristofer Pettersson
e88487cc27 Bug#38883 thd_security_context is not thread safe, crashes?
Innodb monitor could cause a server crash because of invalid access to a
shared variable in a concurrent environment.
                  
This patch adds a guard to protect against crashes but not against
inconsistent values because of performance reasons.

sql/sql_class.cc:
  * Attempt snapshot of static memory pointer proc_info to avoid null pointers.
2008-11-07 13:12:56 +01:00
Sergei Golubchik
89ad11ae8f merge 2008-11-07 11:03:29 +01:00
Georgi Kodinov
21c1182cc5 merged 5.0-bugteam -> 5.1-bugteam 2008-11-06 21:00:51 +02:00
Georgi Kodinov
75c2daf24e merged 5.1-main -> 5.1-bugteam 2008-11-06 20:59:47 +02:00
Georgi Kodinov
ff5662df68 merged 5.0-main -> 5.0-bugteam 2008-11-06 20:57:47 +02:00
Matthias Leich
e6891a8717 Remove files which were created during an upmerge
where it was forgotten to remove them.
2008-11-06 18:51:00 +01:00
unknown
5e9d35d5a8 Raise version number after cloning 5.1.30 2008-11-06 18:21:02 +01:00
Andrei Elkin
72b951ba58 bug#38230
refining the regression test to avoid explicit innodb engine in create.
2008-11-06 19:10:09 +02:00
Joerg Bruehe
ff59fccc12 Merge current 5.0 main tree and fix for bug#40546 2008-11-06 17:42:04 +01:00
Joerg Bruehe
e9be23fae6 Merge main 5.1 and the 5.1 version of the fix for bug#40546 2008-11-06 17:30:33 +01:00
Joerg Bruehe
3080e061e8 Bug #40546 Debug server in RPM is built with compiler optimization
Prevent this by modifying CFLAGS and CXXFLAGS.

Upmerge from 5.0, modified according to the different spec file structure.

support-files/mysql.spec.sh:
  Bug #40546  Debug server in RPM is built with compiler optimization
  
  Modify CFLAGS and CXXFLAGS for the duration of the debug server build
  (implemented by doing it in a subshell)
  so that they do not contain any optimization flag.
  Play it safe and prepare for both gcc and icc.
2008-11-06 17:09:14 +01:00
Joerg Bruehe
723b92054c Bug #40546 Debug server in RPM is built with compiler optimization
Prevent this by modifying CFLAGS and CXXFLAGS.

support-files/mysql.spec.sh:
  Bug #40546  Debug server in RPM is built with compiler optimization
  
  Modify CFLAGS and CXXFLAGS for the duration of the debug server build
  (implemented by doing it in a subshell)
  so that they do not contain any optimization flag.
  Play it safe and prepare for both gcc and icc.
2008-11-06 16:24:58 +01:00
Georgi Kodinov
6cae4c33d0 merged 5.1-bugteam -> merge-5.1-bugteam 2008-11-06 16:24:59 +02:00
Georgi Kodinov
05dbb26dfc merged 5.1 main -> 5.1-bugteam 2008-11-06 16:18:25 +02:00
Mattias Jonsson
e337639daa post push fix, removing dbug_print due to compiler warning 2008-11-06 13:47:41 +01:00
Georgi Kodinov
ffed7fd665 merge 5.0-bugteam -> 5.1-bugteam 2008-11-06 12:58:54 +02:00
Georgi Kodinov
80463f1a13 merged 5.0-main -> 5.0-bugteam 2008-11-06 12:54:52 +02:00
Sven Sandberg
f40fc60cf2 BUG#36625: Please remove the rpl_probe and rpl_parse features from the server
Problem 1: BUG#36625: rpl_redirect doesn't do anything useful. It tests an
obsolete feature that was never fully implemented.
Fix 1: Remove rpl_redirect.
Problem 2: rpl_innodb_bug28430 and rpl_flushlog_loop are disabled despite the
bugs for which they were disabled have been fixed.
Fix 2: Re-enable rpl_innodb_bug28430 and rpl_flushlog_loop.


mysql-test/suite/rpl/r/rpl_redirect.result:
  Removed result file for obsolete test.\
mysql-test/suite/rpl/t/disabled.def:
  Re-enabled tests.
mysql-test/suite/rpl/t/rpl_redirect.test:
  Removed obsolete test.
2008-11-06 11:00:55 +01:00
Mattias Jonsson
559efbf14e merge 2008-11-06 07:29:07 +01:00
Mattias Jonsson
f8588915ca merge and pre push fix for test of bug#37719 2008-11-05 22:26:39 +01:00
Michael Widenius
4150dfda93 Fix for bug: Bug #40391 Maria deadlock in trnman_get_min_trid , trnman_end_trn
storage/maria/trnman.c:
  Store min used trid in a global variable and change trnman_get_min_trid() to return this variable without using a mutex.
  This is safe as trnman_get_min_trid() is used for trid optimization and all algoritms will work even if it returns a slightly older trid.
  
  Also ensure that LOCK_trn_list is unlocked in trnman_new_trn() in the very unlikely case that lf_hash_get_pins() fails
2008-11-05 23:17:09 +02:00
Evgeny Potemkin
8d75510e90 Merged fix for the bug#37870. 2008-11-05 23:46:24 +03:00