1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

MDEV-35693: Improve SHOW REPLICA STATUS column sizes

Resize the types and widths of SHOW REPLICA STATUS
(technically `INFORMATION_SCHEMA.SLAVE_STATUS`)
columns to better match their possible values

In case of intentionally but absurdly long lists,
text columns that list an uncapped number of elements
have expanded to accept as many bytes as we could support.

Particularly, the first-gen `Replicate_` filters were
incorrectly typed as singlular `Name()`s during MDEV-33526.
Under `Name`s’ 64-char limit, they could overflow
(read: truncate) even before their lengths got absurd.

In response to `‘MAX_SLAVE_ERRMSG’ was not declared in this scope` in
Embedded builds, a new `#ifdef HAVE_REPLICATION` guard wraps
`slave_status_info` to skip this unused data in Replication-less builds.

For testing, this commit forward-ports a modified cherry-pick of #3795
(the latter targets our oldest maintained LTS as part of MDEV-35948).

> Assert that 1st-gen `replicate_*` filter variables display
> their input – including long but reasonable lists –
> correctly (without truncation) in
> * direct SELECT
> * [semi-new] INFORMATION_SCHEMA.GLOBAL_VARIABLES.VARIABLE_VALUE
> * [new] SHOW REPLICA STATUS

Reviewed-by: Brandon Nesterenko <brandon.nesterenko@mariadb.com>
This commit is contained in:
ParadoxV5
2025-01-31 14:02:44 -07:00
parent 01fafd45eb
commit aaa02f6aa3
16 changed files with 294 additions and 94 deletions

View File

@@ -1,3 +1,4 @@
CHANGE MASTER TO master_host='127.0.0.1', master_user='root', master_ssl_verify_server_cert=0;
#
# Basic testing of replicate_do_db.
#
@@ -17,6 +18,20 @@ SET @@GLOBAL.replicate_do_db=1.1;
ERROR 42000: Incorrect argument type to variable 'replicate_do_db'
SET @@GLOBAL.replicate_do_db=1e1;
ERROR 42000: Incorrect argument type to variable 'replicate_do_db'
# Argument size acceptance.
SELECT GROUP_CONCAT(CONCAT("database_name_", seq) SEPARATOR ",")
INTO @name FROM seq_1_to_8;
SELECT LENGTH(@name);
LENGTH(@name)
127
SET @@GLOBAL.replicate_do_db= @name;
SELECT @@GLOBAL.replicate_do_db;
@@GLOBAL.replicate_do_db
database_name_1,database_name_2,database_name_3,database_name_4,database_name_5,database_name_6,database_name_7,database_name_8
SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='replicate_do_db';
VARIABLE_VALUE
database_name_1,database_name_2,database_name_3,database_name_4,database_name_5,database_name_6,database_name_7,database_name_8
Replicate_Do_DB = 'database_name_1,database_name_2,database_name_3,database_name_4,database_name_5,database_name_6,database_name_7,database_name_8'
# Argument syntax.
SET @@GLOBAL.replicate_do_db="db1,,,,,db3";
SELECT @@GLOBAL.replicate_do_db;
@@ -25,6 +40,7 @@ db1,db3
SELECT * FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='replicate_do_db';
VARIABLE_NAME VARIABLE_VALUE
REPLICATE_DO_DB db1,db3
Replicate_Do_DB = 'db1,db3'
SET @@GLOBAL.replicate_do_db="db1,,,db2,,,db3";
SELECT @@GLOBAL.replicate_do_db;
@@GLOBAL.replicate_do_db