# \[REALESE\] Scylla 5.4 RC1 - part 1

**URL:** <https://forum.scylladb.com/t/realese-scylla-5-4-rc1-part-1/980>\
**Category:** Release Notes\
**Tags:** open-source, release-candidate, open-source-release, open-source-5-4\
**Created:** [November 8, 2023, 5:06am UTC](https://forum.scylladb.com/t/realese-scylla-5-4-rc1-part-1/980 "2023-11-08T05:06:09Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![tzach](https://sea2.discourse-cdn.com/flex016/user_avatar/forum.scylladb.com/tzach/32/172_2.png) [@tzach](https://forum.scylladb.com/u/tzach)\
**Post date:** [November 8, 2023, 5:06am UTC](https://forum.scylladb.com/t/realese-scylla-5-4-rc1-part-1/980/1 "2023-11-08T05:06:09Z")

</div>

The ScyllaDB team is pleased to announce ScyllaDB Open Source 5.4 RC1, the first Release Candidate for the ScyllaDB Open Source 5.4 minor release.

ScyllaDB 5.4 introduces full support for Repair Base Node Operations (RBNO), experimental consistent topology update, experimental S3 backend and many more improvements and bug fixes.

Consistent schema management using Raft is now the default not only for new clusters, but also for clusters upgrading from an older version User Defined Function(UDF) feature is promoted to Preview.

Find the ScyllaDB Open Source 5.4 repository for your Linux distribution[here](http://www.scylladb.com/download). [ScyllaDB 5.4 RC1 Docker](https://hub.docker.com/r/scylladb/scylla/) is also available.

We encourage you to run ScyllaDB 5.4 release candidates on your test environments; this will help ensure that an upgrade to ScyllaDB 5.4 General Availability will proceed smoothly with your workload. Use the release candidate with caution; RC1 is not production-ready yet. You can help stabilize ScyllaDB Open Source 5.4 by reporting bugs[here](https://github.com/scylladb/scylla/issues).

Only the last two minor releases of the ScyllaDB Open Source project are supported. Once ScyllaDB Open Source 5.4 is officially released, only ScyllaDB Open Source 5.4 and ScyllaDB 5.2 will be supported, and ScyllaDB 5.1 will be retired. Note that we skipped 5.3 release.

## Repair Based Node Operations (RBNO)

Repair Based Node Operations were introduced as an experimental feature in ScyllaDB Open Source 4.0. They use repair to stream data for node-operations like replace, bootstrap and others.

In 5.4, RBNO is enabled by default for all operations: remove node,rebuild,bootstrap, and decommission. Replace node operation was already enabled by default.

For more about Repair Based Node Operations see this [Scylla Summit 2022 session by Asias He](https://www.scylladb.com/presentations/scylladb-lightning-talks-maintenance-improvements/)

## Node Level Metrics

Most ScyllaDB metrics are per-shard, per-node, but not for a specific table. We now export some [per-table metrics](https://github.com/scylladb/scylladb/commit/cb3b808e3f0cdf27b0edded92e805559d74d7a69). These are exported once per node, not per shard, to reduce the number of metrics. [#2198](https://github.com/scylladb/scylladb/issues/2198)

## Guardrails

Guardrails is a framework to protect ScyllaDB users and admins from common mistakes and pitfalls. In this release ScyllaDB includes a new guardrail on the replication factor. It is now possible to specify the [minimum replication factor](https://github.com/scylladb/scylladb/commit/cdedc7905077ed94a3172759ab4f70af1013e061) for new keyspaces via a new configuration item [#8891](https://github.com/scylladb/scylladb/issues/8891).

This matches the same functionality in Apache Cassandra [#CASSANDRA-14557](https://issues.apache.org/jira/browse/CASSANDRA-14557)

The new RF guardrails include the following configuration:

- minimum\_replication\_factor\_fail\_threshold. Default -1 (Disabled)
- minimum\_replication\_factor\_warn\_threshold. Default 3.

More Guardrails are expected in upcoming releases.

## Security

- It is now possible to use [TLS certificates to authenticate and authorize a user](https://github.com/scylladb/scylladb/commit/f86dd857caf82ffe2b923c2216c1c1cabc4eb53b) to ScyllaDB. The system can be configured to derive the user role from the client certificate and derive the permissions the user has from that role. [#10099](https://github.com/scylladb/scylladb/issues/10099)

See more on [certificate-authentication docs](https://opensource.docs.scylladb.com/branch-5.4/operating-scylla/security/certificate-authentication).

- It is now possible to specify the initial superuser name + passwd (salted) in scylla.yaml config or command line. Note that config values become redundant as soon as auth tables

are initialized. See two new config parameters auth\_superuser\_name, auth\_superuser\_salted\_password below.

## Deprecated and removed features

- As part of the CQLSH refactoring (see above) Python 2is no longer required by ScyllaDB.
- DateTieredCompactionStrategy was [removed](https://github.com/scylladb/scylladb/commit/d6029a195e9d57717617d3aec951031bf18a5554). Users should move to TimeWindowCompactionStrategy. It is already illegal to create new DateTieredCompactionStrategy tables. If you are still using DTCS, migrate to TWCS _before_ upgrading!

## UDF / UDA - Preview

Wasm-based User Defined Functions (UDFs) and User Defined Aggregates (UDAs) were introduced as experimental in ScyllaDB 5.1, and we are now promoting them to Preview.

The CQL syntax is compatible with Apache Cassandra. Examples:

CREATE FUNCTION sample ( arg int ) …;

CREATE FUNCTION sample ( arg text ) …;

See [UDF/UDA documentation](https://opensource.docs.scylladb.com/branch-5.4/cql/functions.html#user-defined-functions-experimental) for more information.

Preview features aren’t production-ready, but are made available on a “preview” basis so that customers can get early access and provide feedback. Unlike Experimental features, we are committed to the backward compatibility of a preview feature API.

We encourage users to use the preview feature on staging and testing clusters while we continue to extend the tests till they can graduate to production-ready.

Below are improvements and bug fixes in UDF/UDA.

- The check for whether a [User Defined Function (UDF)](https://opensource.docs.scylladb.com/stable/cql/functions.html#user-defined-functions-experimental) is in use by a [User Defined Aggregate (UDA)](https://opensource.docs.scylladb.com/stable/cql/functions.html#aggregate-functions) before dropping it has been [improved](https://github.com/scylladb/scylladb/commit/cc207a9f4488961780afff9ea844726c6f27630c).
- An issue when a [User Defined Function (UDF)](https://opensource.docs.scylladb.com/stable/cql/functions.html#user-defined-functions-experimental) that is used in a [User Defined Aggregate (UDA)](https://opensource.docs.scylladb.com/stable/cql/functions.html#aggregate-functions) is updated has been fixed. The UDA now [reflects](https://github.com/scylladb/scylladb/commit/6a45881d2266f9304f5e250438be82b9e5652d21) the changes in the modified UDF immediately.
- An issue when using the counter data type in a WebAssembly UDF has been [corrected](https://github.com/scylladb/scylladb/commit/310638e84d3e9cf7e551bece5f595da3bd6b2f24).
- Automatically parallelized aggregation queries on columns of COUNTER type have been [fixed](https://github.com/scylladb/scylladb/commit/61e67b865a68f5b4539fb6f0a755684f3d2ee275) [#12939](https://github.com/scylladb/scylladb/issues/12939)
- When defining a user-defined function, one has to specify the language in the CREATE FUNCTION statement. The language name for WebAssembly functions was [renamed](https://github.com/scylladb/scylladb/commit/d4851ccae7f8a269ec0bf925a9312205ccb09faf) from “xwasm” to “wasm” in preparation for moving it out of experimental status.
- User-defined functions can now have [permission control](https://github.com/scylladb/scylladb/commit/843a5dfc15197eaadb4e46e7252f7b323373b523) via CQL GRANT statements. [#5572](https://github.com/scylladb/scylladb/issues/5572)
- When a WebAssembly user-defined function is compiled, it is now [compiled in a separate thread](https://github.com/scylladb/scylladb/commit/beaa5a9117e23222c6480a04e609a9ccfdb8dae5) in order to avoid stalling the reactor and inducing high latency. [#12904](https://github.com/scylladb/scylladb/issues/12904)
- The WebAssembly [documentation is now user-visible](https://github.com/scylladb/scylladb/commit/52eb70aef00e4cf3785ef469bcb9355056232e7d), as part of making it ready for production.
- WebAssembly just-in-time compilation moved to a separate thread (see above). The thread now [blocks all signals](https://github.com/scylladb/scylladb/commit/0ba6627d5c0567d5331a2333531cbd846f483972), preventing incorrect signal handling when it was randomly picked to handle a signal. [#13228](https://github.com/scylladb/scylladb/issues/13228)
- User-defined functions gained permission support (see above). We now additionally [check that a function is not a builtin](https://github.com/scylladb/scylladb/commit/0f97d464d32bc884b422ea9721a54f82f6408485) before applying permissions.
- WebAssembly functions are translated to machine code in a separate thread to reduce impact on the running system. The thread now [runs with lower priority](https://github.com/scylladb/scylladb/commit/f0aa540e00f8127eb028bc326aee2c728c9bf1f6) to reduce impact further.
- The build system now [automatically compiles](https://github.com/scylladb/scylladb/commit/198738f2b1c5d8eb178899dcfe6f65f5875227fb) Rust and C++ user-defined functions into WebAssembly. Previously, the compiled wasm text was inlined into individual tests.
- User defined function permissions are now [dropped](https://github.com/scylladb/scylladb/commit/9ae1b02144ff4752cb1fb58fbf9fcfe3f774f141) when the keyspace containing them is dropped. [#13820](https://github.com/scylladb/scylladb/issues/13820)
- Permissions are now [checked](https://github.com/scylladb/scylladb/commit/1f45c7364c582244069972694d3c9979c94ee2d4) for a user-defined aggregate (UDA) that uses user-defined functions (UDFs). [#13818](https://github.com/scylladb/scylladb/issues/13818)
- We now [disallow the CREATE permission](https://github.com/scylladb/scylladb/commit/96e912e1cf5335235f6877b2c45027ef0e903c39) on a named user defined function (UDF). It is meaningless since a named function must already have been created. [#13822](https://github.com/scylladb/scylladb/issues/13822)
- The permissions granted when a keyspace or function are created have been [adjusted](https://github.com/scylladb/scylladb/commit/52e4edfd5e6773ffd53ddf6ccb51be58175613c5). [#13747](https://github.com/scylladb/scylladb/issues/13747)
- The WebAssembly runtime used to evaluate user defined functions has been [updated](https://github.com/scylladb/scylladb/commit/6bc16047ba63c8cd732789bf70f67143a2ffc2f8) to address vulnerabilities. [#13807](https://github.com/scylladb/scylladb/issues/13807)

## New nodetool implementation - Experimental

The scylla executable can now [act as nodetool](https://github.com/scylladb/scylladb/commit/d9a453e72e94ca7b06ea0be468b3d0301aacd9ed) by executing “scylla nodetool ”.

With time the new scylla nodetool will replace the legacy Java nodetool completely. The new implementation is fully backward compatible with existing [docs](https://opensource.docs.scylladb.com/stable/operating-scylla/nodetool.html) and legacy nodetool.

The following commands are currently implemented:

- compact
- disablebackup
- disablebinary
- disablegossip
- enablebackup
- enablebinary
- enablegossip
- gettraceprobability
- help
- settraceprobability
- statusbackup
- statusbinary
- statusgossip
- Version

For the latest status of nodetool replacement progress see [#15588](https://github.com/scylladb/scylladb/issues/15588)

## Object Storage Support - Experimental

You can store an entire ScyllaDB Keyspace to Amazon S3, or a compatible object store.

Enable the feature by:

1. Enabling keyspace-storage-options experimental `--experimental-features=keyspace-storage-options`

2. Setup the S3 endpoint parameter and credentials

3. Create a keyspace with S3 storage option:

`CREATE KEYSPACE with STORAGE = { 'type': 'S3', 'endpoint': '$endpoint_name', 'bucket': '$bucket' }`

Note: at this phase, obj-storage is not ready for production, and should be used for testing only.

Note2: there is no ALTER support for the STORAGE parameter.

> [@\[REALESE\] Scylla 5.4 RC1 - part 2](https://forum.scylladb.com/t/realese-scylla-5-4-rc1-part-2/981):
>
> More Improvements CQL API CQL table columns that have the list data type aren’t allowed to contain NULLs, but in certain situations list values in CQL literals or bind variables are allowed to contain NULLs (for example, in LWT IF conditions that use the IN operator). The type system was relaxed to [accept NULLs](https://github.com/scylladb/scylladb/commit/94331081585daffcf144cf2938d6d8bf1b42c150) where this is allowed. Previously, these cases were handled by hard-to-maintain workarounds. The CQL USING TTL clause allows one to specify an INSERT or UPDATE’s time-to-live propert…
