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
bsrikanth-mariadb
MDEV-39538: Different costs when same range is read twice

When same range is used as a filter, once in the outer query block, and
the second inside a sub query such as: -

select * from t1
  where year(a) = 2010 and c < (select count(*) from t1 where year(a) = 2010);

The Optimizer Context had two records for multi_range_read_info_const() call,
but had different cost vector members.
The cause is that the first table considered index-only scan on the range,
while the second considered non-index only scan.

However, when replaying the context, the same range got matched
twice, and the costs corresponding to that got returned twice.
Hence the costs in the explain plan output differed as well.

Solution
========
Include a new field called "call_number", while recording range contexts
into the overall context. This way, we could even match the call_number
and return the appropriate cost during replay.
Alexey Botchkov
MDEV-37262 XMLISVALID() schema validation function.

XMLVALID function added to the XMLTYPE plugin.
Mohammad Tafzeel Shams
MDEV-38305: Expose adaptive hash index statistics in ANALYZE FORMAT=JSON

Expose InnoDB's Adaptive Hash Index (AHI) statistics through ANALYZE
FORMAT=JSON output to provide query-level visibility into AHI usage
and effectiveness. This allows DBAs and developers to monitor how well
the adaptive hash index is serving their workloads on a per-query basis.

The r_ahi_stats object (nested inside r_engine_stats) now reports four
key metrics: ahi_searches (successful AHI lookups), ahi_searches_btree
(AHI misses requiring B-tree fallback), ahi_rows_added (rows inserted
into AHI), and ahi_pages_added (pages indexed by AHI).

- btr_ahi_inc_searches(): Increment counter when AHI lookup succeeds.
- btr_ahi_inc_searches_btree(): Increment counter when AHI lookup fails
  and falls back to B-tree search.
- btr_ahi_inc_rows_added(): Increment counter when rows are added to
  the adaptive hash index structure.
- btr_ahi_inc_pages_added(): Increment counter when new pages are
  indexed by AHI.
- btr_cur_t::search_leaf(): Call btr_ahi_inc_searches() on successful
  AHI hit and btr_ahi_inc_searches_btree() on AHI miss to track search
  outcomes at the point where AHI is utilized.
- trace_engine_stats(): Output r_ahi_stats object with all four AHI
  counters in JSON format when any AHI activity is detected during query
  execution.
- ha_handler_stats: Added ahi_searches, ahi_searches_btree, ahi_rows_added,
  and ahi_pages_added fields to track per-query AHI statistics.
- ahi_stats.test: Comprehensive verification of AHI statistics reporting
  across different scenarios: insufficient accesses (no AHI build),
  threshold triggering (AHI construction), heavy warmup (full AHI
  utilization), and disabled AHI (verify zero statistics).
- check_ahi_status.inc: Reusable include file for executing queries with
  configurable warmup repetitions and extracting AHI statistics from
  ANALYZE FORMAT=JSON output using JSON path expressions.
- Add mtr parameter to btr_search_move_or_delete_hash_entries(),
  btr_cur_t::search_info_update(), btr_search_update_hash_on_insert(),
  btr_search_update_hash_ref(), btr_search_info_update_hash(),
  and btr_search_build_page_hash_index()
rusher
[misc] Add matrix entry that builds against latest C/C 3.3 branch
Raghunandan Bhat
MDEV-39227: Schema Versioning - Server-side

- SQL layer infrastructure for multiple versions of a table definition.
- Only a subset of DDLs- such as `ALTER TABLE COMMENT='...'` that dont
  need changes in storage engine and only changes the table metadata on
  the server side is functional.
- No storage engine changes; any DDLs that depends on the engine or is
  not yet supported.
- Replication/binlog, DDL log for crash recovery are not supported yet.
Marko Mäkelä
Avoid CopyFileEx() when copying parts of InnoDB log
Sergei Golubchik
MDEV-39821 heap-use-after-free in heap_rnext with tree indexes

heap_update() forgot to update key_changed
bsrikanth-mariadb
Add in_predicate_conversion_threshold to opt_related_sys_vars[].

Use tbl->db.str, tbl->table_name.str instead of tbl->get_db_name().str,
and tbl->get_table_name().str in append_full_table_name().
tbl_get_table_name() could return view names that are not stored in the
context, which could cause a warning to be raised during replay when
view name couldn't be found in the context.
Sergei Petrunia
Add --replay-server-trace option.

Using

  ./mtr --replay-server --replay-server-trace

will now create files:

1.  mysql-test/main/$test_name.opt_trace.original
2.  mysql-test/main/$test_name.opt_trace.replay

The files show queries and optimizer trace outputs for the queries where:
1. We did try replaying in the server.
2. EXPLAIN output on the primary server and replay were different.
Georg Richter
Backport CONC-805 to 3.3: Fix C23/glibc 2.43 const-correctness errors
Marko Mäkelä
Revert "Preserve the backup directory"

This reverts commit 56b8e279371a3a5194ae87e9575e32a0e6b5c743.
Sergei Petrunia
Add @@time_zone to list of relevant server variables
Georg Richter
Merge branch '3.3-buildbot' into 3.3
Marko Mäkelä
Fix up the checkpoint headers on Windows
Lawrin Novitsky
Moved underlying libmariadb to 3.4 series - v3.4.9 atm

We have to support parsec auth plugin as minimum. zero config TLS is
also a big plus, but we don't change related options defaults - the
certificate is not yet validated by default.
Marko Mäkelä
fixup! c310d7cf477e8db2b4911d69985fc237cba5133f
Yuchen Pei
MDEV-15621 Auto add RANGE COLUMNS partitions by interval

Allow auto partitioning by interval in PARTITION BY RANGE COLUMNS

PARTITION BY RANGE COLUMNS (col_name)
INTERVAL interval [AUTO]
(
  PARTITION partition_name VALUES LESS THAN (value)
  [, PARTITION partition_name VALUES LESS THAN (value) ... ]
)

where

- col_name is the name of one column of type DATE or DATETIME or
  TIMESTAMP

- at least one partition is supplied, and the highest partition cannot
  have MAXVALUE range

- INTERVAL interval is a positive time interval. it can be mariadb
  format or oracle NUMTODSINTERVAL/NUMTOYMINTERVAL format. Like
  versioning, the smallest unit is second, i.e. no subsecond like
  microsecond.

- DATE column cannot have interval with values less than a day

When performing DML on such a table, it will first add partitions
by the specified interval until the partition covers the current time.

Partition addition will not cause an implicit commit like DDL normally
does.

The partitions are named pN.

Otherwise the table behaves exactly the same as a normal RANGE COLUMNS
partitioned table.

Note that TIMESTAMP is not allowed as a type for PARTITION BY RANGE
COLUMNS otherwise.
Alexey Botchkov
Fix for XMLTYPE.
Aquila Macedo
MDEV-34195 tests: avoid LP64 MYSQL size assert on x32

x32 defines __x86_64__ but uses the ILP32 ABI, so the LP64
sizeof(MYSQL) == 1272 compile-time assert is selected incorrectly
and breaks the build.

Guard the x86_64 check with !defined(__ILP32__) so the LP64 size assert
only applies to real amd64 LP64 builds, while leaving the existing
Windows amd64 and i386 checks unchanged.
Yuchen Pei
MDEV-15621 Auto add RANGE COLUMNS partitions by interval

Allow auto partitioning by interval in PARTITION BY RANGE COLUMNS

PARTITION BY RANGE COLUMNS (col_name)
INTERVAL interval [AUTO]
(
  PARTITION partition_name VALUES LESS THAN (value)
  [, PARTITION partition_name VALUES LESS THAN (value) ... ]
)

where

- col_name is the name of one column of type DATE or DATETIME or
  TIMESTAMP

- at least one partition is supplied, and the highest partition cannot
  have MAXVALUE range

- INTERVAL interval is a positive time interval. it can be mariadb
  format or oracle NUMTODSINTERVAL/NUMTOYMINTERVAL format. Like
  versioning, the smallest unit is second, i.e. no subsecond like
  microsecond.

- DATE column cannot have interval with values less than a day

When performing DML on such a table, it will first add partitions
by the specified interval until the partition covers the current time.

Partition addition will not cause an implicit commit like DDL normally
does.

The partitions are named pN.

Otherwise the table behaves exactly the same as a normal RANGE COLUMNS
partitioned table.

Note that TIMESTAMP is not allowed as a type for PARTITION BY RANGE
COLUMNS otherwise.
PranavKTiwari
Added test case.
Lawrin Novitsky
Fix of UBSAN errors.

In one place copying from nullptr was possible. It could happen if the
streamed text resultset had to be cached(if the connection is requested
for other operation), and NULL value was present.
In couple of places int64_t could be overflown - had to be changed to
uint64 as it is defined plus othe implied changes.
In particular fetching MIN_INT64 value in text protocol could cause
that. Looks like all compilers work fine in this case as there is the
test for this.
Alexey Botchkov
MDEV-37262 XMLISVALID() schema validation function.

XMLVALID function added to the XMLTYPE plugin.
Thirunarayanan Balathandayuthapani
MDEV-34998 Assertion `n_fields > n_cols || type & 32' failed in dict_index_t::init_change_cols on ALTER

Problem:
=======
During ALTER TABLE with column type modification and index addition,
InnoDB aborts with an assertion failure when processing collation
changes for single-column secondary indexes.

Solution:
========
dict_index_t::init_change_cols(): A single-column prefix secondary
index can have n_cols == n_fields when the column is the same as
the primary key column and undergoes a collation or type change
during ALTER TABLE.
PranavKTiwari
MDEV-36896 : Assertion 'marked_for_read()' failed in virtual String *Field_varstring::val_str(String *, String *)
update_virtual_field() uses tmp_set only as an accumulator during dependency traversal. The walk itself sets all required bits for the current virtual-column evaluation. Clearing tmp_set beforehand is not required to discover the current dependencies, but it does remove previously established bits. Since find_all_keys() aliases tmp_set as both read_set and write_set, clearing tmp_set also clears the active column maps. Replacing tmp_set with an independent bitmap or avoiding the clear eliminates the issue and all regression tests continue to pass.
Oleg Smirnov
Fix failing tests
Marko Mäkelä
Preserve the backup directory
Marko Mäkelä
Avoid CopyFileEx() when copying parts of InnoDB log
Marko Mäkelä
Avoid CopyFileEx() when copying parts of InnoDB log
rusher
[misc] add maxscale testing to CI
Marko Mäkelä
Avoid CopyFileEx() when copying parts of InnoDB log
bsrikanth-mariadb
MDEV-39791: Handle count aggregate optimization for replay purpose

Separately dump into the optimizer context, the count aggregation value
of any one non-nullable column of a table if any are used in the query.
This is only suppoerted for myisam tables.

During opt_sum_query() call, record the count aggregation values into
the optimizer context recorder. Once the context is being stored into
the information_schema table, dump all these recorded values into it.

During replay, parse the count aggregate values and store them in memory.
Later when opt_sum_query() requires the count value, hook the recorded
value from the parsed context.
Alexey Botchkov
MDEV-37262 XMLISVALID() schema validation function.

XMLVALID function added.
Alexey Botchkov
fix.
PranavKTiwari
Added file.
PranavKTiwari
Test commit.
Thirunarayanan Balathandayuthapani
MDEV-39061  mariadb-backup compatible wrappers for BACKUP SERVER

scripts/mariabackup/mariabackup.sh: a drop-in wrapper that lets
existing mariabackup invocations drive the server-side BACKUP
SERVER command without changing user scripts.

mariabackup.sh covers all four mariabackup modes. --backup
translates into "BACKUP SERVER TO '<dir>'" via the mariadb client,
forwarding connection options, and layers --stream/--compress as
tar/gzip pipelines on the result. --prepare runs mariadbd
--bootstrap on backup.cnf so InnoDB applies the archived redo log.
--copy-back / --move-back drop a prepared backup into the datadir
via cp -r / mv.

--prepare --incremental-dir copies the incremental's ib_logfile*
into the base and advances innodb_log_recovery_target;
innodb_log_recovery_start stays pinned to the base checkpoint.

--apply-log-only maps to --innodb-force-recovery=3 to skip
rollback between incrementals.

--rollback-xa runs two passes: normal recovery, then a second
bootstrap with --tc-heuristic-recover=ROLLBACK.

--copy-back / --move-back refuse a non-empty datadir unless
--force-non-empty-directories is set, and print the post-action
chown / systemctl start commands.

For incremental --backup, innodb_log_archive_start is treated as a
startup-only, read-only server invariant: the wrapper reads
@@global.innodb_log_archive_start and fails fast if the archive
floor exceeds the base backup's end LSN.

Limitations:
--export is accepted but not yet implemented; the wrapper prints
a warning and runs plain recovery without producing the per-table
.cfg files needed for ALTER TABLE ... IMPORT TABLESPACE.

mbstream.sh shims the mbstream CLI onto tar, dropping
mbstream-only flags (-p/--parallel) so legacy pipelines keep
working.

README.md maps every supported option per mode to its BACKUP
SERVER equivalent and documents the backup.cnf format.

Add include/have_mariabackup_wrapper.inc redirects $XTRABACKUP to
the wrapper so a test opts in by sourcing one file; skips when the
wrapper, bash, or the mariadb client is unavailable.

wrapper_basic.test: exercises full backup, streaming, compression,
the ignored legacy options.