Wires up the configuration plumbing for issue #5693 (P1: asymmetric TLS
/ AsClient mode parity gap with MySQL Router 8.0). This commit is
behaviour-neutral: the new variable is parsed, validated, persisted and
exposed via MysqlxConfigStore::get_backend_tls_mode(), but the per-
session backend-TLS decision still uses the legacy
target_use_ssl_ || client_ds_.is_encrypted() expression. The decision
site is rewritten in the next commit.
What this adds:
* MysqlxBackendTlsMode enum with four values matching MySQL Router's
client_ssl_mode / server_ssl_mode taxonomy: disabled, preferred,
required, as_client. Default is as_client because that most closely
matches the legacy implicit behaviour where the backend leg
encryption was tied to the frontend leg's encryption.
* mysqlx_backend_tls_mode_from_string() / mysqlx_backend_tls_mode_to_string()
for case-insensitive parsing and canonical lower-case rendering.
The parser returns std::optional so the install path can surface a
useful error to the operator on a typo instead of silently coercing
to a default.
* MysqlxConfigStore now reads the mysqlx_tls_backend_mode key from
mysqlx_variables in install_variables_from_admin(), persists it via
save_variables_to_admin_table(), and projects it in
project_variables_to_runtime_view(). install fails atomically with a
descriptive error when the value is unrecognised; an absent row
leaves the cached mode untouched (matches how the other tunables
already behave).
* MysqlxBackendEndpoint.use_ssl=1 remains an operator-controlled
override that forces TLS regardless of the mode (per existing
comment at handler_connecting_server). The mode interacts with that
flag in the next commit.
Tests:
test/tap/tests/unit/mysqlx_config_store_unit-t: 16 -> 24 assertions.
New coverage: parser accepts all four documented values
case-insensitively, parser rejects unknown values, default mode is
as_client, LOAD round-trip caches the parsed mode, invalid value
fails install with descriptive error, store retains last-good mode
after rejected install, absent row leaves cached mode untouched.
Tested under NOJEMALLOC=1 WITHASAN=1 PROXYSQLGENAI=1.
Stacks on PR #5706 (mysqlx response state machines), which itself
stacks on PR #5704 (mysqlx observability P0). Refs #5693.