1. 21 Jun, 2017 1 commit
  2. 20 Jun, 2017 1 commit
  3. 19 Jun, 2017 10 commits
    • Vladislav Vaintroub's avatar
    • Vladislav Vaintroub's avatar
      MDEV-12709 : mariabackup - during backup phase read some innodb parameter · b9a326b6
      Vladislav Vaintroub authored
      using "show variables", rather than take the value from my.cnf.
      
      "show variables" is more accurate than my.cnf,it also works for parameters
      set on the mysqld command line, which is especially important for MTR.
      b9a326b6
    • Sergei Golubchik's avatar
    • Marko Mäkelä's avatar
      MDEV-12975 InnoDB redo log minimum size check uses detected file size instead... · d1e182d6
      Marko Mäkelä authored
      MDEV-12975 InnoDB redo log minimum size check uses detected file size instead of requested innodb_log_file_size
      
      log_calc_max_ages(): Use the requested size in the check, instead of
      the detected redo log size. The redo log will be resized at startup
      if it differs from what has been requested.
      d1e182d6
    • Marko Mäkelä's avatar
      MDEV-12975 InnoDB redo log minimum size check uses detected file size instead... · 5e4f4ec8
      Marko Mäkelä authored
      MDEV-12975 InnoDB redo log minimum size check uses detected file size instead of requested innodb_log_file_size
      
      log_calc_max_ages(): Use the requested size in the check, instead of
      the detected redo log size. The redo log will be resized at startup
      if it differs from what has been requested.
      5e4f4ec8
    • Alexander Barkov's avatar
      MDEV-10306 Wrong results with combination of CONCAT, SUBSTR and CONVERT in subquery · 3a37afec
      Alexander Barkov authored
      The bug happens because of a combination of unfortunate circumstances:
      
      1. Arguments args[0] and args[2] of Item_func_concat point recursively
      (through Item_direct_view_ref's) to the same Item_func_conv_charset.
      Both args[0]->args[0]->ref[0] and args[2]->args[0]->ref[0] refer to
      this Item_func_conv_charset.
      
      2. When Item_func_concat::args[0]->val_str() is called,
      Item_func_conv_charset::val_str() writes its result to
      Item_func_conc_charset::tmp_value.
      
      3. Then, for optimization purposes (to avoid copying),
      Item_func_substr::val_str() initializes Item_func_substr::tmp_value
      to point to the buffer fragment owned by Item_func_conv_charset::tmp_value
      Item_func_substr::tmp_value is returned as a result of
      Item_func_concat::args[0]->val_str().
      
      4. Due to optimization to avoid memory reallocs,
      Item_func_concat::val_str() remembers the result of args[0]->val_str()
      in "res" and further uses "res" to collect the return value.
      
      5. When Item_func_concat::args[2]->val_str() is called,
      Item_func_conv_charset::tmp_value gets overwritten (see #1),
      which effectively overwrites args[0]'s Item_func_substr::tmp_value (see #3),
      which effectively overwrites "res" (see #4).
      
      This patch does the following:
      
      a. Changes Item_func_conv_charset::val_str(String *str) to use
         tmp_value and str the other way around. After this change tmp_value
         is used to store a temporary result, while str is used to return the value.
         The fixes the second problem (without SUBSTR):
           SELECT CONCAT(t2,'-',t2) c2
             FROM (SELECT CONVERT(t USING latin1) t2 FROM t1) sub;
         As Item_func_concat::val_str() supplies two different buffers when calling
         args[0]->val_str() and args[2]->val_str(), in the new reduction the result
         created during args[0]->val_str() does not get overwritten by
         args[2]->val_str().
      
      b. Fixing the same problem in val_str() for similar classes
      
         Item_func_to_base64
         Item_func_from_base64
         Item_func_weight_string
         Item_func_hex
         Item_func_unhex
         Item_func_quote
         Item_func_compress
         Item_func_uncompress
         Item_func_des_encrypt
         Item_func_des_decrypt
         Item_func_conv_charset
         Item_func_reverse
         Item_func_soundex
         Item_func_aes_encrypt
         Item_func_aes_decrypt
         Item_func_buffer
      
      c. Fixing Item_func::val_str_from_val_str_ascii() the same way.
         Now Item_str_ascii_func::ascii_buff is used for temporary value,
         while the parameter passed to val_str() is used to return the result.
         This fixes the same problem when conversion (from ASCII to e.g. UCS2)
         takes place. See the ctype_ucs.test for example queries that returned
         wrong results before the fix.
      
      d. Some Item_func descendand classes had temporary String buffers
         (tmp_value and tmp_str), but did not really use them.
         Removing these temporary buffers from:
      
         Item_func_decode_histogram
         Item_func_format
         Item_func_binlog_gtid_pos
         Item_func_spatial_collection:
      
      e. Removing Item_func_buffer::tmp_value, because it's not used any more.
      
      f. Renaming Item_func_[un]compress::buffer to "tmp_value",
         for consistency with other classes.
      
      Note, this patch does not fix the following classes
      (although they have a similar problem):
      
         Item_str_conv
         Item_func_make_set
         Item_char_typecast
      
      They have a complex implementations and simple swapping between "tmp_value"
      and "str" won't work. These classes will be fixed separately.
      3a37afec
    • Marko Mäkelä's avatar
      Mariabackup: Remove the --stats option · 9a646c91
      Marko Mäkelä authored
      The option was basically duplicating InnoDB functionality.
      Persistent statistics can be accessed via the tables
      mysql.innodb_table_stats and mysql.innodb_index_stats.
      9a646c91
    • Marko Mäkelä's avatar
      cede2b6f
    • Marko Mäkelä's avatar
    • Marko Mäkelä's avatar
      Mariabackup: Remove the options --to-archived-lsn --innodb-log-arch-dir · fa70d077
      Marko Mäkelä authored
      These functions cannot possibly work in MariaDB 10.2, and it is
      uncertain if they really work in 10.1 either.
      fa70d077
  4. 18 Jun, 2017 3 commits
  5. 16 Jun, 2017 1 commit
  6. 15 Jun, 2017 5 commits
    • Vicențiu Ciorbaru's avatar
      MDEV-12666: CURRENT_ROLE() and DATABASE() does not work in a view · f0ad9340
      Vicențiu Ciorbaru authored
      The problem lies in how CURRENT_ROLE is defined. The
      Item_func_current_role inherits from Item_func_sysconst, which defines
      a safe_charset_converter to be a const_charset_converter.
      
      During view creation, if there is no role previously set, the current_role()
      function returns NULL.
      
      This is captured on item instantiation and the
      const_charset_converter call subsequently returns an Item_null.
      In turn, the function is replaced with Item_null and the view is
      then created with an Item_null instead of Item_func_current_role.
      
      Without this patch, the first SHOW CREATE VIEW from the testcase would
      have a where clause of WHERE role_name = NULL, while the second SHOW
      CREATE VIEW would show a correctly created view.
      
      The same applies for the DATABASE function, as it can change as well.
      
      There is an additional problem with CURRENT_ROLE() when used in a
      prepared statement. During prepared statement creation we used to set
      the string_value of the function to the current role as well as the
      null_value flag. During execution, if CURRENT_ROLE was not null, the
      null_value flag was never set to not-null during fix_fields.
      
      Item_func_current_user however can never be NULL so it did not show this
      problem in a view before. At the same time, the CURRENT_USER() can not
      be changed between prepared statement execution and creation so the
      implementation where the value is stored during fix_fields is
      sufficient.
      
      Note also that DATABASE() function behaves differently during prepared
      statements. See bug 25843 for details or commit
      7e0ad09e
      f0ad9340
    • Vicențiu Ciorbaru's avatar
      MDEV-10463: Granted as a whole to roles, databases are not show in SHOW DATABASES · 34da3be8
      Vicențiu Ciorbaru authored
      The problem lies in not checking role privileges as well during SHOW
      DATABASES command. This problem is also apparent for SHOW CREATE
      DATABASE command.
      
      Other SHOW COMMANDS make use of check_access, which in turn makes use of
      acl_get for both priv_user and priv_role parts, which allows them to
      function correctly.
      34da3be8
    • =Ian Gilfillan's avatar
      Update MariaDB Foundation sponsors · 2579b252
      =Ian Gilfillan authored
      2579b252
    • Marko Mäkelä's avatar
      Remove some fields from dict_table_t · 58f87a41
      Marko Mäkelä authored
      dict_table_t::thd: Remove. This was only used by btr_root_block_get()
      for reporting decryption failures, and it was only assigned by
      ha_innobase::open(), and never cleared. This could mean that if a
      connection is closed, the pointer would become stale, and the server
      could crash while trying to report the error. It could also mean
      that an error is being reported to the wrong client. It is better
      to use current_thd in this case, even though it could mean that if
      the code is invoked from an InnoDB background operation, there would
      be no connection to which to send the error message.
      
      Remove dict_table_t::crypt_data and dict_table_t::page_0_read.
      These fields were never read.
      
      fil_open_single_table_tablespace(): Remove the parameter "table".
      58f87a41
    • Marko Mäkelä's avatar
      88b96181
  7. 14 Jun, 2017 4 commits
  8. 13 Jun, 2017 3 commits
  9. 12 Jun, 2017 7 commits
  10. 09 Jun, 2017 3 commits
    • Marko Mäkelä's avatar
      MDEV-13039 innodb_fast_shutdown=0 may fail to purge all undo log · 417434f1
      Marko Mäkelä authored
      When a slow shutdown is performed soon after spawning some work for
      background threads that can create or commit transactions, it is possible
      that new transactions are started or committed after the purge has finished.
      This is violating the specification of innodb_fast_shutdown=0, namely that
      the purge must be completed. (None of the history of the recent transactions
      would be purged.)
      
      Also, it is possible that the purge threads would exit in slow shutdown
      while there exist active transactions, such as recovered incomplete
      transactions that are being rolled back. Thus, the slow shutdown could
      fail to purge some undo log that becomes purgeable after the transaction
      commit or rollback.
      
      srv_undo_sources: A flag that indicates if undo log can be generated
      or the persistent, whether by background threads or by user SQL.
      Even when this flag is clear, active transactions that already exist
      in the system may be committed or rolled back.
      
      innodb_shutdown(): Renamed from innobase_shutdown_for_mysql().
      Do not return an error code; the operation never fails.
      Clear the srv_undo_sources flag, and also ensure that the background
      DROP TABLE queue is empty.
      
      srv_purge_should_exit(): Do not allow the purge to exit if
      srv_undo_sources are active or the background DROP TABLE queue is not
      empty, or in slow shutdown, if any active transactions exist
      (and are being rolled back).
      
      srv_purge_coordinator_thread(): Remove some previous workarounds
      for this bug.
      
      innobase_start_or_create_for_mysql(): Set buf_page_cleaner_is_active
      and srv_dict_stats_thread_active directly. Set srv_undo_sources before
      starting the purge subsystem, to prevent immediate shutdown of the purge.
      Create dict_stats_thread and fts_optimize_thread immediately
      after setting srv_undo_sources, so that shutdown can use this flag to
      determine if these subsystems were started.
      
      dict_stats_shutdown(): Shut down dict_stats_thread. Backported from 10.2.
      
      srv_shutdown_table_bg_threads(): Remove (unused).
      417434f1
    • Marko Mäkelä's avatar
      Correct a merge error of MDEV-11626 · a9117c90
      Marko Mäkelä authored
      a9117c90
    • Jan Lindström's avatar
      MDEV-12610: MariaDB start is slow · 58c56dd7
      Jan Lindström authored
      Problem appears to be that the function fsp_flags_try_adjust()
      is being unconditionally invoked on every .ibd file on startup.
      Based on performance investigation also the top function
      fsp_header_get_crypt_offset() needs to addressed.
      
      Ported implementation of fsp_header_get_encryption_offset()
      function from 10.2 to fsp_header_get_crypt_offset().
      
      Introduced a new function fil_crypt_read_crypt_data()
      to read page 0 if it is not yet read.
      
      fil_crypt_find_space_to_rotate(): Now that page 0 for every .ibd
      file is not read on startup we need to check has page 0 read
      from space that we investigate for key rotation, if it is not read
      we read it.
      
      fil_space_crypt_get_status(): Now that page 0 for every .ibd
      file is not read on startup here also we need to read page 0
      if it is not yet read it. This is needed
      as tests use IS query to wait until background encryption
      or decryption has finished and this function is used to
      produce results.
      
      fil_crypt_thread(): Add is_stopping condition for tablespace
      so that we do not rotate pages if usage of tablespace should
      be stopped. This was needed for failure seen on regression
      testing.
      
      fil_space_create: Remove page_0_crypt_read and extra
      unnecessary info output.
      
      fil_open_single_table_tablespace(): We call fsp_flags_try_adjust
      only when when no errors has happened and server was not started
      on read only mode and tablespace validation was requested or
      flags contain other table options except low order bits to
      FSP_FLAGS_POS_PAGE_SSIZE position.
      
      fil_space_t::page_0_crypt_read removed.
      
      Added test case innodb-first-page-read to test startup when
      encryption is on and when encryption is off to check that not
      for all tables page 0 is read on startup.
      58c56dd7
  11. 08 Jun, 2017 2 commits
    • Marko Mäkelä's avatar
      Cleanup of MDEV-12600: crash during install_db with innodb_page_size=32K and ibdata1=3M · fbeb9489
      Marko Mäkelä authored
      The doublewrite buffer pages must fit in the first InnoDB system
      tablespace data file. The checks that were added in the initial patch
      (commit 112b21da)
      were at too high level and did not cover all cases.
      
      innodb.log_data_file_size: Test all innodb_page_size combinations.
      
      fsp_header_init(): Never return an error. Move the change buffer creation
      to the only caller that needs to do it.
      
      btr_create(): Clean up the logic. Remove the error log messages.
      
      buf_dblwr_create(): Try to return an error on non-fatal failure.
      Check that the first data file is big enough for creating the
      doublewrite buffers.
      
      buf_dblwr_process(): Check if the doublewrite buffer is available.
      Display the message only if it is available.
      
      recv_recovery_from_checkpoint_start_func(): Remove a redundant message
      about FIL_PAGE_FILE_FLUSH_LSN mismatch when crash recovery has already
      been initiated.
      
      fil_report_invalid_page_access(): Simplify the message.
      
      fseg_create_general(): Do not emit messages to the error log.
      
      innobase_init(): Revert the changes.
      
      trx_rseg_create(): Refactor (no functional change).
      fbeb9489
    • Jan Lindström's avatar
      d03abc71