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-36986 Support tracing arrays of primitive types

Single_line_formatting_helper accumulates array elements that may fit on
one line, and printed all of them quoted when flushing. Numbers, booleans
and nulls thus came out as JSON strings:

  "depends_on_map_bits": ["0"]  instead of  [0]

Remember per element whether it arrived via add_escaped_str() (a string,
quote it) or add_unquoted_str() (a number, boolean or null, don't), in a
parallel quoted[] array reset together with the buffer, and honour it in
both flush paths. This also fixes disable_and_flush(), which called
add_str() and so escaped the buffered strings a second time.

add_size() output stays quoted: it may carry a unit suffix ("2KiB").

While at it:
- Json_writer_array::add(ulonglong) cast to longlong, printing values
  above LLONG_MAX as negative. Use add_ull(). add(size_t) had the same
  bug and is compiled out on _WIN64, so fixing only one would have made
  the output platform-dependent.
- on_add_str() now enforces MAX_ELEMENTS instead of only asserting it,
  so quoted[] cannot be overrun in a release build if the line length
  accounting ever changes.

opt_context_schema.inc: rec_per_key holds numbers now, not strings. Also
fix two syntax errors that left the schema invalid JSON, so it is usable
once MDEV-38033 enables the JSON_SCHEMA_VALID() check in
run_query_twice_and_compare_stats.inc.
Sergei Golubchik
MDEV-40445 TLS 1.3 early data
Monty
Removed some not needed checks and add a DBUG_ASSERT() for not covered code

- In ha_partition.cc:check_parallel_search(), remove check if
  item_field->field is null. This is not needed as the function is run
  after fix_field() which guarnatees that the field is always set.
- Added DBUG_ASSERT(new_field) to Item_field::fix_fields() to check if a
  select-list item, found by name or alias when resolving ORDER BY/GROUP
  BY/HAVING, can have field == 0. This error path is not covered by any
  mtr test.
Marko Mäkelä
fixup! bc1d33f74d3441f05372dae31935325d2a1f29ae
KhaledR57
MDEV-36552 mariadb-dump fails with error 1370 for a view that uses a function

SHOW COLUMNS on a view checked EXECUTE on every function the view
uses, so a user allowed to read the view's metadata was still
denied. Reading column metadata does not run the function, so it
must not additionally require EXECUTE.

Check EXECUTE only when the view is created, not when it is opened
just to read its columns.
KhaledR57
MDEV-36552 mariadb-dump fails with error 1370 for a view that uses a function

SHOW COLUMNS on a view checked EXECUTE on every function the view
uses, so a user allowed to read the view's metadata was still
denied. Reading column metadata does not run the function, so it
must not additionally require EXECUTE.

Check EXECUTE only when the view is created, not when it is opened
just to read its columns.
Marko Mäkelä
squash! e16b1b4e2739be7bc8e91643b0a71e1f04a1b02f

backup_stream_zeropad(): Zero-pad the last tar block if needed.

Rewrite the crude ma_backup_server.c in C

The aria_backup_end() is a crude prototype for allowing the
functionality to be tested on transactional storage engines
that implement this API. It will scan and copy the data directories
in a single thread, while everything is locked. This will be
refactored in MDEV-39092.
Vladislav Vaintroub
MDEV-22992 Refactor VIO into layered transports and filters

Replace the function-pointer VIO implementation with an abstract C++
interface while retaining the procedural C entry points.

Implement socket and named-pipe transports and composable filters for
client read-ahead, Windows thread-pool prefetch, and TLS. OpenSSL uses a
custom BIO, while wolfSSL uses callbacks that perform I/O through the VIO
below the TLS filter. This keeps waits and timeouts in the transport layer.

Keep sockets nonblocking and implement timed I/O with transport waits.
Named pipes use overlapped I/O for timeout-aware waits and report blocking
waits through the same scheduler callbacks as sockets. Semi-sync
temporarily changes the real VIO read timeout instead of copying VIO state.

Hide transport and TLS implementation state behind accessors. Expose the
TLS handle opaquely and update callers that previously accessed VIO fields
directly. Compile the VIO implementations as C++ and retain PSI memory
accounting for VIO allocations.

Adapt Windows thread-pool pre-read to a Prefetched_vio filter inserted
above the transport so both plain and TLS connections consume prefetched
bytes through the same layered VIO path.
Marko Mäkelä
fixup! e65a863d4758def3bba61ad193b4108b789ba2af
Sergei Golubchik
MDEV-40445 TLS session resumption

in fact it was already on in the server, so this only
enables statistics to see it in SHOW STATUS, adds tests,
and updates C/C to match.

Assisted-By: Claude:claude-5-opus
Marko Mäkelä
fixup! d28cbbcc5d892da8385d30be055671510fecc27b
Monty
Added proper cleanup of main.cte_update_delete.test
Alexander Barkov
MDEV-39518 Allow prepared statements in stored functions in assignment right hand

Allowing prepared statements in stored functions when
a stored function is used in an assignment right hand.

Both DEFALT clause of a variable initialization and
the right side of the SET statement are supported:

  CREATE PROCEDURE p1()
  BEGIN
    -- case 1: DEFAULT clause
    DECLARE spvar1 INT DEFAULT f1_with_ps(); -- OK

    -- case 2: SP variable assignment statement
    DECLARE spvar2 INT;
    SET spvar= f1_with_ps(); -- OK
  END;

- The parser now does not reject PS statements in stored functions.
  PS applicability in stored functions is now detected as run time.
  Note, PS statements in triggers are still prohibited by the parser.

- Functions with PS do not acquire MDL locks on tables.
  They work like procedures in terms of table opening.

- Functions with PS are not replicated as a single `SELECT f1()` call.
  They are replicated per-statement, like procedures.
Sergei Golubchik
cleanup: remove pre-locking of old_password_plugin

nobody should be using it, so this "optimization" actually isn't.
Alexander Barkov
MDEV-39518 Allow prepared statements in stored functions in assignment right hand

Allowing prepared statements in stored functions when
a stored function is used in an assignment right hand.

Both DEFALT clause of a variable initialization and
the right side of the SET statement are supported:

  CREATE PROCEDURE p1()
  BEGIN
    -- case 1: DEFAULT clause
    DECLARE spvar1 INT DEFAULT f1_with_ps(); -- OK

    -- case 2: SP variable assignment statement
    DECLARE spvar2 INT;
    SET spvar= f1_with_ps(); -- OK
  END;

- The parser now does not reject PS statements in stored functions.
  PS applicability in stored functions is now detected as run time.
  Note, PS statements in triggers are still prohibited by the parser.

- Functions with PS do not acquire MDL locks on tables.
  They work like procedures in terms of table opening.

- Functions with PS are not replicated as a single `SELECT f1()` call.
  They are replicated per-statement, like procedures.
Sergei Petrunia
PWT, cleanup: comment-out THD::parallel_worker.

Instead, add "pwt_worker *worker" member to class PWT_error_handler.
Alexander Barkov
MDEV-39518 Allow prepared statements in stored functions in assignment right hand

Allowing prepared statements in stored functions when
a stored function is used in an assignment right hand.

Both DEFAULT clause of a variable initialization and
the right side of the SET statement are supported:

  CREATE PROCEDURE p1()
  BEGIN
    -- case 1: DEFAULT clause
    DECLARE spvar1 INT DEFAULT f1_with_ps(); -- OK

    -- case 2: SP variable assignment statement
    DECLARE spvar2 INT;
    SET spvar= f1_with_ps(); -- OK
  END;

- The parser now does not reject PS statements in stored functions.
  PS applicability in stored functions is now detected at run time.
  Note, PS statements in triggers are still prohibited by the parser.

- Functions with PS do not acquire MDL locks on tables.
  They work like procedures in terms of table opening.

- Functions with PS are not replicated as a single `SELECT f1()` call.
  They are replicated per-statement, like procedures.
Sergei Golubchik
MDEV-40445 TLS session resumption (wolfssl)

* enable HAVE_SESSION_TICKET to allow resumption
* enable OPENSSL_ALL+KEEP_PEER_CERT to keep peer cert in the ticket,
  otherwise REQUIRE SUBJECT doesn't work after resumption
* disable OPENSSL_EXTRA which was enabled as a replacement
  when OPENSSL_ALL was disabled in 136e8661197
* disable NO_WOLFSSL_STUB to get SSL_CTX_sess_hits/etc stubs
* but they're stubs, always return 0, so add a wolfssl combination to
  the test that checks for these values
Sergei Petrunia
Fixup: Let PWT_error_handler have pwt_manager as argument,

Split the code to pwt_manager::finalize_parallel_workers
Vladislav Vaintroub
MDEV-22992 Refactor VIO into layered transports and filters

Replace the function-pointer VIO implementation with an abstract C++
interface while retaining the procedural C entry points.

Implement socket and named-pipe transports and composable filters for
client read-ahead, Windows thread-pool prefetch, and TLS. OpenSSL uses a
custom BIO, while wolfSSL uses callbacks that perform I/O through the VIO
below the TLS filter. This keeps waits and timeouts in the transport layer.

Keep sockets nonblocking and implement timed I/O with transport waits.
Named pipes use overlapped I/O for timeout-aware waits and report blocking
waits through the same scheduler callbacks as sockets. Semi-sync
temporarily changes the real VIO read timeout instead of copying VIO state.

Hide transport and TLS implementation state behind accessors. Expose the
TLS handle opaquely and update callers that previously accessed VIO fields
directly. Compile the VIO implementations as C++ and retain PSI memory
accounting for VIO allocations.

Adapt Windows thread-pool pre-read to a Prefetched_vio filter inserted
above the transport so both plain and TLS connections consume prefetched
bytes through the same layered VIO path.
Sergei Golubchik
MDEV-12320 change initial authentication plugin in the server

instead of unconditionally starting the authentication from
the mysql_native_password, start it from the plugin that will most
likely avoid "change plugin" packet (and thus a round-trip). Maintain
counters of what plugins were used to authentify users so far, use
the plugin with the largest count for new connections.

FLUSH PRIVILEGES resets the stats.
Sergei Petrunia
Comment-out pwt_worker::COND_worker. It is not used.
Sergei Golubchik
MDEV-40445 TLS 1.3 early data (0-RTT)

Assisted-By: Claude:claude-5-opus
drrtuy
fix: MDEV-40846 DuckDB handles functionality that is based on invisible columns, e.g. WITH SYSTEM VERSIONING.
Vladislav Vaintroub
MDEV-22992 Refactor VIO into layered transports and filters

Replace the function-pointer VIO implementation with an abstract C++
interface while retaining the procedural C entry points.

Implement socket and named-pipe transports and composable filters for
client read-ahead, Windows thread-pool prefetch, and TLS. OpenSSL uses a
custom BIO, while wolfSSL uses callbacks that perform I/O through the VIO
below the TLS filter. This keeps waits and timeouts in the transport layer.

Keep sockets nonblocking and implement timed I/O with transport waits.
Named pipes use overlapped I/O for timeout-aware waits and report blocking
waits through the same scheduler callbacks as sockets. Semi-sync
temporarily changes the real VIO read timeout instead of copying VIO state.

Hide transport and TLS implementation state behind accessors. Expose the
TLS handle opaquely and update callers that previously accessed VIO fields
directly. Compile the VIO implementations as C++ and retain PSI memory
accounting for VIO allocations.

Adapt Windows thread-pool pre-read to a Prefetched_vio filter inserted
above the transport so both plain and TLS connections consume prefetched
bytes through the same layered VIO path.
Sergei Petrunia
PWT cleanup: in pwt_manager, add notify_message_dropped, fix record_event().

Both of them acquire/release needed mutexes inside the function.
Monty
Limit the memory used by GROUP_CONCAT() with ORDER BY

GROUP_CONCAT() with ORDER BY collects all rows of the group in a TREE
and only cuts it down in repack_tree(). The repack was triggered by

  (tree_len >> GCONCAT_REPACK_FACTOR) > thd->gconcat_max_len()

with GCONCAT_REPACK_FACTOR 10, that is when the rows in the tree had
produced 1024 * group_concat_max_len bytes, or 1G with the default
settings. On top of that tree_len only counted the length of the
strings, while the tree costs sizeof(TREE_ELEMENT) + reclength per row.
For GROUP_CONCAT(int_col ORDER BY int_col) that is about 40 bytes per
row against 6 bytes of result, so the tree had grown to several GB
before the first repack. In practice the server ran out of memory
first and the repack code was close to never used.

The tree is now limited by the memory it has really allocated,
tree->allocated, instead of by the length of the strings it holds.
The limit is MY_MAX(thd->ram_limitation(), thd->gconcat_max_len()) and
is never set so low that the tree can not hold a few rows.

repack_tree() builds a new tree while the old one is still in memory,
so the peak usage is the size we start the repack at plus the size we
copy to. To keep the sum within the limit it is split into
GCONCAT_TREE_PARTS parts; the repack starts when
GCONCAT_TREE_REPACK_PARTS of them are used and copies to the remaining
part. The part we do not copy to is also the room the tree has to grow
before the next repack, which keeps the repacks amortized.

Other changes:

- tree_len is removed. It was only read by the old trigger.

- repack_tree() decided that it had run out of memory by testing
  st.len <= st.maxlen after the walk. That test was only valid because
  the old trigger guaranteed that a complete copy had to overshoot
  st.maxlen. A repack triggered by memory can complete the walk with
  st.len far below st.maxlen, which would have failed the query with a
  wrong out of memory error. There is now an explicit flag for it.

- The length that decides which rows to keep now also counts the
  separator that is put between two rows, so that it matches what
  val_str() will produce.

- When the memory limit stops the copy, the result becomes shorter
  than group_concat_max_len. dump_leaf_key() can not detect this, as
  the result never reaches the maximum length. This is now remembered
  in result_cut and reported to the user.

- All cut value reporting is moved to val_str(); dump_leaf_key() only
  marks that the result was cut. This removes the need to clear the
  truncated flag of table->blob_storage to avoid a duplicated warning,
  and gives one warning per group also when val_str() is called more
  than once for the same group, which repeated the warning before.

- Added a function comment for repack_tree() that describes where the
  rows are cut away and why building a copy frees memory.

Co-author: Arcadiy Ivanov <[email protected]>
- Fixed a bug in copy_tree()
Vladislav Vaintroub
MDEV-22992 Refactor VIO into layered transports and filters

Replace the function-pointer VIO implementation with an abstract C++
interface while retaining the procedural C entry points.

Implement socket and named-pipe transports and composable filters for
client read-ahead, Windows thread-pool prefetch, and TLS. OpenSSL uses a
custom BIO, while wolfSSL uses callbacks that perform I/O through the VIO
below the TLS filter. This keeps waits and timeouts in the transport layer.

Keep sockets nonblocking and implement timed I/O with transport waits.
Named pipes use overlapped I/O for timeout-aware waits and report blocking
waits through the same scheduler callbacks as sockets. Semi-sync
temporarily changes the real VIO read timeout instead of copying VIO state.

Hide transport and TLS implementation state behind accessors. Expose the
TLS handle opaquely and update callers that previously accessed VIO fields
directly. Compile the VIO implementations as C++ and retain PSI memory
accounting for VIO allocations.

Adapt Windows thread-pool pre-read to a Prefetched_vio filter inserted
above the transport so both plain and TLS connections consume prefetched
bytes through the same layered VIO path.
Sergei Golubchik
cleanup: redo thd_create_random_password() from thd_rnd service.

* it was only used in sql_acl.cc to generate scramble, not used
  by plugins
* rename to thd_get_session_nonce() that explicitly generates
  session nonce (or "scramble")
* the function returns the existing nonce if it was already
  generated, or generates and saves it in THD, it always does the full
  nonce length, only uses characters in a given range, zero-terminates.
* incompatible change, service version is bumped to 2.0
* parsec also uses thd_get_session_nonce() now
Sergei Golubchik
MDEV-40445 TLS 1.3 early data (wolfssl)

Compiles with WolfSSL but hits protocol errors.
Disable 0-RTT for WolfSSL for now - compile it off, simply
setting SSL_CTX_set_max_early_data(ssl, 0) is not enough.
Alexander Barkov
MDEV-39518 Allow prepared statements in stored functions in assignment right hand

Allowing prepared statements in stored functions when
a stored function is used in an assignment right hand.

Both DEFALT clause of a variable initialization and
the right side of the SET statement are supported:

  CREATE PROCEDURE p1()
  BEGIN
    -- case 1: DEFAULT clause
    DECLARE spvar1 INT DEFAULT f1_with_ps(); -- OK

    -- case 2: SP variable assignment statement
    DECLARE spvar2 INT;
    SET spvar= f1_with_ps(); -- OK
  END;

- The parser now does not reject PS statements in stored functions.
  PS applicability in stored functions is now detected as run time.
  Note, PS statements in triggers are still prohibited by the parser.

- Functions with PS do not acquire MDL locks on tables.
  They work like procedures in terms of table opening.

- Functions with PS are not replicated as a single `SELECT f1()` call.
  They are replicated per-statement, like procedures.
Sergei Petrunia
Rename LOCK_pwt_thread->LOCK_pwt_manager, make more members private.
Sergei Golubchik
test that counts number of roundtrips in various situations
Alexander Barkov
MDEV-39518 Allow prepared statements in stored functions in assignment right hand

Allowing prepared statements in stored functions when
a stored function is used in an assignment right hand.

Both DEFALT clause of a variable initialization and
the right side of the SET statement are supported:

  CREATE PROCEDURE p1()
  BEGIN
    -- case 1: DEFAULT clause
    DECLARE spvar1 INT DEFAULT f1_with_ps(); -- OK

    -- case 2: SP variable assignment statement
    DECLARE spvar2 INT;
    SET spvar= f1_with_ps(); -- OK
  END;

- The parser now does not reject PS statements in stored functions.
  PS applicability in stored functions is now detected as run time.
  Note, PS statements in triggers are still prohibited by the parser.

- Functions with PS do not acquire MDL locks on tables.
  They work like procedures in terms of table opening.

- Functions with PS are not replicated as a single `SELECT f1()` call.
  They are replicated per-statement, like procedures.
Sergei Golubchik
change_user test in plugins.parsec
bsrikanth-mariadb
MDEV-36986 Support tracing arrays of primitive types

Single_line_formatting_helper accumulates array elements that may fit on
one line, and printed all of them quoted when flushing. Numbers, booleans
and nulls thus came out as JSON strings:

  "depends_on_map_bits": ["0"]  instead of  [0]

Remember per element whether it arrived via add_escaped_str() (a string,
quote it) or add_unquoted_str() (a number, boolean or null, don't), in a
parallel quoted[] array reset together with the buffer, and honour it in
both flush paths. This also fixes disable_and_flush(), which called
add_str() and so escaped the buffered strings a second time.

add_size() output stays quoted: it may carry a unit suffix ("2KiB").

While at it:
- Json_writer_array::add(ulonglong) cast to longlong, printing values
  above LLONG_MAX as negative. Use add_ull(). add(size_t) had the same
  bug and is compiled out on _WIN64, so fixing only one would have made
  the output platform-dependent.
- on_add_str() now enforces MAX_ELEMENTS instead of only asserting it,
  so quoted[] cannot be overrun in a release build if the line length
  accounting ever changes.

opt_context_schema.inc: rec_per_key holds numbers now, not strings. Also
fix two syntax errors that left the schema invalid JSON, so it is usable
once MDEV-38033 enables the JSON_SCHEMA_VALID() check in
run_query_twice_and_compare_stats.inc.
Marko Mäkelä
fixup! c67768bb802cdd00bf604ae6fde08f896df1ce1b
Sergei Petrunia
PWT cleanup: introduce/use pwt_worker::cleanup_worker()
Monty
MDEV-40765 Assertion `"unexpected references" == 0' failed upon failing CREATE OR REPLACE

There was a few reasons for this failure:
- There was no timeout for the mdl_lock in the ddl log in
  execute_rename_table. This is needed to protect against a concurrent
  purge in InnoDB. If the purge would be running, the ddl would call
  rename_table without a ddl protection the assert could happen.
- InnoDB locked the original table name in purge, not the temporary
  name used to cache the table in case of rollback. The effect is
  that if a purge happens during rename the assert could happen.
- The table was a partitioned and the detection of partitioned tables
  did not take into account temporary #sql-create- prefixed tables.

Other things:
- The code in execute_rename_table() assumes that InnoDB never holds
  a MDL lock for more more than a few milliseconds. I am using a timeout
  for 10 seconds, just in case. In practice this timeout should be very
  short.
- Added a 10 second timeout for the MDL lock in execute_drop_table()
- Removed mysql_mutex_unlock(&LOCK_gdl) / mysql_mutex_lock(&LOCK_gdl)
  around calls to binlog as these are unsafe. The binlog code uses
  global variables that needs protection from other callers.
Sergei Petrunia
PWT: cleanup: rename error_to_queue -> save_error_to_queued_event