1. 20 Dec, 2017 5 commits
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 1ec8d45c
      Marko Mäkelä authored
      1ec8d45c
    • Marko Mäkelä's avatar
      69e88de0
    • Marko Mäkelä's avatar
      MDEV-14585 Automatically remove #sql- tables in InnoDB dictionary during recovery · b4165985
      Marko Mäkelä authored
      Now that MDEV-14717 made RENAME TABLE crash-safe within InnoDB,
      it should be safe to drop the #sql- tables within InnoDB during
      crash recovery. These tables can be one of two things:
      
      (1) #sql-ib related to deferred DROP TABLE (follow-up to MDEV-13407)
      or to table-rebuilding ALTER TABLE...ALGORITHM=INPLACE
      (since MDEV-14378, only related to the intermediate copy of a table),
      
      (2) #sql- related to the intermediate copy of a table during
      ALTER TABLE...ALGORITHM=COPY
      
      We will not drop tables whose name starts with #sql2, because
      the server can be killed during an ALGORITHM=COPY operation at
      a point where the original table was renamed to #sql2 but the
      finished intermediate copy was not yet renamed from #sql-
      to the original table name.
      b4165985
    • Marko Mäkelä's avatar
      Merge bb-10.2-ext into 10.3 · 2534b5cb
      Marko Mäkelä authored
      2534b5cb
    • Marko Mäkelä's avatar
      MDEV-14717 RENAME TABLE in InnoDB is not crash-safe · 0bc36758
      Marko Mäkelä authored
      InnoDB in MariaDB 10.2 appears to only write MLOG_FILE_RENAME2
      redo log records during table-rebuilding ALGORITHM=INPLACE operations.
      We must write the records for any .ibd file renames, so that the
      operations are crash-safe.
      
      If InnoDB is killed during a RENAME TABLE operation, it can happen that
      the transaction for updating the data dictionary will be rolled back.
      But, nothing will roll back the renaming of the .ibd file
      (the MLOG_FILE_RENAME2 only guarantees roll-forward), or for that matter,
      the renaming of the dict_table_t::name in the dict_sys cache. We introduce
      the undo log record TRX_UNDO_RENAME_TABLE to fix this.
      
      fil_space_for_table_exists_in_mem(): Remove the parameters
      adjust_space, table_id and some code that was trying to work around
      these deficiencies.
      
      fil_name_write_rename(): Write a MLOG_FILE_RENAME2 record.
      
      dict_table_rename_in_cache(): Invoke fil_name_write_rename().
      
      trx_undo_rec_copy(): Set the first 2 bytes to the length of the
      copied undo log record.
      
      trx_undo_page_report_rename(), trx_undo_report_rename():
      Write a TRX_UNDO_RENAME_TABLE record with the old table name.
      
      row_rename_table_for_mysql(): Invoke trx_undo_report_rename()
      before modifying any data dictionary tables.
      
      row_undo_ins_parse_undo_rec(): Roll back TRX_UNDO_RENAME_TABLE
      by invoking dict_table_rename_in_cache(), which will take care
      of both renaming the table and the file.
      0bc36758
  2. 19 Dec, 2017 14 commits
  3. 18 Dec, 2017 21 commits
    • Andrei Elkin's avatar
      MDEV-13073. rpl.perf_buildin_semisync_issue40 is corrected to expect the... · ca9ed393
      Andrei Elkin authored
      MDEV-13073. rpl.perf_buildin_semisync_issue40 is corrected to expect the Rpl_semi_sync_master_clients value of 1 (ll.307..). Explicit sleeps are converted to wait_xyz.
      ca9ed393
    • Marko Mäkelä's avatar
      Merge 10.0 into 10.1 · 09c5bbf4
      Marko Mäkelä authored
      09c5bbf4
    • Marko Mäkelä's avatar
      MDEV-13407 innodb.drop_table_background failed in buildbot with "Tablespace for table exists" · 40088bfc
      Marko Mäkelä authored
      The InnoDB background DROP TABLE queue is something that we should
      really remove, but are unable to until we remove dict_operation_lock
      so that DDL and DML operations can be combined in a single transaction.
      
      Because the queue is not persistent, it is not crash-safe. In stable
      versions of MariaDB, we can only try harder to drop all enqueued
      tables before server shutdown.
      
      row_mysql_drop_t::table_id: Replaces table_name.
      
      row_drop_tables_for_mysql_in_background():
      Do not remove the entry from the list as long as the table exists.
      In this way, the table should eventually be dropped.
      40088bfc
    • Nirbhay Choubey's avatar
      MDEV-10442: "Address already in use" on restart · 682c3bfd
      Nirbhay Choubey authored
      SST processes should inherit mysqld's process group.
      682c3bfd
    • sjaakola's avatar
      MW-416 · 91daf881
      sjaakola authored
      Moved TOI replication to happen after ACL checking for commands:
      SQLCOM_CREATE_EVENT
      SQLCOM_ALTER_EVENT
      SQLCOM_DROP_EVENT
      SQLCOM_CREATE_VIEW
      SQLCOM_CREATE_TRIGGER
      SQLCOM_DROP_TRIGGER
      SQLCOM_INSTALL_PLUGIN
      SQLCOM_UNINSTALL_PLUGIN
      91daf881
    • Sergei Golubchik's avatar
      MDEV-13969 sst mysqldump and xtrabackup-v2 handle WSREP_SST_OPT_CONF incorrectly · beabe6b2
      Sergei Golubchik authored
      $WSREP_SST_OPT_CONF already includes --defaults-extra-file= prefix.
      beabe6b2
    • Martynas Bendorius's avatar
      MDEV-13969 sst mysqldump and xtrabackup-v2 handle WSREP_SST_OPT_CONF incorrectly · 1c2f59f7
      Martynas Bendorius authored
      wrep_sst_common: Setting "-c ''" for my_print_defaults just takes no values from config at all. $MY_PRINT_DEFAULTS is already set at the top of the script to have --defaults-file and --defaults-extra-file. If WSREP_SST_OPT_CONF if set to "--defaults-file=/etc/my.cnf --defaults-extra-file=/etc/my.extra.cnf", then "my_print_defaults -c "" --defaults-file=/etc/my.cnf" succeeds, but if WSREP_SST_OPT_CONF is empty - no default values are taken at all.
      wsrep_sst_xtrabackup-v2: innobackupex does not support --defaults-extra-file, so ${WSREP_SST_OPT_CONF} cannot be used as an argument, it has been changed to ${WSREP_SST_OPT_DEFAULT}. Removed --defaults-file= from INNOMOVE line, because WSREP_SST_OPT_CONF already includes it (INNOBACKUP was fine, INNOMOVE - not).
      1c2f59f7
    • Vladislav Vaintroub's avatar
    • Sergei Golubchik's avatar
      MDEV-14641 Incompatible key or row definition between the MariaDB .frm file... · 03e91ce3
      Sergei Golubchik authored
      MDEV-14641 Incompatible key or row definition between the MariaDB .frm file and the information in the storage engine
      
      make sure that mysql_create_frm_image() and fast_alter_partition_table()
      use the same code to derive HA_OPTION_PACK_RECORD from
      create_info->row_type.
      03e91ce3
    • Galina Shalygina's avatar
      Test result changed · 3791d0cf
      Galina Shalygina authored
      3791d0cf
    • Galina Shalygina's avatar
      MDEV-14579: New tests for condition pushdown into materialized views/defined tables · 86308aa9
      Galina Shalygina authored
      defined with INTERSECT/EXCEPT	added
      86308aa9
    • Andrei Elkin's avatar
      MDEV-13073. This patch is a followup of the previous one to convert the... · 529120e1
      Andrei Elkin authored
      MDEV-13073. This patch is a followup of the previous one to convert the trailing underscore identifier to mariadb standard. For identifier representing class private members the underscore is replaced with a `m_` prefix. Otherwise `_` is just removed.
      529120e1
    • Andrei Elkin's avatar
      MDEV-13073. This part converts the Ali patch`s identifiers to the MariaDB... · f279d3c4
      Andrei Elkin authored
      MDEV-13073. This part converts the Ali patch`s identifiers to the MariaDB standard. Also some renaming is done as well as white spaces removal.
      f279d3c4
    • Andrei Elkin's avatar
      MDEV-13073. This patch replaces semisync's native function_enter,exit · 6a84e340
      Andrei Elkin authored
      and its custom trace faciltiy with standard DBUG_ based equivalents.
      6a84e340
    • Andrei Elkin's avatar
      MDEV-13073. This is a part with a new test (refined Ali's · c0ea3056
      Andrei Elkin authored
      one) and affected result files.
      
      Specifically to rpl_semi_sync_after_sync*, the changed results reflect
      a fact that thanks to fixes in the dump thread functionality
      there's no longer zombie thread to kill neither such thread represent
      a semisync client (so the counter drops).
      c0ea3056
    • Andrei Elkin's avatar
      MDEV-13073. This part patch weeds out RUN_HOOK from the server as semisync · 74b35b68
      Andrei Elkin authored
      is defined statically. Consequently the observer interfaces are removed
      as well.
      74b35b68
    • Andrei Elkin's avatar
      MDEV-13073 This part merges the Ali semisync related changes · e972125f
      Andrei Elkin authored
      and specifically the ack receiving functionality.
      Semisync is turned to be static instead of plugin so its functions
      are invoked at the same points as RUN_HOOKS.
      The RUN_HOOKS and the observer interface remain to be removed by later
      patch.
      
      Todo:
        React on killed status by repl_semisync_master.wait_after_sync(). Currently
        Repl_semi_sync_master::commit_trx does not check the killed status.
      
        There were few bugfixes found that are present in mysql and its unclear
        whether/how they are covered. Those include:
      
        Bug#15985893: GTID SKIPPED EVENTS ON MASTER CAUSE SEMI SYNC TIME-OUTS
        Bug#17932935 CALLING IS_SEMI_SYNC_SLAVE() IN EACH FUNCTION CALL
                       HAS BAD PERFORMANCE
        Bug#20574628: SEMI-SYNC REPLICATION PERFORMANCE DEGRADES WITH A HIGH NUMBER OF THREADS
      e972125f
    • Monty's avatar
      Optimize RUN_HOOK() call · abceaa75
      Monty authored
      RUN_HOOK() is only called if semisync is enabled
      
      As the server can't disable the hooks if something is in progress, I added
      a new variable, run_hooks_enabled, that is set the first time semi sync is
      used. This means that RUN_HOOK will have no overhead, unless semi sync
      master or slave has been enabled once.
      
      Some of the changes was just to get rid of warnings for embedded server
      abceaa75
    • Monty's avatar
      Changed from using LOCK_log to LOCK_binlog_end_pos for binary log · 13770edb
      Monty authored
      Part of MDEV-13073 AliSQL Optimize performance of semisync
      
      The idea it to use a dedicated lock detecting if there is new data in
      the master's binary log instead of the overused LOCK_log.
      
      Changes:
      - Use dedicated COND variables for the relay and binary log signaling.
        This was needed as we where the old 'update_cond' variable was used
        with different mutex's, which could cause deadlocks.
         - Relay log uses now COND_relay_log_updated and LOCK_log
         - Binary log uses now COND_bin_log_updated and LOCK_binlog_end_pos
      - Renamed signal_cnt to relay_signal_cnt (as we now have two signals)
      - Added some missing error handling in MYSQL_BIN_LOG::new_file_impl()
      - Reformatted some comments with old style
      - Renamed m_key_LOCK_binlog_end_pos to key_LOCK_binlog_end_pos
      - Changed 'signal_update()' to update_binlog_end_pos() which works for
        both relay and binary log
      13770edb
    • Monty's avatar
      Removed not used lock argument from read_log_event · ea37c129
      Monty authored
      ea37c129
    • Monty's avatar
      Moved semisync from a plugin to normal server · 2e53b96a
      Monty authored
      Part of MDEV-13073 AliSQL Optimize performance of semisync
      
      Did the following renames to match other similar variables
      key_ss_mutex_LOCK_binlog_       > key_LOCK_bing
      key_ss_cond_COND_binlog_send_  -> key_COND_binlog_send
      COND_binlog_send_              -> COND_binlog_send
      LOCK_binlog_                   -> LOCK_binlog
      
      debian/mariadb-server-10.2.install does not install semisync libs.
      2e53b96a