The ScyllaDB team is pleased to announce the release of ScyllaDB 2026.2.1, a production-ready patch release for ScyllaDB 2026.2 ScyllaDB Short Term Support (STS) Minor Feature Release.
More information on ScyllaDB Version Support Policy is available here.
Related Links
Bug Fixes
The following issues are fixed in this release:
Alternator
- Alternator TTL scanning on tablet-backed tables now re-resolves the effective replication map (ERM) for each tablet instead of holding a single reference for the entire scan. Previously, a long-running TTL scan could keep stale topology metadata alive after topology changes, which in turn could prevent barrier_and_drain from completing and delay tablet rebalancing. Each tablet’s partition range is now copied and the metadata released before awaiting the scan/delete work.
scylladb#30530
Materialized Views (MV)
-
A race condition between tablet migration cleanup and view building staging SSTable registration is now resolved. When a tablet migrated away while an SSTable was queued for registration, the cleanup step could miss the queued entry, causing the view building worker to retry indefinitely when the on-disk storage was subsequently removed. The fix ensures that cleanup also drains the registration queue under the appropriate lock before clearing local staging state.
scylladb#30380 -
The view building coordinator no longer uses a Raft timeout when starting group0 operations on the Raft leader. On heavily loaded nodes, the default Raft timeout could be exceeded by the read barrier (observed at ~90 seconds), causing the finished_task_gc_fiber to time out during view drop operations. Removing the unnecessary timeout allows these operations to complete reliably regardless of node load.
scylladb#30338 -
The row locker used by materialized view updates now uses a higher hash map load factor, reducing the bucket array size by approximately 8x. Under high concurrency (more than 16K concurrently locked partitions), the previous configuration could trigger oversized memory allocations during rehashing. This change avoids those allocations with negligible performance impact, since the view update read-before-write dominates the operation time.
scylladb#30640
Networking
- ScyllaDB now invalidates cached RPC connections when a peer node’s IP address changes. Previously, in environments such as Kubernetes where a restarted node may receive a new IP, the messaging service continued using stale connections pointing to the old address. Because the old IP is typically blackholed (packets silently dropped), the direct failure detector would remain stuck until TCP keepalive expired, leaving the restarted node effectively inaccessible. The fix detects IP changes in the CLIENT_ID handler and evicts stale connections on all shards before updating the address map.
scylladb#30439
Raft
- The trigger_stepdown REST API endpoint now correctly reads the group_id from the query parameter. Previously, the value was read using get_path_param, which always returned an empty string since the route has no path placeholder for group_id, making targeted Raft group stepdowns via the API ineffective. The fix uses get_query_param consistently.
scylladb#30375
Repair
- A null pointer dereference in repair_tablet that could occur when a repair request is concurrently deleted is now prevented. When the tablet transition stage is repair, the repair task info may have been concurrently removed by the del_repair_tablet_request API, leading to a node crash on dereferencing. A null check is now performed, and the request is treated as canceled when the info is absent.
scylladb#30447
Stability
- The Seastar submodule is updated to fix a crash on aarch64 (ARM) platforms that could occur when the stall detector attempted to capture a backtrace during a seastar::thread context switch. The crash happened in a narrow window during longjmp, where the stack pointer was temporarily invalid.
scylladb#30419
Storage
- The S3 multipart upload response parser now handles unexpected XML responses (such as documents returned by S3 on conditions like NoSuchUpload, SlowDown, or AccessDenied) without crashing. Previously, parse_multipart_copy_upload_etag() dereferenced a null pointer when the expected element was absent from a well-formed XML response, causing a node crash (SEGV). The fix adds proper null-node checks and throws a descriptive error instead.
scylladb#30611
Tablets
-
Capacity-based load tracking now correctly accounts for tablet disk size during replication factor (RF) change migrations. Previously, the load sketch pick/unload calls in the RF change paths (colocation, extend, and shrink) passed a size of zero because the migration tablet set was constructed without initializing tablet_set_disk_size. The fix looks up the actual tablet size, consistent with the normal balancing path.
scylladb#30419 -
Multishard reads during vnodes-to-tablets migration now work correctly. During a rolling restart in a vnodes-to-tablets migration, a vnode-based coordinator could send a multishard read RPC to a tablet-based replica, which would then incorrectly dispatch based on the keyspace replication strategy (still vnode-based) instead of the table’s effective replication map (tablet-based), resulting in an assertion failure. The fix checks the table’s ERM for the dispatch decision.
scylladb#30434
Vector Search
-
ANN (Approximate Nearest Neighbor) query filter construction now properly reports an error when encountering unsupported restriction types such as map subscript expressions. Previously, restrictions with a non-column-reference left-hand side were silently skipped, causing the query to run without the intended filter. This could lead to incorrect results from Vector Store, which validates filters but had no information about filters produced on the ScyllaDB side. The fix throws an “unsupported restriction” exception.
scylladb#30582 -
A race condition during vector store client shutdown is now resolved. The DNS refresh task could be triggered while clients were shutting down, leading to a null pointer dereference. The fix ensures the DNS refresh task stops before client connections are closed, and adds a null-pointer guard for the old client reference.
scylladb#30341