1. 20 Aug, 2019 9 commits
  2. 19 Aug, 2019 6 commits
    • Julius Goryavsky's avatar
      MDEV-20185: Windows: Use of uninitialized value $bpath in string eq · 12e3ac04
      Julius Goryavsky authored
      The execution of mtr in the Windows environment fails due to
      the fact that the new code from MDEV-18565 does not take into
      account the need to add the ".exe" extension to the names of
      executable files when searching for pre-requisites that are
      needed to run SST scripts (especially when using mariabackup)
      and when searching paths to some other Galera utilities.
      This patch fixes this flaw.
      
      Also adding paths to the PATH environment variable is now
      done with the correct delimiter character.
      12e3ac04
    • Julius Goryavsky's avatar
      MDEV-18863: Galera SST scripts can't read [mysqldN] option groups · ff6d3075
      Julius Goryavsky authored
      Some users and some scripts (for example, mysqld_multi.sh) use special
      option groups with names like [mysqld1], [mysqld2], ..., [mysqldN].
      
      But SST scripts can't currently fully support these option groups.
      The only option group-related value it gets from the server is
      --defaults-group-suffix, if that option was set for mysqld when
      the server was started.
      
      However, the SST scripts does not get told by the server to read
      these option groups, so this means that the SST script will fail
      to read options like innodb-data-home-dir when it is in a option
      group like [mysqld1]...[mysqldN].
      
      Moreover, SST scripts ignore many parameters that can be passed
      to them explicitly and cannot transfer them further, for example,
      to the input of mariabackup utility. Ideally, we want to transfer
      all the parameters of the original mysqld call to utilities such
      as mariabackup, however the SST script does not receive these
      parameters from the server and therefore cannot transfer them to
      mariabackup.
      
      To correct these shortcomings, we need to transfer to the scripts
      all of the parameters of the original mysqld call, and in the SST
      scripts themselves provide for the transfer all of these parameters
      to utilities such as mariabackup. To prevent these parameters from
      mixing with the script's own parameters, they should be transferred
      to SST script after the special option "--mysqld-args", followed by
      the string argument with the original parameters, as it received by
      the mysqld call at the time of launch (further all these parameters
      will be passed to mariabackup, for example).
      
      In addition, the SST scripts themselves must be refined so that
      they can read the parameters from the user-selected group, not just
      from the global mysqld configuration group. And also so that they
      can receive the parameters (which important for their work) as
      command-line arguments.
      ff6d3075
    • Julius Goryavsky's avatar
      MDEV-18863: Galera SST scripts can't read [mysqldN] option groups · 457dc9d6
      Julius Goryavsky authored
      Some users and some scripts (for example, mysqld_multi.sh) use special
      option groups with names like [mysqld1], [mysqld2], ..., [mysqldN].
      
      But SST scripts can't currently fully support these option groups.
      The only option group-related value it gets from the server is
      --defaults-group-suffix, if that option was set for mysqld when
      the server was started.
      
      However, the SST scripts does not get told by the server to read
      these option groups, so this means that the SST script will fail
      to read options like innodb-data-home-dir when it is in a option
      group like [mysqld1]...[mysqldN].
      
      Moreover, SST scripts ignore many parameters that can be passed
      to them explicitly and cannot transfer them further, for example,
      to the input of mariabackup utility. Ideally, we want to transfer
      all the parameters of the original mysqld call to utilities such
      as mariabackup, however the SST script does not receive these
      parameters from the server and therefore cannot transfer them to
      mariabackup.
      
      To correct these shortcomings, we need to transfer to the scripts
      all of the parameters of the original mysqld call, and in the SST
      scripts themselves provide for the transfer all of these parameters
      to utilities such as mariabackup. To prevent these parameters from
      mixing with the script's own parameters, they should be transferred
      to SST script after the special option "--mysqld-args", followed by
      the string argument with the original parameters, as it received by
      the mysqld call at the time of launch (further all these parameters
      will be passed to mariabackup, for example).
      
      In addition, the SST scripts themselves must be refined so that
      they can read the parameters from the user-selected group, not just
      from the global mysqld configuration group. And also so that they
      can receive the parameters (which important for their work) as
      command-line arguments.
      457dc9d6
    • Igor Babaev's avatar
      MDEV-20265 Unknown column in field list · e746f451
      Igor Babaev authored
      This patch corrects the fix of the patch for mdev-19421 that resolved
      the problem of parsing some embedded join expressions such as
        t1 join t2 left join t3 on t2.a=t3.a on t1.a=t2.a.
      Yet the patch contained a bug that prevented proper context analysis
      of the queries where such expressions were used together with comma
      separated table references in from clauses.
      e746f451
    • Marko Mäkelä's avatar
      MDEV-20377: Introduce cmake -DWITH_MSAN:BOOL=ON · 68e6c2d7
      Marko Mäkelä authored
      MemorySanitizer is a compile-time instrumentation layer in clang and GCC.
      Together with AddressSanitizer mostly makes the run-time instrumentation
      of Valgrind redundant. It is a little more tricky to set up, because
      running with uninstrumented libraries will lead into false positives.
      
      You will need an instrumented libc++, and you should use
      -stdlib=libc++ instead of the default libstdc++. To build the
      instrumented library, you can refer to
      https://github.com/google/sanitizers/wiki/MemorySanitizerLibcxxHowTo
      or you can adapt these steps that worked for me, for clang-8 version 8.0.1:
      
      cd /mariadb
      sudo apt source libc++-8-dev
      cd llvm-toolchain-8-8.0.1
      mkdir libc++msan; cd libc++msan
      cmake ../libcxx -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_SANITIZER=Memory \
      -DCMAKE_C_COMPILER=clang-8 -DCMAKE_CXX_COMPILER=clang++-8
      
      Then, in your MariaDB build directory, you have to compile with
      libc++ and bundled libraries, such as WITH_SSL=bundled, WITH_ZLIB=bundled.
      For uninstrumented system libraries, you will get false positives for
      uninitialized values. Like this:
      
      cmake -DWITH_MSAN=ON -DWITH_SSL=bundled -DWITH_ZLIB=bundled \
      -DCMAKE_CXX_FLAGS='-stdlib=libc++' ..
      
      Note: you should also add -O2 to the compiler options, or you may
      get crashes due to stack overflow.
      
      Finally, to run tests, you must replace libc++ with the instrumented one:
      
      LD_LIBRARY_PATH=/mariadb/llvm-toolchain-8-8.0.1/libc++msan/lib \
      MSAN_OPTIONS=abort_on_error=1 \
      ./mtr --big-test --parallel=auto --force --retry=0
      
      Failure to do so will report numerous false positives related to
      operations on std::string and the like.
      
      This is work in progress. Some issues will still have to be fixed
      for WITH_MSAN to be usable. See MDEV-20377 for details.
      68e6c2d7
    • Marko Mäkelä's avatar
      e7fda5db
  3. 16 Aug, 2019 7 commits
    • Alexander Barkov's avatar
      f987de71
    • Thirunarayanan Balathandayuthapani's avatar
      Problem: · dc91372d
      Thirunarayanan Balathandayuthapani authored
      ========
      During ibd file creation, InnoDB flushes the page0 without crypt
      information. During recovery, InnoDB encounters encrypted page read
      before initialising the crypt data of the tablespace. So it leads t
      corruption of page and doesn't allow innodb to start.
      
      Solution:
      =========
      Write crypt_data information in page0 while creating .ibd file creation.
      During recovery, crypt_data will be initialised while processing
      MLOG_FILE_NAME redo log record.
      dc91372d
    • Sergei Petrunia's avatar
      MDEV-19834 Selectivity of an equality condition discounted twice · ecdacf72
      Sergei Petrunia authored
      Update test results.
      ecdacf72
    • Alexander Barkov's avatar
      MDEV-15955 Assertion `field_types == 0 || field_types[field_pos] ==... · ec1f195e
      Alexander Barkov authored
      MDEV-15955 Assertion `field_types == 0 || field_types[field_pos] == MYSQL_TYPE_LONGLONG' failed in Protocol_text::store_longlong
      ec1f195e
    • Marko Mäkelä's avatar
      MDEV-19200: shutdown timeout on innodb.undo_truncate_recover · fe6eac0c
      Marko Mäkelä authored
      Optimize the test by dropping the table early and by using only
      one undo log thread, so that purge will be doing more useful work
      and less busy work of suspending and resuming the worker threads.
      
      The test used to cause shutdown timeout on 10.4 on buildbot, and
      for me locally when using --mysqld=--innodb-sync-debug.
      With these tweaks, it passes for me with --mysqld=--innodb-sync-debug.
      fe6eac0c
    • Marko Mäkelä's avatar
      MDEV-8588/MDEV-19740: Restore a condition · 555af003
      Marko Mäkelä authored
      It looks like the merge of MySQL 5.7.9 to MariaDB 10.2.2 conflicted with
      earlier changes that were made in MDEV-8588.
      
      row_search_mvcc(): If the page is corrupted, avoid invoking
      btr_cur_store_position(). The caller should not try to fetch
      the next record after a hard error.
      555af003
    • Jan Lindström's avatar
      MDEV-18778: mysql_tzinfo_to_sql does not work correctly in MariaDB Galera · fa740888
      Jan Lindström authored
      There were two problems:
      
      (1) If user wanted same time zone information on all nodes in the Galera
      cluster all updates were not replicated as time zone information was
      stored on MyISAM tables. This is fixed on Galera by altering time zone
      tables to InnoDB while they are modified.
      
      (2) If user wanted different time zone information to nodes in the Galera
      cluster TRUNCATE TABLE for time zone tables was replicated by Galera
      destroying time zone information from other nodes. This is fixed
      on Galera by introducing new option for mysql_tzinfo_to_sql_symlink
      tool --skip-write-binlog to disable Galera replication while
      time zone tables are modified.
      
      Changes to be committed:
      	modified:   mysql-test/r/mysql_tzinfo_to_sql_symlink.result
      	modified:   mysql-test/suite/wsrep/r/mysql_tzinfo_to_sql_symlink.result
      	new file:   mysql-test/suite/wsrep/r/mysql_tzinfo_to_sql_symlink_skip.result
      	new file:   mysql-test/suite/wsrep/t/mysql_tzinfo_to_sql_symlink_skip.test
      	modified:   sql/tztime.cc
      fa740888
  4. 15 Aug, 2019 5 commits
  5. 14 Aug, 2019 2 commits
    • Sujatha's avatar
      MDEV-20348: DROP TABLE IF EXISTS killed on master but was replicated · 29e560cd
      Sujatha authored
      Problem:
      =======
      DROP TABLE IF EXISTS was killed. The table still exists on
      the master but the DDL was still logged.
      
      Analysis:
      =========
      During the execution of DROP TABLE command "ha_delete_table" call is invoked
      to delete the table. If the query is killed at this point, the kill command
      is not handled within the code. This results in two issues.
      1) The table which is not dropped also gets written into the binary log.
      2) The code continues further upon receiving 'KILL QUERY'.
      
      Fix:
      ===
      Upon receiving the KILL command the query should stop its current execution.
      Tables which were successfully dropped prior to KILL command should be
      included in the binary log.
      29e560cd
    • Aleksey Midenkov's avatar
      MDEV-20301 InnoDB's MVCC has O(N^2) behaviors · 2347ffd8
      Aleksey Midenkov authored
      If there're multiple row versions in InnoDB, reading one row from PK
      may have O(N) complexity and reading from secondary keys may have
      O(N^2) complexity.
      
      The problem occurs when there are many pending versions of the same
      row, meaning that the primary key is the same, but a secondary key is
      different.  The slowdown occurs when the secondary index is
      traversed. This patch creates a helper class for the function
      row_sel_get_clust_rec_for_mysql() which can remember and re-use
      cached_clust_rec & cached_old_vers so that rec_get_offsets() does not
      need to be called over and over for the clustered record.
      
      Corrections by Kevin Lewis <kevin.lewis@oracle.com>
      
      MDEV-20341 Unstable innodb.innodb_bug14704286
      
      Removed test that tested the ability of interrupting long query which
      is not long anymore.
      2347ffd8
  6. 13 Aug, 2019 11 commits