1. 26 Mar, 2014 9 commits
  2. 21 Mar, 2014 2 commits
  3. 20 Mar, 2014 4 commits
  4. 19 Mar, 2014 9 commits
  5. 26 Mar, 2014 1 commit
    • Jan Lindström's avatar
      MDEV-5949: Performance of XtraDB slows down significantly on long benchmarks · cdf6d3ec
      Jan Lindström authored
      when compressed tables are used.
      
      Analysis: Number of flushed pages is incorrectly calculated at
      buf_do_LRU_batch. This leads to problem when utility function
      flushes dirty blocks from the end of the flush list of
      all buffer pool instances in a loop until enough pages are flushed
      or time limit is reached. As number of flushed pages is incorrectly
      calculated, the loop mostly try to flush until time limit is
      reached because the number of pages limit is not reached.
      
      Fix: Fix the calculation of flushed pages (very short). This fix
      was provided by Alexey Stroganov (Percona).
      cdf6d3ec
  6. 24 Mar, 2014 1 commit
    • unknown's avatar
      MDEV-5825: Assertion `! is_set() || m_can_overwrite_status' fails in... · eb2302ec
      unknown authored
      MDEV-5825: Assertion `! is_set() || m_can_overwrite_status' fails in Diagnostics_area::set_error_status on executing rpl.rpl_parallel test
      
      In parallel replication, there was an error case where we could call
      my_error() in-between events. This causes the assertion, as the previous event
      has reported ok status, but the following event has not yet reset the
      diagnostics area. This happened when a worker thread detects that the SQL
      driver thread is aborting, and when it gets an error from a prior commit at
      the same time in wait_for_prior_commit().
      
      Since this is already an error case, the code should be using
      unregister_wait_for_prior_commit() instead of wait_for_prior_commit(). But
      unregister is already done a bit later (from finish_event_group()), so just
      removing the redundant call to wait_for_prior_commit() fixes the issue.
      
      eb2302ec
  7. 23 Mar, 2014 3 commits
    • Alexander Barkov's avatar
      MDEV-5781 Item_sum_std::val_real(): Assertion `nr >= 0.0' fails on query with... · ce3c457e
      Alexander Barkov authored
      MDEV-5781 Item_sum_std::val_real(): Assertion `nr >= 0.0' fails on query with STDDEV_POP, ROUND and variable
      
      ce3c457e
    • Alexander Barkov's avatar
      A joint patch for: · 92bd6801
      Alexander Barkov authored
      - MDEV-5689 ExtractValue(xml, 'substring(/x,/y)') crashes
      - MDEV-5709 ExtractValue() with XPath variable references returns wrong result.
      
      Description:
      
      1. The main problem was that that nodeset_func->fix_fields() was
      called in Item_func_xml_extractvalue::val_str() and
      Item_func_xml_update::val_str(), which led in some cases to
      execution of the XPath engine *before* having a parsed XML value.
      Moved to Item_xml_str_func::fix_fields().
      
      2. Cleanup: added a new method Item_xml_str_func::fix_fields() and moved
      most of the code from Item_xml_str_func::fix_length_and_dec()
      to Item_xml_str_func::fix_fields(), to follow the usual Item layout.
      
      3. Cleanup: a parsed XML value is useless without the raw XML value
      it was built from.
      
      Previously the parsed and the raw values where stored in separate String
      instances. It was hard to follow how they are synchronized.
      Added a helper class XML which contains both parsed and raw values.
      Makes things easier to read and modify.
      
      4. MDEV-5709: const_item() could incorrectly return a "true"
      result when XPath expression contains users/SP variable references.
      Now nodeset_func->const_item() is also taken into account to
      catch such cases.
      
      5. Minor code enhancements.
      92bd6801
    • Alexander Barkov's avatar
      MDEV-5870 Assertion `ltime->neg == 0' fails with COALESCE, ADDDATE, MAKEDATE · e0f75b1b
      Alexander Barkov authored
      A huge number in the "day" part of an interval made the code to return
      a negative date erroneously. Adding a test to return an error on a too
      large "day" value.
      e0f75b1b
  8. 22 Mar, 2014 1 commit
    • Igor Babaev's avatar
      Fixed bug mdev-5931. · 887a210f
      Igor Babaev authored
      After constant table row substitution the where condition may be converted
      to always true. The function calculate_cond_selectivity_for_table() should
      take into account this possibility.
      887a210f
  9. 21 Mar, 2014 4 commits
    • unknown's avatar
      MDEV-5914: Parallel replication deadlock due to InnoDB lock conflicts · b3529691
      unknown authored
      Due to how gap locks work, two transactions could group commit together on the
      master, but get lock conflicts and then deadlock due to different thread
      scheduling order on slave.
      
      For now, remove these deadlocks by running the parallel slave in READ
      COMMITTED mode. And let InnoDB/XtraDB allow statement-based binlogging for the
      parallel slave in READ COMMITTED.
      
      We are also investigating a different solution long-term, which is based on
      relaxing the gap locks only between the transactions running in parallel for
      one slave, but not against possibly external transactions.
      b3529691
    • unknown's avatar
      MDEV-5921: In parallel replication, an error is not correctly signalled to the next transaction · a5418c55
      unknown authored
      When a transaction fails in parallel replication, it should signal the error
      to any following transactions doing wait_for_prior_commit() on it. But the
      code for this was incorrect, and would not correctly remember a prior error
      when sending the signal. This caused corruption when slave stopped due to an
      error.
      
      Fix by remembering the error code when we first get an error, and passing the
      saved error code to wakeup_subsequent_commits().
      
      Thanks to nanyi607rao who reported this bug on
      maria-developers@lists.launchpad.net and analysed the root cause.
      a5418c55
    • Sergey Petrunya's avatar
      MDEV-5917: EITS: different order of predicates in IN (...) causes different estimates · e59dec03
      Sergey Petrunya authored
      - Forgot to update one .result file.
      e59dec03
    • Jan Lindström's avatar
      MDEV-5830: Assertion failure mutex_get_waiters(mutex) == 0 at shutdown. · affe1731
      Jan Lindström authored
      Analysis: XtraDB merge regression, at the end of mutex_spin_wait before goto mutex_loop
      there is missing  
      
      if (prio_mutex) { 
      	os_atomic_decrement_ulint(&prio_mutex->high_priority_waiters, 1); 
      }
      
      Hence we get unbalanced waiter count.
      
      Thanks to Laurynas Biveinis for finding this.
      affe1731
  10. 20 Mar, 2014 3 commits
  11. 19 Mar, 2014 3 commits
    • Michael Widenius's avatar
      Automatic merge · f71dc02e
      Michael Widenius authored
      f71dc02e
    • Michael Widenius's avatar
      Fix for MDEV-5589: "Discrepancy in binlog on half-failed CREATE OR REPLACE" · c4bb7cd6
      Michael Widenius authored
      Now if CREATE OR REPLACE fails but we have deleted a table already, we will generate a DROP TABLE in the binary log.
      This fixes this issue.
      
      In addition, for a failing CREATE OR REPLACE TABLE ... SELECT we don't generate a log of all the inserted rows, only the DROP TABLE.
      
      I added code for not logging DROP TEMPORARY TABLE for tables where the CREATE TABLE was not logged. This code will be activated in 10.1
      by removing the code protected by DONT_LOG_DROP_OF_TEMPORARY_TABLES.
      
      
      
      
      
      mysql-test/suite/rpl/r/create_or_replace_mix.result:
        More test cases
      mysql-test/suite/rpl/r/create_or_replace_row.result:
        More test cases
      mysql-test/suite/rpl/r/create_or_replace_statement.result:
        More test cases
      mysql-test/suite/rpl/t/create_or_replace.inc:
        More test cases
      sql/log.cc:
        Added binlog_reset_cache() to clear the binary log.
      sql/log.h:
        Added prototype
      sql/sql_insert.cc:
        If CREATE OR REPLACE TABLE ... SELECT fails:
        - Don't log anything if nothing changed
        - If table was deleted, log a DROP TABLE.
        Remember if we table creation of temporary tables was logged.
      sql/sql_table.cc:
        Added log_drop_table()
        Remember if we table creation of temporary tables was logged.
        If CREATE OR REPLACE TABLE ... SELECT fails and a table was deleted, log a DROP TABLE.
      sql/sql_table.h:
        Added prototype
      sql/sql_truncate.cc:
        Remember if we table creation of temporary tables was logged.
      sql/table.h:
        Added table_creation_was_logged
      c4bb7cd6
    • Igor Babaev's avatar
      Merge. · d51ee6d4
      Igor Babaev authored
      d51ee6d4