1. 27 Oct, 2011 1 commit
    • Andrei Elkin's avatar
      Bug#11763573 - 56299: MUTEX DEADLOCK WITH COM_BINLOG_DUMP, BINLOG PURGE, AND PROCESSLIST/KILL · a7127418
      Andrei Elkin authored
      The bug case is similar to one fixed earlier bug_49536.
      Deadlock involving LOCK_log appears to be possible because the purge running thread
      is holding LOCK_log whereas there is no sense of doing that and which fact was
      exploited by the earlier bug fixes.
      
      Fixed with small reengineering of rotate_and_purge(), adding two new methods and
      setting up a policy to execute those instead of the former
      rotate_and_purge(RP_LOCK_LOG_IS_ALREADY_LOCKED).
      The policy for using rotate(), purge() is that if the caller acquires LOCK_log itself,
      it should call rotate(), release the mutex and run purge().
      
      Side effect of this patch is refining error message of bug@11747416 to print
      the whole path.
      a7127418
  2. 15 Aug, 2011 1 commit
  3. 30 Jun, 2011 1 commit
  4. 26 May, 2011 1 commit
    • Sven Sandberg's avatar
      BUG#12574820: binlog.binlog_tmp_table timing out in daily and weekly trunk run · b76c277a
      Sven Sandberg authored
      Problem: MYSQL_BIN_LOG::reset_logs acquires mutexes in wrong order.
      The correct order is first LOCK_thread_count and then LOCK_log. This function
      does it the other way around. This leads to deadlock when run in parallel
      with a thread that takes the two locks in correct order. For example, a thread
      that disconnects will take the locks in the correct order.
      Fix: change order of the locks in MYSQL_BIN_LOG::reset_logs:
      first LOCK_thread_count and then LOCK_log.
      b76c277a
  5. 12 May, 2011 1 commit
    • Jon Olav Hauglid's avatar
      Bug#12346411 SQL/LOG.CC:6509: ASSERTION `PREPARED_XIDS > 0' FAILED · 7577c115
      Jon Olav Hauglid authored
      This assert could be triggered during two phase commit if binary
      log was used as transaction coordinator log. The triggered assert
      checks that the same number of transaction IDs are processed in
      the prepare and commit phases.
      
      The reason it was triggered, was that the transaction consisted
      of an INSERT/UPDATE IGNORE that had an ignorable error. Since it
      had an error, no row log events were made and therefore
      prepared_xids was 0. However, since it was an IGNORE statement,
      the statement started a read/write statement transaction, committed
      it and completed successfully.
      
      This patch fixes the problem by adjusting the assert to take
      this possibility into account.
      
      Test case added to binlog.binlog_innodb_row.test.
      7577c115
  6. 01 Mar, 2011 1 commit
    • Marc Alff's avatar
      Bug#11766528 PERFORMANCE_SCHEMA TRACKS BOTH BINARY AND RELAY LOGS IN THE SAME EVENTS · f0577e55
      Marc Alff authored
      Before this fix, all the performance schema instrumentation for both the binary log
      and the relay log would use the following instruments:
      - wait/io/file/sql/binlog
      - wait/io/file/sql/binlog_index
      - wait/synch/mutex/sql/MYSQL_BIN_LOG::LOCK_index
      - wait/synch/cond/sql/MYSQL_BIN_LOG::update_cond
      
      This instrumentation is too general and can be more specific.
      
      With this fix, the binlog instrumentation is identical,
      and the relay log instrumentation is changed to:
      - wait/io/file/sql/relaylog
      - wait/io/file/sql/relaylog_index
      - wait/synch/mutex/sql/MYSQL_RELAY_LOG::LOCK_index
      - wait/synch/cond/sql/MYSQL_RELAY_LOG::update_cond
      
      With this change, the performance instrumentation for the binary log and the relay log,
      which share the same structure but have different uses, is more detailed.
      This is especially important for hosts in the middle of a replication chain,
      that are both masters (binlog) and slaves (relaylog).
      f0577e55
  7. 09 Feb, 2011 1 commit
    • MySQL Build Team's avatar
      Backport into build-201102032246-5.1.52sp1 · 29c81a34
      MySQL Build Team authored
      > ------------------------------------------------------------
      > revno: 3536
      > revision-id: davi.arnaut@oracle.com-20110107183336-kp8niwm2hz3wb4c3
      > parent: saikumar.v@sun.com-20110106103945-rhsek9uy6f63db44
      > committer: Davi Arnaut <davi.arnaut@oracle.com>
      > branch nick: 51023-5.1
      > timestamp: Fri 2011-01-07 16:33:36 -0200
      > message:
      >   Bug#51023: Mysql server crashes on SIGHUP and destroys InnoDB files
      >   
      >   From a user perspective, the problem is that a FLUSH LOGS or SIGHUP
      >   signal could end up associating the stdout and stderr to random
      >   files. In the case of this bug report, the streams would end up
      >   associated to InnoDB ibd files.
      >   
      >   The freopen(3) function is not thread-safe on FreeBSD. What this
      >   means is that if another thread calls open(2) during freopen()
      >   is executing that another thread's fd returned by open(2) may get
      >   re-associated with the file being passed to freopen(3). See FreeBSD
      >   PR number 79887 for reference:
      >   
      >     http://www.freebsd.org/cgi/query-pr.cgi?pr=79887
      >   
      >   This problem is worked around by substituting a internal hook within
      >   the FILE structure. This avoids the loss of atomicity by not having
      >   the original fd closed before its duplicated.
      >   
      >   Patch based on the original work by Vasil Dimov.
      29c81a34
  8. 25 Jan, 2011 1 commit
  9. 17 Jan, 2011 1 commit
  10. 07 Jan, 2011 1 commit
    • Davi Arnaut's avatar
      Bug#51023: Mysql server crashes on SIGHUP and destroys InnoDB files · 78b6ca55
      Davi Arnaut authored
      From a user perspective, the problem is that a FLUSH LOGS or SIGHUP
      signal could end up associating the stdout and stderr to random
      files. In the case of this bug report, the streams would end up
      associated to InnoDB ibd files.
      
      The freopen(3) function is not thread-safe on FreeBSD. What this
      means is that if another thread calls open(2) during freopen()
      is executing that another thread's fd returned by open(2) may get
      re-associated with the file being passed to freopen(3). See FreeBSD
      PR number 79887 for reference:
      
        http://www.freebsd.org/cgi/query-pr.cgi?pr=79887
      
      This problem is worked around by substituting a internal hook within
      the FILE structure. This avoids the loss of atomicity by not having
      the original fd closed before its duplicated.
      
      Patch based on the original work by Vasil Dimov.
      78b6ca55
  11. 17 Dec, 2010 1 commit
    • Luis Soares's avatar
      BUG#46166 · 9e161d30
      Luis Soares authored
      Post-push fixes:
      
        - fixed platform dependent result files
        - appeasing valgrind warnings:
         
          Fault injection was also uncovering a previously existing 
          potential mem leaks. For BUG#46166 testing purposes, fixed 
          by forcing handling the leak when injecting faults.
      9e161d30
  12. 15 Dec, 2010 1 commit
  13. 07 Dec, 2010 2 commits
    • Luis Soares's avatar
      BUG#46166 · 1b94ba54
      Luis Soares authored
      Post merge fixes for mysql-5.5-bugteam.
      1b94ba54
    • Luis Soares's avatar
      BUG#46166 · bd0709cc
      Luis Soares authored
      Post merge fix. In write_incident, check if binlog file is
      opened before actually trying to write the incident event.
      bd0709cc
  14. 30 Nov, 2010 2 commits
    • Luis Soares's avatar
      BUG#46166: MYSQL_BIN_LOG::new_file_impl is not propagating error · aaefb52d
      Luis Soares authored
                 when generating new name.
            
      If find_uniq_filename returns an error, then this error is not
      being propagated upwards, and execution does not report error to
      the user (although a entry in the error log is generated).
                        
      Additionally, some more errors were ignored in new_file_impl:
      - when writing the rotate event
      - when reopening the index and binary log file
                        
      This patch addresses this by propagating the error up in the
      execution stack. Furthermore, when rotation of the binary log
      fails, an incident event is written, because there may be a
      chance that some changes for a given statement, were not properly
      logged. For example, in SBR, LOAD DATA INFILE statement requires
      more than one event to be logged, should rotation fail while
      logging part of the LOAD DATA events, then the logged data would
      become inconsistent with the data in the storage engine.
      aaefb52d
    • Luis Soares's avatar
      BUG#57288: binlog_tmp_table fails sporadically: "Failed to write · 23636330
      Luis Soares authored
      the DROP statement ..."
            
      Problem: When using temporary tables and closing a session, an
      implicit DROP TEMPORARY TABLE IF EXISTS is written to the binary
      log (while cleaning up the context of the session THD - see:
      sql_class.cc:THD::cleanup which calls close_temporary_tables).
           
      close_temporary_tables, first checks if the binary log is opened
      and then proceeds to creating the DROP statements. Then, such
      statements, are written to the binary log through
      MYSQL_BIN_LOG::write(Log_event *). Inside, there is another check
      if the binary log is opened and if not an error is returned. This
      is where the faulty behavior is triggered. Given that the test
      case replays a binary log, with temp tables statements, and right
      after it issues RESET MASTER, there is a chance that is_open will
      report false (when the mysql session is closed and the temporary
      tables are written).
            
      is_open may return false, because MYSQL_BIN_LOG::reset_logs is
      not setting the correct flag (LOG_CLOSE_TO_BE_OPENED), on the
      MYSQL_LOG_BIN::log_state (instead it sets just the
      LOG_CLOSE_INDEX flag, leaving the log_state to
      LOG_CLOSED). Thence, when writing the DROP statement as part of
      the THD::cleanup, the thread could get a return value of false
      for is_open - inside MYSQL_BIN_LOG::write, ultimately reporting
      that it can't write the event to the binary log.
            
      Fix: We fix this by adding the correct flag, missing in the
      second close.
      23636330
  15. 12 Nov, 2010 1 commit
    • Marc Alff's avatar
      Bug#58052 Binary log IO not being accounted for properly · 80589ada
      Marc Alff authored
      Before this fix, file io for the binary log file was not accounted properly,
      and showed no io at all.
      
      This bug was due to the following issues:
      
      1) file io for the binlog was instrumented:
      - sometime as "wait/io/file/sql/binlog"
      - sometime as "wait/io/file/sql/MYSQL_LOG"
      leading to inconsistent event_names.
      
      2) the binlog file itself was using an IO_CACHE,
      but the IO_CACHE implementation in mysys/mf_iocache.c was
      not instrumented to make performance schema calls to record file io.
      
      3) The "wait/io/file/sql/MYSQL_LOG" instrumentation was used
      for several log files, such as:
      - the binary log
      - the slow log
      - the query log
      which caused file io in these different log files to be accounted
      against the same instrument.
      The instrumentation needs to have a finer grain and report io
      in different event_names, because each file really serves a different purpose.
      
      With this fix:
      - the IO_CACHE implementation is now instrumented
      - the "wait/io/file/sql/MYSQL_LOG" instrument has been removed
      - binlog io is now always instrumented with "wait/io/file/sql/binlog"
      - the slow log is instrumented with a new name, "wait/io/file/sql/slow_log"
      - the query log is instrumented with a new name, "wait/io/file/sql/query_log"
      80589ada
  16. 05 Nov, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#57275 binlog_cache_size affects trx- and stmt-cache and gets twice the expected memory · bf2c66d4
      Alfranio Correia authored
            
      After the WL#2687, the binlog_cache_size and max_binlog_cache_size affect both the
      stmt-cache and the trx-cache. This means that the resource used is twice the amount
      expected/defined by the user.
            
      The binlog_cache_use is incremented when the stmt-cache or the trx-cache is used
      and binlog_cache_disk_use is incremented when the disk space from the stmt-cache or the
      trx-cache is used. This behavior does not allow to distinguish which cache may be harming
      performance due to the extra disk accesses and needs to have its in-memory cache
      increased.
            
      To fix the problem, we introduced two new options and status variables related to the
      stmt-cache:
            
        Options:
            
          . binlog_stmt_cache_size
          . max_binlog_stmt_cache_size
            
          Status Variables:
            
          . binlog_stmt_cache_use
          . binlog_stmt_cache_disk_use
      
      So there are
      
        . binlog_cache_size that defines the size of the transactional cache for
        updates to transactional engines for the binary log.
      
        . binlog_stmt_cache_size that defines the size of the statement cache for
        updates to non-transactional engines for the binary log.
      
        . max_binlog_cache_size that sets the total size of the transactional
        cache.
      
        . max_binlog_stmt_cache_size that sets the total size of the statement
        cache.
      
        . binlog_cache_use that identifies the number of transactions that used the
        temporary transactional binary log cache.
      
        . binlog_cache_disk_use that identifies the number of transactions that used
        the temporary transactional binary log cache but that exceeded the value of
        binlog_cache_size.
      
        . binlog_stmt_cache_use that identifies the number of statements that used the
        temporary non-transactional binary log cache.
      
        . binlog_stmt_cache_disk_use that identifies the number of statements that used
        the temporary non-transactional binary log cache but that exceeded the value of
        binlog_stmt_cache_size.
      bf2c66d4
  17. 20 Oct, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#45288: pb2 returns a lot of compilation warnings · 560ee215
      Davi Arnaut authored
      Fix assorted warnings that are generated in optimized builds.
      Most of it is silencing variables that are set but unused.
      
      This patch also introduces the MY_ASSERT_UNREACHABLE macro
      which helps the compiler to deduce that a certain piece of
      code is unreachable.
      560ee215
  18. 18 Oct, 2010 1 commit
  19. 06 Oct, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#56343 binlog_cache_use status is bigger than expected · 0be27d8f
      Alfranio Correia authored
      The binlog_cache_use is incremented twice when changes to a transactional table
      are committed, i.e. TC_LOG_BINLOG::log_xid calls is called. The problem happens
      because log_xid calls both binlog_flush_stmt_cache and binlog_flush_trx_cache
      without checking if such caches are empty thus unintentionally increasing the
      binlog_cache_use value twice.
      
      To fix the problem we avoided incrementing the binlog_cache_use if the cache is
      empty. We also decided to increment binlog_cache_use when the cache is truncated
      as the cache is used although its content is discarded and is not written to the
      binary log.
      
      Note that binlog_cache_use is incremented for both types of cache, transactional
      and non-transactional and that the behavior presented in this patch also applies
      to the binlog_cache_disk_use.
      
      Finally, we re-organized the code around the functions binlog_flush_trx_cache and
      binlog_flush_stmt_cache.
      0be27d8f
  20. 22 Sep, 2010 1 commit
  21. 02 Sep, 2010 1 commit
  22. 25 Aug, 2010 1 commit
  23. 20 Aug, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#53452 Inconsistent behavior of binlog_direct_non_transactional_updates with · c6d4915f
      Alfranio Correia authored
      temp table
                  
      This patch introduces two key changes in the replication's behavior.
                  
      Firstly, it reverts part of BUG#51894 which puts any update to temporary tables
      into the trx-cache. Now, updates to temporary tables are handled according to
      the type of their engines as a regular table.
                  
      Secondly, an unsafe mixed statement, (i.e. a statement that access transactional
      table as well non-transactional or temporary table, and writes to any of them),
      are written into the trx-cache in order to minimize errors in the execution when
      the statement logging format is in use.
                  
      Such changes has a direct impact on which statements are classified as unsafe
      statements and thus part of BUG#53259 is reverted.
      c6d4915f
  24. 10 Aug, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#50312 Warnings for unsafe sub-statement not returned to client · bd3aa7eb
      Alfranio Correia authored
                              
      After BUG#36649, warnings for sub-statements are cleared when a 
      new sub-statement is started. This is problematic since it suppresses
      warnings for unsafe statements in some cases. It is important that we
      always give a warning to the client, because the user needs to know
      when there is a risk that the slave goes out of sync.
                              
      We fixed the problem by generating warning messages for unsafe statements
      while returning from a stored procedure, function, trigger or while
      executing a top level statement.
                              
      We also started checking unsafeness when both performance and log tables are
      used. This is necessary after the performance schema which does a distinction
      between performance and log tables.
      bd3aa7eb
  25. 04 Aug, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#55415 wait_for_update_bin_log enters a condition but does not leave · 63c026c4
      Alfranio Correia authored
      In sql/log.c, member function wait_for_update_bin_log, a condition is entered with
      THD::enter_cond but is not exited. This might leave dangling references to the
      mutex/condition in the per-thread information area.
      
      To fix the problem, we call exit_cond to properly remove references to the mutex,
      LOCK_log.
      63c026c4
  26. 02 Aug, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#55625 RBR breaks on failing 'CREATE TABLE' · 1feee134
      Alfranio Correia authored
      A CREATE...SELECT that fails is written to the binary log if a non-transactional
      statement is updated. If the logging format is ROW, the CREATE statement and the
      changes are written to the binary log as distinct events and by consequence the
      created table is not rolled back in the slave.
      
      In this patch, we opted to let the slave goes out of sync by not writting to the
      binary log the CREATE statement. We do this by simply reseting the binary log's
      cache.
      1feee134
  27. 27 Jul, 2010 1 commit
    • Konstantin Osipov's avatar
      A pre-requisite patch for the fix for Bug#52044. · ec2c3bf2
      Konstantin Osipov authored
      This patch also fixes Bug#55452 "SET PASSWORD is
      replicated twice in RBR mode".
      
      The goal of this patch is to remove the release of 
      metadata locks from close_thread_tables().
      This is necessary to not mistakenly release
      the locks in the course of a multi-step
      operation that involves multiple close_thread_tables()
      or close_tables_for_reopen().
      
      On the same token, move statement commit outside 
      close_thread_tables().
      
      Other cleanups:
      Cleanup COM_FIELD_LIST.
      Don't call close_thread_tables() in COM_SHUTDOWN -- there
      are no open tables there that can be closed (we leave
      the locked tables mode in THD destructor, and this
      close_thread_tables() won't leave it anyway).
      
      Make open_and_lock_tables() and open_and_lock_tables_derived()
      call close_thread_tables() upon failure.
      Remove the calls to close_thread_tables() that are now
      unnecessary.
      
      Simplify the back off condition in Open_table_context.
      
      Streamline metadata lock handling in LOCK TABLES 
      implementation.
      
      Add asserts to ensure correct life cycle of 
      statement transaction in a session.
      
      Remove a piece of dead code that has also become redundant
      after the fix for Bug 37521.
      ec2c3bf2
  28. 20 Jul, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#45288: pb2 returns a lot of compilation warnings on linux · c96b249f
      Davi Arnaut authored
      Fix warnings flagged by the new warning option -Wunused-but-set-variable
      that was added to GCC 4.6 and that is enabled by -Wunused and -Wall. The
      option causes a warning whenever a local variable is assigned to but is
      later unused. It also warns about meaningless pointer dereferences.
      c96b249f
  29. 08 Jul, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#34043: Server loops excessively in _checkchunk() when safemalloc is enabled · a10ae353
      Davi Arnaut authored
      Essentially, the problem is that safemalloc is excruciatingly
      slow as it checks all allocated blocks for overrun at each
      memory management primitive, yielding a almost exponential
      slowdown for the memory management functions (malloc, realloc,
      free). The overrun check basically consists of verifying some
      bytes of a block for certain magic keys, which catches some
      simple forms of overrun. Another minor problem is violation
      of aliasing rules and that its own internal list of blocks
      is prone to corruption.
      
      Another issue with safemalloc is rather the maintenance cost
      as the tool has a significant impact on the server code.
      Given the magnitude of memory debuggers available nowadays,
      especially those that are provided with the platform malloc
      implementation, maintenance of a in-house and largely obsolete
      memory debugger becomes a burden that is not worth the effort
      due to its slowness and lack of support for detecting more
      common forms of heap corruption.
      
      Since there are third-party tools that can provide the same
      functionality at a lower or comparable performance cost, the
      solution is to simply remove safemalloc. Third-party tools
      can provide the same functionality at a lower or comparable
      performance cost. 
      
      The removal of safemalloc also allows a simplification of the
      malloc wrappers, removing quite a bit of kludge: redefinition
      of my_malloc, my_free and the removal of the unused second
      argument of my_free. Since free() always check whether the
      supplied pointer is null, redudant checks are also removed.
      
      Also, this patch adds unit testing for my_malloc and moves
      my_realloc implementation into the same file as the other
      memory allocation primitives.
      a10ae353
  30. 02 Jul, 2010 1 commit
    • Davi Arnaut's avatar
      Bug#53445: Build with -Wall and fix warnings that it generates · 93fb8bb2
      Davi Arnaut authored
      Apart strict-aliasing warnings, fix the remaining warnings
      generated by GCC 4.4.4 -Wall and -Wextra flags.
      
      One major source of warnings was the in-house function my_bcmp
      which (unconventionally) took pointers to unsigned characters
      as the byte sequences to be compared. Since my_bcmp and bcmp
      are deprecated functions whose only difference with memcmp is
      the return value, every use of the function is replaced with
      memcmp as the special return value wasn't actually being used
      by any caller.
      
      There were also various other warnings, mostly due to type
      mismatches, missing return values, missing prototypes, dead
      code (unreachable) and ignored return values.
      93fb8bb2
  31. 30 Jun, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#53259 Unsafe statement binlogged in statement format w/MyIsam temp tables · e662b51e
      Alfranio Correia authored
      BUG#54872 MBR: replication failure caused by using tmp table inside transaction 
            
      Changed criteria to classify a statement as unsafe in order to reduce the
      number of spurious warnings. So a statement is classified as unsafe when
      there is on-going transaction at any point of the execution if:
      
      1. The mixed statement is about to update a transactional table and
      a non-transactional table.
      
      2. The mixed statement is about to update a temporary transactional
      table and a non-transactional table.
            
      3. The mixed statement is about to update a transactional table and
      read from a non-transactional table.
      
      4. The mixed statement is about to update a temporary transactional
      table and read from a non-transactional table.
      
      5. The mixed statement is about to update a non-transactional table
      and read from a transactional table when the isolation level is
      lower than repeatable read.
      
      After updating a transactional table if:
      
      6. The mixed statement is about to update a non-transactional table
      and read from a temporary transactional table.
       
      7. The mixed statement is about to update a non-transactional table
       and read from a temporary transactional table.
      
      8. The mixed statement is about to update a non-transactionala table
         and read from a temporary non-transactional table.
           
      9. The mixed statement is about to update a temporary non-transactional
      table and update a non-transactional table.
           
      10. The mixed statement is about to update a temporary non-transactional
      table and read from a non-transactional table.
           
      11. A statement is about to update a non-transactional table and the
      option variables.binlog_direct_non_trans_update is OFF.
      
      The reason for this is that locks acquired may not protected a concurrent
      transaction of interfering in the current execution and by consequence in
      the result. So the patch reduced the number of spurious unsafe warnings.
      
      Besides we fixed a regression caused by BUG#51894, which makes temporary
      tables to go into the trx-cache if there is an on-going transaction. In
      MIXED mode, the patch for BUG#51894 ignores that the trx-cache may have
      updates to temporary non-transactional tables that must be written to the
      binary log while rolling back the transaction.
            
      So we fix this problem by writing the content of the trx-cache to the
      binary log while rolling back a transaction if a non-transactional
      temporary table was updated and the binary logging format is MIXED.
      e662b51e
  32. 27 May, 2010 1 commit
  33. 19 May, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#53560 CREATE TEMP./DROP TEMP. are not binglogged correctly after a failed statement · 89850be0
      Alfranio Correia authored
      This patch fixes two problems described as follows:
      
      1 - If there is an on-going transaction and a temporary table is created or
      dropped, any failed statement that follows the "create" or "drop commands"
      triggers a rollback and by consequence the slave will go out sync because
      the binary log will have a wrong sequence of events.
      
      To fix the problem, we changed the expression that evaluates when the
      cache should be flushed after either the rollback of a statment or
      transaction.
      
      2 - When a "CREATE TEMPORARY TABLE SELECT * FROM" was executed the
      OPTION_KEEP_LOG was not set into the thd->options. For that reason, if
      the transaction had updated only transactional engines and was rolled
      back at the end (.e.g due to a deadlock) the changes were not written
      to the binary log, including the creation of the temporary table.
            
      To fix the problem, we have set the OPTION_KEEP_LOG into the thd->options
      when a "CREATE TEMPORARY TABLE SELECT * FROM" is executed.
      89850be0
  34. 08 May, 2010 1 commit
  35. 05 May, 2010 1 commit
  36. 20 Apr, 2010 1 commit
    • Alfranio Correia's avatar
      BUG#51894 Replication failure with SBR on DROP TEMPORARY TABLE inside a · 9ba731c2
      Alfranio Correia authored
                transaction
      BUG#52616 Temp table prevents switch binlog format from STATEMENT to ROW
      
      Before the WL#2687 and BUG#46364, every non-transactional change that happened
      after a transactional change was written to trx-cache and flushed upon
      committing the transaction. WL#2687 and BUG#46364 changed this behavior and
      non-transactional changes are now written to the binary log upon committing
      the statement.
      
      A binary log event is identified as transactional or non-transactional through
      a flag in the Log_event which is set taking into account the underlie storage
      engine on what it is stems from. In the current bug, this flag was not being
      set properly when the DROP TEMPORARY TABLE was executed.
      
      However, while fixing this bug we figured out that changes to temporary tables
      should be always written to the trx-cache if there is an on-going transaction.
      Otherwise, binlog events in the reversed order would be produced.
      
      Regarding concurrency, keeping changes to temporary tables in the trx-cache is
      also safe as temporary tables are only visible to the owner connection.
      
      In this patch, we classify the following statements as unsafe:
         1 - INSERT INTO t_myisam SELECT * FROM t_myisam_temp
      
         2 - INSERT INTO t_myisam_temp SELECT * FROM t_myisam
      
         3 - CREATE TEMPORARY TABLE t_myisam_temp SELECT * FROM t_myisam
      
      On the other hand, the following statements are classified as safe:
      
         1 - INSERT INTO t_innodb SELECT * FROM t_myisam_temp
      
         2 - INSERT INTO t_myisam_temp SELECT * FROM t_innodb
      
      The patch also guarantees that transactions that have a DROP TEMPORARY are
      always written to the binary log regardless of the mode and the outcome:
      commit or rollback. In particular, the DROP TEMPORARY is extended with the
      IF EXISTS clause when the current statement logging format is set to row.
      
      Finally, the patch allows to switch from STATEMENT to MIXED/ROW when there
      are temporary tables but the contrary is not possible.
      9ba731c2
  37. 07 Apr, 2010 1 commit
    • Mats Kindahl's avatar
      WL#5030: Splitting mysql_priv.h · 0768deeb
      Mats Kindahl authored
      Adding my_global.h first in all files using
      NO_EMBEDDED_ACCESS_CHECKS.
      
      Correcting a merge problem resulting from a changed definition
      of check_some_access compared to the original patches.
      0768deeb
  38. 31 Mar, 2010 1 commit