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. ![]()
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
OrderingClauseabstraction (apache#2047). This changes behaviour:orderByIds(Map)andorderBy(Map)now replace an existingANN OFordering 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’sBYPASS CACHEandUSING TIMEOUTsupport is preserved. LIMITandPER PARTITION LIMITclause ordering is fixed (CASSJAVA-3).- A race condition in
ClockSeqAndNodeContaineris 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 andorg.jsonremoved (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:
- If you build queries with
orderByIds(Map)ororderBy(Map)alongsideANN OFordering, review the replace-versus-append change above. - 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
- GitHub Release: Release 4.19.4.0
- Full Changelog: Comparing 4.19.2.3…4.19.4.0
- Documentation: Java Driver 4.x
As always, feel free to report any issues on GitHub.