Commit graph

60159 commits

Author SHA1 Message Date
Alfranio Correia
4009bf1a15 BUG#46364 MyISAM transbuffer problems (NTM problem)
It is well-known that due to concurrency issues, a slave can become
inconsistent when a transaction contains updates to both transaction and
non-transactional tables.
                    
In a nutshell, the current code-base tries to preserve causality among the
statements by writing non-transactional statements to the txn-cache which
is flushed upon commit. However, modifications done to non-transactional
tables on behalf of a transaction become immediately visible to other
connections but may not immediately get into the binary log and therefore
consistency may be broken.
            
In general, it is impossible to automatically detect causality/dependency
among statements by just analyzing the statements sent to the server. This
happen because dependency may be hidden in the application code and it is
necessary to know a priori all the statements processed in the context of
a transaction such as in a procedure. Moreover, even for the few cases that
we could automatically address in the server, the computation effort
required could make the approach infeasible.
            
So, in this patch we introduce the option
      - "--binlog-direct-non-transactional-updates" that can be used to bypass
      the current behavior in order to write directly to binary log statements
      that change non-transactional tables.

Besides, it is used to enable the WL#2687 which is disabled by default.

mysql-test/extra/rpl_tests/rpl_binlog_max_cache_size.test:
  Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache and takes longer to fill the trx-cache up and trigger an error.
mysql-test/extra/rpl_tests/rpl_implicit_commit_binlog.test:
  Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache. It also fixes comments.
mysql-test/extra/rpl_tests/rpl_mixing_engines.test:
  The STMT mode is unsafe when mixed-statements are executed thus making slaves to go out of sync. For that reason, it checks consistency if not in STMT mode.
mysql-test/include/default_mysqld.cnf:
  Makes binlog-direct-non-transactional-updates "TRUE" by default in the test
  cases.
mysql-test/r/mysqld--help-notwin.result:
  Updates the result file with the new option.
mysql-test/r/mysqld--help-win.result:
  Updates the result file with the new option.
mysql-test/suite/binlog/r/binlog_multi_engine.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/binlog/r/binlog_switch_inside_trans.result:
  Verifies if the user cannot change the opion binlog_direct_non_transactional_updates
  within a transaction or a procedure/function/trigger.
mysql-test/suite/binlog/t/binlog_stm_mix_innodb_myisam-master.opt:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing
  the test case and its result file.
mysql-test/suite/binlog/t/binlog_switch_inside_trans.test:
  Verifies if the user cannot change the opion binlog_direct_non_transactional_updates
  within a transaction or a procedure/function/trigger.
mysql-test/suite/ndb/r/ndb_binlog_format.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_begin_commit_rollback.result:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/r/rpl_concurrency_error.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction
mysql-test/suite/rpl/r/rpl_mixed_implicit_commit_binlog.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_mixed_mixing_engines.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_stm_binlog_max_cache_size.result:
  Changes the result set as the STMT mode behaves as both the ROW and MIXED modes and as such uses the non-trx-cache and takes longer to fill the trx-cache up and trigger an error.
mysql-test/suite/rpl/r/rpl_stm_implicit_commit_binlog.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result:
  Updates the result file because non-trx-changes are written ahead of the
  transaction.
mysql-test/suite/rpl/r/rpl_stm_start_stop_slave.result:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/r/rpl_stm_stop_middle_group.result:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/t/rpl_begin_commit_rollback.test:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/t/rpl_stm_start_stop_slave.test:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
mysql-test/suite/rpl/t/rpl_stm_stop_middle_group.test:
  Sets binlog_direct_non_transactional_updates to FALSE in order to avoid changing the test case and its result file.
sql/log.cc:
  Verifies if changes should be written to either the trx-cache or non-trx-cache through the use of the function use_trans_cache(). It also organizes the code.
sql/log.h:
  Changes the signature of some functions by adding the modifier "const" to the thd parameter. Specifically, the following functions are changed: 
          bool trans_has_updated_trans_table(const THD* thd);
          bool stmt_has_updated_trans_table(const THD *thd);
          bool use_trans_cache(const THD*, bool is_transactional);
sql/share/errmsg-utf8.txt:
  Creates error messages to report when an user tries to change the new option
  binlog_direct_non_transactional_updates within a transaction or a procedure/
  function/trigger.
sql/share/errmsg.txt:
  Creates error messages to report when an user tries to change the new option
  binlog_direct_non_transactional_updates within a transaction or a procedure/
  function/trigger.
sql/sql_class.h:
  Adds the new option binlog_direct_non_transactional_updates.
sql/sys_vars.cc:
  Adds the new option binlog_direct_non_transactional_updates.
support-files/my-small.cnf.sh:
  Adds binlog-direct-non-transactional-updates to the example file. By default
  the option is disabled.
2010-01-21 13:10:34 +00:00
Alexander Nozdrin
82a43462a2 Auto-merge from mysql-next-mr. 2010-01-21 11:39:14 +03:00
Luis Soares
8b7d5366ce Removes duplicate entry for ER_SLAVE_IGNORE_SERVER_IDS
in errmsg.txt. Kept the one in that matched the location
in errmsg-utf8.txt, ie after ER_UNKNOWN_LOCALE.
2010-01-20 17:01:49 +00:00
Alexander Nozdrin
725936c6ec Add client/dtoa.c to .bzrignore. 2010-01-20 18:26:05 +03:00
Alexander Nozdrin
da32064baf Mark several failing test cases experimental. 2010-01-20 18:25:29 +03:00
Vladislav Vaintroub
325540b544 merge 2010-01-20 14:48:57 +01:00
Vladislav Vaintroub
1c645ef9d3 merge 2010-01-20 14:43:40 +01:00
Horst.Hunger
c99be56de3 due to merge. 2010-01-20 14:22:49 +01:00
Vladislav Vaintroub
b5a3b81402 Bug #50362 comp_err crashes during compilation on FreeBSD.
The reason for the crash is using uinitialized mutex attribute (MY_MUTEX_FAST_INIT)
in pthread_mutex_init.

The fix is to initialize the attribute before the first use.
2010-01-20 14:04:17 +01:00
Alexander Nozdrin
ce3dcc6c56 Auto-merge from mysql-next-mr-bugfixing. 2010-01-19 22:43:10 +03:00
Alexander Nozdrin
6060c8d3c1 Auto-merge from mysql-next-mr. 2010-01-18 22:47:19 +03:00
Alexander Nozdrin
f143270f2f Auto-merge from mysql-next-mr. 2010-01-18 21:50:57 +03:00
Alexander Nozdrin
33c075e842 Enable sys_vars and perfschema test suites
for regular PB builds.
2010-01-18 15:01:11 +03:00
Alexander Nozdrin
3408d7c2da Auto-merge from mysql-5.1-rpl-merge. 2010-01-18 14:53:35 +03:00
unknown
5d27920514 Fix for perfschema.binlog_stmt failure:
Problem: The test case failed because: (i) warning text in 
         result file differed from the warning output by the 
         server, and (ii) binlog contents in result file did
         not show the statements logged wrapped in BEGIN/COMMIT
         as it is the case after WL 2687.
      
Solution: We update the result file, but first we change the
          unsafe warning text to also refer to performance_schema
          table(s). This required changing the result files for
          existing test cases that provide output for warnings 
          related to ER_BINLOG_UNSAFE_SYSTEM_TABLE. "Grepping" in
          result files, shows that only binlog_unsafe contained
          reference to such a warning.
      
          We also update the result file with the missing 
          BEGIN/COMMIT statements.
2010-01-15 13:06:33 +08:00
Alfranio Correia
3f1899e858 Removed garbage from the mysqld--help-win 2010-01-14 16:50:45 +00:00
Alfranio Correia
dd5d5d32fc merge mysql-5.1-rep+2-delivery1 --> mysql-5.1-rpl-merge 2010-01-14 16:44:33 +00:00
Alfranio Correia
b4c0c1550c merge mysql-next-mr --> mysql-5.1-rpl-merge
Conflicts:
  Text conflict in sql/sql_insert.cc
2010-01-14 16:02:55 +00:00
Alfranio Correia
1b09e10508 merge mysql-5.1-rep+3 --> mysql-5.1-rep+2-delivery1 2010-01-14 12:59:58 +00:00
Alfranio Correia
eef6ea03d2 Augmented the rpl_ndb_binlog_format_errors to verify if a slave running in the
STMT mode aborts the SQL Thread if it receives changes in ROW mode and such
changes are not processed.
2010-01-14 12:52:28 +00:00
Olav Sandstaa
ec680f0a2b Fix for Bug#50221 Server refuses to start from non-default installdir on Solaris 32-bit
When starting mysqld it did not recognize most of the options given on
the command line when it was compiled for 32-bit Solaris using Sun
Studio compiler. The cause for this was that most of the entries in
the my_long_options array contained "garbage" data. The garbage data
was caused by a compiler bug. When initilizing the def_value member
for the "default-storage-engine" entry it was initialized like this:

  (longlong)"MyISAM"

i.e. casting a 32 bit pointer to a 64 bit integer value. Due to the
compiler bug only 4 bytes was allocated (instead of 8 bytes). This
caused everything following this entry to be stored at a location that
was 4 byte wrong.

The fix/work-around for this problem is initialize the def_value
for default-storage-engine in my_long_options to 0 and instead
initialize the default_storage_engine variable to "MyISAM" in
init_common_variables().

sql/mysqld.cc:
  Due to a bug in Sun Studio compiler when generating 32 bit code the 
  initialization of the def_value member of the default-storage-engine entry 
  in my_long_options only got 4 bytes allocated instead of 8 bytes. 
  The compiler bug was triggered by casting a 32 bit pointer to a 64 bit 
  integer value in the initialization code for my_long_options. To avoid 
  triggering the compiler bug the intialization of the def_value in
  my_long_options is set to 0 and instead the default_storage_engine
  is initialized to "MyISAM" in init_common_variables().
2010-01-14 13:39:42 +01:00
Alexander Barkov
8dfc3fbbab WL#4583 Case conversion in Asian character sets
modified:
  include/m_ctype.h
  - Changing type for tolower/toupper members, to store values >= 0xFFFF.
  - Adding function prototypes

  mysql-test/r/ctype_big5.result
  mysql-test/r/ctype_cp932_binlog_stm.result
  mysql-test/r/ctype_eucjpms.result*
  mysql-test/r/ctype_euckr.result
  mysql-test/r/ctype_gb2312.result
  mysql-test/r/ctype_gbk.result
  mysql-test/r/ctype_sjis.result
  mysql-test/r/ctype_ujis.result
  mysql-test/t/ctype_big5.test
  mysql-test/t/ctype_cp932_binlog_stm.test
  mysql-test/t/ctype_eucjpms.test
  mysql-test/t/ctype_euckr.test
  mysql-test/t/ctype_gb2312.test
  mysql-test/t/ctype_gbk.test
  mysql-test/t/ctype_sjis.test
  mysql-test/t/ctype_ujis.test
  -  Adding tests

  strings/ctype-big5.c
  strings/ctype-cp932.c
  strings/ctype-euc_kr.c
  strings/ctype-eucjpms.c
  strings/ctype-gb2312.c
  strings/ctype-gbk.c
  strings/ctype-sjis.c
  - Adding upper/lower case conversion data

  strings/ctype-mb.c
  - Adding handling of upper/lower conversion for multi-byte characters.

  strings/ctype-ujis.c
  - Implementing shared upper/lower conversion
    functions  for ujis and eucjpms
  - Adding upper/lower case conversion data for ujis
2010-01-14 15:17:57 +04:00
Alexander Nozdrin
9b05972226 Auto-merge from mysql-next-mr. 2010-01-14 12:39:57 +03:00
Alexander Nozdrin
a6165accb3 Auto-merge from mysql-next-mr. 2010-01-14 12:00:08 +03:00
Luis Soares
18a8f3c8cc Disabled binlog_unsafe due to BUG#50312. 2010-01-13 23:27:22 +00:00
Alfranio Correia
85df1ce4b4 merge mysql-5.1-rep+2-delivery1 --> mysql-5.1-rpl-merge 2010-01-13 13:27:25 +00:00
Mats Kindahl
9b4470ecd4 Merging with mysql-5.1-rep+2-delivery1 2010-01-13 14:00:48 +01:00
Mats Kindahl
cf40bc3f56 Replacing error variable that was lost. 2010-01-13 13:59:58 +01:00
Mats Kindahl
4abdd9f14a Merging with mysql-5.1-rep+2-delivery1 2010-01-13 13:37:01 +01:00
Alfranio Correia
40949a3110 merge mysql-next-mr --> mysql-5.1-rpl-merge
Conflicts:
  Text conflict in sql/log.cc
  Text conflict in sql/slave.cc
  Text conflict in sql/sql_base.cc
2010-01-13 12:22:34 +00:00
Mats Kindahl
a561e53943 WL#5151: Conversion between different types when
replicating

Replace c_ptr() calls with c_ptr_safe() calls to
avoid valgrind warnings.

Adding code to to handle the case that no metadata
was present in the table map for the column.

Allow first parameter to unpack_row() to be NULL,
in which case no source tables is used and hence
no checks nor conversions are done.

Clarifying some comments and fixing documentation
for unpack_row().
2010-01-13 12:58:42 +01:00
Luis Soares
26b12adb5d Makes slave_type_conversions_basic to be skipped in embedded
run in PB2 as it ought to be. Otherwise test will fail because
variable is no recognized:

1193: Unknown system variable 'slave_type_conversions'
2010-01-13 08:29:23 +00:00
Luis Soares
5f42365a93 Fixes two remaining test failures:
- mysqld--help-win
    Updated result so that it contains missing
    value for slave-type-conversions

  - rpl_idempotency
    This seems a bad merge. In BUG#39934, the contents of
    this file had been split into rpl_row_idempontency and
    rpl_idempotency. The patch was pushed to 5.1-rep+3 which
    was later merged in rep+2-delivery1 which in turn was
    merged in 5.1-rpl-merge. Now while merging next-mr in
    5.1-rpl-merge, the file got back it's old content (which
    is in rpl_row_idempotency now because of BUG#39934). This
    cset reverts the bad merge:

    bzr merge -r revid:dao-gang.qu@sun.com-20100112120709-ioxp11yl9bvquaqd..\
    before:revid:dao-gang.qu@sun.com-20100112120709-ioxp11yl9bvquaqd\
    suite/rpl/t/rpl_idempotency.test
2010-01-13 00:23:07 +00:00
Luis Soares
9d89069d64 Fixes one more failure in gcov run:
- sys_vars.rpl_init_slave_func
    Added suppression for the unsafe warning.
2010-01-12 23:22:34 +00:00
Marc Alff
253d7f2501 Merge mysql-next-mr (revno 2958) --> mysql-next-mr-marc 2010-01-12 10:58:38 -07:00
Luis Soares
ca15e2779f Fixes for three test failures:
- sys_vars.all_vars:
   Added test case for slave_type_conversions variable
 - rpl_row_idempotency
   Removed ER_SLAVE_AMBIGOUS_EXEC_MODE (which was removed by WL 4738)
   from the test case. Using ER_WRONG_VALUE_FOR_VAR instead.
 - mysqld--help-win
   Added missing help for --slave-type-conversions from the
   result file.
2010-01-12 17:52:02 +00:00
Alexander Nozdrin
50561ab010 Enable WL#4435. 2010-01-12 19:48:28 +03:00
Alexander Nozdrin
f8195b8fa6 Auto-merge (empty) from mysql-next-mr. 2010-01-12 19:26:27 +03:00
Alexander Nozdrin
51caeae915 Auto-merge from mysql-next-mr-bugfixing. 2010-01-12 19:21:42 +03:00
unknown
802ba52bc5 Auto merge. 2010-01-12 20:13:45 +08:00
unknown
16e15e6952 Manual merge from next-mr. 2010-01-12 20:07:09 +08:00
Marc Alff
e0e0f9e3d4 WL#2360 Performance schema
Part V: performance schema implementation
2010-01-11 18:47:27 -07:00
Alexander Nozdrin
0f300ac6b9 Backporting revision from mysql-6.0-codebase-bugfixing.
Original revision:
------------------------------------------------------------
revno: 3817
revision-id: guilhem@mysql.com-20100108092756-k0zzf4kvx9b7bh38
parent: guilhem@mysql.com-20100107101133-hrrgcdqg508runuf
committer: Guilhem Bichot <guilhem@mysql.com>
branch nick: mysql-6.0-codebase-bugfixing
timestamp: Fri 2010-01-08 10:27:56 +0100
message:
  fix for BUG#50120 "Valgrind errors in any test, inside mysqltest"
  Problem was that as v->name[v->name_len] may be uninitialized (which is ok per se),
  it shouldn't be used in an if(). We remove this zero_the_char/restore_it logic by
  rather zero-terminating the v->name string when we create it in var_init().
------------------------------------------------------------
2010-01-11 19:43:55 +03:00
Alexander Nozdrin
5d61829b29 Backporting revision from mysql-6.0-codebase-bugfixing.
Original revision:

------------------------------------------------------------
revno: 3789.1.9
revision-id: serg@mysql.com-20091229134448-phe834ukzmi0k2e3
parent: serg@mysql.com-20091227081418-bgfg952gzumn1k3h
committer: Sergei Golubchik <serg@mysql.com>
branch nick: 6.0-codebase
timestamp: Tue 2009-12-29 14:44:48 +0100
message:
  better fix for Bug#48758 mysqltest crashes on sys_vars.collation_server_basic in gcov builds
  
  use setenv instead of putenv
------------------------------------------------------------
2010-01-11 19:42:35 +03:00
Alexander Nozdrin
724caa519d Auto-merge from mysql-next-mr. 2010-01-11 16:10:51 +03:00
Luis Soares
7f41473320 Fixes rpl_stm_loaddata_concurrent failure in PB2.
The test case did not start with fresh binlogs, so in some
cases, dependending on the order MTR runs the tests, it would
try to show binlog contents from invalid positions (binary log
would contain unexpected events from previous test).

We fix this by deploying a RESET MASTER at the beginning of the
test case.
2010-01-08 15:56:26 +00:00
Alfranio Correia
4b67a11d2b merge mysql-5.1-rep+2-delivery1 --> mysql-5.1-rpl-merge 2010-01-07 17:39:01 +00:00
Alfranio Correia
5dcb0e447f merge mysql-5.1-rep+2-delivery1 --> mysql-5.1-rpl-merge
Conflicts:

Text conflict in .bzr-mysql/default.conf
Text conflict in mysql-test/extra/rpl_tests/rpl_loaddata.test
Text conflict in mysql-test/r/mysqlbinlog2.result
Text conflict in mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result
Text conflict in mysql-test/suite/binlog/r/binlog_unsafe.result
Text conflict in mysql-test/suite/rpl/r/rpl_insert_id.result
Text conflict in mysql-test/suite/rpl/r/rpl_loaddata.result
Text conflict in mysql-test/suite/rpl/r/rpl_stm_auto_increment_bug33029.result
Text conflict in mysql-test/suite/rpl/r/rpl_udf.result
Text conflict in mysql-test/suite/rpl/t/rpl_slow_query_log.test
Text conflict in sql/field.h
Text conflict in sql/log.cc
Text conflict in sql/log_event.cc
Text conflict in sql/log_event_old.cc
Text conflict in sql/mysql_priv.h
Text conflict in sql/share/errmsg.txt
Text conflict in sql/sp.cc
Text conflict in sql/sql_acl.cc
Text conflict in sql/sql_base.cc
Text conflict in sql/sql_class.h
Text conflict in sql/sql_db.cc
Text conflict in sql/sql_delete.cc
Text conflict in sql/sql_insert.cc
Text conflict in sql/sql_lex.cc
Text conflict in sql/sql_lex.h
Text conflict in sql/sql_load.cc
Text conflict in sql/sql_table.cc
Text conflict in sql/sql_update.cc
Text conflict in sql/sql_view.cc
Conflict adding files to storage/innobase.  Created directory.
Conflict because storage/innobase is not versioned, but has versioned children.  Versioned directory.
Conflict adding file storage/innobase.  Moved existing file to storage/innobase.moved.
Conflict adding files to storage/innobase/handler.  Created directory.
Conflict because storage/innobase/handler is not versioned, but has versioned children.  Versioned directory.
Contents conflict in storage/innobase/handler/ha_innodb.cc
2010-01-07 15:39:11 +00:00
Marc Alff
3d91522561 WL#2360 Performance schema
Part IV: sql instrumentation
2010-01-06 22:42:07 -07:00
Luis Soares
a533cec71b Fix for rpl_bug31076 valgrind failure which popped up after
WL#5151 was pushed.

Problem 1: Some old binlog events do not contain metadata. This
makes checking whether the field can be converted or not rather
impossible because one cannot compare, for instance, field sizes
from original table and target table.

Solution 1: When an event does not contain metadata, we will just
check if field types are equal and assume that original field
definition matched with the one in the target table.

Problem 2: There is a second fix, which involves lack of
information regarding maybe_null. This was causing a conditional
jump warning when creating a conversion table. 

Solution 2: We will just assume that all fields that need to be
in the conversion table may be null.
2010-01-07 01:04:38 +00:00