1. 06 Jun, 2011 4 commits
  2. 03 Jun, 2011 11 commits
  3. 02 Jun, 2011 1 commit
  4. 01 Jun, 2011 5 commits
    • Bjorn Munch's avatar
      Followup to 12607800, testing it in PB2 didn't work, trying again · aca402b6
      Bjorn Munch authored
      Be more explicit about path to (potential) plugin tests dirs
      aca402b6
    • Jon Olav Hauglid's avatar
      Bug#11853126 RE-ENABLE CONCURRENT READS WHILE CREATING · edcd89ee
      Jon Olav Hauglid authored
                   SECONDARY INDEX IN INNODB
      
      This is a follow-up patch.
      
      This patch moves part of the new test coverage to a test
      file that is only run on debug builds since it used debug-
      only features and therefore broke the test case on
      release builds.
      edcd89ee
    • Bjorn Munch's avatar
      Bug #12607800 ADD HOOK TO INSTALL TESTS FROM IMPORTED FEATURE TREES · fd717fb5
      Bjorn Munch authored
      Sets INSTALL_PLUGINTESTDIR if any plugin/*/tests exist
      fd717fb5
    • Vinay Fisrekar's avatar
      Adding testcases for WL#5743 InnoDB: Lift the limit of index key prefixes · 46c2089d
      Vinay Fisrekar authored
      innodb_prefix_index_liftedlimit.test used for functional testing of increase in prefix index limit
      46c2089d
    • Jon Olav Hauglid's avatar
      Bug#11853126 RE-ENABLE CONCURRENT READS WHILE CREATING · 9b076952
      Jon Olav Hauglid authored
                   SECONDARY INDEX IN INNODB
      
      The patches for Bug#11751388 and Bug#11784056 enabled concurrent
      reads while creating secondary indexes in InnoDB. However, they
      introduced a regression. This regression occured if ALTER TABLE
      failed after the index had been added, for example during the
      lock upgrade needed to update .FRM. If this happened, InnoDB
      and the server got out of sync with regards to which indexes
      actually existed. Therefore the patch for Bug#11815600 again
      disabled concurrent reads.
      
      This patch re-enables concurrent reads. The original regression
      is fixed by splitting the ADD INDEX operation into two parts.
      First the new index is created but not made active. This is
      done while concurrent reads are allowed. The second part of
      the operation makes the index active (or reverts the change).
      This is done after lock upgrade, which prevents the original
      regression.
      
      In order to implement this change, the patch changes the storage
      API for in-place index creation. handler::add_index() is split
      into two functions, handler_add_index() and
      handler::final_add_index(). The former for creating indexes without
      making them visible and the latter for commiting (i.e. making
      visible) new indexes or reverting the changes.
      
      Large parts of this patch were written by Marko Mäkelä.
      
      Test case added to innodb_mysql_lock.test.
      9b076952
  5. 31 May, 2011 2 commits
  6. 30 May, 2011 4 commits
    • Davi Arnaut's avatar
      Bug#11766349 - 59443: query_cache_debug.test is occasionally very slow · c7d2ec7d
      Davi Arnaut authored
      The test case problem stemmed from the fact that a debug sync
      signal is a global variable that persists until overwritten
      by a new signal. This means that if two different signals
      are raised in sequence, a thread waiting for the first signal
      might miss it if the second signal sets the global variable
      before the thread wakes up.
      
      The solution is to deliver a subsequent signal only after the
      waiting thread has received it.
      
      mysql-test/t/query_cache_debug.test:
        Wait for signal to be delivered.
      c7d2ec7d
    • Bjorn Munch's avatar
      Bug #12604711 MTR SHOULD READ PLUGIN.DEFS FILES FROM IMPORTED FEATURE TREES · ec0b030f
      Bjorn Munch authored
      Added reading from plugin.defs files under plugins/*
      ec0b030f
    • Davi Arnaut's avatar
      Merge of mysql-5.1 into mysql-5.5. · 9f6ec599
      Davi Arnaut authored
      9f6ec599
    • Davi Arnaut's avatar
      Bug#12563279: REGRESSION IN HANDLING PRE-4.1 AUTHENTICATION PACKET · 9b68760f
      Davi Arnaut authored
      The problem is that clients implementing the 4.0 version of the
      protocol (that is, mysql-4.0) do not null terminate a string
      at the end of the authentication packet. These clients denote
      the end of the string with the end of the packet.
      
      Although this goes against the documented (see MySQL Internals
      ClientServer Protocol wiki) description of the protocol, these
      old clients still need to be supported.
      
      The solution is to support the documented and actual behavior
      of the clients. If a client is using the pre-4.1 version of
      the protocol, the end of a string in the authentication packet
      can either be denoted with a null character or by the end of
      the packet. This restores backwards compatibility with old
      clients implementing either the documented or actual behavior.
      
      sql/password.c:
        The scrambled message, as provided by the user, might not be
        properly null terminated. If this is the case, uninitialized
        memory past the end of the buffer could theoretically be
        accessed. To ensure that this is never the case, copy the
        scrambled message over to a null terminated auxiliar buffer.
      sql/sql_connect.cc:
        Use different execution paths to read strings depending on the
        protocol being used. If version 4.0 of the protocol is used,
        end of string can be denoted with a NUL character or by the
        end of the packet.
        
        If there are not enough bytes left after the current position
        of the buffer to satisfy the current string, the string is
        considered to be empty. This is required because old clients
        do not send the password string field if the password is empty.
      9b68760f
  7. 27 May, 2011 7 commits
    • Davi Arnaut's avatar
      Null merge of mysql-5.1 into mysql-5.5. · f3e11429
      Davi Arnaut authored
      f3e11429
    • Bjorn Munch's avatar
      Bug #12598603 HAVE COLLECTIONS FILES IN FEATURE TREES AUTO-APPENDED TO COMMON FILES · 94f96bc4
      Bjorn Munch authored
      Do this in the common plugin.cmake but only if running in PB2
        (If done in manual builds it would create a bzr diff)
      94f96bc4
    • Dmitry Shulga's avatar
    • Davi Arnaut's avatar
      BUG 11763056 - 55721: AIX 5.1.50 build failing, cannot locate bzero · 05098831
      Davi Arnaut authored
      The problem is that although AIX implements bzero, its prototype
      is not declared by default. Since AC_CHECK_FUNC(bzero) succeeds
      even though a prototype is not declared, this breaks compilation
      in C++ files where a prototype is required.
      
      The solution is to only use bzero if a prototype is also declared.
      
      configure.in:
        Check if bzero is declared. No need to specify the includes,
        unisted.h and strings.h are already part of AC_INCLUDES_DEFAULT.
      05098831
    • Tatjana Azundris Nuernberg's avatar
      20791d83
    • Dmitry Shulga's avatar
      Fixed bug#12546938 (formerly known as 61005) - CREATE IF NOT EXIST EVENT · 56a735b7
      Dmitry Shulga authored
      will create multiple running events.
      
      A CREATE IF NOT EXIST on an event that existed and was enabled caused
      multiple instances of the event to run. Disabling the event didn't  help.
      If the event was  dropped, the event stopped running, but when created
      again, multiple instances of the event were still running. The only way
      to get out of this situation was  to restart the server.
      
      The problem was that Event_db_repository::create_event() didn't return
      enough information to discriminate between situation when event didn't
      exist and was created and when event did exist and was not created
      (but a warning was emitted). As result in the latter case event
      was added to in-memory queue of events second time. And this led to
      unwarranted multiple executions of the same event.
      
      The solution is to add out-parameter to Event_db_repository::create_event()
      method which will signal that event was not created because it already
      exists and so it should not be added to the in-memory queue.
      
      
      mysql-test/r/events_bugs.result:
        Added results for test for Bug#12546938.
      mysql-test/t/events_bugs.test:
        Added test for Bug#12546938.
      sql/event_db_repository.cc:
        Event_db_repository::create_event was modified: set newly added out-parameter
        event_already_exists to true value if event wasn't created because event
        already existed and IF NOT EXIST clause was present.
      sql/event_db_repository.h:
        Added out-parameter 'event_already_exists' to create_event() method.
      sql/events.cc:
        Events::create_event was modified: insert new element into
        event queue only if event was actually created.
      56a735b7
    • Anitha Gopi's avatar
      Automerge : Updating local tree · 8ae716e9
      Anitha Gopi authored
      8ae716e9
  8. 26 May, 2011 6 commits
    • Dmitry Lenev's avatar
      Fix for bug #11762012 - "54553: INNODB ASSERTS IN · fecca343
      Dmitry Lenev authored
      HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      
      Attempt to update an InnoDB temporary table under LOCK TABLES
      led to assertion failure in both debug and production builds
      if this temporary table was explicitly locked for READ. The
      same scenario works fine for MyISAM temporary tables.
      
      The assertion failure was caused by discrepancy between lock
      that was requested on the rows of temporary table at LOCK TABLES
      time and by update operation. Since SQL-layer requested a
      read-lock at LOCK TABLES time InnoDB engine assumed that upcoming
      statements which are going to be executed under LOCK TABLES will
      only read table and therefore should acquire only S-lock.
      An update operation broken this assumption by requesting X-lock.
      
      Possible approaches to fixing this problem are:
      
      1) Skip locking of temporary tables as locking doesn't make any
         sense for connection-local objects.
      2) Prohibit changing of temporary table locked by LOCK TABLES ...
         READ.
      
      Unfortunately both of these approaches have drawbacks which make
      them unviable for stable versions of server.
      
      So this patch takes another approach and changes code in such way
      that LOCK TABLES for a temporary table will always request write
      lock. In 5.5 version of this patch switch from read lock to write
      lock is done on SQL-layer.
      
      mysql-test/suite/innodb/r/innodb_mysql.result:
        Added test for bug #11762012 - "54553: INNODB ASSERTS IN
        HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      mysql-test/suite/innodb/t/innodb_mysql.test:
        Added test for bug #11762012 - "54553: INNODB ASSERTS IN
        HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      sql/sql_parse.cc:
        Since a temporary table locked by LOCK TABLES can be updated even
        if it was only locked for read we always request TL_WRITE locks
        for such tables at LOCK TABLES time. This allows to avoid 
        discrepancy between locks acquired at LOCK TABLES time and by
        a statement executed under LOCK TABLES. Such a discrepancy has
        caused problems for InnoDB storage engine.
        
        To support this change a part of code implementing LOCK TABLES 
        has been moved to a helper function.
      fecca343
    • Dmitry Lenev's avatar
      Null-merged 5.1 version of fix for bug #11762012 - "54553: · 1db26385
      Dmitry Lenev authored
      INNODB ASSERTS IN HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE,
      TABLE LOCK" into 5.5 tree. 5.5 version of fix will be
      committed and pushed separately.
      1db26385
    • Dmitry Lenev's avatar
      Fix for bug #11762012 - "54553: INNODB ASSERTS IN · 861291f1
      Dmitry Lenev authored
      HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      
      Attempt to update an InnoDB temporary table under LOCK TABLES
      led to assertion failure in both debug and production builds
      if this temporary table was explicitly locked for READ. The 
      same scenario works fine for MyISAM temporary tables.
      
      The assertion failure was caused by discrepancy between lock 
      that was requested on the rows of temporary table at LOCK TABLES
      time and by update operation. Since SQL-layer requested a 
      read-lock at LOCK TABLES time InnoDB engine assumed that upcoming
      statements which are going to be executed under LOCK TABLES will 
      only read table and therefore should acquire only S-lock.
      An update operation broken this assumption by requesting X-lock.
      
      Possible approaches to fixing this problem are:
      
      1) Skip locking of temporary tables as locking doesn't make any
         sense for connection-local objects.
      2) Prohibit changing of temporary table locked by LOCK TABLES ... 
         READ.
      
      Unfortunately both of these approaches have drawbacks which make 
      them unviable for stable versions of server.
      
      So this patch takes another approach and changes code in such way
      that LOCK TABLES for a temporary table will always request write
      lock. In 5.1 version of this patch switch from read lock to write
      lock is done inside of InnoDBs handler methods as doing it on 
      SQL-layer causes compatibility troubles with FLUSH TABLES WITH
      READ LOCK.
      
      mysql-test/suite/innodb/r/innodb_mysql.result:
        Added test for bug #11762012 - "54553: INNODB ASSERTS IN 
        HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      mysql-test/suite/innodb/t/innodb_mysql.test:
        Added test for bug #11762012 - "54553: INNODB ASSERTS IN 
        HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      mysql-test/suite/innodb_plugin/r/innodb_mysql.result:
        Added test for bug #11762012 - "54553: INNODB ASSERTS IN 
        HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      mysql-test/suite/innodb_plugin/t/innodb_mysql.test:
        Added test for bug #11762012 - "54553: INNODB ASSERTS IN 
        HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      storage/innobase/handler/ha_innodb.cc:
        Assume that a temporary table locked by LOCK TABLES can be updated
        even if it was only locked for read and therefore an X-lock should 
        be always requested for such tables.
      storage/innodb_plugin/handler/ha_innodb.cc:
        Assume that a temporary table locked by LOCK TABLES can be updated
        even if it was only locked for read and therefore an X-lock should 
        be always requested for such tables.
      861291f1
    • Tatjana Azundris Nuernberg's avatar
      auto-merge Bug#11745920 · e1b79597
      Tatjana Azundris Nuernberg authored
      e1b79597
    • Sven Sandberg's avatar
      Merged BUG#12574820 from 5.1 to 5.5 · add86aad
      Sven Sandberg authored
      Two conflicts resolved manually:
      Text conflict in sql/log.cc
      Text conflict in sql/mysqld.cc
      add86aad
    • Sven Sandberg's avatar
      BUG#12574820: binlog.binlog_tmp_table timing out in daily and weekly trunk run · de377681
      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.
      
      
      mysql-test/suite/binlog/r/binlog_reset_master.result:
        added result file
      mysql-test/suite/binlog/t/binlog_reset_master.test:
        Added test case that demonstrates deadlock because of wrong mutex order.
        The deadlock is between two threads:
         - RESET MASTER acquires mutexes in wrong order.
         - client thread shutdown code acquires mutexes in right order.
        Actually, this test case does not produce deadlock in 5.1, probably
        the client thread shutdown code does not hold both mutexes at the same
        time. However, the bug existed in 5.1 (mutexes are taken in the wrong
        order) so we push the test case to 5.1 too, to prevent future
        regressions.
      sql/log.cc:
        Change mutex acquisition to the correct order:
        first LOCK_thread_count, then LOCK_log.
      sql/mysqld.cc:
        Add debug code to synchronize test case.
      de377681