[RELEASE] ScyllaDB 2025.1.15

The ScyllaDB team announces ScyllaDB 2025.1.15, a bug-fix production-ready patch release for ScyllaDB 2025.1 LTS Release.

Note there is a new Long Term Support (LTS) release 2026.1. You are welcome to upgrade to it for the latest and greatest features.

More information on ScyllaDB Version Support Policy is available here.

Related Links

Bug Fixes

The following issues are fixed in this release.

Alternator

  • A schema change during DeleteTable was previously performed using the storage_proxy of the shard handling the request rather than shard 0, where some table metadata lives exclusively. This could cause the delete to miss information tracked only on shard 0. executor::delete_table now consistently uses the shard-0 storage_proxy, avoiding the discrepancy.
    scylladb#27224

Compaction

  • The backlog tracker for a compaction_group created after table start – for example by tablet split, migration, or merge – was never registered with the compaction_backlog_manager. As a result, its sstables did not contribute to the reported compaction backlog, which could lead the compaction controller to under-provision shares for that group. Backlog trackers created after start are now registered as well, so newly created compaction groups are correctly accounted for.
    scylladb#31170

  • DESCRIBE output showed NullCompactionStrategy for a table whose compaction was disabled via 'enabled': 'false', because the reported strategy type came from a code path that returns null in that case. DESCRIBE now reports the table’s actual configured compaction strategy, matching what is persisted to disk.
    scylladb#29804

Materialized Views (MV)

  • When the view update reader was already exhausted, view_update_builder::on_results() stopped tracking existing range tombstones, so a row covered by such a tombstone could be treated as alive while generating the update and produce a spurious view row. The existing tombstone state is now kept up to date on this code path and applied to clustering rows before the update is generated, preventing the spurious rows.
    scylladb#29481

Networking

  • lz4_dstream, used for RPC message decompression, did not always pass the exact decompressed block size expected by LZ4’s synchronized ring-buffer mode, which could occasionally corrupt decompressed results and surface as RPC compression checksum failures in production clusters. Decompression now uses a ring buffer sized so a block’s decompression cannot overwrite bytes needed for later blocks, removing the dependency on exact sizing.
    scylladb#30994

Raft

  • raft::fsm’s internal _messages container used std::vector, which could require oversized single allocations as message batches grew. It is now backed by utils::chunked_vector, which stores elements in bounded chunks, avoiding oversized allocations under heavy raft message load.
    scylladb#30249

  • raft_group0_client::start_operation did not correctly handle the use_pre_raft_procedures flag once it was set after group 0 startup had already begun, which could route an operation through the wrong procedure. The flag is now checked at the point the operation actually starts, ensuring the right procedure is used.
    scylladb#28876

  • During shutdown, raft background fibers could hit expected exceptions (such as gate_closed_exception or write timeouts) from services that were already stopping. These were logged as errors and reported through the generic background-error handler, which could affect otherwise benign teardown. Once the server has started aborting, such fiber failures are now logged at debug level and no longer reported as background errors.
    scylladb#30376

  • trigger_stepdown’s targeted-stepdown handling read the group_id via get_path_param, which always returns an empty value since the route defines no path placeholder, even though the presence check used get_query_param. The handler now reads group_id consistently via get_query_param, so a targeted stepdown request is correctly recognized.
    scylladb#30315

Reliability

  • A stall report during a context switch could lead to a crash on aarch64 hosts, addressed upstream in Seastar. The bundled Seastar submodule is updated to include the fix. scylladb#31170

Repair

  • repair_tablet could dereference a null repair_task_info when a tablet’s transition stage was repair and the corresponding repair request had been concurrently removed via the delete-repair-tablet-request API, leading to a node restart. A null check consistent with the surrounding validity checks now treats this case as a canceled request instead of dereferencing the null pointer.
    scylladb#30416

Storage

  • evictable_reader’s buffer-overfill prevention logic did not correctly account for a new buffer starting with a new partition, which could allow a reader to re-emit already-emitted data. The check is now adjusted to handle the new-partition case, preventing the overfill.
    scylladb#30474

  • stream_progress::advance() could trip an assertion (completed <= total) during tablet-aware restore, because per-tablet progress is accumulated from fractional contributions that can drift slightly past 1.0 due to floating-point rounding. completed is now clamped to total instead of asserting, absorbing the expected floating-point imprecision while still preventing progress from moving backward.
    scylladb#30273

Tablets

  • group0’s command history was retained for up to a week before being garbage collected, which was longer than necessary for normal operation. The retention duration is reduced to one hour, lowering the associated storage overhead.
    scylladb#30825

  • Tables participating in schema changes via group 0 were not guaranteed to have the schema commitlog enabled, and updates applied through ensure_group0_schema were not verified against this expectation. enable_schema_commitlog is now set for group 0 tables, and each group0 schema command asserts that the schema commitlog is in use, catching the condition early instead of relying on it implicitly.
    scylladb#28876