1. 30 Jul, 2023 1 commit
  2. 26 Jul, 2023 3 commits
  3. 25 Jul, 2023 3 commits
    • Oleksandr Byelkin's avatar
      new WolfSSL v5.6.3-stable · 2a46b358
      Oleksandr Byelkin authored
      2a46b358
    • Brandon Nesterenko's avatar
      MDEV-30619: Parallel Slave SQL Thread Can Update Seconds_Behind_Master with Active Workers · 063f4ac2
      Brandon Nesterenko authored
      MDEV-31749 sporadic assert in MDEV-30619 new test
      
      If the workers of a parallel replica are busy (potentially with long
      queues), but the SQL thread has no events left to distribute (so it
      goes idle), then the next event that comes from the primary will
      update mi->last_master_timestamp with its timestamp, even if the
      workers have not yet finished.
      
      This patch changes the parallel replica logic which updates
      last_master_timestamp after idling from using solely sql_thread_caught_up
      (added in MDEV-29639) to using the latter with rli queued/dequeued
      event counters.
      That is, if  the queued count is equal to the dequeued count, it
      means all events have been processed and the replica is considered
      idle when the driver thread has also distributed all events.
      
      Low level details of the commit include
      - to make a more generalized test for Seconds_Behind_Master on
        the parallel replica, rpl_delayed_parallel_slave_sbm.test
        is renamed to rpl_parallel_sbm.test for this purpose.
      - pause_sql_thread_on_next_event usage was removed
        with the MDEV-30619 fixes. Rather than remove it, we adapt it
        to the needs of this test case
      - added test case to cover SBM spike of relay log read and LMT
        update that was fixed by MDEV-29639
      - rpl_seconds_behind_master_spike.test is made to use
        the negate_clock_diff_with_master debug eval.
      
      Reviewed By:
      ============
      Andrei Elkin <andrei.elkin@mariadb.com>
      063f4ac2
    • Yuchen Pei's avatar
      MDEV-31400 Simple plugin dependency resolution · 734583b0
      Yuchen Pei authored
      We introduce simple plugin dependency. A plugin init function may
      return HA_ERR_RETRY_INIT. If this happens during server startup when
      the server is trying to initialise all plugins, the failed plugins
      will be retried, until no more plugins succeed in initialisation or
      want to be retried.
      
      This will fix spider init bugs which is caused in part by its
      dependency on Aria for initialisation.
      
      The reason we need a new return code, instead of treating every
      failure as a request for retry, is that it may be impossible to clean
      up after a failed plugin initialisation. Take InnoDB for example, it
      has a global variable `buf_page_cleaner_is_active`, which may not
      satisfy an assertion during a second initialisation try, probably
      because InnoDB does not expect the initialisation to be called
      twice.
      734583b0
  4. 24 Jul, 2023 2 commits
  5. 23 Jul, 2023 2 commits
    • Georg Richter's avatar
      Remove CLIENT_SSL_VERIFY_SERVER_CERT · 1c9002cf
      Georg Richter authored
      Since TLS server certificate verification is a client
      only option, this flag is removed in both client (C/C)
      and MariaDB server capability flags.
      
      This patch reverts commit 89d759b9
      (MySQL Bug #21543) and stores the server certificate validation
      option in mysql->options.extensions.
      1c9002cf
    • Georg Richter's avatar
      Remove CLIENT_SSL_VERIFY_SERVER_CERT · 8b01c296
      Georg Richter authored
      Since TLS server certificate verification is a client
      only option, this flag is removed in both client (C/C)
      and MariaDB server capability flags.
      
      This patch reverts commit 89d759b9
      (MySQL Bug #21543) and stores the server certificate validation
      option in mysql->options.extensions.
      8b01c296
  6. 21 Jul, 2023 1 commit
  7. 20 Jul, 2023 14 commits
    • Aleksey Midenkov's avatar
      MDEV-29357 Assertion (fixed) in Item_func_dayname on INSERT · 3e7561cf
      Aleksey Midenkov authored
      Restrict vcol_cleanup_expr() in close_thread_tables() to only simple
      locked tables mode. Prelocked is cleaned up like normal statement: in
      close_thread_table().
      3e7561cf
    • Aleksey Midenkov's avatar
      MDEV-25644 UPDATE not working properly on transaction precise system versioned table · 14cc7e7d
      Aleksey Midenkov authored
      First UPDATE under START TRANSACTION does nothing (nstate= nstate),
      but anyway generates history. Since update vector is empty we get into
      (!uvect->n_fields) branch which only adds history row, but does not do
      update. After that we get current row with wrong (old) row_start value
      and because of that second UPDATE tries to insert history row again
      because it sees trx->id != row_start which is the guard to avoid
      inserting multiple trx_id-based history rows under same transaction
      (because we have same trx_id and we get duplicate error and this bug
      demostrates that). But this try anyway fails because PK is based on
      row_end which is constant under same transaction, so PK didn't change.
      
      The fix moves vers_make_update() to an earlier stage of
      calc_row_difference(). Therefore it prepares update vector before
      (!uvect->n_fields) check and never gets into that branch, hence no
      need to handle versioning inside that condition anymore.
      
      Now trx->id and row_start are equal after first UPDATE and we don't
      try to insert second history row.
      
      == Cleanups and improvements ==
      
      ha_innobase::update_row():
      
      vers_set_fields and vers_ins_row are cleaned up into direct condition
      check. SQLCOM_ALTER_TABLE check now is not used as this is dead code,
      assertion is done instead.
      
      upd_node->is_delete is set in calc_row_difference() just to keep
      versioning code as much in one place as possible. vers_make_delete()
      is still located in row_update_for_mysql() as this is required for
      ha_innodbase::delete_row() as well.
      
      row_ins_duplicate_error_in_clust():
      
      Restrict DB_FOREIGN_DUPLICATE_KEY to the better conditions.
      VERSIONED_DELETE is used specifically to help lower stack to
      understand what caused current insert. Related to MDEV-29813.
      14cc7e7d
    • Aleksey Midenkov's avatar
      MDEV-31319 Assertion const_item_cache == true failed in Item_func::fix_fields · 21a8d2c3
      Aleksey Midenkov authored
      On create table tmp as select ... we exited Item_func::fix_fields()
      with error. fix_fields_if_needed('foo' or 'bar') failed and we
      returned true, but already changed const_item_cache. So the item is in
      inconsistent state: fixed == false and const_item_cache == false.
      
      Now we cleanup the item before the return if Item_func::fix_fields()
      fails to process.
      21a8d2c3
    • Aleksey Midenkov's avatar
      MDEV-23100 ODKU of non-versioning column inserts history row · c5a83411
      Aleksey Midenkov authored
      Use vers_check_update() to avoid inserting history row for ODKU if now
      versioned fields specified in update_fields.
      c5a83411
    • Aleksey Midenkov's avatar
      MDEV-31313 SYSTEM VERSIONING and FOREIGN KEY CASCADE create orphan rows on replica · fe618de6
      Aleksey Midenkov authored
      Constraints processing row_ins_check_foreign_constraint() was not
      called because row_upd_check_references_constraints() didn't see
      update as delete: node->is_delete was false.
      
      Since MDEV-30378 we check for TRG_EVENT_DELETE to detect versioned
      delete in ha_innobase::update_row().
      
      Now we can use TRG_EVENT_DELETE to set upd_node->is_delete, so
      constraints processing is triggered correctly.
      fe618de6
    • Aleksey Midenkov's avatar
      MDEV-30528 Assertion in dtype_get_at_most_n_mbchars · add0c01b
      Aleksey Midenkov authored
      1. Exclude merging history rows into fts index.
      
      The check !history_fts && (index->type & DICT_FTS) was just incorrect
      attempt to avoid history in fts index.
      
      2. Don't check for duplicates for history rows.
      add0c01b
    • Daniel Lenski's avatar
      Avoid triggering stringop-truncation warning in safe_strcpy · 2ba5c387
      Daniel Lenski authored
      The `safe_strcpy()` function was added in
      https://github.com/mariadb/server/commit/567b68129943#diff-23f88d0b52735bf79b7eb76e2ddbbebc96f3b1ca16e784a347525a9c43134d77
      
      Unfortunately, its current implementation triggers many GCC 8+ string
      truncation and array bounds warnings, particularly due to the potential
      for a false positive `-Warray-bounds`.
      
      For example, the line `safe_strcpy(delimiter, sizeof(delimiter), ";")` in
      `client/mysqldump.c` causes the following warning:
      
          [1669/1914] Building C object client/CMakeFiles/mariadb-dump.dir/mysqldump.c.o
          In file included from /PATH/include/my_sys.h:20,
                           from /PATH/mysqldump.c:51:
          In function ?safe_strcpy?,
              inlined from ?dump_events_for_db.isra? at /PATH/client/mysqldump.c:2595:3:
          /PATH/include/m_string.h:258:39: warning: array subscript 1535 is outside array bounds of ?const char[2]? [-Warray-bounds=]
            258 |   if (dst[dst_size - 2] != '\0' && src[dst_size - 1] != '\0')
                |                                    ~~~^~~~~~~~~~~~~~
      
      GCC is reporting that the `safe_strcpy` function *could* cause an
      out-of-bounds read from the constant *source* string `";"`, however this
      warning is unhelpful and confusing because it can only happen if the size of
      the *destination* buffer is incorrectly specified, which is not the case
      here.
      
      In https://github.com/MariaDB/server/pull/2640, Andrew Hutchings proposed
      fixing this by disabling the `-Warray-bounds` check in this function
      (specifically in
      https://github.com/MariaDB/server/pull/2640/commits/be382d01d08739d081f6cf40f350f7414f29b49d#diff-23f88d0b52735bf79b7eb76e2ddbbebc96f3b1ca16e784a347525a9c43134d77R255-R262).
      
      However, this was rejected because it also disables the *helpful*
      `-Warray-bounds` check on the destination buffer.
      
      Cherry-picking the commit
      https://github.com/MariaDB/server/commit/a7adfd4c52307876d68ad3386cefd3757ee66e92
      from 11.2 by Monty Widenius solves the first two problems:
      
      1. It reimplements `safe_strcpy` a bit more efficiently, skipping the
         `memset(dst, 0, dst_size)`. This is unnecessary since `strncpy` already
         pads `dst` with 0 bytes.
      2. It will not trigger the `-Warray-bounds` warning, because `src` is
         not read based on an offset determined from `dst_size`.
      
      There is a third problem, however.  Using `strncpy` triggers the
      `-Wstringop-truncation` warning
      (https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wstringop-truncation),
      so we need to disable that.  However, that is a much less broadly and
      generally-useful warning so there is no loss of static analysis value caused
      by disabling it.
      
      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, Inc.
      2ba5c387
    • Monty's avatar
      Optimized version of safe_strcpy() · daeccfcf
      Monty authored
      Note: We should replace most case of safe_strcpy() with strmake() to avoid
      the not needed zerofill.
      daeccfcf
    • Oleksandr Byelkin's avatar
      MDEV-30159: Client can crash the server with a mysql_list_fields("view") call · 620aeb44
      Oleksandr Byelkin authored
      Do not get value of expensive constants.
      620aeb44
    • Daniel Black's avatar
      MDEV-31625 connect engine file_type=DBF insert fails · 5a44700a
      Daniel Black authored
      Add the end of file marker x1A to the DBF file and handle it
      correctly to preserve interoperability with Libreoffice, and others
      that have followed the DBF spec.
      
      The file open mode of "a+" was problematic because Linux and the OSX,
      the previous main development mode are inconsistent (see man fopen).
      The main problem per the bug report was the inability to fseek back to the
      beginning to update the records in the header.
      
      As such the "a+" mode is remove and "w+b" is used inserting to a new file
      and "r+b" is used for appending to the file.
      
      In DBFFAM::CloseTableFile move PlugCloseFile down to close the file in
      all modes.
      
      The year unlike the comments is always since 1900. Use the
      YYYY-MM-DD as an unabigious form during tracing.
      
      Thanks for Mr. Zoltan Duna for the descriptive bug report.
      5a44700a
    • Oleksandr Byelkin's avatar
      MDEV-25237 crash after setting global session_track_system_variables to an invalid value · cf50379b
      Oleksandr Byelkin authored
      Fix of typo in checking variable list corectness.
      
      Fix of error handling in case of variable list parse error
      cf50379b
    • Alexander Barkov's avatar
      MDEV-28384 UBSAN: null pointer passed as argument 1, which is declared to... · 03c2157d
      Alexander Barkov authored
      MDEV-28384 UBSAN: null pointer passed as argument 1, which is declared to never be null in my_strnncoll_binary on SELECT ... COUNT or GROUP_CONCAT
      
      Also fixes:
        MDEV-30982 UBSAN: runtime error: null pointer passed as argument 2, which is declared to never be null in my_strnncoll_binary on DELETE
      
      Calling memcmp() with a NULL pointer is undefined behaviour
      according to the C standard, even if the length argument is 0.
      
      Adding tests for length==0 before calling memcmp() into:
      - my_strnncoll_binary()
      - my_strnncoll_8bit_bin
      03c2157d
    • Alexander Barkov's avatar
      MDEV-22856 Assertion `!str || str != Ptr' and Assertion `!str || str != Ptr ||... · a79f4f6e
      Alexander Barkov authored
      MDEV-22856 Assertion `!str || str != Ptr' and Assertion `!str || str != Ptr || !is_alloced()' failed in String::copy
      
      The problem was earlier fixed by MDEV-26953.
      Adding MTR tests only.
      a79f4f6e
    • Daniel Black's avatar
      MDEV-23133 session tracker - warning message typo · d067de20
      Daniel Black authored
      Concatenation error leads to typo in the warning message
      d067de20
  8. 19 Jul, 2023 3 commits
    • Alexander Barkov's avatar
      MDEV-29019 Assertion `(length % 4) == 0' failed in my_lengthsp_utf32 on SELECT · 30f3db3c
      Alexander Barkov authored
      Problem:
      
      Item_func_conv::val_str() copied the ASCII string with the numeric base
      conversion result directly to the function result string. In case of a
      tricky character set (e.g. utf32) it produced an illformed string.
      
      Fix:
      
      Copy the base conversion result to the function result as is only if
      the function character set is ASCII compatible, go through a
      character set conversion otherwise.
      30f3db3c
    • Alexander Barkov's avatar
      MDEV-23838 Possibly wrong result or Assertion `0' failed in Item_func_round::native_op · 9e5c1fb5
      Alexander Barkov authored
      Change history in the affected code:
      
      - Since 10.4.8 (MDEV-20397 and MDEV-23311), functions ROUND(), CEILING(),
        FLOOR() return a TIME value for a TIME input.
      - Since 10.4.14 (MDEV-23525), MIN() and MAX() calculate a result for a TIME
        input using val_native() rather than val_str().
      
      Problem:
      
      The patch for MDEV-23525 did not take into account combinations like
      MIN(ROUND(time)), MAX(FLOOR(time)), etc.
      
      MIN() and MAX() with ROUND(time), CEILING(time), FLOOR(time) as an argument
      call the method val_native() of the undelying classes Item_func_round and
      Item_func_int_val. However these classes implemented the method val_native()
      as DBUG_ASSERT(0).
      
      Fix:
      
      This patch adds a TIME-specific code inside:
      - Item_func_round::val_native()
      - Item_func_int_val::val_native()
      still with DBUG_ASSERT(0) for all other data types,
      as other data types do not call val_native() of these classes.
      
      We'll need a more generic solition eventualy, e.g.
      turn Item_func_round and Item_func_int_val into Item_handled_func.
      However, this change would be too risky for 10.4 at this point.
      9e5c1fb5
    • Daniel Black's avatar
      MDEV-31545 GCC 13 -Wdangling-pointer in execute_show_status() · fbc157ab
      Daniel Black authored
      The pointer was used deep in the call path.
      
      Resolve this by setting the pointer to NULL at the end of
      the function.
      
      Tested with gcc-13.3.1 (fc38)
      
      The warning disable 38fe266e can be reverted in 10.6+ on merge.
      fbc157ab
  9. 14 Jul, 2023 2 commits
  10. 13 Jul, 2023 1 commit
    • Yuchen Pei's avatar
      MDEV-31524 Fixing spider table param / variable overriding · e1d31a10
      Yuchen Pei authored
      The existing (incorrect) overriding mechanism is:
      
      Non-minus-one var value overrides table param overrides default value.
      
      Before MDEV-27169, unspecified var value is -1. So if the user sets
      both the var to be a value other than -1 and the table param, the var
      value will prevail, which is incorrect.
      
      After MDEV-27169, unspecified var value is default value. So if the
      user does not set the var but sets the table param, the default value
      will prevail, which is even more incorrect.
      
      This patch fixes it so that table param, if specified, always
      overrides var value, and the latter if not specified or set to -1,
      falls back to the default value
      
      We achieve this by replacing all such overriding in spd_param.cc with
      macros that override in the correct way, and removing all the
      "overriding -1" lines involving table params in
      spider_set_connect_info_default() except for those table params not
      defined as sysvar/thdvar in spd_params.cc
      
      We also introduced macros for non-overriding sysvar and thdvar, so
      that the code is cleaner and less error-prone
      
      In server versions where MDEV-27169 has not been applied, we also
      backport the patch, that is, replacing -1 default values with real
      default values
      
      In server versions where MDEV-28006 has not been applied, we do the
      same for udf params
      e1d31a10
  11. 12 Jul, 2023 8 commits