An error occurred fetching the project authors.
  1. 12 Oct, 2023 1 commit
    • Daniel Black's avatar
      MDEV-18200 MariaBackup full backup failed with InnoDB: Failing assertion: success · c79ca7c7
      Daniel Black authored
      There are many filesystem related errors that can occur with
      MariaBackup. These already outputed to stderr with a good description of
      the error. Many of these are permission or resource (file descriptor)
      limits where the assertion and resulting core crash doesn't offer
      developers anything more than the log message. To the user, assertions
      and core crashes come across as poor error handling.
      
      As such we return an error and handle this all the way up the stack.
      c79ca7c7
  2. 06 Oct, 2023 1 commit
  3. 21 Apr, 2023 1 commit
    • Alexander Barkov's avatar
      MDEV-30968 mariadb-backup does not copy Aria logs if aria_log_dir_path is used · 9f98a2ac
      Alexander Barkov authored
      - `mariadb-backup --backup` was fixed to fetch the value of the
         @@aria_log_dir_path server variable and copy aria_log* files
         from @@aria_log_dir_path directory to the backup directory.
         Absolute and relative (to --datadir) paths are supported.
      
         Before this change aria_log* files were copied to the backup
         only if they were in the default location in @@datadir.
      
      - `mariadb-backup --copy-back` now understands a new my.cnf and command line
         parameter --aria-log-dir-path.
      
        `mariadb-backup --copy-back` in the main loop in copy_back()
         (when copying back from the backup directory to --datadir)
         was fixed to ignore all aria_log* files.
      
         A new function copy_back_aria_logs() was added.
         It consists of a separate loop copying back aria_log* files from
         the backup directory to the directory specified in --aria-log-dir-path.
         Absolute and relative (to --datadir) paths are supported.
         If --aria-log-dir-path is not specified,
         aria_log* files are copied to --datadir by default.
      
      - The function is_absolute_path() was fixed to understand MTR style
        paths on Windows with forward slashes, e.g.
         --aria-log-dir-path=D:/Buildbot/amd64-windows/build/mysql-test/var/...
      9f98a2ac
  4. 12 Apr, 2023 1 commit
    • Alexander Barkov's avatar
      MDEV-31039 mariadb-backup: remove global variables ds_data and ds_meta · 7bcfa00a
      Alexander Barkov authored
      This is a non-functional change.
      
      simplifying the code logic:
      - removing global variables ds_data and ds_meta
      - passing these variables as parameters to functions instead
      - adding helper classes: Datasink_free_list and Backup_datasinks
      - moving some function accepting a ds_ctxt parameter
        as methods to ds_ctxt.
      7bcfa00a
  5. 05 Apr, 2023 1 commit
    • Sergei Golubchik's avatar
      MDEV-25887 "Got notification message from PID xxxx, but reception only... · 79e27a6b
      Sergei Golubchik authored
      MDEV-25887 "Got notification message from PID xxxx, but reception only permitted for main PID yyyy" in systemd during SST
      
      server has systemd support and calls sd_notify() to communicate
      the status to systemd.
      
      mariabackup links the whole server in, but it should not notify
      systemd, because it's not started or managed by systemd.
      79e27a6b
  6. 27 Mar, 2023 1 commit
    • Vlad Lesin's avatar
      MDEV-29050 mariabackup issues error messages during InnoDB tablespaces export... · 4c226c18
      Vlad Lesin authored
      MDEV-29050 mariabackup issues error messages during InnoDB tablespaces export on partial backup preparing
      
      The solution is to suppress error messages for missing tablespaces if
      mariabackup is launched with "--prepare --export" options.
      
      "mariabackup --prepare --export" invokes itself with --mysqld parameter.
      If the parameter is set, then it starts server to feed "FLUSH TABLES ...
      FOR EXPORT;" queries for exported tablespaces. This is "normal" server
      start, that's why new srv_operation value is introduced.
      
      Reviewed by Marko Makela.
      4c226c18
  7. 10 Mar, 2023 1 commit
    • Vlad Lesin's avatar
      MDEV-30775 Performance regression in fil_space_t::try_to_close() introduced in MDEV-23855 · 7d6b3d40
      Vlad Lesin authored
      fil_node_open_file_low() tries to close files from the top of
      fil_system.space_list if the number of opened files is exceeded.
      
      It invokes fil_space_t::try_to_close(), which iterates the list searching
      for the first opened space. Then it just closes the space, leaving it in
      the same position in fil_system.space_list.
      
      On heavy files opening, like during 'SHOW TABLE STATUS ...' execution,
      if the number of opened files limit is reached,
      fil_space_t::try_to_close() iterates more and more closed spaces before
      reaching any opened space for each fil_node_open_file_low() call. What
      causes performance regression if the number of spaces is big enough.
      
      The fix is to keep opened spaces at the top of fil_system.space_list,
      and move closed files at the end of the list.
      
      For this purpose fil_space_t::space_list_last_opened pointer is
      introduced. It points to the last inserted opened space in
      fil_space_t::space_list. When space is opened, it's inserted to the
      position just after the pointer points to in fil_space_t::space_list to
      preserve the logic, inroduced in MDEV-23855. Any closed space is added
      to the end of fil_space_t::space_list.
      
      As opened spaces are located at the top of fil_space_t::space_list,
      fil_space_t::try_to_close() finds opened space faster.
      
      There can be the case when opened and closed spaces are mixed in
      fil_space_t::space_list if fil_system.freeze_space_list was set during
      fil_node_open_file_low() execution. But this should not cause any error,
      as fil_space_t::try_to_close() still iterates spaces in the list.
      
      There is no need in any test case for the fix, as it does not change any
      functionality, but just fixes performance regression.
      7d6b3d40
  8. 07 Mar, 2023 1 commit
  9. 03 Mar, 2023 1 commit
  10. 07 Feb, 2023 1 commit
  11. 31 Jan, 2023 2 commits
  12. 20 Jan, 2023 1 commit
    • Mikhail Chalov's avatar
      Minimize unsafe C functions usage - replace strcat() and strcpy() (and... · 567b6812
      Mikhail Chalov authored
      Minimize unsafe C functions usage - replace strcat() and strcpy() (and strncat() and strncpy()) with custom safe_strcat() and safe_strcpy() functions
      
      The MariaDB code base uses strcat() and strcpy() in several
      places. These are known to have memory safety issues and their usage is
      discouraged. Common security scanners like Flawfinder flags them. In MariaDB we
      should start using modern and safer variants on these functions.
      
      This is similar to memory issues fixes in 19af1890
      and 9de9f105 but now replace use of strcat()
      and strcpy() with safer options strncat() and strncpy().
      
      However, add '\0' forcefully to make sure the result string is correct since
      for these two functions it is not guaranteed what new string will be null-terminated.
      
      Example:
      
          size_t dest_len = sizeof(g->Message);
          strncpy(g->Message, "Null json tree", dest_len); strncat(g->Message, ":",
          sizeof(g->Message) - strlen(g->Message)); size_t wrote_sz = strlen(g->Message);
          size_t cur_len = wrote_sz >= dest_len ? dest_len - 1 : wrote_sz;
          g->Message[cur_len] = '\0';
      
      All new code of the whole pull request, including one or several files
      that are either new files or modified ones, are contributed under the BSD-new
      license. I am contributing on behalf of my employer Amazon Web Services
      
      -- Reviewer and co-author Vicențiu Ciorbaru <vicentiu@mariadb.org>
      -- Reviewer additions:
      * The initial function implementation was flawed. Replaced with a simpler
        and also correct version.
      * Simplified code by making use of snprintf instead of chaining strcat.
      * Simplified code by removing dynamic string construction in the first
        place and using static strings if possible. See connect storage engine
        changes.
      567b6812
  13. 10 Jan, 2023 1 commit
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-30179 mariabackup --backup fails with FATAL ERROR: ... failed · 17858e03
      Thirunarayanan Balathandayuthapani authored
      			to copy datafile
      
      - Mariabackup fails to copy the undo log tablespace when it undergoes
      truncation. So Mariabackup should detect the redo log which does
      undo tablespace truncation and also backup should read the minimum
      file size of the tablespace and ignore the error while reading.
      
      - Throw error when innodb undo tablespace read failed, but backup
      doesn't find the redo log for undo tablespace truncation
      17858e03
  14. 16 Dec, 2022 1 commit
  15. 02 Dec, 2022 1 commit
    • Thirunarayanan Balathandayuthapani's avatar
      MDEV-30114 Incremental prepare fails when innodb_undo_tablespaces > 0 · dd20a43c
      Thirunarayanan Balathandayuthapani authored
      - Mariabackup fails to open the undo tablespaces while applying delta
      files to the corresponding data file. Mariabackup opens the
      undo tablespaces first time in srv_undo_tablespaces_init() and does
      tries to open the undo tablespaces in xtrabackup_apply_deltas() with
      conflicting mode and leads to the failure.
      
      - Mariabackup should close the undo tablespaces before applying
      the incremental delta files.
      dd20a43c
  16. 07 Nov, 2022 1 commit
  17. 23 Sep, 2022 1 commit
    • Marko Mäkelä's avatar
      MDEV-29613 Improve WITH_DBUG_TRACE=OFF · a69cf6f0
      Marko Mäkelä authored
      In commit 28325b08
      a compile-time option was introduced to disable the macros
      DBUG_ENTER and DBUG_RETURN or DBUG_VOID_RETURN.
      
      The parameter name WITH_DBUG_TRACE would hint that it also
      covers DBUG_PRINT statements. Let us do that: WITH_DBUG_TRACE=OFF
      shall disable DBUG_PRINT() as well.
      
      A few InnoDB recovery tests used to check that some output from
      DBUG_PRINT("ib_log", ...) is present. We can live without those checks.
      
      Reviewed by: Vladislav Vaintroub
      a69cf6f0
  18. 14 Sep, 2022 1 commit
  19. 26 Aug, 2022 1 commit
    • Daniel Black's avatar
      MDEV-23607 MariaBackup - align required GRANTS to cmd options · 79b58f1c
      Daniel Black authored
      Since the 10.5 split of the privileges, the required GRANTs
      for various mariabackup operations has changed.
      
      In the addition of tests, a number of mappings where incorrect:
      
      The option --lock-ddl-per-table didn't require connection admin.
      
      The option --safe-slave-backup requires SLAVE MONITOR even without
      the --no-lock option.
      79b58f1c
  20. 01 Aug, 2022 1 commit
  21. 15 Jun, 2022 1 commit
  22. 17 May, 2022 1 commit
  23. 11 May, 2022 1 commit
  24. 02 May, 2022 1 commit
    • Alexander Barkov's avatar
      MDEV-28446 mariabackup prepare fails for incrementals if a new schema is... · 680ca152
      Alexander Barkov authored
      MDEV-28446 mariabackup prepare fails for incrementals if a new schema is created after full backup is taken
      
      When "mariabackup --target-dir=$basedir --incremental-dir=$incremental_dir"
      is running and is moving a new table file (e.g. `db1/t1.new`) from the
      incremental directory to the base directory, it needs to verify that the base
      backup database directory (e.g. `$basedir/db1`) really exists
      (or create it otherwise).
      
      The table `db1/t1` can come from a new database `db1` which
      was created during the base mariabackup execution time.
      
      In such case the directory `db1` exists only in the incremental directory,
      but does not exist in the base directory.
      680ca152
  25. 12 Apr, 2022 1 commit
    • Sergei Golubchik's avatar
      MDEV-24317 Data race in LOGGER::init_error_log at sql/log.cc:1443 and in... · bbdec04d
      Sergei Golubchik authored
      MDEV-24317 Data race in LOGGER::init_error_log at sql/log.cc:1443 and in LOGGER::error_log_print at sql/log.cc:1181
      
      don't initialize error_log_handler_list in set_handlers()
      * error_log_handler_list is initialized to LOG_FILE early, in init_base()
      * set_handlers always reinitializes it to LOG_FILE, so it's pointless
      * after init_base() concurrent threads start using sql_log_warning,
        so following set_handlers() shouldn't modify error_log_handler_list
        without some protection
      bbdec04d
  26. 06 Apr, 2022 1 commit
    • Marko Mäkelä's avatar
      MDEV-25975 innodb_disallow_writes causes shutdown to hang · e9735a81
      Marko Mäkelä authored
      We will remove the parameter innodb_disallow_writes because it is badly
      designed and implemented. The parameter was never allowed at startup.
      It was only internally used by Galera snapshot transfer.
      If a user executed
      SET GLOBAL innodb_disallow_writes=ON;
      the server could hang even on subsequent read operations.
      
      During Galera snapshot transfer, we will block writes
      to implement an rsync friendly snapshot, as follows:
      
      sst_flush_tables() will acquire a global lock by executing
      FLUSH TABLES WITH READ LOCK, which will block any writes
      at the high level.
      
      sst_disable_innodb_writes(), invoked via ha_disable_internal_writes(true),
      will suspend or disable InnoDB background tasks or threads that could
      initiate writes. As part of this, log_make_checkpoint() will be invoked
      to ensure that anything in the InnoDB buf_pool.flush_list will be written
      to the data files. This has the nice side effect that the Galera joiner
      will avoid crash recovery.
      
      The changes to sql/wsrep.cc and to the tests are based on a prototype
      that was developed by Jan Lindström.
      
      Reviewed by: Jan Lindström
      e9735a81
  27. 22 Feb, 2022 2 commits
    • Julius Goryavsky's avatar
      MDEV-27524: Incorrect binlogs after Galera SST using rsync and mariabackup · 17e0f522
      Julius Goryavsky authored
      This commit adds correct handling of binlogs for SST using rsync
      or mariabackup. Before this fix, binlogs were handled incorrectly -
      - only one (last) binary log file was transferred during SST, which
      then led to various failures (for example, when trying to list all
      events from the binary log). These bugs were long masked by flaws
      in the primitive binlogs handling code in the SST scripts, which
      causing binary logs files to be erased after transfer or not added
      to the binlog index on the joiner node. Now the correct transfer
      of all binary logs (not just the last of the binary log files) has
      been implemented both for the rsync (at the script level) and for
      the mariabackup (at the level of the main utility code).
      
      This commit also adds a new sst_max_binlogs=<n> parameter, which
      can be located in the [sst] section or in the [xtrabackup] section
      (historically, supported for mariabackup only, not for rsync), or
      in one of the server sections. This parameter specifies the number
      of binary log files to be sent to the joiner node during SST. This
      option is added for compatibility with old SST scripting behavior,
      which can be emulated by setting the sst_max_binlogs=1 (although
      in general this can cause problems for the reasons described above).
      In addition, setting the sst_max_binlogs=0 can be used to suppress
      the transmission of binary logs to the joiner nodes during SST
      (although sometimes a single file with the current binary log can
      still be transmitted to the joiner, even with sst_max_binlogs=0,
      because this sometimes necessary in modes that involve the use of
      GTIDs with Galera).
      
      Also, this commit ensures correct handling of paths to various
      innodb files and directories in the SST scripts, and fixes some
      problems with this that existed in mariabackup utility (which
      were associated with incorrect handling of the innodb_data_dir
      parameter in some scenarios).
      
      In addition, this commit contains the following enhancements:
      
       1) Added tests for mtr, which check the correct work with binlogs
          after SST (using rsync and mariabackup);
       2) Added correct handling of slashes at the end of all paths that
          the SST script receives as parameters;
       3) Improved parsing code for --mysqld-args parameters. Now it
          correctly processes the sequence "--" after the name of the
          one-letter option;
       4) Checking the secret signature during joiner authentication
          is made independent of presence of bash (as a unix shell)
          in the system and diff utility no longer needed to check
          certificates compliance;
       5) All directories that are necessary for the correct placement
          of various logs are automatically created by SST scripts in
          advance (before running mariabackup on the joiner node);
       6) Removal of old binary logs on joiner is done using the binlog
          index (if it exists) (not only by fixed pattern that based
          on the current binlog name, as before);
       7) Paths for placing binary logs are correctly processed if they
          are set as relative paths (to the datadir);
       8) SST scripts are made even more resistant to spaces in filenames
          (now for binlogs);
       9) In case of failure, SST scripts now always end with an exit
          code other than zero;
      10) SST script for rsync now correctly create a tar file with
          the binlogs, even if the paths to them (in the binlog index
          file) are specified as a mix of absolute and relative paths,
          and even if they do not match with the datadir path specified
          in the current configuration settings.
      17e0f522
    • Julius Goryavsky's avatar
  28. 26 Aug, 2021 1 commit
  29. 11 Aug, 2021 1 commit
  30. 24 Jul, 2021 1 commit
  31. 22 Jul, 2021 1 commit
    • Marko Mäkelä's avatar
      MDEV-26110: Do not rely on alignment on static allocation · 82d59945
      Marko Mäkelä authored
      It is implementation-defined whether alignment requirements
      that are larger than std::max_align_t (typically 8 or 16 bytes)
      will be honored by the compiler and linker.
      
      It turns out that on IBM AIX, both alignas() and MY_ALIGNED()
      only guarantees alignment up to 16 bytes.
      
      For some data structures, specifying alignment to the CPU
      cache line size (typically 64 or 128 bytes) is a mere performance
      optimization, and we do not really care whether the requested
      alignment is guaranteed.
      
      But, for the correct operation of direct I/O, we do require that
      the buffers be aligned at a block size boundary.
      
      field_ref_zero: Define as a pointer, not an array.
      For innochecksum, we can make this point to unaligned memory;
      for anything else, we will allocate an aligned buffer from the heap.
      This buffer will be used for overwriting freed data pages when
      innodb_immediate_scrub_data_uncompressed=ON. And exactly that code
      hit an assertion failure on AIX, in the test innodb.innodb_scrub.
      
      log_sys.checkpoint_buf: Define as a pointer to aligned memory
      that is allocated from heap.
      
      log_t::file::write_header_durable(): Reuse log_sys.checkpoint_buf
      instead of trying to allocate an aligned buffer from the stack.
      82d59945
  32. 15 Jul, 2021 1 commit
  33. 31 May, 2021 1 commit
  34. 29 May, 2021 1 commit
  35. 18 May, 2021 1 commit
    • Marko Mäkelä's avatar
      MDEV-25710: Dead code os_file_opendir() in the server · 08b6fd93
      Marko Mäkelä authored
      The functions fil_file_readdir_next_file(), os_file_opendir(),
      os_file_closedir() became dead code in the server in MariaDB 10.4.0
      with commit 09af00cb (the removal of
      the crash recovery logic for the TRUNCATE TABLE implementation that
      was replaced in MDEV-13564).
      
      os_file_opendir(), os_file_closedir(): Define as macros.
      08b6fd93
  36. 11 Apr, 2021 2 commits
  37. 01 Apr, 2021 1 commit
    • Srinidhi Kaushik's avatar
      MDEV-24197: Add "innodb_force_recovery" for "mariabackup --prepare" · 5bc5ecce
      Srinidhi Kaushik authored
      During the prepare phase of restoring backups, "mariabackup" does
      not seem to allow (or recognize) the option "innodb_force_recovery"
      for the embedded InnoDB server instance that it starts.
      
      If page corruption observed during page recovery, the prepare step
      fails. While this is indeed the correct behavior ideally, allowing
      this option to be set in case of emergencies might be useful when
      the current backup is the only copy available. Some error messages
      during "--prepare" suggest to set "innodb_force_recovery" to 1:
      
        [ERROR] InnoDB: Set innodb_force_recovery=1 to ignore corruption.
      
      For backwards compatibility, "mariabackup --innobackupex --apply-log"
      should also have this option.
      Signed-off-by: default avatarSrinidhi Kaushik <shrinidhi.kaushik@gmail.com>
      5bc5ecce