1. 06 Dec, 2017 10 commits
    • Marko Mäkelä's avatar
      Merge 10.2 into bb-10.2-ext · ce076765
      Marko Mäkelä authored
      ce076765
    • Marko Mäkelä's avatar
      Follow-up fix to MDEV-13201 Assertion `srv_undo_sources || ...` failed on... · 77fb7ccb
      Marko Mäkelä authored
      Follow-up fix to MDEV-13201 Assertion `srv_undo_sources || ...` failed on shutdown during DDL operation
      
      Introduce the debug flag trx_t::persistent_stats to suppress the
      assertion for the updates of persistent statistics during fast
      shutdown.
      
      dict_stats_exec_sql(): Do execute the statement even though shutdown
      has been initiated.
      77fb7ccb
    • Marko Mäkelä's avatar
      MDEV-14511 Use fewer transactions for updating InnoDB persistent statistics · 7dc6066d
      Marko Mäkelä authored
      dict_stats_exec_sql(): Expect the caller to always provide a transaction.
      Remove some redundant assertions. The caller must hold dict_sys->mutex,
      but holding dict_operation_lock is only necessary for accessing
      data dictionary tables, which we are not accessing.
      
      dict_stats_save_index_stat(): Acquire dict_sys->mutex
      for invoking dict_stats_exec_sql().
      
      dict_stats_save(), dict_stats_update_for_index(), dict_stats_update(),
      dict_stats_drop_index(), dict_stats_delete_from_table_stats(),
      dict_stats_delete_from_index_stats(), dict_stats_drop_table(),
      dict_stats_rename_in_table_stats(), dict_stats_rename_in_index_stats(),
      dict_stats_rename_table(): Use a single caller-provided
      transaction that is started and committed or rolled back by the caller.
      
      dict_stats_process_entry_from_recalc_pool(): Let the caller provide
      a transaction object.
      
      ha_innobase::open(): Pass a transaction to dict_stats_init().
      
      ha_innobase::create(), ha_innobase::discard_or_import_tablespace():
      Pass a transaction to dict_stats_update().
      
      ha_innobase::rename_table(): Pass a transaction to
      dict_stats_rename_table(). We do not use the same transaction
      as the one that updated the data dictionary tables, because
      we already released the dict_operation_lock. (FIXME: there is
      a race condition; a lock wait on SYS_* tables could occur
      in another DDL transaction until the data dictionary transaction
      is committed.)
      
      ha_innobase::info_low(): Pass a transaction to dict_stats_update()
      when calculating persistent statistics.
      
      alter_stats_norebuild(), alter_stats_rebuild(): Update the
      persistent statistics as well. In this way, a single transaction
      will be used for updating the statistics of a whole table, even
      for partitioned tables.
      
      ha_innobase::commit_inplace_alter_table(): Drop statistics for
      all partitions when adding or dropping virtual columns, so that
      the statistics will be recalculated on the next handler::open().
      This is a refactored version of Oracle Bug#22469660 fix.
      
      RecLock::add_to_waitq(), lock_table_enqueue_waiting():
      Do not allow a lock wait to occur for updating statistics
      in a data dictionary transaction, such as DROP TABLE. Instead,
      return the previously unused error code DB_QUE_THR_SUSPENDED.
      
      row_merge_lock_table(), row_mysql_lock_table(): Remove dead code
      for handling DB_QUE_THR_SUSPENDED.
      
      row_drop_table_for_mysql(), row_truncate_table_for_mysql():
      Drop the statistics as part of the data dictionary transaction.
      After TRUNCATE TABLE, the statistics will be recalculated on
      subsequent ha_innobase::open(), similar to how the logic after
      the above-mentioned Oracle Bug#22469660 fix in
      ha_innobase::commit_inplace_alter_table() works.
      
      btr_defragment_thread(): Use a single transaction object for
      updating defragmentation statistics.
      
      dict_stats_save_defrag_stats(), dict_stats_save_defrag_stats(),
      dict_stats_process_entry_from_defrag_pool(),
      dict_defrag_process_entries_from_defrag_pool(),
      dict_stats_save_defrag_summary(), dict_stats_save_defrag_stats():
      Add a parameter for the transaction.
      
      dict_stats_empty_table(): Make public. This will be called by
      row_truncate_table_for_mysql() after dropping persistent statistics,
      to clear the memory-based statistics as well.
      7dc6066d
    • Sergei Petrunia's avatar
      MDEV-14563: Wrong query plan for query with no PK · 2c1e4d4d
      Sergei Petrunia authored
      Part #2: Don't use the new code for the clustered PK, it is handled
      in the special way right above.
      2c1e4d4d
    • Sergei Petrunia's avatar
      MDEV-14563: Wrong query plan for query with no PK · a6254e5e
      Sergei Petrunia authored
      TABLE_SHARE::init_from_binary_frm_image() calls handler_file->index_flags()
      before it has set TABLE_SHARE::primary_key (it is 0 while it should be
      MAX_KEY in my example).
      This causes MyRocks to report wrong index flags (it thinks it's a PK while
      it is not), which causes invalid query plans later on.
      
      Do the only thing that seems feasible: adjust field->part_of key to have
      correct value in ha_rocksdb::open.
      a6254e5e
    • Sergei Petrunia's avatar
      MDEV-14433: RocksDB may show empty or incorrect output with rocksdb_strict_collation_check=off · c3803914
      Sergei Petrunia authored
      Part#1: Set field->part_of_key correctly for PK fields.
      c3803914
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      b1cd5ca2
    • Marko Mäkelä's avatar
      e9bc0f75
  2. 05 Dec, 2017 3 commits
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · 1d526f31
      Marko Mäkelä authored
      1d526f31
    • Marko Mäkelä's avatar
      MDEV-14587 dict_stats_process_entry_from_defrag_pool() fails to call... · 63cbb982
      Marko Mäkelä authored
      MDEV-14587 dict_stats_process_entry_from_defrag_pool() fails to call dict_table_close() when index==NULL
      
      dict_stats_process_entry_from_defrag_pool(): Simplify the logic,
      and always call dict_table_close() when dict_table_open() returned
      a non-NULL handle.
      63cbb982
    • Marko Mäkelä's avatar
      MDEV-13670/MDEV-14550 Error log flood : "InnoDB: page_cleaner: 1000ms... · d1ab8903
      Marko Mäkelä authored
      MDEV-13670/MDEV-14550 Error log flood :  "InnoDB: page_cleaner: 1000ms intended loop took N ms. The settings might not be optimal."
      
      Silence the error log output that was introduced in MySQL 5.7
      (MariaDB 10.2.2) if log_warnings=2 or less.
      
      We should still figure out what these messages really indicate
      and how to solve the problems.
      
      pc_sleep_if_needed(): Add a parameter for the current time,
      so that there will be fewer successive calls to ut_time_ms()
      with no I/O between them.
      
      buf_flush_page_cleaner_coordinator(): Exit the first loop
      whenever shutdown has been requested. At the start of the loop,
      call ut_time_ms() only once. Do not display the message if
      log_warnings=2 or less.
      d1ab8903
  3. 04 Dec, 2017 2 commits
  4. 03 Dec, 2017 2 commits
    • Monty's avatar
      MDEV-10688 rpl.rpl_row_log_innodb failed in buildbot · d7b0b8dd
      Monty authored
      Problem was that Binlog_checkpoint can happen at random times.
      Fixed by not write binlog_checkpoint for the rpl_log test.
      
      Other things:
      - Removed not used variable "$keep_gtid_events"
      - Added option for show_binlog_events to skip binlog_checkpoint
      d7b0b8dd
    • Monty's avatar
      resolve_stack_dump updated to match latest stack trace format · d9188ada
      Monty authored
      Originally only symbols withing [] where resolved. Now we resolve
      symbols also withing (+...)
      
      To make it easier to see where the resolved symbol comes from, we
      resolve the symbol 'in place' instead of just printing the resolved
      symbol alone.
      d9188ada
  5. 01 Dec, 2017 3 commits
  6. 30 Nov, 2017 1 commit
  7. 29 Nov, 2017 5 commits
    • Vladislav Vaintroub's avatar
    • Vladislav Vaintroub's avatar
      MDEV-14536 : In mariabackup, reread redo log blocks , if checksum mismatch · bf6d11c4
      Vladislav Vaintroub authored
      is detected.
      
      The checksum mismatch can be due to partial write, thus retry the read
      bf6d11c4
    • Alexander Barkov's avatar
    • Vicențiu Ciorbaru's avatar
      MDEV-13384: "window" seems like a reserved column name but it's not listed as one · 8cee2f13
      Vicențiu Ciorbaru authored
      Window is a reserved keyword according to SQL Standard 2016. However, we
      can make the grammar slightly flexible by allowing WINDOW keyword everywhere
      except table aliases. Change yacc grammar to separate between all keywords
      and table_alias keywords.
      8cee2f13
    • Alexander Barkov's avatar
      MDEV-14467 Item_param: replace {INT|DECIMAL|REAL|STRING|TIME}_VALUE with Type_handler · e01d33d7
      Alexander Barkov authored
      1. Removing data type specific constants from enum_item_param_state,
         adding SHORT_DATA_VALUE instead.
      2. Replacing tests for Item_param::state for the removed constants to
         tests for Type_handler::cmp_type() against {INT|REAL|TIME|DECIAML}_RESULT.
         Deriving Item_param::PValue from Type_handler_hybrid_field_type,
         to store the data type handler of the current value of the parameter.
      
      3. Moving Item_param::decimal_value and Item_param::str_value_ptr
         to Item_param::PValue. Adding Item_param::PValue::m_string
         and changing Item_param to use it to store string values,
         instead of Item::str_value. The intent is to replace Item_param::value
         to a st_value based implementation in the future, to avoid duplicate code.
         Adding a sub-class Item::PValue_simple, to implement
         Item_param::PValue::swap() easier.
         Remaming Item_basic_value::fix_charset_and_length_from_str_value()
         to fix_charset_and_length() and adding the "CHARSET_INFO" pointer
         parameter, instead of getting it directly from item->str_value.charset().
         Changing Item_param to pass value.m_string.charset() instead
         of str_value.charset().
         Adding a String argument to the overloaded
         fix_charset_and_length_from_str_value() and changing Item_param
         to pass value.m_string instead of str_value.
      
      4. Replacing the case in Item_param::save_in_field() to a call
         for Type_handler::Item_save_in_field().
      
      5. Adding new methods into Item_param::PValue:
         val_real(), val_int(), val_decimal(), val_str().
         Changing the corresponding Item_param methods
         to use these new Item_param::PValue methods
         internally. Adding a helper method
         Item_param::can_return_value() and removing
         duplicate code in Item_param::val_xxx().
      
      6. Removing value.set_handler() from Item_param::set_conversion()
         and Type_handler_xxx::Item_param_set_from_value().
         It's now done inside Item_param::set_param_func(),
         Item_param::set_value() and Item_param::set_limit_clause_param().
      
      7. Changing Type_handler_int_result::Item_param_set_from_value()
         to set max_length using attr->max_length instead of
         MY_INT64_NUM_DECIMAL_DIGITS, to preserve the data type
         of the assigned expression more precisely.
      
      8. Adding Type_handler_hybrid_field_type::swap(),
         using it in Item_param::PValue::swap().
      
      9. Moving the data-type specific code from
         Item_param::query_val_str(), Item_param::eq(),
         Item_param::clone_item() to
         Item_param::value_query_type_str(),
         Item_param::value_eq(), Item_param::value_clone_item(),
         to split the "state" dependent code and
         the data type dependent code.
         Later we'll split the data type related code further
         and add new methods in Type_handler. This will be done
         after we replace Item_param::PValue to st_value.
      
      10. Adding asserts into set_int(), set_double(), set_decimal(),
         set_time(), set_str(), set_longdata() to make sure that
         the value set to Item_param corresponds to the previously
         set data type handler.
      
      11. Adding tests into t/ps.test and suite/binlog/t/binlog_stm_ps.test,
         to cover Item_param::print() and Item_param::append_for_log()
         for LIMIT clause parameters.
         Note, the patch does not change the behavior covered by the new
         tests. Adding for better code coverage.
      
      12. Adding tests for more precise integer data type in queries like this:
          EXECUTE IMMEDIATE
           'CREATE OR REPLACE TABLE t1 AS SELECT 999999999 AS a,? AS b'
            USING 999999999;
          The explicit integer literal and the same integer literal
          passed as a PS parameter now produce columns of the same data type.
          Re-recording old results in ps.result, gis.result, func_hybrid_type.result
          accordingly.
      e01d33d7
  8. 28 Nov, 2017 4 commits
  9. 27 Nov, 2017 1 commit
  10. 24 Nov, 2017 9 commits
    • Vladislav Vaintroub's avatar
      Fix warning. · 414d3a3e
      Vladislav Vaintroub authored
      414d3a3e
    • Sergey Vojtovich's avatar
      Fixed build failure with PFS disabled · 4cc20c88
      Sergey Vojtovich authored
      mariabackup fails to builds with PFS disabled. The reason was missing include,
      which was included by PFS otherwise.
      4cc20c88
    • Vladislav Vaintroub's avatar
      Merge remote-tracking branch 'origin/10.1' into 10.2 · 9cefffda
      Vladislav Vaintroub authored
      # Conflicts:
      #	storage/innobase/include/os0file.h
      9cefffda
    • Vladislav Vaintroub's avatar
      40756c91
    • Marko Mäkelä's avatar
      Merge 10.1 into 10.2 · f1cc6e38
      Marko Mäkelä authored
      f1cc6e38
    • Marko Mäkelä's avatar
      MDEV-14499 Mariabackup 10.2 fails to back up a multi-file InnoDB system tablespace · 6979d204
      Marko Mäkelä authored
      When Mariabackup is invoked on an instance that uses a multi-file
      InnoDB system tablespace, it may fail to other files of the system
      tablespace than the first one.
      This was revealed by the MDEV-14447 test case.
      The offending code is assuming that the first page of each data file
      is page 0. But, in multi-file system tablespaces that is not the case.
      
      xb_fil_cur_open(): Instead of re-reading the first page of the file,
      rely on the fil_space_t metadata that already exists in memory.
      
      xb_get_space_flags(): Remove.
      6979d204
    • Vladislav Vaintroub's avatar
      59150361
    • Alexander Barkov's avatar
      MDEV-14494 Move set_param_xxx() in sql_prepare.cc to methods in Item_param and Type_handler · 6aedbf40
      Alexander Barkov authored
      - sql_prepare.cc: Moving functions set_param_xxx() as
        methods to Item_param
      
      - Replacing a pointer to a function Item_param::set_param_func
        to Type_handler based implementation:
        Item_param::value now derives from Type_handler_hybrid_field_type.
        Adding new virtual methods Type_handler::Item_param_setup_conversion()
        and Type_handler::Item_param_set_param_func()
      
      - Moving declaration of some Item_param members  from "public:" to "private:"
        (CONVERSION_INFO, value, decimal_value)
      
      - Adding a new method Item_param::set_limit_clause_param(),
        to share duplicate code, as well as to encapsulate
        Item_param::value.
      
      - Adding Item_param::setup_conversion_string() and
        Item_param::setup_conversion_blob() to share
        the code for binding from a client value
        (mysql_stmt_bind_param), and for binding from
        an expression (Item).
      
      - Removing two different functions set_param_str_or_null()
        and set_param_str(). Adding a common method Item_param::set_param_str().
        Item_param::m_empty_string_is_null, used by Item_param::set_param_str().
      
      - Removing the call for setup_one_conversion_function() from
        insert_params_from_actual_params_with_log(). It's not needed,
        because the call for ps_param->save_in_param() makes sure
        to initialized all data type dependent members properly,
        by calling setup_conversion_string() from
        Type_handler_string_result::Item_param_set_from_value()
        and by calling setup_conversion_blob() from
        Type_handler_blob_common::Item_param_set_from_value()
      
      - Cleanup: removing multiplication to MY_CHARSET_BIN_MB_MAXLEN
        in a few places. It's 1 anyway, and will never change.
      6aedbf40
    • Vladislav Vaintroub's avatar
      MDEV-14483 Export _mysl_client_plugin_declaration from auth_gssapi_client.so · c5fffb33
      Vladislav Vaintroub authored
      Update C/C to include fix for this bug.
      c5fffb33