v3.0.10 #5976
renecannao
announced in
Announcements
v3.0.10
#5976
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
ProxySQL 3.0.10 Release Notes
ProxySQL 3.0.10 is a maintenance and feature release for the Stable Tier. Its
headline changes are per-hostgroup query timeouts, time-based purging of the
query-digest stats, visible feedback for rejected variables on
LOAD ... VARIABLES TO RUNTIME, PostgreSQL Unix-socket support, AWS RDSBlue/Green monitoring, and complete configuration round-tripping, together
with correctness fixes for cross-hostgroup prepared statements,
PostgreSQL extended-protocol result formats, compressed MySQL packets, and
backend shunning on expired passwords — plus frontend
COM_PINGmetrics,generic Linux
.tar.gzbuilds, a portable jemalloc page-size fix, and a broadtesting/CI hardening pass.
Release commit:
f5f1e148eHighlights
default_query_timeoutattribute inmysql_hostgroup_attributes.hostgroup_settingssets a constant-time querytimeout per hostgroup, with precedence per-rule > per-hostgroup > global
(feat: per-hostgroup query timeouts. #5772).
PURGEofstats_mysql_query_digest: prune digest rows bylast-seen timestamp instead of wiping the whole table (feat(stats): Purge query digest based on last seen #4920, closes Support some form of partial cleanup of
stats_mysql_query_digest#4543).LOAD MYSQL/PGSQL/ADMIN/... VARIABLES TO RUNTIMEnow reportsRecords: N Updated: X Rejected: Y Unknown: Zin the OKpacket instead of a silent
Query OK(feat(admin): surface Records/Updated/Rejected/Unknown in OK info for LOAD * VARIABLES TO RUNTIME (issue #1288) #5857, fixes No error when setting mysql-* variables to unsupported values #1288).pgsql_serversrows withport=0now connect over the socket path in
hostname(pgsql: omit port= when port==0 (Unix socket support) #5844, closes Cannot connect to PostgreSQL on Unix socket #5837).mysql.rds_topology, manage writerand reader switchover state, support explicit and automatically discovered
green hostgroups, pin green addresses, drain connections, and handle
completion or rollback (Add support for AWS Multi-AZ Instance blue/green deployment #5861).
SAVE CONFIG,SELECT CONFIG FILE,and
LOAD ... FROM CONFIGnow preserve firewall and fast-routing tables,server SSL parameters, and PostgreSQL hostgroup attributes (feat(config): full round-trip for firewall/fast_routing/*_ssl_params/pgsql_hg_attrs (#3468) #5922, closes
Missing mysql_firewall_* sections in saved config #3468).
COM_PINGmetrics:Com_frontend_pingis exposed throughstats_mysql_globaland the Prometheus metrics surface (feat(mysql): count frontendCOM_PING#5948).corrupted result rows (fix(mysql): dangling STMT_EXECUTE binds across hostgroup split + de-flake mirror1 (#5883) #5895), silent PostgreSQL data corruption on mixed Bind
result formats (fix(pgsql): fail loud on heterogeneous Bind result formats (#5866) #5878), PostgreSQL Bind messages with one format and zero
parameters (PgSQL: spec-valid Bind with num_param_formats=1 and 0 parameters rejected ("Invalid param format count") #5899), compressed MySQL packets with a mismatched zlib length
(
396c742f7, GHSA-fvch-fpgq-pwfx), and unwarranted backend shunning when auser's password is expired (MySrvC::connect_error(): skip ER_MUST_CHANGE_PASSWORD_LOGIN (1862) #5847).
platforms (Apple Silicon, AWS Graviton, ppc64le) (build: auto-detect jemalloc page size instead of ARM+CentOS-only override #5822), and ProxySQL now
publishes generic Linux
.tar.gzbinaries in addition to RPM/DEB (Release generic binaries in tarball format #569).New Features
Per-hostgroup query timeouts (#5772)
A new
default_query_timeoutpseudo-attribute in themysql_hostgroup_attributes.hostgroup_settingsJSON column sets a per-hostgroupquery timeout in constant time, without pinning a query rule to a specific user.
Precedence is per-rule
mysql_query_rules.timeout> per-hostgroupdefault_query_timeout> globalmysql-default_query_timeout. The attribute isvalidated and range-checked; an invalid or unset value falls back to the global
default. The same mechanism applies to the PostgreSQL hostgroup path.
AWS RDS Blue/Green deployment monitoring (#5861)
ProxySQL now monitors Amazon RDS Multi-AZ DB instance Blue/Green deployments
through
mysql.rds_topology. The monitor maps blue and green writer/readerhostgroups, supports explicit green hostgroups and automatic discovery, probes
the promoted writer directly, pins resolved green addresses, drains affected
connections, and handles completed switchovers, cancellation, rollback, and
topology cleanup. Configuration and runtime state are represented by the
mysql_aws_rds_bgd_hostgroupstables and participate in cluster synchronization.The release also includes a simulator, TAP coverage, and unit tests for the
deployment lifecycle.
Full configuration round-tripping (#5922, closes #3468)
Configuration export and import now round-trip MySQL and PostgreSQL fast-routing
rules, firewall tables, server SSL parameters, and PostgreSQL hostgroup
attributes through
SAVE CONFIG,SELECT CONFIG,SELECT INTO OUTFILE, andthe corresponding
LOAD ... FROM CONFIGcommands. Writers tolerate missingoptional sub-tables, so a partial or older Admin schema does not make the whole
configuration export fail.
Frontend
COM_PINGmetrics (#5948)Each frontend
COM_PINGreceived while a MySQL session is idle incrementsCom_frontend_pinginstats_mysql_globaland the correspondingproxysql_com_frontend_ping_totalPrometheus metric, making driver health-checkrates visible without inferring them from
SELECT 1traffic.Time-based purge of
stats_mysql_query_digest(#4920, closes #4543)The
PURGEcommand for the query-digest stats now accepts a last-seen timestamp,so operators can prune only digests not seen since a given time instead of
clearing the entire table. The purge logic is unified across the synchronous and
asynchronous paths, and monotonic-to-realtime clock conversion helpers were added
to support it.
Visible feedback for rejected variables on config load (#5857, fixes #1288)
Previously,
LOAD MYSQL VARIABLES TO RUNTIME(and thePGSQL,ADMIN,SQLITESERVER,CLICKHOUSE,LDAP, and TSDB equivalents) silently dropped rowswhose value failed module-side validation, returning only
Query OK, 0 rows affected. The OK packet'sinfofield now carries aRecords: N Updated: X Rejected: Y Unknown: Zsummary — e.g.Records: 184 Updated: 181 Rejected: 2 Unknown: 1— naming exactly how manyvariables were accepted, rejected, or unknown. Existing log lines and
reset/delete semantics are unchanged.
PostgreSQL Unix-domain-socket backends (#5844, closes #5837)
When a
pgsql_serversrow hasport=0, itshostnameis treated as aUnix-domain-socket directory path. libpq rejects
port=0outright, so ProxySQLnow omits the
port=field from the conninfo string at the three sites thatbuild it (client connect, backend kill, and the PgSQL monitor).
PROXYSQL INTERNAL SESSIONreports the build version (#5877, implements #5859)The JSON returned by
PROXYSQL INTERNAL SESSIONnow includes aversionfield(for both the MySQL and PostgreSQL protocols), sourced from
PROXYSQL_VERSION, soa session dump can be correlated with the exact build that produced it. The key is
purely additive.
Admin connect-setup robustness (#5826, #5786)
The admin interface's connect-setup accept-blocks now strip leading whitespace and
/* … */block comments before matching, so clients that prepend SQL tracingcomments to every statement — SQLCommenter, the Datadog Agent's
mysqlintegration, Sequelize, Hibernate — no longer fail admin-port connection setup
with
near "SET": syntax error.SET LOCK_WAIT_TIMEOUTis also now accepted inthe connect-setup block.
Richer diagnostics on protocol violations (#5936)
When a client sends packets out of order, the "Unexpected packet" / "Unexpected
COM_QUIT" error log now includes the front-end username, hostgroup id, andconnection id, so the offending client can be correlated with the subsequent
KILL CONNECTIONline.Unhealthy-connection diagnostics (#5946)
Warnings emitted when ProxySQL closes an unhealthy or fast-forward client now
include the frontend username, current hostgroup, and backend connection id,
making the client, route, and backend session identifiable from the log entry.
Bug Fixes (Core ProxySQL)
396c742f7,GHSA-fvch-fpgq-pwfx): the zlib decompression path now verifies that the number
of bytes produced exactly matches the length declared by the packet before
parsing the buffer, preventing uninitialized trailing memory from being
interpreted as MySQL packets.
one parameter format and no parameters is now accepted according to the
PostgreSQL protocol; other format-count mismatches return a protocol-violation
error.
STMT_EXECUTEbind buffers across a hostgroup split (fix(mysql): dangling STMT_EXECUTE binds across hostgroup split + de-flake mirror1 (#5883) #5895, fixesTAP: 6 legacy-g1 tests contaminate each other via shared test.sbtest1 (no per-test isolation) #5883):
stmt_execute_metadata_t.binds[i].bufferaliases packet/long-datamemory that is freed after each execute. Only the
MYSQL_TYPE_TIME-familybuffers were being nulled, leaving the other parameter buffers dangling. When a
session spanned two hostgroups (e.g. writes to one hostgroup while a
SELECT /* hostgroup=… */prepared statement went to another), the re-entrantlazy-prepare path consumed the dangling binds against freed memory, corrupting
prepared-statement result rows. Every parameter buffer is now nulled after the
free. The same PR de-flakes
mysql-mirror1-t, which asserted exact row countsagainst best-effort (lossy) mirroring.
fixes ProxySQL - PostgresQL wrong 'bytea' values #5866): libpq's
PQsendQueryPrepared()accepts only one result-columnformat for all columns, so a per-column format array in the Bind message (e.g.
pgx requesting text for a
varcharand binary for abytea) was collapsedto the first code, returning the remaining columns in the wrong format and
corrupting binary-preferred values. ProxySQL now rejects a heterogeneous
result-format array with a clean
ErrorResponseinstead of returning wrongbytes. Uniform arrays (
{},{0,0},{1,1}, or all-identical codes) areunaffected.
MySrvC::connect_error()now skipsER_MUST_CHANGE_PASSWORD_LOGIN(1862) — theerrno MySQL 8.0 / Aurora returns when a user's password is expired. This is
per-user state, not backend health, so it no longer counts toward
mysql-shun_on_failuresand can no longer mark an otherwise-healthy backendSHUNNEDfor unrelated clients.portdefaults (monitor: drop unreachable DEFAULT on port column in admin SQLite tables #5850): theDEFAULT 3306/
DEFAULT 6032clauses on theportcolumn of the monitor SQLite tables wereunreachable (every table's primary key includes
port NOT NULLand all internalinserts supply the port) and are removed for schema honesty. No data or runtime
behavior changes.
Dependencies, Build & Packaging
.tar.gzbinaries (Release generic binaries in tarball format #569, feat: release generic Linux binaries in tarball format (.tar.gz) (#569) #5881, fix(tarball): v4.0 build — protobuf-devel (CRB) + plugin-link ordering (follow-up to #5881) #5892, fix(tarball): reuse existing <ref>-head draft release by tag (follow-up to #5881) #5898, docs(tarball): document generic Linux .tar.gz builds #5911):ProxySQL now publishes distro-independent Linux tarballs alongside RPM/DEB, built
one tarball per tier (v3.0 / v3.1 / v4.0). Documentation for the generic tarball
builds is included.
now auto-detects the system page size via
getconf PAGESIZEinstead of the oldARM+CentOS-only
--with-lg-page=16override. This fixes the<jemalloc>: Unsupported system page sizestartup crash on all non-4 KB-pageplatforms — Apple Silicon (16 KB), AWS Graviton / ppc64le (64 KB), CentOS ARM.
cpp-dotenvupdated to v1.1.0 (Vendor cpp-dotenv v1.1.0 release #5875).lib/(not
lib64/), and built vendoredzstd/lz4with-fPIC, so shared-objectplugin links resolve.
longer install protobuf at runtime; the dependency is supplied by the build
image, and container build failures now propagate through the packaging target.
Testing & CI
This cycle carried a large test-infrastructure hardening effort:
platform shared-library extension (
.so/.dylib) and GNU-ld flags.replication and shunning TAP suite is now vendored from
jenkins-build-scripts,with every polling wait bounded, a wait-for-sync before checksum comparison, and
recovery of a relayed replica IO thread that dies on backend blips.
mysql90/93/95-grworkflows, and a
report_hostinfra fix so ProxySQL's GR monitor can reachmembers at a routable address (the previous
127.0.0.1advertisement made themonitor shun all members and empty the writer hostgroup).
taptestsCI callers superseded by the modern groups (ci: retire redundant taptests workflows — callers (groups/taptests/asan/ssl/old) #5870).downloads (test(deps): robust MySQL tarball download (retry + integrity + atomic) #5917),
workflow_runpermission fixes (fix(ci): grant permissions: write-all to workflow_run caller workflows #5867), and aninfra-agnostic ANSI_QUOTES GR test (test(gr): make test_ansi_quotes_group_replication-t infra-agnostic #5920).
PostgreSQL zero-parameter Bind handling (PgSQL: spec-valid Bind with num_param_formats=1 and 0 parameters rejected ("Invalid param format count") #5899, fix(pgsql): accept Bind with num_param_formats=1 and zero params #5955), compressed-packet
decompression validation (
396c742f7), and the AWS RDS Blue/Green simulatorand lifecycle suite (Add support for AWS Multi-AZ Instance blue/green deployment #5861).
(fix(ci): merge unit-test Codecov coverage #5954, fix(coverage): emit repo-root LCOV paths so TAP merges with unit-tests #5966) and the PostgreSQL cluster TAP caller/reusable-workflow split
(Convert CI-taptests-pgsql-cluster to caller/reusable split #5963).
Contributors
Thanks to everyone who contributed to this release, including @renecannao,
@wazir-ahmed, @rahim-kanji, @burnison, @takaidohigasi, @shabih-paystack,
@anthonyryan1, @fogelito, @Zhao73.
Security credit: Tristan Madani (Talence Security) responsibly reported GHSA-fvch-fpgq-pwfx.
Feature/fix requesters and reporters — thank you: @seikath (session
versionfield, #5859), and the reporters of #4543, #1288, #5786, #5837, #5866, #5883,
#5846, #4863, and #3252.
Packages
Alongside the usual
.deband.rpmpackages, this release ships generic Linuxtarballs —
proxysql-3.0.10-linux-amd64.tar.gzandproxysql-3.0.10-linux-arm64.tar.gz— each with a.sha256checksum and adetached
.ascGPG signature made with the ProxySQL release key(
653F85BB38256DF8A96206C3E8CA2E8D8217C97E).Two platforms are intentionally not included in this release:
ProxySQL 3.0 depends on.
aarch64only — their post-build verification failedin CI. The
x86_64openSUSE packages are unaffected and are included.Hashes
The release commit is:
f5f1e148e.SHA256s:
This discussion was created from the release v3.0.10.
All reactions