1. 29 Jan, 2024 2 commits
    • Jan Lindström's avatar
      MDEV-25089 : Assertion `error.len > 0' failed in galera::ReplicatorSMM::handle_apply_error() · daaa16a4
      Jan Lindström authored
      Problem is that Galera starts TOI (total order isolation) i.e.
      it sends query to all nodes. Later it is discovered that
      used engine or other feature is not supported by Galera.
      Because TOI is executed parallelly in all nodes appliers
      could execute given TOI and ignore the error and
      start inconsistency voting causing node to leave from
      cluster or we might have a crash as reported.
      
      For example SEQUENCE engine does not support GEOMETRY data
      type causing either inconsistency between nodes (because
      some errors are ignored on applier) or crash.
      
      Fixed my adding new function wsrep_check_support to check
      can Galera support provided CREATE TABLE/SEQUENCE before TOI is
      started and if not clear error message is provided to
      the user.
      
      Currently, not supported cases:
      
      * CREATE TABLE ... AS SELECT when streaming replication is used
      * CREATE TABLE ... WITH SYSTEM VERSIONING AS SELECT
      * CREATE TABLE ... ENGINE=SEQUENCE
      * CREATE SEQUENCE ... ENGINE!=InnoDB
      * ALTER TABLE t ... ENGINE!=InnoDB where table t is SEQUENCE
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      daaa16a4
    • Jan Lindström's avatar
      MDEV-22063 : Assertion `0' failed in wsrep::transaction::before_rollback · 3228c08f
      Jan Lindström authored
      Problem was that REPLACE was using consistency check that started
      TOI and we tried to rollback it.
      
      Do not use wsrep_before_rollback and wsrep_after_rollback if
      we are runing consistency check because no writeset keys are
      in that case added. Do not allow consistency check usage
      if table storage for target table is not InnoDB, instead
      give warning. REPLACE|SELECT INTO ... SELECT will use
      now TOI if table storage for target table is not InnoDB
      to maintain consistency between galera nodes.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      3228c08f
  2. 26 Jan, 2024 2 commits
    • Brandon Nesterenko's avatar
      MDEV-27850: rpl_seconds_behind_master_spike debug_sync fix · 112eb14f
      Brandon Nesterenko authored
      A debug_sync signal could remain for the SQL thread that should have begun
      a wait_for upon seeing a GTID event, but would instead see the old signal
      and continue on without waiting. This broke an "idle" condition in
      SHOW SLAVE STATUS
      which should have automatically negated Seconds_Behind_Master. Instead,
      because the SQL thread had already processed the GTID event, it set
      sql_thread_caught_up to false, and thereby calculated the value of
      Seconds_behind_master, when the test expected 0.
      
      This patch fixes this by resetting the debug_sync state before creating a
      new transaction which sends a GTID event to the replica
      112eb14f
    • Vladislav Vaintroub's avatar
      update C/C · e96a0594
      Vladislav Vaintroub authored
      e96a0594
  3. 25 Jan, 2024 3 commits
    • Vladislav Vaintroub's avatar
      MDEV-26579 fixup · b62f25c6
      Vladislav Vaintroub authored
      b62f25c6
    • Vladislav Vaintroub's avatar
      MDEV-26579 Support minor MSI in Windows installer. · 0f59810b
      Vladislav Vaintroub authored
      With this patch, 4-component MSI version can be used, e.g by setting
      TINY_VERSION variable in CMake, or by adding a string, e.g
      MYSQL_VERSION_EXTRA=-2
      which sets TINY_VERSION to 2, and also changes the package name.
      
      The 4-component MSI versions do not support MSI major upgrades, only minor
      ones, i.e do not reinstall components, just update existing ones based
      on versioning rules.
      
      To support these rules, add DefaultVersion for the files that won't
      otherwise be versioned - headers, static and import libraries,
      pdbs, text - xml, python and perl scripts Also silence WiX warning
      that MSI won't store hashes for those files anymore.
      0f59810b
    • Yuchen Pei's avatar
      MDEV-33191 spider: fix dbton_id when iterating over links · 1070575a
      Yuchen Pei authored
      There are two array fields in spider_share with similar names:
      
      share->use_sql_dbton_ids that maps from i to the i-th dbton used by
      share. Thus it should be used only when i iterates over all distinct
      dbtons used by share.
      
      share->sql_dbton_ids that maps from i to the dbton used by the i-th
      link of the share. Thus it should be used only when i iterates over
      all links of a share.
      
      We correct instances where share->sql_dbton_ids should be used instead
      of share->use_sql_dbton_ids.
      1070575a
  4. 24 Jan, 2024 1 commit
    • Alexander Barkov's avatar
      MDEV-29095 REGEXP_REPLACE treats empty strings different than REPLACE in ORACLE mode · f738cc98
      Alexander Barkov authored
      Turning REGEXP_REPLACE into two schema-qualified functions:
      - mariadb_schema.regexp_replace()
      - oracle_schema.regexp_replace()
      
      Fixing oracle_schema.regexp_replace(subj,pattern,replacement) to treat
      NULL in "replacement" as an empty string.
      
      Adding new classes implementing oracle_schema.regexp_replace():
      - Item_func_regexp_replace_oracle
      - Create_func_regexp_replace_oracle
      
      Adding helper methods:
      - String *Item::val_str_null_to_empty(String *to)
      - String *Item::val_str_null_to_empty(String *to, bool null_to_empty)
      
      and reusing these methods in both Item_func_replace and
      Item_func_regexp_replace.
      f738cc98
  5. 23 Jan, 2024 3 commits
  6. 22 Jan, 2024 5 commits
    • Oleksandr Byelkin's avatar
      15bd7e0b
    • Oleksandr Byelkin's avatar
    • Brandon Nesterenko's avatar
      MDEV-32168: Postpush fix for rpl_domain_id_filter_master_crash · 01ca57ec
      Brandon Nesterenko authored
      While a replica may be reading events from the
      primary, the primary is killed. Left to its own
      devices, the IO thread may or may not stop in
      error, depending on what it is doing when its
      connection to the primary is killed (e.g. a
      failed read results in an error, whereas if the
      IO thread is idly waiting for events when the
      connection dies, it will enter into a reconnect
      loop and reconnect). MDEV-32168 changed the test
      to always wait for the reconnect, thus breaking
      the error case, as the IO thread would be stopped
      at a time of expecting it to be running.
      
      The fix is to manually stop/start the IO thread
      to ensure it is in a consistent state.
      
      Note that rpl_domain_id_filter_master_crash.test
      will need additional changes after fixing MDEV-33268
      
      Reviewed By:
      ============
      Kristian Nielsen <knielsen@knielsen-hq.org>
      01ca57ec
    • Vicențiu Ciorbaru's avatar
      MDEV-14448: Ctrl-C should not exit the client · 3cd88751
      Vicențiu Ciorbaru authored
      This patch introduces the following behaviour for Linux while
      maintaining old behaviour for Windows:
      
      Ctrl + C (sigint) clears the current buffer and redraws the prompt.
      Ctrl-C no longer exits the client if no query is running.
      Ctrl-C kills the current running query if there is one. If there is an
      error communicating with the server while trying to issue a KILL QUERY,
      the client exits. This is in line with the past behaviour of Ctrl-C.
      On Linux Ctrl-D can be used to close the client.
      On Windows Ctrl-C and Ctrl-BREAK still exits the client if no query is running.
      Windows can also exit the client via \q<enter> or exit<enter>.
      
      == Implementation details ==
      The Linux implementation has two corner cases, based on which library is
      used: libreadline or libedit, both are handled in code to achieve the
      same user experience.
      
      Additional code is taken from MySQL, ensuring there is identical
      behaviour on Windows, to MySQL's mysql client implementation for other
      CTRL- related signals.
      
      * The CTRL_CLOSE, CTRL_LOGOFF, CTRL_SHUTDOWN will issue the equivalent
        of CTRL-C and "end" the program. This ensures that the query is killed
        when the client is closed by closing the terminal, logging off the
        user or shutting down the system. The latter two signals are not sent
        for interactive applications, but it handles the case when a user has
        defined a service to use mysql client to issue a command. See
        https://learn.microsoft.com/en-us/windows/console/handlerroutine
      
      This patch is built on top of the initial work done by Anel Husakovic
      <anel@mariadb.org>.
      Closes #2815
      3cd88751
    • Sisi Huang's avatar
      MDEV-32990 federatedx time_zone round trips · 7e8e51eb
      Sisi Huang authored
      Modified `federatedx_io_mysql::actual_query` to set the time zone to '+00:00' only upon establishing a new connection instead of with each query execution.
      7e8e51eb
  7. 19 Jan, 2024 2 commits
  8. 18 Jan, 2024 1 commit
    • Marko Mäkelä's avatar
      MDEV-32268: GNU libc posix_fallocate() may be extremely slow · ee1407f7
      Marko Mäkelä authored
      os_file_set_size(): Let us invoke the Linux system call fallocate(2)
      directly, because the GNU libc posix_fallocate() implements a fallback
      that writes to the file 1 byte every 4096 or fewer bytes. In one
      environment, invoking fallocate() directly would lead to 4 times the
      file growth rate during ALTER TABLE. Presumably, what happened was
      that the NFS server used a smaller allocation block size than 4096 bytes
      and therefore created a heavily fragmented sparse file when
      posix_fallocate() was used. For example, extending a file by 4 MiB
      would create 1,024 file fragments. When the file is actually being
      written to with data, it would be "unsparsed".
      
      The built-in EOPNOTSUPP fallback in os_file_set_size() writes a buffer
      of 1 MiB of NUL bytes. This was always used on musl libc and other
      Linux implementations of posix_fallocate().
      ee1407f7
  9. 17 Jan, 2024 2 commits
    • Robin Newhouse's avatar
      MDEV-32587 Allow json exponential notation starting with zero · 615f4a8c
      Robin Newhouse authored
      Modify the NS_ZERO state in the JSON number parser to allow
      exponential notation with a zero coefficient (e.g. 0E-4).
      
      The NS_ZERO state transition on 'E' was updated to move to the
      NS_EX state rather than returning a syntax error. Similar change
      was made for the NS_ZE1 (negative zero) starter state.
      
      This allows accepted number grammar to include cases like:
      
      - 0E4
      - -0E-10
      
      which were previously disallowed. Numeric parsing remains
      the same for all other states.
      
      Test cases are added to func_json.test to validate parsing for
      various exponential numbers starting with zero coefficients.
      
      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.
      615f4a8c
    • Oleksandr Byelkin's avatar
      new WolfSSL v5.6.6-stable · 8e337e01
      Oleksandr Byelkin authored
      8e337e01
  10. 16 Jan, 2024 1 commit
  11. 15 Jan, 2024 1 commit
  12. 11 Jan, 2024 3 commits
  13. 10 Jan, 2024 4 commits
  14. 09 Jan, 2024 2 commits
    • Sergei Golubchik's avatar
      MDEV-33148 A connection can control RAND() in following connection · c6e1ffd1
      Sergei Golubchik authored
      initialize THD::rand in THD::init() not in THD::THD(),
      because the former is also called when a THD is reused -
      in COM_CHANGE_USER and in taking a THD from the cache.
      
      Also use current cycle timer for more unpreditability
      c6e1ffd1
    • Alexander Barkov's avatar
      MDEV-32645 CAST(AS UNSIGNED) fails with --view-protocol · 9322ef03
      Alexander Barkov authored
      Item_float::neg() did not preserve the "presentation" from "this".
      So
        CAST(-1e0 AS UNSIGNED)  -- cast from double to unsigned
      changes its meaning to:
        CAST(-1 AS UNSIGNED)  -- cast signed to undigned
      
      Fixing Item_float::neg() to construct the new value for
      Item_float::presentation as follows:
      - if the old value starts with minus, then the minus is truncated:
        '-2e0' -> '2e0'
      - otherwise, minus sign followed by its old value:
        '1e0'  -> '-1e0'
      9322ef03
  15. 08 Jan, 2024 4 commits
  16. 04 Jan, 2024 1 commit
  17. 03 Jan, 2024 3 commits
    • Igor Babaev's avatar
      MDEV-31657 Crash on query using CTE with the same name as a base table · 54ed3939
      Igor Babaev authored
      If a query contained a CTE whose name coincided with the name of one of
      the base tables used in the specification of the CTE and the query had at
      least two references to this CTE in the specifications of other CTEs then
      processing of the query led to unlimited recursion that ultimately caused
      a crash of the server.
      
      Any secondary non-recursive reference to a CTE requires creation of a copy
      of the CTE specification. All the references to CTEs in this copy must be
      resolved. If the specification contains a reference to a base table whose
      name coincides with the name of then CTE then it should be ensured that
      this reference in no way can be resolved against the name of the CTE.
      54ed3939
    • Marko Mäkelä's avatar
      MDEV-33157 WSREP: Fix function pointer mismatch · 96130b18
      Marko Mäkelä authored
      wsrep_plugin_init(), wsrep_plugin_deinit(): Remove these dummy functions
      in order to fix an error that would be flagged by cmake -DWITH_UBSAN=ON
      when using clang.
      
      wsrep_show_ready(), wsrep_show_bf_aborts(): Correct the signature.
      96130b18
    • Igor Babaev's avatar
      MDEV-29362 Crash with query using constant subquery as left part of IN subquery · 832e96de
      Igor Babaev authored
      If a query has a HAVING clause that contains a predicate with a constant
      IN subquery whose lef part in its turn is a subquery and the predicate is
      subject to pushdown from HAVING to WHERE then execution of the query could
      cause a crash of the server.
      
      The cause of the problem was the missing implementation of the walk()
      method for the class Item_in_optimizer. As a result in some cases the left
      operand of the Item_in_optimizer condition could be traversed twice by
      the walk procedure. For many call-back functions used as an argument of
      this procedure it does not matter. Yet it matters for the call-back
      function cleanup_excluding_immutables_processor() used in pushdown of
      predicates from HAVING to WHERE. If the processed item is marked with
      the IMMUTABLE_FL flag then the processor just removes this flag, otherwise
      it performs cleanup of the item making it unfixed. If an item is marked
      with an the IMMUTABLE_FL and it traversed with this processor twice then
      it becomes unfixed after the second traversal though the flag indicates
      that the item should not be cleaned up.
      
      Approved by Oleksandr Byelkin <sanja@mariadb.com>
      832e96de