1. 29 Jan, 2024 6 commits
    • Jan Lindström's avatar
      MDEV-33138 : Galera test case MW-336 unstable · 49fa5f6b
      Jan Lindström authored
      Add more inserts before wsrep_slave_threads is set to 1 and
      add wait_condition to wait all of them are replicated before
      wait_condition about number of wsrep_slave_threads.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      49fa5f6b
    • Jan Lindström's avatar
      MDEV-32635: galera_shutdown_nonprim: mysql_shutdown failed · 736e4293
      Jan Lindström authored
      Add wait_condition after cluster membership change
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      736e4293
    • Brandon Nesterenko's avatar
      MDEV-33327: rpl_seconds_behind_master_spike Sensitive to IO Thread Stop Position · e4f221a5
      Brandon Nesterenko authored
      rpl.rpl_seconds_behind_master_spike uses the DEBUG_SYNC mechanism to
      count how many format descriptor events (FDEs) have been executed,
      to attempt to pause on a specific relay log FDE after executing
      transactions. However, depending on when the IO thread is stopped,
      it can send an extra FDE before sending the transactions, forcing
      the test to pause before executing any transactions, resulting in a
      table not existing, that is attempted to be read for COUNT.
      
      This patch fixes this by no longer counting FDEs, but rather by
      programmatically waiting until the SQL thread has executed the
      transaction and then automatically activating the DEBUG_SYNC point
      to trigger at the next relay log FDE.
      e4f221a5
    • Jan Lindström's avatar
      MDEV-25731 : Assertion `mode_ == m_local' failed in wsrep::client_state::streaming_params() · c768ac62
      Jan Lindström authored
      Problem was that if wsrep_load_data_splitting was used
      streaming replication (SR) parameters were set
      for MyISAM table. Galera does not currently support SR for
      MyISAM.
      
      Fix is to ignore wsrep_load_data_splitting setting (with
      warning) if table is not InnoDB table.
      
      This is 10.4-10.5 case of fix.
      Signed-off-by: default avatarJulius Goryavsky <julius.goryavsky@mariadb.com>
      c768ac62
    • 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