Overview
This document summarizes the key changes, improvements, features, and bug fixes introduced in YTsaurus 25.4.0. Thank you to all contributors and maintainers for their work.
YTsaurus Server 25.4.0 is supported since 0.27.0 version of the Kubernetes operator.
Significant changes
-
Row-Level Security (RLS) — end-to-end support. ACEs now accept an
expression, restricting access to individual rows;full_readis extended row-wise (coverscopy/concatenate/remote_copy). Wired through master, proxyread_tableand controller agent in operations; CHYT 2.18+ already supports it, SPYT 2.9.0 is required and YQL/QT — 0.4.1. -
Bulk-insert under user transaction — now general use. Introduced as experimental in 25.3 (the prerequisite for
REPLACE INTO //dynamic/tablein YQL), it is promoted to general availability in 25.4 — safe to use in production workloads. -
Authorized node expiration. Master now remembers who set
expiration_time/expiration_timeoutand, withenable_authorized_expirationon, runs the removal under that user. Prevents accidental cross-account deletions of shared subtrees and gives an auditable lifecycle for auto-expiring nodes. -
Distributed write protocol for files. Files can now be written from many client processes in parallel, the same way tables already could. Removes the single-writer bottleneck for large artifacts and enables fan-out uploads from operations and pipelines.
-
transfer_bundle_resourcescommand. Atomically moves resource quotas (tablet count, tablet static memory) between two tablet cell bundles in a single mutation, making bundle rebalancing safe for automation and the bundle controller. -
Heavy hitters for lookup queries. Dynamic tables expose raw and data-weighted heavy hitters for lookups, giving operators a first-class way to find the keys behind cache pressure, hot tablets and skewed read patterns.
-
check_operation_permissionAPI. Lets users and orchestrators ask the scheduler whether a given user has a given permission on an operation, mirroringcheck_permissionfor Cypress objects. -
Chunk filtration via
input_queryin path attributes. Filters chunks based on a query directly in path attributes — useful for read optimizations, a12fb8b. -
Compressed-data-size constraints for sorted operations. Adds primary compressed-data-size limits and a
consider_only_primary_sizejob-sizing option that accounts only for the primary size when slicing jobs, 1057b82. -
CPU overload handling on data node. Integrates CPU overload handling into the data node; adds dynamic adjustment of pending-disk-read / pending-disk-write memory limits and the maximum session count, 5a4fe1f.
-
YTQL syntax v3 — expressivity upgrades. Several long-standing limitations are lifted:
- Expressions allowed in
INandBETWEEN. - Integer index in
GROUP BY/GROUP BY KEY(GROUP BY 1, 2). - New string functions
make_ngramsandsplit. - Reads from tablet followers in
SELECTqueries. - Fetch join executed on proxy.
- Array join with lists of composite and
anyvalues.
- Expressions allowed in
Breaking changes
- List nodes have been completely removed. Loading a snapshot that contains list nodes will crash master-server. To ensure that no list nodes exist before the update, the following steps can be taken:
- If
alert_on_list_node_loadoption in the master dynamic config is set totrue, then validation should have produced an alert when loading from snapshot in 25.2 and a crash in 25.3. If no alerts or crashes were observed, then it should be safe to update. - Otherwise, it is advised to use the dry-run option
--validate-snapshotwith the master-server binary version 25.4 to validate that the snapshot can be loaded before updating, 0abb6d3.
-
Pool tree config cleanup. Removed
enable_scheduling_tags(the feature it disabled is no longer relevant) andmax_share_ratiofrom pool config (it was used to limit guarantees pre-vector-HDRF), d807f21. -
Deprecating
list_queue_consumer_registrations. Newdisallow_list_all_registrationsoption in queue consumer registration manager config; this will become the default in subsequent releases after a migration phase, 3a49cef.
Full changelog
Scheduler and GPU
New Features & Changes:
- Introduce
check_operation_permissionAPI to verify a user's permission on an operation, 05236de. - Add
allow_children_guaranteesoption for scheduler pools to forbid child pools from having guarantees, 8b93622. - Introduce
list-job-tracesAPI to retrieve a job's GPU traces, d495b01. - Allow
scheduling_tag_filterfor operations spanning several pool trees, 5c17ea5. - Increase default allocation preemption timeout to 30 seconds, f3d1c5a.
- Alert when an operation's spec is too large, 9067544.
Fixes & Optimizations:
- Removed
enable_scheduling_tagsfrom pool tree config andmax_share_ratiofrom pool config (both obsolete), d807f21. - Removed obsolete checks that blocked preemption when an ancestor pool was starving, 721def2.
- Allow resource limits overcommit during preemptive scheduling to mitigate resource distribution issues, 273bbc6.
Queue Agent
New Features & Changes:
- Add a profiling metric exposing whether a queue agent instance is banned, so external systems can alert on instances banned for too long, 8095e03.
- Server-side support for the
queue_agent_controller_livenessOdin check in multi-cluster environments, c960ce5.
Fixes & Optimizations:
Proxy
New Features & Changes:
- New
disallow_list_all_registrationsoption in queue consumer registration manager config — a transitional step toward removinglist_queue_consumer_registrations, 3a49cef. - Support
LinkNodewith attributes via RPC, 570c83f. - Support RLS (Row-Level Security) in the
read_tablecommand, 9ee66dd. - Register
chyt_http(s)_serverin Cypress, 69595e0.
Fixes & Optimizations:
- Fix datetime mapping to protobuf integral types, c04424a.
- HTTP server now starts listening only after
Start()is called, 8af9288.
Dynamic Tables
New Features & Changes:
- New
transfer_bundle_resourcescommand — atomically transfers resources between two tablet cell bundles, e2479e2. - A configurable share of compaction tasks is reserved for the most starving
{table, compaction reason}pairs, 5f2ad34. - Heavy hitters and data-weighted heavy hitters for lookup queries, 75e474e.
- YTQL
make_ngramsfunction, c848ed3. - YTQL
splitfunction — splits a string by a delimiter into a list, d355e0b. - Expressions in
INandBETWEEN(syntax v3), 128294e. - Integer index in
GROUP BY/GROUP BY KEY(syntax v3), 359dfb3. - Aggregating columns are now allowed for unfolding indices; if the unfolded value contains repeats (e.g.
[1;2;3;1]), table values are aggregated, 8b5954a. - Reads from followers enabled in
selectqueries, f8c5fde. - Proxy subqueries supported in
explain-query, 0f2799f. - Fetch join on proxy, 3c3515c.
- Array join with lists of composite and any values, be8bc8c.
Fixes & Optimizations:
- Sample keys are now tracked under the
tablet_backgroundcategory, 009a33d. - Query builder produces more balanced ASTs for predicates, 913c370.
- Avoid excessive memory footprint from memory-tracking in-memory chunks within a memory pool, 8f7f624.
- Fix compaction timestamp digest for
min_data_versions=1, 7a2a576. - Improved performance of aggregate column evaluation, 7ffe4d2.
- Slimmer QL codegen cache, ba32890.
- Fix crashes from incorrect ids produced by range inference on
is_prefix(...)expressions, 9c64c4a. - Add missing
/overload_controllerprefix to profiling sensors, 01f2324. - Fix
CASEoperator ignoring theuse_canonical_null_relationsoption, 5b48f8b. - Fix array join when unpacking null lists, 3f8ca76.
- Minor use-after-free fix, 2e99e6d.
- Fix segfault in YTQL codegen for queries with nested subqueries under certain conditions, 63fcaa9.
- Add missing casts for the
CASToperator in YTQL, 910cf8b.
MapReduce
New Features & Changes:
- Job API in job proxy — exposed to user jobs over Unix domain sockets. Initial endpoint
OnProgressSavedbumps a job's preemptible-progress start time, 50011e3. - Use a code-generated comparator in partition reduce when the schema is known, for higher performance, 984cee5.
- Exec node chunk cache renamed to artifact cache; metrics moved to
yt/exec_node/artifact_cache, 70fb3e0. - Chunk filtration via
input_queryin path attributes — useful for read optimizations, a12fb8b. - Compressed-data-size constraints for sorted operations, including primary compressed-data-size limits and a
consider_only_primary_sizejob-sizing option, 1057b82.
Fixes & Optimizations:
- Fix readers in MR operations not accounting for nested tables, ea0179f.
Master Server
New Features & Changes:
- Permission check during removal of expired nodes (authorized expiration). New attributes
expiration_time_user,expiration_timeout_user,expiration_time_last_reset_time,expiration_timeout_last_reset_timeand config entriesenable_authorized_expiration,expiration_attempt_limit,expiration_persist_period, 5bc8e76. - Skip node disposal when a node was restarted, 8616a6b.
- List nodes have been completely removed. Loading a snapshot containing list nodes will crash master-server, 0abb6d3.
- "Lie" about
full_readpermission in authorization errors. When a user lacks even basicread, the error mentions only basicread, so they don't unnecessarily requestfull_read, 655e1a4. - Removed duplicate alerts about misconfigured roles on master cells in multicell manager — alerts now only fire on the primary master, 1e5aeff.
Fixes & Optimizations:
- Fix requests like
create //a/b&previously failing with "no such child 'b'", 28cecce. - Secondary index objects now receive a proper ACD (matching the indexed table), 57f8185.
Node
New Features & Changes:
- Option to skip waiting for preceding blocks in
PutBlocksrequests, 5b23e49. - Metrics for huge-pages I/O operations, 320f828.
- Integrate CPU overload handling into data node; allow dynamic adjustment of pending-disk-read / pending-disk-write memory limits and the maximum session count, 5a4fe1f.
Fixes & Optimizations:
- Fix race in node lease handling: when a node is banned and its lease tx is aborted while a registration is in flight, the new registration could reuse the already-aborted lease, fe7b03f.
Other
- Make
TAsyncExpiringCachesharded, dd06cc5. - Time at which a memory profile was collected and its collection duration are added to the profile dump, 9aa42a7.
- Fix extra trace contexts when reading columnar chunks outside the schemaless multi-chunk reader context, f0f0103.
- Fix races on memory guard (was not thread-safe, unlike memory tracker), 640e137.