[RELEASE] ScyllaDB Java Driver 4.19.4.0

Hi everyone,

We’re happy to announce the release of ScyllaDB Java Driver 4.19.4.0 — the first release on the 4.19.4 line.

It merges two upstream Apache Cassandra Java Driver releases, 4.19.3 and 4.19.4, adds a fix that stops the driver attempting DSE protocol versions against ScyllaDB, and hardens the release pipeline.

Why the version jumps from 4.19.2.3 to 4.19.4.0

Our version numbers track upstream: the first three components are the upstream release the fork is based on, the fourth is our own patch count. The line now carries upstream 4.19.4, so the fourth component restarts at 0 — exactly as 4.19.2.0 did after the 4.19.2 sync.

Upstream 4.19.3 and 4.19.4 were merged together (#1291), so there is no separate 4.19.3.x fork release.

Protocol negotiation no longer tries DSE versions

Automatic protocol negotiation previously began with DSE protocol versions, which ScyllaDB rejects — so every session start burned connection attempts on DSE_V2 and DSE_V1 before arriving at a version the server speaks.

Negotiation now starts from the highest non-beta open-source version and proceeds V5 → V4 → V3 (#985, fixes #969). Explicitly configured DSE protocol versions are still honoured, so this only changes the automatic path.

Thanks to @arnabnandy7 for this fix — their first contribution to the driver. :tada:

From upstream 4.19.3 and 4.19.4

The merge brings upstream’s own changes. The ones most likely to matter:

  • Query builder ordering was reworked behind a single OrderingClause abstraction (apache#2047). This changes behaviour: orderByIds(Map) and orderBy(Map) now replace an existing ANN OF ordering rather than appending to it. An empty map leaves the query unchanged, matching 4.19.2.x — a regression that would have silently turned a vector-search query into an unordered one was caught in review and fixed before release. ScyllaDB’s BYPASS CACHE and USING TIMEOUT support is preserved.
  • LIMIT and PER PARTITION LIMIT clause ordering is fixed (CASSJAVA-3).
  • A race condition in ClockSeqAndNodeContainer is fixed (apache#2050), affecting time-based UUID generation under concurrency.
  • Geometry equality is corrected. Since 4.19.3, equals() bound to a method ESRI 1.x does not declare, so applications still on ESRI 1.x silently fell back to identity comparison. It now compares the wrapped ESRI geometry and spatial reference through API that both 1.x and 2.x provide (#1291). ESRI is updated to 2.2.4 and org.json removed (CASSJAVA-108).
  • Jackson moves to 2.20.1 upstream (apache#2076).
  • Prepared-statement cache internals changed: upstream moved weakValues() out of the base builder into the public constructor’s decorator, so a subclass supplying its own decorator now gets a strong cache. Relevant only if you subclass the prepare processor.

Upstream 4.19.3 also carried its own LZ4/Netty CVE response (CASSJAVA-113). The fork had already moved to the at.yawk.lz4 community fork and newer Netty in earlier releases; this release takes lz4-java to 1.12.1 (#1332).

Documentation

The docs site now publishes 4.19.4.x as the current 4.x line (#1348).

Dependencies

lz4-java 1.12.1, snappy-java 1.1.10.12, SLF4J 2.0.20, Logback 1.6.6, Guava 33.7.2-jre, jnr-posix 3.2.5.

Who should upgrade

All 4.x users. This is a routine upgrade — no configuration changes required — but check two things first:

  1. If you build queries with orderByIds(Map) or orderBy(Map) alongside ANN OF ordering, review the replace-versus-append change above.
  2. If you subclass the prepare processor with a custom cache decorator, note the weak-to-strong cache change.

Everyone else gets fewer failed connection attempts at session start, the clock-sequence race fix, and the upstream dependency refresh.

Download / Coordinates

xml

<dependency>
  <groupId>com.scylladb</groupId>
  <artifactId>java-driver-core</artifactId>
  <version>4.19.4.0</version>
</dependency>

Links

As always, feel free to report any issues on GitHub.