Home - Waterfall Grid T-Grid Console Builders Recent Builds Buildslaves Changesources - JSON API - About

Console View


Categories: connectors experimental galera main
Legend:   Passed Failed Warnings Failed Again Running Exception Offline No data

connectors experimental galera main
Sergei Golubchik
remove questionable vector search optimizations

new round of benchmarks didn't reveal any benefits from them,
quite the opposite.

these were old optimizations added in the early phase of vector
search development. apparently later changes made them obsolete.
Oleg Smirnov
MDEV-39304 QB_Name hint with path is silently ignored inside view definition

This commit adds an explicit warning message indicating
that QB_NAME hints with path are not supported inside view definitions
Sergei Golubchik
MDEV-39301: fix main.xa - Timeout in wait_until_count_sessions.inc

Backport from 11.8 aa2ac3078fa99c7cf712c29023c48ffe68677e10
Vladislav Vaintroub
MDEV-14443 DENY statement

Implements DENY/REVOKE DENY and associated tasks.
Monty
Cleanup memory from OpenSSL at exit.

This removes warnings about not freed memory when using valgrind
Sergei Golubchik
MDEV-18386 more tests and an assert

add (some of) tests provided by Roel
add an assert to document calling conventions
Sergei Golubchik
cleanup: remove make_unique_invisible_field_name()

duplicates make_internal_field_name() and only used in DBUG_EXECUTE_IF
Rex Johnston
MDEV-38072 Optimizer choosing the wrong plan

(Edited heavily by Sergei P.)
(Also fixed the testcase)

When multiple indexes produce ordering that matches the
ORDER BY ... LIMIT clause, like

  INDEX idx1(kp1, kp2)
  INDEX idx2(kp2)
and the query with
  WHERE kp1=const ORDER BY kp2 LIMIT 2

then test_if_cheaper_ordering() in pre-11.0 versions will choose
the index with the smallest KEY::user_defined_key_parts (idx2 in
this example). This can produce a much worse query plan.

The fix is to do what MariaDB 11.0 would do: use the index for which
we have the cheapest access method. The cost of access method here
takes into account that we will stop after producing #LIMIT rows.

The fix is controlled by the
  @@optimizer_adjust_secondary_key_costs=fix_order_by_index_choice
flag and is OFF by default.
Thirunarayanan Balathandayuthapani
MDEV-39261 MariaDB crash on startup in presence of indexed virtual columns

Problem:
========
A single InnoDB purge worker thread can process undo logs from different
tables within the same batch. But get_purge_table(), open_purge_table()
incorrectly assumes that a 1:1 relationship between a purge worker thread
and a table within a single batch. Based on this wrong assumtion,
InnoDB attempts to reuse TABLE objects cached in thd->open_tables for
virtual column computation.

1) Purge worker opens Table A and caches the TABLE pointer in thd->open_tables.
2) Same purge worker moves to Table B in the same batch, get_purge_table()
retrieves the cached pointer for Table A instead of opening Table B.
3) Because innobase::open() is ignored for Table B, the virtual column
template is never initialized.
4) virtual column computation for Table B aborts the server

Solution:
========
The purge coordinator thread now opens both InnoDB dict_table_t* and
MariaDB TABLE* handles during batch preparation in
trx_purge_attach_undo_recs(). purge_node_t::tables now stores only
std::pair<dict_table_t*, TABLE*>. When worker thread
needs TABLE* for virtual column computation, it fetches
the TABLE* from purge_node_t->tables.

trx_purge_table_open(): Modified to open TABLE* using the
coordinator's MDL ticket

open_purge_table(): Accept and use the MDL ticket from coordinator thread

purge_sys_t::coordinator_thd: To track the coordinator thread in purge
subsystem

purge_node_t::end(): To prevent premature table closure when the coordinator
acts as a worker and skips innobase_reset_background_thd()

purge_sys_t::close_and_reopen(): Properly handles retry logic by clearing
all table state and reopening the table. Uses mdl_map for maintaining
mdl_tickets for each table id

trx_purge_close_tables(): Now accepts mdl_map parameter to
release MDL tickets from the coordinator's map after closing tables

trx_purge():  MDL tickets are now stored in a local mdl_map instead of
purge_node_t. Closes the coordinator's TABLE* objects after all workers
are completed

Declared open_purge_table() and close_thread_tables() in trx0purge.cc
Daniel Black
Bump columnstore engine submodule
Sergei Petrunia
MDEV-38072 Optimizer choosing the wrong plan

When multiple indexes produce ordering that matches the
ORDER BY ... LIMIT clause, like

  INDEX idx1(kp1, kp2)
  INDEX idx2(kp2)
and the query with
  WHERE kp1=const ORDER BY kp2 LIMIT 2

then test_if_cheaper_ordering() in pre-11.0 versions will choose
the index with the smallest KEY::user_defined_key_parts (idx2 in
this example). This can produce a much worse query plan.

The fix is to do what MariaDB 11.0 would do: use the index for which
we have the cheapest access method. The cost of access method here
takes into account that we will stop after producing #LIMIT rows.

The fix is controlled by the
  @@optimizer_adjust_secondary_key_costs=fix_order_by_index_choice
flag and is OFF by default.
Marko Mäkelä
MDEV-37058: Assertion failure after change buffer upgrade

log_t::clear_mmap(): Relax a debug assertion that was verified to fail
when upgrading from MariaDB Server 10.6:

mysql-test/mtr main.1st
/path/to/11.4/mariadbd --datadir "$(pwd)"/mysql-test/var/mysqld.1/data

Tested by: Matthias Leich using the test by Elena Stepanova
Reviewed by: Thirunarayanan Balathandayuthapani
Raghunandan Bhat
MDEV-39265: Assertion `(mem_root->flags & 4) == 0` failed upon 2nd execution `USING DEFAULT` with sequence

Problem:
  When a prepared statement uses `DEFAULT` with sequence, on its
  second or subsequent execution, server tries to allocate TABLE_LIST
  object (used for adding sequence table to `internal_tables` list) on
  statement's memory root. This fails with an assert because statement's
  memory root is marked read-only after the first execution.

  CREATE SEQUENCE s;
  CREATE TABLE t (a INT DEFAULT(NEXTVAL(s)));
  PREPARE stmt FROM "UPDATE t SET a = ?";

  EXECUTE stmt USING 3; -- first execution, marks mem_root read-only
  EXECUTE stmt USING DEFAULT;  -- tries to allocate on second execution

Fix:
  Temporarily clear the read-only flag on the statement memory root to
  allow the allocation. Also adds a debug hook to verify allocation
  happens not more than once per prepared statement and per internal
  table added to the list.
Sergei Golubchik
cleanup: generocity->leniency

as a more fitting English word here
Sergei Golubchik
don't create build files like mysqlserver-$<CONFIG>.mri.tpl

cmake generator expressions are expanded *during the build step*.
If the file is created *during the configuration step* its name
cannot use generator expressions.
Sergei Golubchik
MDEV-39319 crash with ST_GeomFromGeoJSON(, NULL)

one cannot check item->null_value before evaluating item's value
ParadoxV5
MDEV-39240 10.6-11.4 Replication Allows Full Range for 32-bit Unsigned Timestamps

Row-based Replication did not vaidate serialized timestamps,
which allows (pre-11.5) replicas to accept “negative” timestamps
(between the Year 2038 limit and the 4-byte limit) via replication.
In particular, a completely valid source of those timestamps is 11.5.1+
primaries, where MDEV-32188 has increased the upper limit of timestamps
to Year 2106 by utilizing this previously invalid range.

This commits fills in this pre-processing –
swap the Year 2106 max with the Year 2038 max or error on the others.
Sergei Golubchik
MDEV-39319 crash with ST_GeomFromGeoJSON(, NULL)

one cannot check item->null_value before evaluating item's value
Sergei Petrunia
MDEV-38072 Optimizer choosing the wrong plan

When multiple indexes produce ordering that matches the
ORDER BY ... LIMIT clause, like

  INDEX idx1(kp1, kp2)
  INDEX idx2(kp2)
and the query with
  WHERE kp1=const ORDER BY kp2 LIMIT 2

then test_if_cheaper_ordering() in pre-11.0 versions will choose
the index with the smallest KEY::user_defined_key_parts (idx2 in
this example). This can produce a much worse query plan.

The fix is to do what MariaDB 11.0 would do: use the index for which
we have the cheapest access method. The cost of access method here
takes into account that we will stop after producing #LIMIT rows.

The fix is controlled by the
  @@optimizer_adjust_secondary_key_costs=fix_order_by_index_choice
flag and is OFF by default.
Marko Mäkelä
fixup! b182d721372bbb85b90118ace5065f5a279a3586
Abhishek Bansal
MDEV-18386: Add server_audit_timestamp_format to customize audit log timestamps
HNOONa-0
MDEV-39043: String '0' sets the ENUM to an empty string
This fixes the string evaluation logic for ENUM types
so the literal string '0' is treated as index 0
Thirunarayanan Balathandayuthapani
MDEV-37294  segv in flst::remove_complete(buf_block_t*, unsigned short, unsigned char*, mtr_t*)

Problem:
=======
During system tablespace defragmentation, extent movement occurs
in two phases: prepare and complete.
1) prepare phase validates involved pages and acquires necessary
resources.
2) complete phase performs the actual data copy.

Prepare phase fails to check whether allocating a page will
make the extent FULL. When an extent has exactly (extent_size - 1)
pages used, the prepare phase returns early without latching
the prev/next extent descriptors needed for list manipulation.

Complete phase then allocates the final page, making the
extent full, and attempts to move it from
FSEG_NOT_FULL/FSP_FREE_FRAG to FSEG_FULL/FSP_FULL_FRAG list.
This fails with an assertion because the required blocks were
never latched, causing a crash in flst::remove_complete().

Solution:
========
alloc_from_fseg_prepare(), alloc_from_free_frag_prepare():
call these function only if the extent will be full after
allocation. This makes the
prepare phase to acquire the necessary pages for FSP list manipulation

find_new_extents(): Print more revised information about moving
of extent data and destination extent also.

defragment_level(): Move get_child_pages(new_block) before committing
changes to enable proper rollback on failure. Well, this failure
is theoretically impossible (new block is exact copy of
validated old block).
Thirunarayanan Balathandayuthapani
MDEV-39261 MariaDB crash on startup in presence of indexed virtual columns

Problem:
========
A single InnoDB purge worker thread can process undo logs from different
tables within the same batch. But get_purge_table(), open_purge_table()
incorrectly assumes that a 1:1 relationship between a purge worker thread
and a table within a single batch. Based on this wrong assumtion,
InnoDB attempts to reuse TABLE objects cached in thd->open_tables for
virtual column computation.

1) Purge worker opens Table A and caches the TABLE pointer in thd->open_tables.
2) Same purge worker moves to Table B in the same batch, get_purge_table()
retrieves the cached pointer for Table A instead of opening Table B.
3) Because innobase::open() is ignored for Table B, the virtual column
template is never initialized.
4) virtual column computation for Table B aborts the server

Solution:
========
The purge coordinator thread now opens both InnoDB dict_table_t* and
MariaDB TABLE* handles during batch preparation in
trx_purge_attach_undo_recs(). purge_node_t::tables now stores only
std::pair<dict_table_t*, TABLE*>. When worker thread
needs TABLE* for virtual column computation, it fetches
the TABLE* from purge_node_t->tables.

trx_purge_table_open(): Modified to open TABLE* using the
coordinator's MDL ticket

open_purge_table(): Accept and use the MDL ticket from coordinator thread

purge_sys_t::coordinator_thd: To track the coordinator thread in purge
subsystem

purge_node_t::end(): To prevent premature table closure when the coordinator
acts as a worker and skips innobase_reset_background_thd()

purge_sys_t::close_and_reopen(): Properly handles retry logic by clearing
all table state and reopening the table. Uses mdl_map for maintaining
mdl_tickets for each table id

trx_purge_close_tables(): Now accepts mdl_map parameter to
release MDL tickets from the coordinator's map after closing tables

trx_purge():  MDL tickets are now stored in a local mdl_map instead of
purge_node_t. Closes the coordinator's TABLE* objects after all workers
are completed

Declared open_purge_table() and close_thread_tables() in trx0purge.cc
Vladislav Vaintroub
MDEV-14443 DENY statement

Implements DENY/REVOKE DENY and associated tasks.
Marko Mäkelä
MDEV-39303: Skip ibuf_upgrade() if innodb_force_recovery=6

ibuf_upgrade_needed(): Pretend that no upgrade is needed when
innodb_force_recovery=6.

srv_load_tables(): Test the least likely condition first.

srv_start(): Remove a message that is duplicating one at the start
of recv_recovery_from_checkpoint_start().

This was tested by starting up a server on an empty data directory
that had been created by MariaDB Server 10.6.

Reviewed by: Thirunarayanan Balathandayuthapani
Marko Mäkelä
Invoke log_sys.backup_stop() earlier
Sergei Golubchik
fix compilation failure for embedded with bundled pcre2

sql_embedded must be linked with pcre2-8 so that cmake knew
that sql_embedded needs pcre2-8's INTERFACE include path
Raghunandan Bhat
MDEV-35717: UBSAN: runtime error: applying zero offset to null pointer in `my_strnncoll_utf8mb3_general1400_as_ci`

Problem:
  UBSAN reports runtime errors in string comparision functions where
  pointer arithmetic is done without checking NULL.

Fix:
  Check pointers are not NULL before doing pointer arithmetic.
Sergei Golubchik
MDEV-15327 fix test results
copilot-swe-agent[bot]
Fix unused show_denies variable warning in mysql_test_show_grants

Agent-Logs-Url: https://github.com/MariaDB/server/sessions/475aa327-e1bd-4cb3-9408-50513aac2fbf

Co-authored-by: vaintroub <[email protected]>
Thirunarayanan Balathandayuthapani
MDEV-39261 MariaDB crash on startup in presence of indexed virtual columns

Problem:
========
A single InnoDB purge worker thread can process undo logs from different
tables within the same batch. But get_purge_table(), open_purge_table()
incorrectly assumes that a 1:1 relationship between a purge worker thread
and a table within a single batch. Based on this wrong assumtion,
InnoDB attempts to reuse TABLE objects cached in thd->open_tables for
virtual column computation.

1) Purge worker opens Table A and caches the TABLE pointer in thd->open_tables.
2) Same purge worker moves to Table B in the same batch, get_purge_table()
retrieves the cached pointer for Table A instead of opening Table B.
3) Because innobase::open() is ignored for Table B, the virtual column
template is never initialized.
4) virtual column computation for Table B aborts the server

Solution:
========
The purge coordinator thread now opens both InnoDB dict_table_t* and
MariaDB TABLE* handles during batch preparation in
trx_purge_attach_undo_recs(). purge_node_t::tables now stores only
std::pair<dict_table_t*, TABLE*>. When worker thread
needs TABLE* for virtual column computation, it fetches
the TABLE* from purge_node_t->tables.

trx_purge_table_open(): Modified to open TABLE* using the
coordinator's MDL ticket

open_purge_table(): Accept and use the MDL ticket from coordinator thread

purge_sys_t::coordinator_thd: To track the coordinator thread in purge
subsystem

purge_node_t::end(): To prevent premature table closure when the coordinator
acts as a worker and skips innobase_reset_background_thd()

purge_sys_t::close_and_reopen(): Properly handles retry logic by clearing
all table state and reopening the table. Uses mdl_map for maintaining
mdl_tickets for each table id

trx_purge_close_tables(): Now accepts mdl_map parameter to
release MDL tickets from the coordinator's map after closing tables

trx_purge():  MDL tickets are now stored in a local mdl_map instead of
purge_node_t. Closes the coordinator's TABLE* objects after all workers
are completed

Declared open_purge_table() and close_thread_tables() in trx0purge.cc