[RELEASE] ScyllaDB 2025.2.4

The ScyllaDB team announces ScyllaDB 2025.2.4, a bug-fix production-ready patch release for ScyllaDB 2025.2 Feature Release.

Note that there is a new Short-Term Support (STS) Feature Release 2025.4. You are welcome to upgrade to it for the latest and greatest features.

More information on ScyllaDB’s Support Policy is available here.

Related Links

Bug Fixes

The following issues are fixed in this release.

Alternator

  • Fix bug in UpdateItem with AttributeUpdates and ReturnValues
    Alternator could return incorrect results when processing UpdateItem requests combining AttributeUpdates and ReturnValues.
    The update logic was corrected to ensure the expected values are returned.
    scylladb#25894, scylladb#26095

  • Fix expression parsing memory leak
    A memory leak was identified in Alternator’s expression parsing logic.
    The ANTLR parser was fixed to properly release resources, eliminating the leak.
    scylladb#25878, scylladb#26084

CQL & Authentication

  • CQL connections remain in the main scheduling group when authentication is disabled
    CQL connections were accepted into the main scheduling group and never migrated when authentication was disabled, potentially impacting performance.
    Connections now explicitly update their scheduling group even when authentication is not enabled.
    scylladb#26040, scylladb#26581

  • Service levels on Raft perform local reads with timeouts from the auth tables
    Authentication-related service levels on Raft could perform local reads with timeouts, causing instability.
    The implementation was corrected to prevent these local reads from being used in the auth table access paths.
    scylladb#25290

Compaction, Scrub & Streaming

  • Add configuration options for default SSTable compression
    Operators previously had no way to globally control default SSTable compression settings.
    New configuration options allow defining default SSTable compression behavior.
    scylladb#25195

  • PRUNE MATERIALIZED VIEW may miss previously undetected ghost rows
    The PRUNE MATERIALIZED VIEW statement could leave behind ghost rows under certain conditions.
    The fix ensures all previously undetected ghost rows are removed during pruning.
    scylladb#25655, scylladb#25955

  • Compaction manager reports active tasks after stop
    A race condition could cause the compaction manager to report remaining tasks after shutdown.
    All compaction executors are now fully stopped before completing the stop operation.
    scylladb#25806, scylladb#26223

  • Scrub runs concurrently with compactions
    Scrub could run concurrently with compactions, leading to invalid SSTables being mishandled.
    SSTables are now registered for compaction before validation, and exceptions during quarantine are handled safely.
    scylladb#23363, scylladb#26098

  • Compressor validation of sstable_compression parameters
    Missing validation for sstable_compression parameters could lead to misconfiguration.
    Validation was added, and exception messages were corrected.
    scylladb#26300

  • Node coredump during tablet cleanup with ongoing compactions
    Nodes could crash during tablet cleanup if compactions were still running.
    Tablet cleanup logic was fixed to correctly coordinate with active compactions.
    scylladb#26229

Performance

  • Raft log bypasses cache
    The Raft log was unnecessarily routed through the cache layer.
    Caching for the Raft log is now disabled, improving performance and predictability.
    scylladb#26027, scylladb#26072

  • Tablet scheduler plan-making impacts user workload
    The tablet scheduler plan-maker could interfere with user workloads.
    Plan generation now runs in the maintenance scheduling group to isolate user traffic.
    scylladb#26037, scylladb#26167

  • Handle an unbounded number of tasks entering the system
    The system did not properly handle an unbounded influx of tasks.
    Task admission logic was improved to prevent overload scenarios.
    scylladb#2

  • Updated PGO profiles for aarch64 and x86_64
    Profile-Guided Optimization (PGO) profiles were refreshed for both architectures.
    This improves overall runtime performance on supported platforms.

Raft Topology & Recovery

  • Schema pulls re-enabled during Raft-based recovery
    Schema pulls were disabled during parts of Raft recovery and not consistently re-enabled.
    Recovery logic now correctly re-enables schema pulls at the appropriate stage.
    scylladb#26569

  • Voter handler considers stale group 0 members during recovery
    The Raft voter handler incorrectly included old group 0 members during recovery.
    The logic was fixed to accurately reflect current group membership.
    scylladb#26321

  • Raft recovery tests intermittently fail due to connection issues
    Multiple Raft recovery tests failed intermittently with NoHostAvailable or assertion errors.
    Driver reconnection logic was deflaked to improve test reliability.
    scylladb#26534, scylladb#26005, scylladb#26197

Reliability & Stability

  • Hints can be lost during topology changes or tablet transitions
    Hints destined for replicas could be lost during topology or tablet transitions.
    Hints are now correctly sent to pending replicas.
    scylladb#19835, scylladb#25881

  • Batchlog replay fails for dropped tables
    Batchlog replay could fail if a table had been dropped.
    Replay now safely drops the batch instead of failing.
    scylladb#24806, scylladb#26200

  • Batchlog replay uses CL=ALL
    Batchlog replay incorrectly used consistency level ALL, causing failures.
    The consistency level handling was corrected.
    scylladb#25432

  • Applying speculative retry prevents dropping the schema
    Dropping schemas and tables failed after applying speculative_retry = ‘99.99PERCENTILE’.
    Schema manipulation logic was corrected.
    scylladb#26369

  • Gossiper operations executed in the wrong scheduling group
    Gossiper operations could execute in the streaming scheduling group.
    Operations are now consistently executed in the gossiper scheduling group, and the correct gossiper instance is used.
    scylladb#25907, scylladb#26071

  • Load balancer throws std::out_of_bounds during decommission
    Decommissioning a node could fail when empty nodes were present.
    The load balancer now safely handles empty-node scenarios.
    scylladb#26203, scylladb#26239

  • Load-and-stream fails with tablets enabled
    Load-and-stream operations could fail with “Unable to load SSTable” when tablets were used.
    Tablet handling during load-and-stream was fixed.
    scylladb#22707

  • Maintenance mode is broken
    Maintenance mode was non-functional, and tests were ineffective.
    Maintenance mode functionality and tests were fixed.
    scylladb#26816

  • Node operations progress metric never reaches 100%
    Node operations could complete while the progress metric remained below 100%.
    Progress tracking now uses host IDs, ensuring correct completion reporting.
    scylladb#26193, scylladb#26250

  • Race condition between tablet split and load-and-stream
    Concurrent tablet splitting and load-and-stream operations could race.
    Synchronization was added to ensure consistent behavior.
    scylladb#26455

  • Token group ID regression during split compaction
    Token group IDs could regress when tablet boundaries changed.
    Split compaction logic was corrected.
    scylladb#24153, scylladb#25934

Tools & Observability

  • Nodetool compactionhistory crashes
    Running nodetool compactionhistory could crash due to a JSON assertion failure.
    The underlying parsing logic was fixed.
    scylladb#23540

  • scylla-gdb displays excessive io_queue data
    Debug output included unnecessary io_queue details.
    Output was simplified for clarity.
    scylladb#24835

  • scylla-gdb attempts to read non-existent _ticket field
    Fair-queue entries referenced a non-existent _ticket field.
    Fair-queue printing was corrected.
    scylladb#26184, scylladb#26263

  • scylla-sstable prints tokens as bytes
    Token values in sharding_metadata were printed as raw bytes.
    Tokens are now printed as numeric values for readability.
    scylladb#26982