github readysettech/readyset stable-261022

3 hours ago

Release Notes

Readyset is currently released as a docker container and Linux distro binary packages. For installation with docker, see the Install with Docker documentation. Available Linux distribution binary packages for x86_64/amd64 and arm64/aarch64 include deb package for Ubuntu 22.04, Debian 12 and later, and rpm packages for Amazon Linux 2023 and RedHat 9. See package installation instructions.

What's New

  • 70cceee: Fixed the PostgreSQL RowDescription so a column's type modifier, such as the precision and scale of a numeric value, matches the upstream's in proxied, shallow cache, and deep cache results.
  • bc400d2: PostgreSQL CIDR values are now supported when shallow caches are accessed over the extended query protocol.
  • 53f6366: Readyset now refuses and proxies the same row operations that the upstream refuses. Refused forms include comparisons with non-row values, comparisons between rows of different sizes, and arithmetic operations on rows.
  • d4c8cd5: Readyset now caches row comparisons that mix literals and columns, such as ('a', b) = ('c', 'd'), instead of refusing them with an error about placeholders.
  • 252e491: Readyset now caches row comparisons written with literals or placeholders on the left, such as ($1, $2) = (a, b), as lookups.
  • 4a231cf: Added dual-password support for MySQL deployments. ALTER READYSET MODIFY USER ... RETAIN CURRENT PASSWORD keeps the old password valid alongside the new one, and ... DISCARD OLD PASSWORD retires it. Naming a user twice in --allowed-users starts a deployment mid-rotation. The readyset.users view reports rotations in progress in a new has_old_password column.
  • cea2138: Improved throughput for queries sent as text, which previously serialized on the schema catalog lock.
  • 62dcdff: Changed the default --memory-limit from unlimited to 80% of the memory available to Readyset (the container limit, if set). Set --memory-limit to 0 to keep the previous unlimited behavior.
  • 4130517: The shallow cache now uses half of --memory-limit in deep and deep-then-shallow cache modes when --shallow-memory-percent is not set. It was previously unbounded in these modes.
  • 0fadb35: Readyset now returns rows written after the first read for a cache that joins a subquery containing DISTINCT, GROUP BY, or LIMIT to a table.
  • 3db1563: Readyset now serves a prepared statement whose parameter is compared against a join key that the query projects under an alias, instead of proxying it.
  • fd94ee3: Readyset now returns every row selected by a subquery with ORDER BY and LIMIT when the query filters or joins on it.
  • 7463e04: Readyset now serves a MySQL cache created with ? placeholders instead of sending its reads to the upstream.
  • 65daac0: CREATE CACHE and EXPLAIN CREATE CACHE statements are now rejected with an error when the session is connected to the readyset schema.
  • 1d8f8e6: Added an admin SQL port. Admin sessions connect to the readyset schema and cannot run queries against the upstream database. Configure the port with --admin-address (default: "127.0.0.1:6036") and --admin-credentials (default: "admin:admin"). The port can be disabled via --admin-address disabled.
  • 8decac7: Added the ALTER READYSET SHUTDOWN [RESET] command, which can only be executed via the admin port.
  • d030b62: PostgreSQL built-in point values are now supported when shallow caches are accessed over the extended query protocol.
  • 5a2e886: PostgreSQL box values are now supported when shallow caches are accessed over the extended query protocol.
  • 5ebf356: PostgreSQL path values are now supported when shallow caches are accessed over the extended query protocol.
  • 5b82241: Improved throughput for queries sent as text, which previously serialized on a shared lock.
  • 69a69d5: Fixed an issue that prevented Readyset from starting in shallow mode with RLS enabled against a PostgreSQL upstream whose certificate is signed by a private CA.
  • 3f7ef66: --upstream-db-url and --cdc-db-url now accept a comma-separated list of MySQL servers, each with an optional |<weight> suffix.
  • c659407: Added --upstream-connect-timeout, which limits how long the adapter waits for an upstream connection to be established.
  • 3f31159: Removed a query to the upstream MySQL database that was issued for every new client connection.
  • 63512f1: Added --listen-backlog (default: 4096). Readyset previously queued at most 128 pending connections per listen address, so connection bursts could leave clients stalled until their connection timeout.
  • cf26ddc: Fixed an issue that could cause MySQL TLS connections to hang indefinitely during the handshake under load.
  • f706aa6: Added --client-connect-timeout-ms. MySQL clients that do not complete the handshake within this timeout (default: 10 seconds) are disconnected.
  • 3d1cc5d: PostgreSQL clients that do not complete the handshake within --client-connect-timeout-ms (default: 10 seconds) are disconnected.
  • 1ef16f3: Queries with an unqualified column that matches several tables are now rejected, as they are in MySQL and PostgreSQL. Names in USING, ORDER BY, GROUP BY, and HAVING are now resolved as they are in those databases.
  • 77e2c28: Deep caches created using a query ID from SHOW PROXIED QUERIES, via CREATE CACHE FROM <query id>, are now recreated on restart.
  • 1d1def7: Fixed a bug that disconnected MySQL clients using prepared statements to read a deep cache when the query involved a NOT NULL column on the right side of a LEFT JOIN, or a view containing a UNION ALL query where a column was NULL in one branch and NOT NULL in another.
  • 1d1def7: Fixed the metadata returned for columns read from a deep cache by a query that reads from a view containing a UNION ALL. For MySQL, we now correctly omit the PRI_KEY, UNIQUE_KEY, AUTO_INCREMENT, and NO_DEFAULT_VALUE column definition flags instead of picking the flags based on one of the UNION ALL branches. For PostgreSQL, we now correctly return type modifier metadata for a column only if it is the same across all UNION ALL branches, instead of picking it arbitrarily from a single branch.
  • d992004: Fixed the propagation of MySQL column definition flags and length information, and PostgreSQL row description fields, for deep caches of queries that have a LIMIT. This issue could cause type-casting problems with some MySQL drivers that expected to cast a TINYINT(1) to a boolean but instead received an incorrect default width of TINYINT(4).
  • 5ef2a8f: Added replication of MySQL tables with ZEROFILL columns and basic deep cache support for queries that use the column as a key or in a comparison.
  • cd3e647: Added deep cache support for MySQL ZEROFILL columns in the result set, with the same zero padding as in MySQL.
  • 67a5ef1: Fixed an issue that prevented queries over a view created after Readyset started from ever being shallow cached on a PostgreSQL upstream.
  • c5e257d: Fixed an issue that caused shallow cache entries to be shared between sessions with differing values for several session variables that affect query results.
  • 183a9e6: Setting sql_auto_is_null to a true value is now treated as an unsupported SET statement.
  • b9540a3: Fixed an issue that caused shallow cache entries to be shared between PostgreSQL sessions with differing timezone_abbreviations or intervalstyle settings.
  • 308ab73: Fixed an issue that caused shallow cache entries to be shared between PostgreSQL sessions with differing default_text_search_config settings.
  • f8813de: Added support for integer arithmetic when setting session variables that change query results (e.g., SET group_concat_max_len = 3 * 1024).
  • e305fe1: Shallow cache entries are now keyed on the MySQL upstream's global values of the session variables that affect results, as of the latest health check.
  • a8ca531: Shallow cache entries are now keyed on the IntervalStyle that a PostgreSQL connection inherits from the upstream.
  • 0d73ab2: Limited the query logger's backlog to 65,536 events; events beyond that limit are dropped and counted in the new readyset_query_log_dropped_events metric.
  • c857c36: Key column DDL now renders names without qualification to match MySQL and PostgreSQL. Also suppressed some warning logs that incorrectly implied we would re-snapshot all tables on restart if any table with a FOREIGN KEY existed.

Don't miss a new readyset release

NewReleases is sending notifications on new releases.