[RELEASE] ScyllaDB 2025.1.16

The ScyllaDB team is pleased to announce the release of ScyllaDB 2025.1.16, a production-ready patch release for ScyllaDB 2025.1 Long Term Support (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.

Compaction

  • Reads using Time Window Compaction Strategy (TWCS) in reverse order could incorrectly skip some SStables that actually held matching rows, causing those rows to be missing from the query results. This affected only reversed-order reads on TWCS tables. The SStable filtering is now correct, so reversed TWCS reads return complete results.
    scylladb#31250

CQL

  • CQL bind variables used with the IN operator can now be given lowercase names, matching the naming rules used elsewhere in CQL.
    scylladb#31173

  • With a prepared ALTER TABLE, CREATE MATERIALIZED VIEW, or ALTER MATERIALIZED VIEW statement, if the first execution failed, later executions of the same prepared statement skipped part of the table-property validation, allowing invalid options (such as an invalid compaction strategy) to be accepted. Property validation now runs on every execution, so invalid options are consistently rejected.
    scylladb#31798

  • Tracing a statement that bound a null element inside a collection (for example a list or set) could crash the node. A null collection element is now rendered as null in trace output, matching the JSON output behavior, so tracing such statements is safe.
    scylladb#31779

  • A PREPARE statement running concurrently with a USE statement on the same connection could race over the connection’s state, which in rare cases corrupted an internal value and caused the node to restart. The connection state is now handled safely so this race can no longer occur.
    scylladb#31422

Materialized Views (MV)

  • After a node restart, the view builder could resume building an unfinished materialized view without first flushing its base table, on the assumption that the flush had already happened. When that assumption did not hold, some view updates could be missed, leaving the view out of sync with its base table. The base table is now always flushed when the view builder resumes building an existing view, so no updates are lost.
    scylladb#31669

Networking

  • An RPC stream connection could still be sent on after it had started closing, which could disrupt the connection. Such a connection is no longer used for sending once its close has begun.
    scylladb#31468

Raft

  • A coordinator that lost leadership mid-operation could still complete a TRUNCATE or SNAPSHOT, in rare cases using state belonging to a different, later operation. This could let a replica execute a request that had already been finalized elsewhere, risking data loss. Such operations are now safely aborted when the coordinator is no longer valid, preventing this.
    scylladb#31809

Repair

  • A user-requested repair over a token range that spanned several vnode ranges with different replica sets was only repaired against the replicas of the range’s last part, so replicas owning earlier parts of the range were left out. The repair was still recorded as complete in system.repair_history, which could allow repair-based tombstone garbage collection (tombstone_gc = {'mode': 'repair'}) to proceed on nodes that had not actually been repaired, risking data resurrection. Repair now splits the requested range along replica-set boundaries and records history only for sub-ranges that were fully repaired, so tombstone GC is gated on accurate information.
    scylladb#31625

  • A long-running user-requested repair on a vnode keyspace could block a concurrent topology operation (such as a decommission) until the node running the repair was restarted. Topology operations now abort such repairs so they can proceed; the aborted repair can simply be re-run afterwards.
    scylladb#31780

Security

  • The {USER} substitution in the LDAP URL template was not properly sanitized, which could lead to unexpected behavior or security concerns in certain configurations. This has been addressed by sanitizing the substituted user value in LDAP URL handling. This improves the security and robustness of configurations that rely on dynamic user information in LDAP URLs.
    scylladb#31327

  • Connections authenticated with the CertificateAuthorizer now complete full connection setup during startup. This ensures the connection runs under the scheduling group mapped to the user’s service level, releases its slot in the connection-initialization semaphore, and reports READY in system.clients. The result is correct service-level scheduling and resource accounting for certificate-authenticated connections.
    scylladb#30003

Service Levels

  • When using LDAPRoleManager, ATTACH SERVICE LEVEL could report success even though the attachment was not actually applied, so the service level had no effect and could not be found afterward. Service level attachments under LDAPRoleManager are now stored and retrieved correctly.
    scylladb#31624

Stability

  • A rare internal race in the task-management code could, in unlucky timing, cause a node to use memory that had already been freed, potentially crashing the node. The affected object is now kept alive for the duration of the operation, preventing this.
    scylladb#31571

  • Reading system.clients could, for some combinations of connected clients, produce undefined ordering results because the rows were not sorted consistently. Rows are now sorted deterministically by (port, client_type), matching the table’s clustering key.
    scylladb#31597