Console View
|
Categories: connectors experimental galera main |
|
| connectors | experimental | galera | main | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
cleanup: only include my_compare.h into heap code as needed to avoid name conflict on `get_key_length` |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
WITHOUT_ABI_CHECK followup Followup for b337e14440b as info_src takes time too. info_src does not make much sense without ABI check. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
generalize ROOT_FLAG_MPROTECT to work on Windows, rename accordingly * it's called ROOT_FLAG_VMEM * it does not imply any protection, ROOT_FLAG_MPROTECT was a misnomer * it means that the memory is allocated using my_virtual_mem_commit, not my_malloc, so not on heap * memory allocated this way can be protected with my_virtual_mem_protect() * thus root using ROOT_FLAG_VMEM can be protected with protect_root() Assisted-By: Claude:claude-5-sonnet |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: test --tail-log / --tail-warnings in suite/mtr Run a child mariadb-test-run.pl on misc.crash (SIGSEGV) and misc.warn (system-versioned SYSTEM_TIME LIMIT overflow) and check that the crash and shutdown-warnings reports are trimmed by --head-log / --tail-log / --strip-log and --tail-warnings. Also exercise --list-combinations and --suite negation. The child's volatile output (pids, timestamps, addresses, an unbounded backtrace, ...) is reduced to a deterministic skeleton with include/grep.inc and normalized with --replace_regex: the two anchor backtrace frames (my_print_stacktrace, main) are kept while the variable middle frames and the per-line values are cut down to "<...cut...>". The test is gated behind --big-test. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
forkfun
alice.sherepa@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Merge branch '11.4' into '11.8' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40411 SFORMAT ignores max_allowed_packet do our own allocator that implements std::allocator interface but uses our memory accounting (my_malloc) and limits max allocation (e.g. to max_allowed_packet). use it for fmt::vformat_to. later can be used for various std:: stuff too. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Thirunarayanan Balathandayuthapani
thiru@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| - Diagnostic patch | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --strip-backtrace and the --strip-log alias On a crash the server writes its own stack backtrace (my_print_stacktrace) to the error log, which MTR echoes in the crash report. When a core file is available the gdb/lldb backtrace from My::CoreDump is more useful, so this server-side report is often just noise. Add --strip-backtrace (off by default). When given, it is dropped from the "Server log from this test" excerpt by strip_backtrace(). The gdb/lldb backtrace from a core file is a separate thing and is not affected. strip_backtrace() treats the backtrace as a bounded block rather than matching lines everywhere, so a line outside a backtrace that merely ends in an [0x...] address is kept: - a "Thread pointer:" or "Attempting backtrace" line starts a block; - inside a block every recognisable backtrace line is dropped: the intro prose, the thread pointer, blank lines, a "stack_bottom" or "Stack range" header, frame lines (both "...[0x...]" symbol frames and the bare "0x..." addresses printed by the frame-pointer walker) and the interleaved addr2line / my_addr_resolve diagnostics; - the first line that is not recognisable backtrace content ends the block and is kept, so pass-through resumes and a later backtrace (or the rest of the log) survives. Because anything unrecognised ends the block rather than being dropped, a backtrace with no "stack_bottom" line and no bracketed frames - as the frame-pointer-walker and aborted-backtrace builds produce - does not swallow the remainder of the log. Also add --strip-log, a convenience alias that turns on all three of --strip-hints, --strip-limits and --strip-backtrace at once. All stripping runs before the --head-log/--tail-log trimming, so those line counts apply to the already-stripped log. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40341 store read-only sysvars in a read-only root Store all READ_ONLY sysvar values in the read_only_root Even though READ_ONLY sysvars are protected, for string variables it usually means that the pointer cannot be changed. The value it points to - the string itself - still can be. Let's store all values of string READ_ONLY sysvars in the read_only_root. sysvars that point directly into argv are copied to read_only_root. sysvars that have their values calculated and allocated now must be explicitly marked with PREALLOCATED to let it know they have to be free()-d. Assisted-By: Claude:claude-4.8-opus |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40186 MEMORY tables incorrectly restart index scan on DELETE remember the last found key and restart the search (if needed) from it not from the original one. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: make the debugger terminal configurable The terminal emulator for interactive debuggers (--gdb, --exec-gdb, ...) was hard-coded to xterm. It is now configurable via the --terminal option or the MTR_TERM environment variable (the option takes precedence). The template understands two placeholders, {title} (window title) and {command} (the debugger invocation, expanded as separate argv words); the default "xterm -title {title} -e {command}" reproduces the previous behaviour. My::Debugger::term_argv() expands the template into an argv list for the mysqld/client/boot debuggers; the same template drives the --exec-<dbg> shell-string wrapper, where {command} must be last. For example, debug the bootstrap server for main.1st under gdb in a KDE Konsole window: mtr --boot-gdb --terminal='konsole -p tabtitle={title} -e {command}' main.1st |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-39063 Server crashes at Item_func_lastval and Item_func_setval with CTE alias Pure aliases are not handled properly by Item_func_lastval::val_int() and Item_func_setval::val_int(). This is followup fix for MDEV-33985 where it missed similar cases for LASTVAL() and SETVAL(). add_table_to_list() does not create MDL request for pure aliases, i.e. when there is no table_list->db set or TL_OPTION_ALIAS was set. When the expression is not inside CTE the case with empty db is handled by: else if (!lex->with_cte_resolution && lex->copy_db_to(&db)) DBUG_RETURN(0); So, table_list gets current database name and the query is failed with ER_NO_SUCH_TABLE error. The fix adds the case of is_pure_alias() check for val_int() methods and fails it with ER_NOT_SEQUENCE2 error. Note: semantics for TL_OPTION_ALIAS cannot be based on empty db, only parser can set TL_OPTION_ALIAS as resolve_references_to_cte() relies on TL_OPTION_ALIAS after copy_db_to(). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-39821 heap-use-after-free in heap_rnext with tree indexes heap_update() forgot to update key_changed |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --combination-select to run one combination Add --combination-select=N (short alias -c) to run only a single combination from a .combinations file instead of every one. N is the position of the combination in the file, counting the [] sections in file order: 1 first combination -1 last combination 2 second combination -2 last but one ... ... So --combination-select=-1 runs only the last combination, -c 2 runs the second one, etc. N must be a non-zero integer; 0, a non-integer, or a value outside the range of a given file is an error. The integer format is validated up front in command_line_setup(), so a bad value is rejected even for tests that have no .combinations file. The range and the selection itself are applied in combinations_from_file(), which is the single point through which every .combinations file is read (both the suite-level "combinations" file and per-test "<test>.combinations"), so it always follows the [] section order of the file. When a test draws combinations from more than one file, N selects within each file. It is ignored when --combination is given (that already replaces the .combinations files with command-line combinations). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
ParadoxV5
paradox.ver5@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Test for MDEV-39788 MDEV-39788 found that the recent refactor on the `main` (now 12.3) branch missed the (inconsistent) detail that, unlike `relay-log.info`, `master.info`’s line count _includes_ the line-count line itself. This commit extends and simplifies the test `rpl.rpl_read_new_relay_log_info` to `main.rpl_new_info` so it * Checks this detail to remind future changes of this type of mistake. * Covers `@@master_info` as well. * Covers the refactor’s buggy format as a downgrade/revert test. While here, this commit also includes a new-format version of MDEV-38020’s test to double as the value read check. Reviewed-by: Brandon Nesterenko <[email protected]> |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --list-combinations to list a test's combinations Add --list-combinations (alias --lc) which, for the specified test(s), prints the available combinations in the selectable "test,combination" form and exits without running anything. For each collected test it prints a summary line followed by one line per combination, e.g.: $ mtr --list-combinations versioning.foreign Combinations for versioning.foreign: timestamp,trx_id versioning.foreign,timestamp versioning.foreign,trx_id Each printed line is exactly what you pass back to mtr to run that one combination (it round-trips). When a test draws combinations from more than one .combinations file (several dimensions), the lines list the full product, e.g. "test,dim1_value,dim2_value". |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: allow excluding suites with --suites=!NAME Extend the --suite[s] option so a suite name prefixed with '!' excludes that suite instead of adding it. This makes "run everything except X" easy and lets a config-file suite list be trimmed on the command line. Semantics: --suites=A,B run suites A and B (as before) --suites=!A run the default set minus A --suites=A,B,!B run A (a '!' name is removed from the positive names) [mtr] suites=A,B + --suites=!B run A (command-line exclusion trims the file set) Rules: - If any plain (positive) names are given, they are the base set; otherwise the base is the default suite set. - Every '!'-prefixed name is then removed from the base. - Names accumulate across the [mtr] config file and the command line, so a '!' exclusion on the command line applies to the set configured in the file (see below). To make the cross-source case work, --suites now accumulates its values into @opt_suites instead of a last-wins scalar: the option handler pushes each comma-separated value, so the [mtr] config file value and the command-line value are both collected. The positive/negative resolution then runs once in main(), producing the final suite list. Exclusion matching ignores the "-<overlay>" suffix used in the default list (e.g. "rpl-"), so --suites=!rpl removes "rpl-", and slashes are preserved (--suites=!compat/oracle works). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --strip-limits to omit the resource-limits table On a crash the server writes a "Resource Limits" table (read from /proc/self/limits) to its error log, which MTR echoes in the crash report. Like the bug-reporting hints it is rarely useful when reading these reports routinely. Add --strip-limits (off by default). When given, the table is dropped from the "Server log from this test" excerpt by strip_resource_limits(). Unlike a hint paragraph the table has no trailing blank line - it runs straight into the next section ("Core pattern:", ...). So the filter removes the opener line (matching both "Resource Limits:" and the newer "Resource Limits (excludes unlimited resources):"), the "Limit ... Soft Limit ..." header and the "Max ..." rows, and stops at the first line that is neither, keeping the surrounding data. This is independent of --strip-hints. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR conf: honor standard --defaults-* options Wire the standard MariaDB defaults options into MTR's own option loading, mirroring libmariadb's get_defaults_options()/my_load_defaults(): --no-defaults do not read any option file --defaults-file read [mtr] from this file only --defaults-extra-file read this file in addition (extra-file slot) --defaults-group-suffix also read [mtr<suffix>] --print-defaults print the [mtr] options and exit --defaults-file and --defaults-extra-file keep their existing MTR meaning as the server config *template* too: the two consumers read different groups of the same file - [mysqld]/[client]/... for the template (via collect_option), [mtr] here. A command-line --defaults-file / --defaults-extra-file overrides the MTR_CONFIG / MTR_CONFIG_EXTRA environment variable; --defaults-group-suffix overrides MARIADB_GROUP_SUFFIX / MYSQL_GROUP_SUFFIX. An explicitly named file (--defaults-file or $MTR_CONFIG) that does not exist is an error, matching libmariadb; a missing file in the standard search order is still skipped silently. Order of execution in command_line_setup(): 1. get_defaults_options() runs first (before the main GetOptions). It consumes the MTR-only options (--no-defaults, --defaults-group-suffix, --print-defaults) out of @ARGV, and *peeks* --defaults-file / --defaults-extra-file off a copy of @ARGV so they stay in @ARGV for the second consumer. 2. load_defaults() reads the [mtr] group from the selected files and prepends the resulting options into @ARGV, ahead of the ---end-of-config--- marker. 3. My::Debugger::fix_options() adjusts optional-argument options. 4. The main GetOptions(%options) parses everything - the config options (before the marker) and the command line (after it). Command-line options come later and therefore take precedence. --defaults-file is handed to collect_option for the template. Options still unrecognized afterwards are validated in a manual loop that uses the marker to report whether a bad option came from the config file or the command line. Getopt::Long is configured "pass_through", so a parse leaves any option it does not declare in @ARGV instead of erroring. Because pass_through is on, step 1 skims off only the defaults options without touching the rest, and step 4 does the real parse; neither errors on options it does not declare. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR conf: options from .cnf file MTR options are read from standard MariaDB conf file from [mtr] section. Command-line options take precedence over configuration file. There are two variants of config file location: 1. Default behaviour to look for global, server and user configs as described in https://mariadb.com/kb/en/configuring-mariadb-with-option-files/ 2. Custom config location specified by MTR_CONFIG environment variable. None of other config files are read in this case. If there is wrong setting in configuration file MTR fails and displays the error message. It is clear from the error message from what source the wrong option comes: config file or command-line. The config file name and the line number is not printed which is the subject for further improvement. Implementation reuses the in-tree My::Config parser instead of adding a third-party module. A new load_defaults() in mariadb-test-run.pl parses the config files with My::Config and merges the [mtr] options into the @ARGV array for further validation in Getopt::Long: - Config options are merged into the beginning of the array so that command-line options take precedence. They are separated from the command-line options by ---end-of-config--- which is used as a marker for the source of failed options after Getopt::Long; - a value-less [mtr] option that actually requires a value would let Getopt::Long swallow that marker (or the following option) as its value; this is detected and reported instead of failing obscurely, and the invalid-option message prints the bare option name; - Global, server and user config files are searched; only the first existing among the global and server locations is used, then the user's ~/.my.cnf. A config file can also be specified explicitly via MTR_CONFIG, in which case no other file is read; - Argument-less options are passed as is (My::Config::Option::option() renders them without a value); - My::Config already honours !include; it was extended to also support !includedir, to skip whitespace-only lines and to ignore any other unknown ! directive instead of failing. A line beginning with '#' is treated as a comment, as in any my.cnf, not as an option named '#...'. (An earlier version of this patch was based on the CPAN MySQL::Config module, which ignored all ! directives.) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Dave Gosselin
dave.gosselin@mariadb.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-36610: Use the removed tables when clearing the eliminated flag Table elimination can remove an outer join whose inner table was already a const table. Such a table keeps the const table position it was given earlier, so it never enters JOIN::eliminated_tables even though its ON expression is still marked as eliminated. That bitmap is therefore not a record of which ON expressions were marked, and reading it to decide what to clear fails in two ways. When nothing else is eliminable the bitmap is empty, the clearing step is skipped, and the assertion in Item_subselect::exec() still fires for a subquery shared with the WHERE clause. When something else is eliminable, the ON expression that is never evaluated is treated as live, so a subquery that never runs loses the flag and is reported by EXPLAIN. Add JOIN::elim_on_expr_tables, set for every table that elimination removes, and read it instead of JOIN::eliminated_tables when deciding which expressions are still evaluated. The new test section covers both directions. Its first query asserts without this change and also asserts without the earlier fix, so it is a case that fix did not reach rather than something it introduced. Its second query holds the subquery only in the ON expression that is never evaluated, and the control after it shows that the same subquery does raise an error in a position where it is evaluated. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --exit-line to stop a test at a given line --exit-line=N stops a test before the command at line N of the test file, exactly as if an --exit directive were placed there. Handy for bisecting where a test starts to misbehave, and for debugging a test without extracting a standalone test case: record the run under rr (--rr), then reverse-replay from the end of the trace straight to the SQL command of interest. mariadb-test-run.pl gains --exit-line (-l) and forwards it to mysqltest. The option is global: it applies to every test in the run, each stopping at line N of its own test file (so N is per-file). A test whose file has fewer than N lines is unaffected and runs to completion. mysqltest gains the --exit-line (-l) option: after reading each command, if we are in the top-level test file (cur_file == file_stack) and the command starts at or past the requested line, it aborts like Q_EXIT. Gating to the main file keeps line numbers of sourced includes from triggering it. suite/mtr/feat exercises it by running a child mtr with --exit-line=5 on main.1st (line 4 "show databases;", line 5 "show tables in mysql;"): the run stops before line 5, so the recorded result's tables section is missing and the test fails with a length mismatch - proving the exit landed exactly at the requested line. The child's whole output is kept (no grep); volatile banner/footer lines are cut by prefix via $NORM_RUN. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: speed up test collection by caching result-dir listings collect_one_test_case() located each test's .result/.rdiff files with a per-test glob: for (<{$resdirglob}/$tname*.{rdiff,result}>) { ... } Because of the "$tname*" wildcard, glob had to opendir and read the whole result directory on every call, and the "{rdiff,result}" brace made it do so twice (once per extension). Run once per test, this is O(tests * dirsize) - the suite's result directory is re-read ~2x for every test in the suite. Profiling the collection of all default suites showed this single line accounting for 8.3s of the 13.1s phase (63%), and the phase issuing 408k stat() calls (339k of them ENOENT). Read each result directory once instead, indexing its .result/.rdiff files by base test name (the leading run of characters before the first '.' or ','), and look a test's files up in that cache. The "$tname*" glob was only a coarse prefilter anyway - the existing regex "^$tname((?:,combo)*)\.(rdiff|result)$" does the real matching - so indexing by base name yields exactly the same candidate set. Stats (collecting all default suites, 6548 tests, warm cache): collection time 13.1s -> 4.5s (~2.9x) directory-open syscalls 23026 -> 5284 The collected test list (result_file, base_result, skip and comment for every test) is byte-for-byte identical before and after. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Remove no_valgrind_without_big.inc from *C* include dir The identical file is in mysql-test/include where it is used. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
cleanup: make my_virtual_mem_reserve() portable, unify buf0buf.cc make my_virtual_mem_reserve() work on Windows and on Linux (falling back to my_large_virtual_alloc() - that's what InnoDB did instead). This makes the usage pattern portable without #ifdef: - reserve a memory range - commit (allocate) memory from a reserved range - decommit memory, keeping it reserved - release reserved memory back to OS |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-23086 Error codes/messages reveal information about table structure if a user tries to access a table or a database they have no priivleges on, the error is alwaus "access denied", independently from whether the object exists or not. Do the same for columns. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-38854 Assertion table->vers_write fails upon ODKU into table with versioned column In MDEV-25644 vers_check_update() sets vers_write to false in case it returns false. It is ok for UPDATE but is not correct for ODKU is bulk insert requires vers_write on next tuple. The fix return vers_write value back when vers_check_update() and related vers_insert_history_row() are done in ODKU. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
drrtuy
drrtuy@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| chore: renaming, extra docs and bump DuckDB to gamma. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --strip-hints to omit crash-report hints A crash report contains, besides the actual server log and backtrace, several explanatory "hint" paragraphs - bug-reporting boilerplate, instructions for producing a better stack trace, "Attempting backtrace", "Output from gdb follows", etc. They are useful once but noise for someone who reads these reports all day. Add --strip-hints (off by default). When given, these hints are omitted and only the real content is kept. Three sources are handled: - The paragraphs the server writes to its error log (via the crash signal handler) are dropped from the "Server log from this test" excerpt by strip_crash_hints(). Each hint is a paragraph running from a recognizable opener line to the next blank line, so trimming is robust across server-version wording changes; the surrounding data (CURRENT_TEST, the signal line, "Server version", the backtrace, thread pointer, ...) is kept. - My::CoreDump prints its own "Output from gdb/lldb follows ..." header; it is suppressed too, leaving just the debugger output. - mariadb-test-run.pl's own end-of-run boilerplate in mtr_report_stats() ("The log files in var/log may give you some hint ..." and the MariaDB bug-tracker URL) is skipped as well. $opt_strip_hints is declared with "our" so My::CoreDump and mtr_report.pm can read it as $::opt_strip_hints. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR conf: report config file errors as file:line without croak Make every wrong setting in a server config file fail with a human-friendly message and no Perl stack trace or source-code line. My::Config now treats parse errors as data errors instead of caller bugs: each parse failure dies with a clean "file:line: reason" message naming the config file and the offending line number, and without the "at FILE line N." Perl location. This also delivers the file name and line number that were previously missing. The internal misuse/invariant assertions keep using croak, which is the right tool there. load_defaults() (in mariadb-test-run.pl) catches that die and re-throws it through mtr_error(), which flushes output, prints the uniform mtr error format and exits in a controlled way. This replaces the earlier fragile approach of stripping the location suffix off a croak with a regexp. mariadb-test-run.pl: validate the parallel option value before the numeric comparison, so a non-numeric or negative value reports a clean error instead of an "Argument isn't numeric" warning with a code line. This path is shared with the command line, so it is fixed there too. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| cleanup: main.view test | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --exit-line to stop a test at a given line --exit-line=N stops a test before the command at line N of the test file, exactly as if an --exit directive were placed there. Handy for bisecting where a test starts to misbehave, and for debugging a test without extracting a standalone test case: record the run under rr (--rr), then reverse-replay from the end of the trace straight to the SQL command of interest. mariadb-test-run.pl gains --exit-line (-l) and forwards it to mysqltest. The option is global: it applies to every test in the run, each stopping at line N of its own test file (so N is per-file). A test whose file has fewer than N lines is unaffected and runs to completion. mysqltest gains the --exit-line (-l) option: after reading each command, if we are in the top-level test file (cur_file == file_stack) and the command starts at or past the requested line, it aborts like Q_EXIT. Gating to the main file keeps line numbers of sourced includes from triggering it. suite/mtr/feat exercises it by running a child mtr with --exit-line=5 on main.1st (line 4 "show databases;", line 5 "show tables in mysql;"): the run stops before line 5, so the recorded result's tables section is missing and the test fails with a length mismatch - proving the exit landed exactly at the requested line. The child's whole output is kept (no grep); volatile banner/footer lines are cut by prefix via $NORM_RUN. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: add --exec-rr / --exec-gdb to wrap every --exec New debugger options run every mysqltest '--exec' command line under a wrapper (rr record, or gdb --args in an xterm), so external tools invoked by tests (myisampack, myisamchk, ...) can be traced or debugged without naming them. My::Debugger: each debugger with an 'exec' template gets an --exec-<dbg> option auto-registered. pre_setup() detects the requested one, runs its one-time 'pre' hook, and exports MYSQLTEST_EXEC_WRAP (plus _RR_TRACE_DIR for rr, and an xterm wrapper for terminal debuggers like gdb). do_exec(): when MYSQLTEST_EXEC_WRAP is set it is injected into the command line, after any leading shell NAME=VALUE assignments (quotes and backslashes honoured), so the tool - not the assignment word - is what gets wrapped. The implicit /bin/sh -c that popen() supplies provides the shell layer. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40341 store read-only sysvars in a read-only segment Protect all READ_ONLY sysvars from run-time changes. Put them into a separate section and use my_virtual_mem_protect() to make this section read-only before the server starts accepting connections. Verify that they're all protected in the sys_var constructor. One exception: opt_noacl (--skip-grant-tables) can be changed from 1 to 0 on FLUSH PRIVILEGES. Let's briefly drop the protection for this 1->0 change. It can be needed only once in a server lifetime and only if it was started with --skip-grant-tables On shutdown the protection is removed, making variables writable again because shutdown resets some of them during the cleanup Assisted-By: Claude:claude-4.8-opus |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Sergei Golubchik
serg@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-40337 store user vars in a dedicated memroot user_var_entry objects and their names have a connection lifetime, they exist until the connection ends (or is reset), and then they're all deleted at once. This is exactly the use case for MEM_ROOT, let's store them there. Additionally, let's set MY_ROOT_USE_VMEM flag to keep this memroot off the general heap where user_var_entry values are stored and where heap buffer overflows can happen. The latter makes memory allocations for the MEM_ROOT about 10x more expensive, so let's always start with an empty memroot (= zero overhead if no user variables are used) and on THD cleanup let's retain one memroot block (= zero overhead if the next connection takes THD from the cache and uses user variables up to one block size). Assisted-By: Claude:claude-4.8-opus |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR: make the debugger terminal configurable The terminal emulator for interactive debuggers (--gdb, --exec-gdb, ...) was hard-coded to xterm. It is now configurable via the --terminal option or the MTR_TERM environment variable (the option takes precedence). The template understands two placeholders, {title} (window title) and {command} (the debugger invocation, expanded as separate argv words); the default "xterm -title {title} -e {command}" reproduces the previous behaviour. My::Debugger::term_argv() expands the template into an argv list for the mysqld/client/boot debuggers; the same template drives the --exec-<dbg> shell-string wrapper, where {command} must be last. For example, debug the bootstrap server for main.1st under gdb in a KDE Konsole window: mtr --boot-gdb --terminal='konsole -p tabtitle={title} -e {command}' main.1st |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
forkfun
alice.sherepa@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Merge branch '11.8' into '12.3' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
forkfun
alice.sherepa@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Merge branch '10.11' into '11.4' | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Aleksey Midenkov
midenok@gmail.com |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-30281 MTR conf: add --mtr-config-only (-M) --mtr-config-only (-M) makes --defaults-file / --defaults-extra-file be read for MTR's own [mtr] options only, without also being applied as the server config template. Normally those two options serve two consumers of the same file: the [mtr] group configures MTR itself (load_defaults), while the remaining groups - [mysqld]/[client]/... - become the test servers' config template (collect_option). -M opts out of the second use: once load_defaults has read [mtr], it removes --defaults-file / --defaults-extra-file from @ARGV, so the main GetOptions/collect_option never turns them into a template. The switch may be given on the command line, or set inside the [mtr] section of the config file itself. In the latter case load_defaults notices mtr-config-only while reading [mtr] and drops the file options on the fly, so [mtr] mtr-config-only turns any file passed via --defaults-file into an MTR-only config. get_defaults_options() consumes -M out of @ARGV like the other MTR-only defaults options; it is a directive, not passed through to GetOptions. -M is only relevant for a command-line --defaults-file / --defaults-extra-file (the dual-use options). The MTR_CONFIG / MTR_CONFIG_EXTRA environment variables are read only for [mtr] and never reach collect_option, so they are mtr-config-only already and -M is a no-op for them. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Daniel Black
daniel@mariadb.org |
|
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
MDEV-39113 MSAN/ADDR addr2line stack resolver detrimental MSAN/ASAN test environment, the addr2line was so high in memory utilization that it was the pick of the OOM killer to resolve the OOM situation. Once this occurred there wasn't a saved core or gdb backtrace of the core to resolve the issue. To resolve this, make stack-trace default to 0 (off) for the addr2line base implementation under memory sanitizer and address sanitizer. MariaDB-backup also forces the enabling of stack-trace. Disabling this unconditionally reduces the risk of a user operational impact if a lengthy stack trace starting in a mariadb-backup critical locked period. The mysqld--help test now excludes the stack-trace as its result is environment dependant. The "Defaults to..." output for suppressed variables, currently only stack-trace, is excluded. Since thread-stack is an excluded varable, the ubsan/asan exclusions from commits dfa6fba9595a and dfa6fba9595a aren't required. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||