Console View
|
Categories: connectors experimental galera main |
|
| connectors | experimental | galera | main | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alessandro Vetere
iminelink@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41844 Test innodb.buf_pool_resize_pcur_restore is flaky The procedure read_into_first_new_block() requires that the page of a table is read into the first block that a buffer pool grow adds. While history exists, the purge coordinator runs once per second. It reads undo log pages, and purge_truncation_callback() reads the header page of each rollback segment. On a slow builder, these reads can take the first new block in all 5 attempts. Stop purge for the duration of the test with FLUSH TABLES ... FOR EXPORT on a separate connection. A read view does not stop these reads. Remove the wait for purge between the two cases, because purge is stopped. purge_sys_t::stop() waits only for the purge coordinator. Runs of purge_truncation_callback() that the coordinator submitted before can still read pages after FLUSH TABLES ... FOR EXPORT returns. Add the debug keyword purge_stop_wait_truncation, which makes purge_sys_t::stop() also wait for these runs, and set it in the test. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41480 Failed ADD PARTITION with a #mysql50# partition name removes the table mysql_write_frm(WFRM_WRITE_SHADOW) declared a local `error` shadowing the function-level one, so a failed ha_create_partitioning_metadata() returned success and ALTER continued to install the shadow frm. Assisted-by: Claude:claude-5.5-opus |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Thirunarayanan Balathandayuthapani
thiru@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42037 Assertion failure bpage->oldest_modification() when ALTER TABLE … DISCARD TABLESPACE races with the page cleaner Problem: ======= The page cleaner holds the latch of a dirty page while buf_flush_space() has released buf_pool.mutex. DISCARD TABLESPACE meanwhile runs buf_flush_remove_pages(), which removes the page from buf_pool.flush_list without taking the page latch. When the cleaner resumes, buf_flush_discard_page() asserts oldest_modification() Solution: ======== buf_flush_discard_page(): remove the page from the flush list only if oldest_modification() is nonzero. Always release the latch and free the page, and return whether it was freed. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Elena Stepanova
elenst@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42198 Options from MTR opt files are added multiple times Options from .opt files of included files were appended every time the file was sourced, so they got repeated once per include path. It caused unnecessary server restarts, and too long server command lines lead to startup failures on Windows. Now each file caches only its own .opt options plus an ordered list of the files (itself and everything it sources) whose options apply, each file listed once. The test's options are assembled from that list. Options of included files still precede those of the including file. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41029 AddressSanitizer: use-after-poison - "install soname ha_rocksdb" rocksdb tried to modify a read-only sysvar (ignore_db_dirs). It was kind of fine on startup, even if hackish, but at INSTALL PLUGIN time it meant violating the contract, read-only sysvar cannot be modified at run-time. let's ignore any ill-conceived attempts to modify ignore_db_dirs at run-time. as a result, if RocksDB is installed with INSTALL PLUGIN command, new #rocksdb directory will not be excluded from SHOW DATABASES list until server restart. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
liufeng
liufeng@kylinos.cn |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-33843: Server crash via XPath unary minus recursion Analysis: The stack overrun check added by MDEV-33843 is executed only in my_xpath_parse_OrExpr(). The XPath grammar rule UnaryExpr ::= '-' UnaryExpr recurses directly in my_xpath_parse_UnaryExpr(), so a path made of many '-' tokens consumes one stack frame per token without any limit and overruns the thread stack. UPDATEXML() and EXTRACTVALUE() parse the path in fix_fields(), therefore any user who can run a SELECT can terminate the server with SELECT UPDATEXML(NULL, REPEAT('-', 100000), 1); Before this patch the statement makes the backend exit with SIGSEGV (exit status 139) and the client reports "Lost connection to server during query". The equivalent parenthesized expression is already rejected with ER_STACK_OVERRUN_NEED_MORE because it re-enters my_xpath_parse_OrExpr(). Fix: Run check_stack_overrun() at the entry of my_xpath_parse_UnaryExpr(), as my_xpath_parse_OrExpr() does, and add a regression case to mysql-test/main/xml that expects ER_STACK_OVERRUN_NEED_MORE. The same statement then returns the regular stack-overrun error and the server stays alive. main.xml passes. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Jan Lindström
jan.lindstrom@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40212 galera_duplicate_primary_value stalls on single applier Failure: - The test needs two write sets applied concurrently by two appliers on node 1, but never sets wsrep-slave-threads, so it defaults to 1. - lock_wait_wsrep_kill's debug sync parks the applier thread itself on WAIT_FOR wsrep_after_kill_continue; with only one applier, the second write set has no free thread, and WAIT_FOR wsrep_after_kill_reached_2 blocks until --debug-sync-timeout (300s). - The timeout does not fail the test, so it reports pass without ever reaching the concurrent brute-force state MDEV-31658 added it to cover. Fix: - Set wsrep-slave-threads=2 on node 1, so the two independent write sets apply concurrently, matching what the test is meant to exercise. Assisted-by: Teemu Ollakka <[email protected]> Assisted-by: https://mariadb.org/governance/governance-ai-policy/ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alexey Yurchenko
alexey.yurchenko@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-35940, MDEV-35964 reenable MTR tests As MDEV-35940, MDEV-35964 have been fixed, reenable tests disabled because of them |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Elena Stepanova
elenst@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41085 Enable MTR tests on Windows: rpl suite rpl.rpl_row_mysqlbinlog fails because apparently the client command line on Windows cannot interpret the literal cp932 string which is passed to it. Since the point of the test is not how the original INSERT happens, but how it further works while replaying the binlog, it should be acceptable to insert a hex-encoded value |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Marko Mäkelä
marko.makela@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41813 OPTIMIZE TABLE makes tables grow PageBulk::init(): Add a parameter for a hint page number, so that we will try to allocate adjacent pages for the index. After this change, the innodb_alter_copy_bulk=ON code path may actually produce smaller files than the legacy code path. Based on mysql/mysql-server@a3e2dbddec48ec229484bdf082b8c2f34ccf8c0b Reviewed by: Thirunarayanan Balathandayuthapani |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vladislav Vaintroub
vvaintroub@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30836 MTR hangs on Windows after warnings in the log at shutdown Follow-up to the MDEV-30836 fix. With --force, parse_protocol() returned 1 after a worker reported WARNINGS, so the manager went on reading from the socket of that worker. A worker that was told to exit with BYE sends WARNINGS and exits, and does not send anything more. On Windows Perl, non-blocking reads do not work, so the manager could block in that read. It then never handled the results of the other workers, and mtr hung after the last test. Return 2 for such a worker, as for the other cases where the worker needs no response, to continue with the next ready socket. The closed socket is handled later, when it becomes readable. A worker that was not told to exit also sends WARNINGS, before it restarts servers or after a test with side effects, and then goes on to send TESTRESULT. Keep reading from it, as before. The manager remembers the workers it said BYE to. Assisted-by: Claude:claude-sonnet-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41946 CONNECT: table option value used as printf format string, crash in ha_connect::GetRealString For partitioned tables GetRealString() and FileExists() substituted the partition name into FILE_NAME (and other options) by passing the option value to snprintf() as the format string. Replace the first "%s" with the partition name and copy the rest literally, as already done for SRCDEF. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Jan Lindström
jan.lindstrom@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42139 fix spurious wakeup in gu_debug_sync_wait() In galera_3nodes.galera_join_with_cc_X this let a waiter on the "process_primary_configuration" sync point disappear from wsrep_debug_sync_waiters between a wait_condition.inc poll and the test's own follow-up SELECT, producing an empty result instead of the point name. Test now requires Galera library 26.4.29 where fix for spurious wakeup in gu_debug_sync_wait() is. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41504 COM_FIELD_LIST Integer Underflow Leading to Heap Over-read reject COM_FIELD_LIST packets without a table name / wildcard separator. Otherwise the wildcard started one byte past the packet end and its length wrapped to UINT_MAX. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alexey Yurchenko
alexey.yurchenko@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41851 register cache manager with SAVEPOINT handler list MDEV-41851 happens because by the time SAVEPOINT is called there exists no connection cache manager yet and it does not care to create one. As a result the cache manger is lazily created later but is missing from the SAVEPOINT's handler list and thus is not fired on ROLLBACK TO SAVEPOINT keeping the event in the cache which in turn is replicated on subsequent COMMIT and applied on the replicas. Make sure to create cache manager in wsrep_register_binlog_handler() if it does not yet exist. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vladislav Vaintroub
vvaintroub@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42049 MTR server-cert.pem has no DNS SAN, fails on OpenSSL 4.1 OpenSSL 4.1 no longer matches a host name against the subject CN when the certificate has no DNS subjectAltName. Re-sign server-cert.pem with subjectAltName=DNS:localhost, and add it to generate-ssl-certs.sh. main.ssl_7937, main.ssl_system_ca and rpl.rpl_ssl1 fail with OpenSSL 4.1 without this change. The SHA1 fingerprint changes. main.ssl_fp (11.4+) must be updated when merging up: F1:D0:08:AF:A1:D2:F4:15:79:B4:39:06:41:F4:20:96:F1:90:A9:65 -> AE:F0:29:15:F1:9E:A0:A0:69:FB:83:20:B9:30:E3:DE:2F:25:2C:37 Assisted-by: Claude:claude-sonnet-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Jan Lindström
jan.lindstrom@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42000 : galera.galera_restart_on_unknown_option fails Problem was that test uses unknown Galera option. Server does 2-phase check for options. In first phase unknown options are ignored and Galera SST/IST is started. In second phase options are checked again now that we have Galera it detects that provided option is unknown and tries to interrupt SST/IST and disconnect wsrep and server using unireg_abort(). However, if Galera library has reached to IST receiver there was no way to interrupt IST and mariadbd gets stuck in unireg_abort() during wsrep disconnect. This issue has been fixed on Galera library. For this test case we need to just verify that Galera library version contains fix for SST/IST interrupt i.e. at least 26.4.29. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Alexey Botchkov
holyfoot@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41430 auth_pam_tool leaves zombie processes. As the auth_pam_tool claims root privileges, the mariadbd can't kill it if it hangs. So instead of sending the SIGKILL to the auth_pam_tool we set the alarm() there so it kills itself after the timeout. The alarm counter is hardcoded to 100 seconds so the authentication can be halted even if the connect_timeout allows it to be longer. The auth_pam.c now calls the waitpid() without the WNOHANG, so it waits for the auth_pam_tool to return. If the PAM module aggressively resets the alarm or handles the SIGALARM the pam_auth() can hang forever. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Jan Lindström
jan.lindstrom@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40211 galera_connect.inc sleeps one second on each invocation Failure: - galera_connect.inc sleeps 1 second, unconditionally, before every connect, as a 2015 workaround for a node racing its own join/IST against another node's concurrent join (MDEV-7178). - ~700 tests in the galera/wsrep suites go through this include, so the blind sleep costs roughly that many seconds in a full run, whether or not any node is still joining. Fix: - Replace the sleep with include/galera_wait_ready.inc after connecting, polling the actual wsrep_ready state instead of guessing a fixed delay. galera_wait_ready.inc is the existing, already widely used helper for this, so this reuses it rather than adding a new check. - Add a $galera_no_wait_ready opt-out for a node that is expected to join a non-Primary component and so never becomes ready; galera_pc_weight.test isolates node_1 before connecting node_3, so node_3 needs it. - The ready check itself must not wait on causality: a test can legitimately connect a second session to a node whose applier is stuck behind a local lock (galera_lock_table.test does, via LOCK TABLES), and wsrep_sync_wait would otherwise block the check's own first query on that same stuck applier. Set it to 0 for the check and restore it from the global value afterward, without reading it back first, since even a bare SELECT of the session variable hits the same wait. Assisted-by: https://mariadb.org/governance/governance-ai-policy/ |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Jan Lindström
jan.lindstrom@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41926 : galera_mdev_31517 times out: mariadbd gets stuck Wrong variable name in the configuration leads to unireg_abort() during wsrep disconnect. However, if Galera library has reached to IST receiver there was no way to interrupt IST and mariadbd gets stuck in unireg_abort() during wsrep disconnect. This issue has been fixed on Galera library. For this test case we need to just verify that Galera library version contains fix for SST/IST interrupt i.e. at least 26.4.29. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Hemant Dangi
hemant.dangi@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42091: --prepare must not trust plugin_dir from backup-my.cnf Issue: backup-my.cnf is part of the backup/transfer directory and can arrive over an untrusted channel (e.g. a Galera SST stream). --prepare honored its plugin_dir value as-is, letting whoever supplied the backup redirect plugin loading to a directory of their choosing. Solution: Pass the joiner's own, locally-resolved --plugin-dir on the --prepare command line: it wins over whatever backup-my.cnf says, regardless of content, unless the user already chose one explicitly via inno-apply-opts, which takes priority as a deliberate local choice. Resolve it by asking the joiner's own mariadbd, which is config- and compiled-default-aware, falling back to a plain config lookup if that's unavailable. Add a regression test driving the real SST joiner script directly: deliver a backup stream whose backup-my.cnf claims an attacker-chosen plugin_dir, and confirm that directory is never referenced. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Elena Stepanova
elenst@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| MDEV-42200 main.mysqlbinlog_stmt_compressed depends on previous tests | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
xnervwang
xnervwang@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41940 sys.ps_setup_reload_saved() leaves session sql_log_bin disabled after an error sys.ps_setup_reload_saved() saves @@sql_log_bin and sets sql_log_bin = 0, but restores it only at the end of the procedure. On an error, its EXIT HANDLER raises SQLSTATE 90001 without restoring sql_log_bin, leaving the calling session with sql_log_bin = 0. Keep the saved value in a local variable, as the fix for MDEV-42005 does, and restore it in the handler when sql_log_bin differs from it. A caller that may not set sql_log_bin fails at SET sql_log_bin = 0; the handler then leaves sql_log_bin alone, so that caller still gets error 90001. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vladislav Vaintroub
vvaintroub@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Do not attempt to resolve addresses that getnameinfo debug injections fake The injections overwrite the lookup result anyway, but the real lookup of the reserved 192.0.2.0/24 test addresses can be slow, and on Linux without DNS fails with a temporary error. Skip it, and use a helper skip_dns() in the tests that did not yet use getnameinfo_error_noname. Assisted-by: Claude:claude-sonnet-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41123 bool show_role_grants(THD *, const char *, ACL_USER_BASE *, char *, size_t): Assertion `pair' failed GRANT to a role that exists in memory but has no row in mysql.global_priv took the "new role" path and called acl_insert_role(), adding a second ACL_ROLE with the same name to acl_roles. DROP ROLE then removed one of them, while user role_grants kept pointing to the other, whose grant pair was already gone. Reject the mismatch between the table and memory with ER_PASSWORD_NO_MATCH, like replace_user_table() already does for users. Also, remove repeatable role hash lookups, one is enough. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Thirunarayanan Balathandayuthapani
thiru@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41336 CHECK TABLE EXTENDED crashes with innodb_force_recovery=3 Problem: ========= After a restart where purge has not run (When innodb_force_recovery=3), purge_sys.head and purge_sys.tail are both unset (trx_no=0). trx_lists_init_at_db_start() calls purge_sys.clone_oldest_view<true>(), which clamped end_view to that 0, so end_view.m_low_limit_id became 0 and changes_visible() returned false for every transaction id. end_view therefore claimed that no history had been purged, although undo log records purged before the restart may already have been freed and reused. CHECK TABLE EXTENDED relies on end_view to decide whether an old version's undo log record is still available. It followed the roll pointer of a purged transaction into a reused undo page and trx_undo_rec_get_pars() hit the assertion Solution: ======== In purge_sys_t::clone_oldest_view<true>(), clamp end_view only if purge has a known position (head.trx_no/tail.trx_no is nonzero). Otherwise keep the oldest view as is, so that the undo log records that purge is allowed to remove are reported as DB_MISSING_HISTORY rather than being read. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Vladislav Vaintroub
vvaintroub@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
mysql_client_test: accept a lost connection after a rejected proxy header Follow-up to MDEV-39564, MDEV-39576 and MDEV-41691. For some malformed headers the server closes the connection with bytes still unread (v1 with a NUL or over 107 bytes, v2 with length 0). That sends a TCP reset, which can make the client drop the error and report CR_SERVER_LOST. Seen once, not reproduced. Accept it in those cases only. Assisted-by: Claude:claude-sonnet-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Andreas Schnederle-Wagner
schnederle@futureweb.at |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41751 A FULLTEXT index added later misses rows when the first one was added to an empty table When ALTER TABLE rebuilds a table with a hidden FTS_DOC_ID column, as when adding the first FULLTEXT index or rebuilding a table that has one, prepare_inplace_alter_table_dict() sets DICT_TF2_FTS_ADD_DOC_ID on the new table, so that row_merge_build_indexes() assigns new FTS_DOC_ID values; it clears the flag when it is done. Since MDEV-23805, inplace_alter_table() skips that phase when the table is empty, so the flag stayed set in the cached table definition until the table was loaded again, for example after a restart. A FULLTEXT index added before that without a rebuild got new document IDs instead of the FTS_DOC_ID of the rows, and searches on it did not find the rows that existed when it was created. Do not set the flag when inplace_alter_table() skips that phase, that is, when ha_alter_info->mdl_exclusive_after_prepare is set. Co-Authored-By: Claude Opus 5.5 <[email protected]> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Hemant Dangi
hemant.dangi@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42122: check_port() must verify the listener is our own Issue: wait_for_listen() asks check_port() whether a process named socat/nc/netcat is listening on the expected port, but passes no PID to match against, so check_port() accepts any process with that name anywhere on the system. On a busy host running many concurrent SSTs, an unrelated process can transiently hold the same port number, and wait_for_listen() then reports "ready" even though this invocation's own listener never came up. Solution: When check_port() isn't given a specific PID to match, verify that a candidate process found by name and port is this script's own process or a descendant of it, rather than accepting any same-named process. Existing callers that already pass a known PID are unaffected. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41520 Unescaped XID bytes in SESSION_TRACK_TRANSACTION_CHARACTERISTICS * always print gtrid and bqual in hex * don't try to be smart to print as few fields as possible - it was broken and could skip bqual, but still print formatID * don't try to predict how many bytes it'll take. Print into a local buffer, then memcpy. Robust and costs just one memcpy. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
xnervwang
xnervwang@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42005 sys.diagnostics(), sys.ps_trace_thread() and sys.ps_trace_statement_digest() leave session sql_log_bin disabled sys.diagnostics(), sys.ps_trace_thread(), and sys.ps_trace_statement_digest() save @@sql_log_bin in @log_bin before disabling binary logging, but calls to ps_setup_save(), ps_setup_reload_saved(), and statement_performance_analyzer() overwrite that saved value with 0. The trace procedures hit this when in_auto_setup or in_auto_enable is TRUE; diagnostics() hits it whenever the PERFORMANCE_SCHEMA engine is listed as supported, including with performance_schema=OFF. The three procedures now save the value in a local v_log_bin variable. The new sysschema.pr_ps_trace_thread test and added cases in sysschema.pr_diagnostics and sysschema.pr_ps_trace_statement_digest check @@sql_log_bin before and after a successful call. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
CONNECT: CSV table discovery does not check the FILE privilege connect_assisted_discovery() checks the FILE privilege before reading the file for FMT, DBF, XML, INI, VEC, REST, JSON and BSON tables, but not for CSV, so a user without FILE could make CSVColumns() open and parse any file. Add TAB_CSV to the list. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Elena Stepanova
elenst@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41085 Enable MTR tests on Windows: rpl suite rpl.rpl_read_old_relay_log_info fails because the test overrrides relay-log.info with the Linux-style ./slave-relay-bin.000001, while Windows uses the format with backslashes, .\slave-relay-bin.000001 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Hemant Dangi
hemant.dangi@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41158: authenticate the mariabackup SST backup-data stream too Issue: The joiner's per-transfer secret was only generated for ssl-mode=VERIFY_*, and checked only on the small GTID stage: the backup-data stage itself was accepted unauthenticated, letting any TCP peer reaching the SST port supply a backup --prepare then runs. Solution: Generate the secret unconditionally and require it on the backup-data stream too, built in lockstep with the existing encrypt/decompress/ progress wrapping so the check can't be silently skipped by it. Add sst-mariabackup-allow-unauthenticated-donor for rolling upgrades, failing closed on invalid values; VERIFY_*'s own pre-existing secret check is unaffected by it. Add a regression test covering the authenticated pipeline with that wrapping active. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Kristian Nielsen
knielsen@knielsen-hq.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Fix corrupt query string in mysqltest embedded The mysqltest --send command re-used the same buffer for the query string to send to each connection thread. This caused a race where a following --send could overwrite the query before the first connection thread had time to copy out the string, resulting in executing a corrupt query. Instead, allocate a new string for each --send and free it in the connection thread. This was seen as a sporadic failure in --embeded-server in test innodb.temp_truncate_freed_race (and probably others). Signed-off-by: Kristian Nielsen <[email protected]> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Pekka Lampio
pekka.lampio@galeracluster.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38999: Galera - stale reads in explicit transactions wsrep_must_sync_wait() skipped a statement's causal wait unconditionally once a multi-statement transaction was open, regardless of which wsrep_sync_wait bit was configured - so later statements could run against a view no fresher than whatever BEGIN itself happened to check. A timed-out wait's error also stayed sticky until commit/rollback, breaking ROLLBACK itself. Fix: only skip the wait once the transaction has made its first write or locking read (SELECT ... FOR UPDATE/LOCK IN SHARE MODE, including via a stored procedure CALL, autocommit statements, and UNION) - after that, re-waiting risks a self-deadlock against the local applier. Clear a timed-out wait's error immediately instead of leaving it sticky. Tests: galera_MDEV-38999*.test cover the bitmask gap, the self-deadlock risk, stored-procedure/UNION/autocommit locking reads, and the query cache's independent wait path. Assisted-by Claude AI |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Jan Lindström
jan.lindstrom@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42140 require galera >= 26.4.29 in galera_wsrep_schema_detached Add a galera library version check and the resulting .result line. Requires a galera library with the MDEV-42140 IST allowlist fix. Assisted-by: Claude:claude-4.6-sonnet |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Elena Stepanova
elenst@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42202 perfschema.relaylog fails when run after other replication tests The test checks file I/O instrumentation accumulated since server startup, so it relied on getting freshly started servers. With duplicate options removed, mtr may now reuse servers left by a previous replication test, and the test sees binary/relay log files and statistics from it. Restart both servers at the beginning of the test, removing binary and relay logs while the servers are down. RESET MASTER and RESET SLAVE are not sufficient, as performance schema keeps instances of files deleted by them, and a restart opens a new binary log anyway. Assisted-by: Claude:claude-opus-5-5 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Elena Stepanova
elenst@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-41085 Enable MTR tests on Windows: rpl suite rpl.rpl_change_master_long_channel_name fails on Windows because it expects a 252-character name (base name, excluding the path) to be valid; on Windows the whole path is limited to 260 characters, so 252-character name already fails |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Jan Lindström
jan.lindstrom@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-42141 tolerate ER_NO_SUCH_TABLE in GCF-1018B's reap wsrep_sync_wait=0 lets node_2's DELETE run before node_1's CREATE TABLE replicates, so the first iteration of the test's 500-iteration INSERT/DELETE loop can legitimately race a not-yet-existing t1. The --error list on node_2's reap did not accept ER_NO_SUCH_TABLE, even though it already tolerates other non-deterministic races (lock wait, deadlock, duplicate key) for the same reason, matching the pattern used for the same race in GCF-1060 (MDEV-41923). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||