1. 18 Mar, 2019 3 commits
    • Marko Mäkelä's avatar
      1d728a98
    • Marko Mäkelä's avatar
      Post-merge fix after 0508d327 · e3618a33
      Marko Mäkelä authored
      e3618a33
    • sysprg's avatar
      MDEV-17262: mysql crashed on galera while node rejoined cluster (#895) · 26432e49
      sysprg authored
      This patch contains a fix for the MDEV-17262/17243 issues and
      new mtr test.
      
      These issues (MDEV-17262/17243) have two reasons:
      
      1) After an intermediate commit, a transaction loses its status
      of "transaction that registered in the MySQL for 2pc coordinator"
      (in the InnoDB) due to the fact that since version 10.2 the
      write_row() function (which located in the ha_innodb.cc) does
      not call trx_register_for_2pc(m_prebuilt->trx) during the processing
      of split transactions. It is necessary to restore this call inside
      the write_row() when an intermediate commit was made (for a split
      transaction).
      
      Similarly, we need to set the flag of the started transaction
      (m_prebuilt->sql_stat_start) after intermediate commit.
      
      The table->file->extra(HA_EXTRA_FAKE_START_STMT) called from the
      wsrep_load_data_split() function (which located in sql_load.cc)
      will also do this, but it will be too late. As a result, the call
      to the wsrep_append_keys() function from the InnoDB engine may be
      lost or function may be called with invalid transaction identifier.
      
      2) If a transaction with the LOAD DATA statement is divided into
      logical mini-transactions (of the 10K rows) and binlog is rotated,
      then in rare cases due to the wsrep handler re-registration at the
      boundary of the split, the last portion of data may be lost. Since
      splitting of the LOAD DATA into mini-transactions is technical,
      I believe that we should not allow these mini-transactions to fall
      into separate binlogs. Therefore, it is necessary to prohibit the
      rotation of binlog in the middle of processing LOAD DATA statement.
      
      https://jira.mariadb.org/browse/MDEV-17262 and
      https://jira.mariadb.org/browse/MDEV-17243
      26432e49
  2. 16 Mar, 2019 1 commit
  3. 15 Mar, 2019 7 commits
  4. 14 Mar, 2019 7 commits
    • Sergei Golubchik's avatar
      fix gcc 8 compiler warnings · 3d2d060b
      Sergei Golubchik authored
      There were two newly enabled warnings:
      1. cast for a function pointers. Affected sql_analyse.h, mi_write.c
         and ma_write.cc, mf_iocache-t.cc, mysqlbinlog.cc, encryption.cc, etc
      
      2. memcpy/memset of nontrivial structures. Fixed as:
      * the warning disabled for InnoDB
      * TABLE, TABLE_SHARE, and TABLE_LIST got a new method reset() which
        does the bzero(), which is safe for these classes, but any other
        bzero() will still cause a warning
      * Table_scope_and_contents_source_st uses `TABLE_LIST *` (trivial)
        instead of `SQL_I_List<TABLE_LIST>` (not trivial) so it's safe to
        bzero now.
      * added casts in debug_sync.cc and sql_select.cc (for JOIN)
      * move assignment method for MDL_request instead of memcpy()
      * PARTIAL_INDEX_INTERSECT_INFO::init() instead of bzero()
      * remove constructor from READ_RECORD() to make it trivial
      * replace some memcpy() with c++ copy assignments
      3d2d060b
    • Alexander Barkov's avatar
    • Monty's avatar
      Fixed bug in redo handling of batch insert in Aria · bb8c82c6
      Monty authored
      The symptom of the bug was that one got the following in
      the aria recovery log:
      "Table 'xxx', id 57, has create_rename_lsn (1,0x12dee) more recent than LOGREC_FILE_ID's LSN (1,0x12dc4), ignoring open request"
      
      After this all future redo entries was marked with
      "For table of short id 57, table skipped, so skipping record"
      
      Analyze:
      When ending batch insert, create_rename_lsn for the table
      is updated to signal that earlier redo entries for the
      table can't be applied. The problem was that future redo
      entries was also ignored as redo code assumed they where
      for the old table.
      
      Fixed by calling translog_dessign_id, which causes
      future redo entries to be seen as belonging to the
      updated table.
      bb8c82c6
    • Monty's avatar
      Fixed compiler warning in connect engine · f2f40a17
      Monty authored
      f2f40a17
    • Marko Mäkelä's avatar
      Datafile::validate_first_page(): Change some ERROR to Note · d3afdb1e
      Marko Mäkelä authored
      On startup, if the InnoDB doublewrite buffer can be used to
      recover a corrupted page, raising an ERROR about a recoverable
      error seems inappropriate. Issue Note instead, and adjust
      tests accordingly.
      
      Also, correctly validate the tablespace ID in the files.
      d3afdb1e
    • Alexander Barkov's avatar
      Tests for MDEV-18667 ASAN heap-use-after-free in make_date_time /... · 49c49e63
      Alexander Barkov authored
      Tests for MDEV-18667 ASAN heap-use-after-free in make_date_time / Arg_comparator::compare_string / Item_func_nullif::compare
      
      The patch for MDEV-14926 fixed MDEV-18667 as well. Adding tests only.
      49c49e63
    • Alexander Barkov's avatar
      MDEV-14926 AddressSanitizer: heap-use-after-free in make_date_time on weird... · cb66cdc6
      Alexander Barkov authored
      MDEV-14926 AddressSanitizer: heap-use-after-free in make_date_time on weird combination of functions
      cb66cdc6
  5. 13 Mar, 2019 7 commits
    • Alexander Barkov's avatar
    • Marko Mäkelä's avatar
      Remove references to MySQL 5.7 native InnoDB partitioning · e63f6216
      Marko Mäkelä authored
      The native InnoDB partitioning was never enabled in MariaDB.
      Remove some declarations and comments referring to it.
      e63f6216
    • Marko Mäkelä's avatar
      MDEV-18836 ASAN: heap-use-after-free after TRUNCATE · 56304875
      Marko Mäkelä authored
      row_drop_tables_for_mysql_in_background(): Copy the table name
      before closing the table handle, to avoid heap-use-after-free if
      another thread succeeds in dropping the table before
      row_drop_table_for_mysql_in_background() completes the table name lookup.
      
      dict_mem_create_temporary_tablename(): With innodb_safe_truncate=ON
      (the default), generate a simple, unique, collision-free table name
      using only the id, no pseudorandom component. This is safe, because
      on startup, we will drop any #sql tables that might exist in InnoDB.
      This is a backport from 10.3. It should have been backported already
      as part of backporting MDEV-14717,MDEV-14585 which were prerequisites
      for the MDEV-13564 backup-friendly TRUNCATE TABLE.
      This seems to reduce the chance of table creation failures in
      ha_innobase::truncate().
      
      ha_innobase::truncate(): Do not invoke close(), but instead
      mimic it, so that we can restore to the original table handle
      in case opening the truncated copy of the table failed.
      56304875
    • Marko Mäkelä's avatar
      Add an end-of-tests marker to ease merges · ec24dd0b
      Marko Mäkelä authored
      ec24dd0b
    • Jan Lindström's avatar
      MDEV-14033: wsrep_on=off + binlog = mixed on MariaDB 10.2.9 · 691c3069
      Jan Lindström authored
      If wsrep provider (i.e. galera library) is defined but wsrep_on=OFF
      we should not force row binlog row format.
      691c3069
    • Jan Lindström's avatar
      MDEV-18577: Indexes problem on import dump SQL · d0ebb155
      Jan Lindström authored
      Problem was that we skipped background persistent statistics calculation
      on applier nodes if thread is marked as high priority (a.k.a BF).
      However, on applier nodes all DDL which is replicate will be executed
      as high priority i.e BF.
      
      Fixed by allowing background persistent statistics calculation on
      applier nodes even when thread is marked as BF. This could lead
      BF lock waits but for queries on that node needs that statistics.
      d0ebb155
    • Sergey Vojtovich's avatar
      MDEV-14984 - regression in connect performance · 20928e2e
      Sergey Vojtovich authored
      Removed redundant plugin_thdvar_cleanup() from end_connection(): called by
      THD::free_connection(), which always follows end_connection().
      
      Saves at least one lock(LOCK_plugin) and one
      rdlock(LOCK_system_variables_hash).
      
      Benchmarked on a 2socket/20core/40threads Broadwell system using sysbench
      connect brencmark @40 threads (with select 1 disabled).
      
      10.2 shows moderate improvement: 136219.93 -> 137766.31 CPS.
      10.3 is improvement is somewhat better: 93018.29 -> 101379.77 CPS.
      
      Also backported MyRocks memory leak fix from 10.4, which turned out to
      be unrelated.
      20928e2e
  6. 12 Mar, 2019 15 commits
    • Marko Mäkelä's avatar
      Revert a part of commit 676f43da · aa605846
      Marko Mäkelä authored
      We do want to ignore InnoDB's internal #sql-ib*.ibd at shutdown,
      because those tables will be dropped on the next startup.
      Failure to filter out these table names occasionally causes some
      unwanted output for tests that restart InnoDB soon after dropping
      or truncating tables, for example innodb.recovery_shutdown.
      aa605846
    • Marko Mäkelä's avatar
      TruncateLogParser::scan(): Simplify string operations · ee17f728
      Marko Mäkelä authored
      This also fixes -Wstringop-truncation that GCC 8 issued for strncpy().
      ee17f728
    • Marko Mäkelä's avatar
      Silence GCC 8 -Wno-class-memaccess · 945edfff
      Marko Mäkelä authored
      945edfff
    • Alexander Barkov's avatar
      Tests for MDEV-18892 Regression in slow log and admin statements · 90ce95de
      Alexander Barkov authored
      The patch for MDEV-15945 fixed MDEV-18892. Adding tests only.
      90ce95de
    • Varun Gupta's avatar
      MDEV-18502: Server crash in find_field_in_tables upon 2nd execution of SP... · fe8cf7f1
      Varun Gupta authored
      MDEV-18502: Server crash in find_field_in_tables upon 2nd execution of SP which causes ER_WRONG_GROUP_FIELD
      
      Fixed by the commit cb11b3fb.
      Adding the test case for this issue.
      fe8cf7f1
    • Varun Gupta's avatar
      MDEV-18431: Select max + row_number giving incorrect result · a4e58882
      Varun Gupta authored
      The issue here was when we had a subquery and a window function in an expression in
      the select list then subquery was getting computed after window function computation.
      This resulted in incorrect results because the subquery was correlated and the fields
      in the subquery was pointing to the base table instead of the temporary table.
      
      The approach to fix this was to have an additional field in the temporary table
      for the subquery and to execute the subquery before window function execution.
      After execution the values for the subquery were stored in the temporary table
      and then when we needed to calcuate the expression, all we do is read the values
      from the temporary table for the subquery.
      a4e58882
    • Jan Lindström's avatar
      Test cleanups. · 3b2a5685
      Jan Lindström authored
      3b2a5685
    • Marko Mäkelä's avatar
      Add an end-of-tests marker to ease merges · f72760df
      Marko Mäkelä authored
      f72760df
    • Sergei Golubchik's avatar
      MDEV-15945 --ps-protocol does not test some queries · a62e9a83
      Sergei Golubchik authored
      Make mysqltest to use --ps-protocol more
      
      use prepared statements for everything that server supports
      with the exception of CALL (for now).
      
      Fix discovered test failures and bugs.
      
      tests:
      * PROCESSLIST shows Execute state, not Query
      * SHOW STATUS increments status variables more than in text protocol
      * multi-statements should be avoided (see tests with a wrong delimiter)
      * performance_schema events have different names in --ps-protocol
      * --enable_prepare_warnings
      
      mysqltest.cc:
      * make sure run_query_stmt() doesn't crash if there's
        no active connection (in wait_until_connected_again.inc)
      * prepare all statements that server supports
      
      protocol.h
      * Protocol_discard::send_result_set_metadata() should not send
        anything to the client.
      
      sql_acl.cc:
      * extract the functionality of getting the user for SHOW GRANTS
        from check_show_access(), so that mysql_test_show_grants() could
        generate the correct column names in the prepare step
      
      sql_class.cc:
      * result->prepare() can fail, don't ignore its return value
      * use correct number of decimals for EXPLAIN columns
      
      sql_parse.cc:
      * discard profiling for SHOW PROFILE. In text protocol it's done in
        prepare_schema_table(), but in --ps it is called on prepare only,
        so nothing was discarding profiling during execute.
      * move the permission checking code for SHOW CREATE VIEW to
        mysqld_show_create_get_fields(), so that it would be called during
        prepare step too.
      * only set sel_result when it was created here and needs to be
        destroyed in the same block. Avoid destroying lex->result.
      * use the correct number of tables in check_show_access(). Saying
        "as many as possible" doesn't work when first_not_own_table isn't
        set yet.
      
      sql_prepare.cc:
      * use correct user name for SHOW GRANTS columns
      * don't ignore verbose flag for SHOW SLAVE STATUS
      * support preparing REVOKE ALL and ROLLBACK TO SAVEPOINT
      * don't ignore errors from thd->prepare_explain_fields()
      * use select_send result for sending ANALYZE and EXPLAIN, but don't
        overwrite lex->result, because it might be needed to issue execute-time
        errors (select_dumpvar - too many rows)
      
      sql_show.cc:
      * check grants for SHOW CREATE VIEW here, not in mysql_execute_command
      
      sql_view.cc:
      * use the correct function to check privileges. Old code was doing
        check_access() for thd->security_ctx, which is invoker's sctx,
        not definer's sctx. Hide various view related errors from the invoker.
      
      sql_yacc.yy:
      * initialize lex->select_lex for LOAD, otherwise it'll contain garbage
        data that happen to fail tests with views in --ps (but not otherwise).
      a62e9a83
    • Sergei Golubchik's avatar
      cleanup: misc · 22f1cf92
      Sergei Golubchik authored
      22f1cf92
    • Sergei Golubchik's avatar
      pass the slow logging information in thd->query_plan_flags · dda2e940
      Sergei Golubchik authored
      This solves the following issues:
      
      * unlike lex->m_sql_cmd and lex->sql_command, thd->query_plan_flags
        is not reset in Prepared_statement::execute, it survives
        till the log_slow_statement(), so slow logging behaves correctly in --ps
      
      * using thd->query_plan_flags for both slow_log_filter and
        log_slow_admin_statements means the definition of "admin" statements
        for the slow log is the same no matter how it is filtered out.
      dda2e940
    • Oleksandr Byelkin's avatar
      bc8ae50e
    • Oleksandr Byelkin's avatar
      MDEV-11975: SQLCOM_PREPARE of EXPLAIN & ANALYZE statement do not return correct metadata info · 83123412
      Oleksandr Byelkin authored
      Added metadate info after prepare EXPLAIN/ANALYZE.
      83123412
    • Oleksandr Byelkin's avatar
      MDEV-11966: Impossible to execute prepared ANALYZE SELECT · 01c49e66
      Oleksandr Byelkin authored
      Prepare os ANALYZE now respond as EXPLAIN.
      01c49e66
    • Marko Mäkelä's avatar
      MDEV-18902 Uninitialized variable in recv_parse_log_recs() · bef947b4
      Marko Mäkelä authored
      recv_parse_log_recs(): Do not compare type if ptr==end_ptr
      (we have reached the end of the redo log parsing buffer),
      because it will not have been correctly initialized in that case.
      bef947b4