1. 15 May, 2017 3 commits
    • Daniel Black's avatar
      MDEV-12420: PCRE stack overflow · d672f88e
      Daniel Black authored
      It was possible to construct a PCRE expression that exceeded the stack.
      resulting in a crash:
      
      With fix:
      
      MariaDB [(none)]> SELECT 1
          -> FROM dual
          -> WHERE ('Alpha,Bravo,Charlie,Delta,Echo,Foxtrot,StrataCentral,Golf,Hotel,India,Juliet,Kilo,Lima,Mike,StrataL3,November,Oscar,StrataL2,Sand,P3,P4SwitchTest,Arsys,Poppa,ExtensionMgr,Arp,Quebec,Romeo,StrataApiV2,PtReyes,Sierra,SandAcl,Arrow,Artools,BridgeTest,Tango,SandT,PAlaska,Namespace,Agent,Qos,PatchPanel,ProjectReport,Ark,Gimp,Agent,SliceAgent,Arnet,Bgp,Ale,Tommy,Central,AsicPktTestLib,Hsc,SandL3,Abuild,Pca9555,Standby,ControllerDut,CalSys,SandLib,Sb820,PointV2,BfnLib,Evpn,BfnSdk,Sflow,ManagementActive,AutoTest,GatedTest,Bgp,Sand,xinetd,BfnAgentLib,bf-utils,Hello,BfnState,Eos,Artest,Qos,Scd,ThermoMgr,Uniform,EosUtils,Eb,FanController,Central,BfnL3,BfnL2,tcp_wrappers,Victor,Environment,Route,Failover,Whiskey,Xray,Gimp,BfnFixed,Strata,SoCal,XApi,Msrp,XpProfile,tcpdump,PatchPanel,ArosTest,FhTest,Arbus,XpAcl,MacConc,XpApi,telnet,QosTest,Alpha2,BfnVlan,Stp,VxlanControllerTest,MplsAgent,Bravo2,Lanz,BfnMbb,Intf,XCtrl,Unicast,SandTunnel,L3Unicast,Ipsec,MplsTest,Rsvp,EthIntf,StageMgr,Sol,MplsUtils,Nat,Ira,P4NamespaceDut,Counters,Charlie2,Aqlc,Mlag,Power,OpenFlow,Lag,RestApi,BfdTest,strongs,Sfa,CEosUtils,Adt746,MaintenanceMode,MlagDut,EosImage,IpEth,MultiProtocol,Launcher,Max3179,Snmp,Acl,IpEthTest,PhyEee,bf-syslibs,tacc,XpL2,p4-ar-switch,p4-bf-switch,LdpTest,BfnPhy,Mirroring,Phy6,Ptp'
          ->
          -> REGEXP '^((?!\b(Strata|StrataApi|StrataApiV2)\b).)*$');
      Empty set, 1 warning (0.00 sec)
      
      MariaDB [(none)]> show warnings;
      +---------+------+---------------------------------------------------------+
      | Level   | Code | Message                                                 |
      +---------+------+---------------------------------------------------------+
      | Warning | 1139 | Got error 'pcre_exec: Internal error (-21)' from regexp |
      +---------+------+---------------------------------------------------------+
      d672f88e
    • Marko Mäkelä's avatar
      MDEV-12188 information schema - errors populating fail to free memory, unlock mutexes · 217b8115
      Marko Mäkelä authored
      Given the OK macro used in innodb does a DBUG_RETURN(1) on expression failure
      the innodb implementation has a number of errors in i_s.cc.
      
      We introduce a new macro BREAK_IF that replaces some use of the OK macro.
      Also, do some other cleanup detailed below.
      
      When invoking Field::store() on integers, always pass the parameter
      is_unsigned=true to avoid an unnecessary conversion to double.
      
      i_s_fts_deleted_generic_fill(), i_s_fts_config_fill():
      Use the BREAK_IF macro instead of OK.
      
      i_s_fts_index_cache_fill_one_index(), i_s_fts_index_table_fill_one_index():
      Add a parameter for conv_string, and let the caller allocate that buffer.
      
      i_s_fts_index_cache_fill(): Check the return status of
      i_s_fts_index_cache_fill_one_index().
      
      i_s_fts_index_table_fill(): Check the return status of
      i_s_fts_index_table_fill_one_index().
      
      i_s_fts_index_table_fill_one_fetch(): Always let the caller invoke
      i_s_fts_index_table_free_one_fetch().
      
      i_s_innodb_buffer_page_fill(), i_s_innodb_buf_page_lru_fill():
      Do release dict_sys->mutex if filling the buffers fails.
      
      i_s_innodb_buf_page_lru_fill(): Also display the value
      INFORMATION_SCHEMA.INNODB_BUFFER_PAGE.PAGE_IO_FIX='IO_PIN'
      when a block is in that state. Remove the unnecessary variable 'heap'.
      217b8115
    • Marko Mäkelä's avatar
      Fix the Solaris compilation after MDEV-12674 · 8417252b
      Marko Mäkelä authored
      simple_counter::add(): Add a type cast to the os_atomic_increment_ulint()
      call, because GCC would check the type compatibility even when the code
      branch is not being instantiated (atomic=false). On Solaris,
      os_atomic_increment_ulint() actually needs a compatible parameter type,
      and an error would be emitted due to an incompatible 64-bit type,
      for srv_stats.n_lock_wait_time.add(diff_time).
      8417252b
  2. 12 May, 2017 1 commit
    • Marko Mäkelä's avatar
      MDEV-12674 Innodb_row_lock_current_waits has overflow · ff166093
      Marko Mäkelä authored
      There is a race condition related to the variable
      srv_stats.n_lock_wait_current_count, which is only
      incremented and decremented by the function lock_wait_suspend_thread(),
      
      The incrementing is protected by lock_sys->wait_mutex, but the
      decrementing does not appear to be protected by anything.
      This mismatch could allow the counter to be corrupted when a
      transactional InnoDB table or record lock wait is terminating
      roughly at the same time with the start of a wait on a
      (possibly different) lock.
      
      ib_counter_t: Remove some unused methods. Prevent instantiation for N=1.
      Add an inc() method that takes a slot index as a parameter.
      
      single_indexer_t: Remove.
      
      simple_counter<typename Type, bool atomic=false>: A new counter wrapper.
      Optionally use atomic memory operations for modifying the counter.
      Aligned to the cache line size.
      
      lsn_ctr_1_t, ulint_ctr_1_t, int64_ctr_1_t: Define as simple_counter<Type>.
      These counters are either only incremented (and we do not care about
      losing some increment operations), or the increment/decrement operations
      are protected by some mutex.
      
      srv_stats_t::os_log_pending_writes: Document that the number is protected
      by log_sys->mutex.
      
      srv_stats_t::n_lock_wait_current_count: Use simple_counter<ulint, true>,
      that is, atomic inc() and dec() operations.
      
      lock_wait_suspend_thread(): Release the mutexes before incrementing
      the counters. Avoid acquiring the lock mutex if the lock wait has
      already been resolved. Atomically increment and decrement
      srv_stats.n_lock_wait_current_count.
      
      row_insert_for_mysql(), row_update_for_mysql(),
      row_update_cascade_for_mysql(): Use the inc() method with the trx->id
      as the slot index. This is a non-functional change, just using
      inc() instead of add(1).
      
      buf_LRU_get_free_block(): Replace the method add(index, n) with inc().
      There is no slot index in the simple_counter.
      ff166093
  3. 08 May, 2017 1 commit
  4. 05 May, 2017 4 commits
    • Monty's avatar
      MDEV-10104 Table lock race condition with replication · fc25437a
      Monty authored
      Problem was two race condtion in Aria page cache:
      - find_block() didn't inform free_block() that it had released requests
      - free_block() didn't handle pinned blocks, which could happen if
        free_block() was called as part of flush. This is fixed by not freeing
        blocks that are pinned.  This is safe as when maria_close() is called
        when last thread is using a table, there can be no pinned blocks. For
        other flush calls it's safe to ignore pinned blocks.
      fc25437a
    • Monty's avatar
      Fixed some bugs in fork_big.pl which caused some tests to die early · e3521ab9
      Monty authored
      - Changed to 'strict'
      - Fixed scope of variables
      - Made timing smaller for of repair, check, flush and alter to get them to
        trigger earlier
      e3521ab9
    • Marko Mäkelä's avatar
      MDEV-12635 innodb.log_file_size fails when run with Valgrind · bc5c1d99
      Marko Mäkelä authored
      In MariaDB Server before 10.2, InnoDB will not be shut down properly
      if startup fails. So, Valgrind failures are to be expected.
      Disable the test under Valgrind. In 10.2, it should pass with Valgrind.
      bc5c1d99
    • Igor Babaev's avatar
      Fixed the bug mdev-12673. · 15f9931f
      Igor Babaev authored
      This patch corrects the fix for the bug mdev-10693.
      It is critical for the function get_best_combination() not to call
      create_ref_for_key() for constant tables.
      This bug could manifest itself only in multi-table subqueries where
      one of the tables is accessed by a constant primary key.
      15f9931f
  5. 03 May, 2017 1 commit
  6. 02 May, 2017 1 commit
  7. 30 Apr, 2017 1 commit
    • Daniel Black's avatar
      mysqld_safe_help - remove warning · dbe2c3c5
      Daniel Black authored
      /home/travis/build/MariaDB/server/extra/mysqld_safe_helper.c:62:21: warning: too many arguments in call to 'do_usage'
          do_usage(argv[0]);
          ~~~~~~~~        ^
      1 warning generated.
      dbe2c3c5
  8. 25 Apr, 2017 1 commit
  9. 24 Apr, 2017 3 commits
    • Igor Babaev's avatar
      Fixed the bug mdev-10693. · 2e7ba70a
      Igor Babaev authored
      The code that chooses between materialization of a non-correlated
      IN subquery and its transformation into an EXISTS correlated
      subquery assumes that the execution plan for the outer select
      has been already built. However it was not always so if subqueries
      occurred in the expressions used for ref access to tables of
      the outer select. A call of the function create_ref_for_key() in
      get_best_combination() could trigger a premature execution of
      the above mentioned code when the execution plan structures for
      the outer select were not fully built. This could cause a crash
      of the server.
      
      The fix postpones the calls of create_ref_for_key() until the
      structures for the execution plan is fully built.
      2e7ba70a
    • Marko Mäkelä's avatar
      Add and adjust a test from MySQL: · 57fea99e
      Marko Mäkelä authored
      commit 1198267c331b045b9cad26be72b1a5b4f8930a79
      Author: Thirunarayanan Balathandayuthapani <thirunarayanan.balathandayuth@oracle.com>
      Date:   Fri Aug 26 11:00:44 2016 +0530
      
          Bug #20989615   INNODB AUTO_INCREMENT PRODUCES SAME VALUE TWICE
      
      The code fix is already present.
      57fea99e
    • Marko Mäkelä's avatar
      Add and adjust a test from MySQL: · 864548c4
      Marko Mäkelä authored
      commit 12343617922cfd9c48ee84ad6ecf53068d822010
      Author: Thirunarayanan Balathandayuthapani <thirunarayanan.balathandayuth@oracle.com>
      Date:   Fri Jul 15 14:39:37 2016 +0530
      
          Bug #23475211   COMBINING ALTER OPERATIONS TRIGGERS TABLE REBUILD
      
      The code fix is already present.
      864548c4
  10. 22 Apr, 2017 1 commit
  11. 21 Apr, 2017 6 commits
    • Igor Babaev's avatar
      Fixed bug mdev-10053. · 97fb1f26
      Igor Babaev authored
      The implementation of the walk method for the class Item_in_subselect
      was missing. As a result the method never traversed the left operand
      of any IN subquery predicate.
      
      Item_exists_subselect::exists2in_processor() that performs the
      Exist-To-In transformation calls the walk method to collect info
      on outer references. As the walk method did not traverse the
      left operands of the IN subqueries the outer references there
      were not taken into account and some subqueries that were actually
      correlated were marked as uncorrelated. It could lead to an
      attempt of the materialization of such a subquery.
      
      Also added a cleanup for some test cases merged from 5.5.
      97fb1f26
    • Sergei Golubchik's avatar
      fix "cmake -DWITH_PCRE=bundled" · 26ed68dc
      Sergei Golubchik authored
      after building with system
      26ed68dc
    • Sergei Golubchik's avatar
      Merge branch '5.5' into 10.0 · 8d75a753
      Sergei Golubchik authored
      8d75a753
    • Marko Mäkelä's avatar
      Fix some InnoDB type mismatch · e056d1f1
      Marko Mäkelä authored
      On 64-bit Windows, sizeof(ulint)!=sizeof(ulong).
      e056d1f1
    • Marko Mäkelä's avatar
      e48ae21b
    • Marko Mäkelä's avatar
      MDEV-12488 Remove type mismatch in InnoDB printf-like calls · 87b6df31
      Marko Mäkelä authored
      This is a reduced version of an originally much larger patch.
      We will keep the definition of the ulint, lint data types unchanged,
      and we will not be replacing fprintf() calls with ib_logf().
      
      On Windows, use the standard format strings instead of nonstandard
      extensions.
      
      This patch fixes some errors in format strings.
      Most notably, an IMPORT TABLESPACE error message in InnoDB was
      displaying the number of columns instead of the mismatching flags.
      87b6df31
  12. 20 Apr, 2017 7 commits
  13. 19 Apr, 2017 1 commit
    • Oleksandr Byelkin's avatar
      Fix use of `require` in mysql-test-run. · d185f1d6
      Oleksandr Byelkin authored
      The motivation for this is that Perl is moving towards not having
      current directory ./ in @INC by default. This is causing
      mysql-test-run.pl to fail in latest Debian Unstable:
      
        https://lists.debian.org/debian-devel-announce/2016/08/msg00013.html
      
      However, we have `use "lib"`, there is no need for current directory
      in @INC, except for a gross hack. In mtr_cases.pm, there is a
      `require "mtr_misc.pl"`, which hides mtr_misc.pl away in mtr_cases
      namespace. And things only work because mysql-test-run.pl loads it
      with a different name, `require "lib/mtr_misc.pl"`! (Perl will
      `require` only once for each unique filename).
      
      Fix this by only using `require` in main program, and referencing
      functions with :: scope from other namespaces. For multi-use in
      different namespaces, proper `use` modules should be used.
      Signed-off-by: default avatarKristian Nielsen <knielsen@knielsen-hq.org>
      d185f1d6
  14. 13 Apr, 2017 1 commit
  15. 11 Apr, 2017 1 commit
  16. 10 Apr, 2017 1 commit
    • Kristian Nielsen's avatar
      MDEV-11201: gtid_ignore_duplicates incorrectly ignores statements when GTID... · 88613e1d
      Kristian Nielsen authored
      MDEV-11201: gtid_ignore_duplicates incorrectly ignores statements when GTID replication is not enabled
      
      When master_use_gtid=no, the IO thread loads the slave GTID state from
      the master during connect. This races with the SQL thread when
      gtid_ignore_duplicates=1. If an event is in the relay log from before
      the new connect and has not been applied yet, moving the slave
      position causes the SQL thread to think that event should be skipped
      due to gtid_ignore_duplicates=1.
      
      This patch simply disables gtid_ignore_duplicates when not using GTID,
      which seems to be what one would expect.
      88613e1d
  17. 09 Apr, 2017 1 commit
  18. 07 Apr, 2017 1 commit
  19. 05 Apr, 2017 2 commits
  20. 04 Apr, 2017 1 commit
    • Igor Babaev's avatar
      Fixed the bug mdev-12429 and its duplicates mdev-12145 and mdev-9886. · b0395d87
      Igor Babaev authored
      Also fixed a wrong result for a test case for mdev-7691
      (the alternative one).
      The test  cases for all these bug have materialized semi-joins used
      inside dependent sub-queries.
      
      The patch actually reverts the change inroduced by Monty in 2003.
      It looks like this change is not valid anymore after the implementation
      of semi-joins.
      Adjusted output from EXPLAIN for many other test cases.
      b0395d87
  21. 03 Apr, 2017 1 commit
    • Vladislav Vaintroub's avatar
      Compiling, Windows . Avoid unnecessary rebuilds with MSVC. · f2dc04ab
      Vladislav Vaintroub authored
      To export symbols from the mysqld.exe, use lib.exe with /DEF, rather than
      pre-link step when building mysqld.exe.
      
      This helps to avoid relinking all plugins, if mysqld.exe was recompiled
      but the list of its exports has not changed.
      
      Also removed unnecessary DEPENDS in some ADD_CUSTOM_COMMAND (gen_lex_token,
      gen_lex_hash etc). They confuse VS generator which tends to
      recreate headers and do unnecessary recompilations.
      f2dc04ab