We are happy to announce the release of the ScyllaDB Java Driver 4.19.2.0! ![]()
Download
The driver is available on Maven Central. Add the following dependency to your pom.xml:
<dependency>
<groupId>com.scylladb</groupId>
<artifactId>java-driver-core</artifactId>
<version>4.19.2.0</version>
</dependency>
Breaking Changes
- Java 11 is now the minimum required runtime β Support for Java 8 has been dropped. Users still on Java 8 must upgrade their JDK before adopting this release. (#900)
Bug Fixes
-
Fix prepare cache eviction under GC pressure β In high-throughput applications (23K+ ops/s) experiencing frequent young GC, up to 62% of
session.prepare()calls could be cache misses, triggering a full PREPARE broadcast to all nodes and causing LWT write timeouts (CUSTOMER-372). The root cause was a defensive copy inCqlPrepareAsyncProcessorthat prevented the caller from holding a strong reference to the cachedCompletableFuture, allowing the weak-value cache entry to be GCβd prematurely. (#892) -
Fix prepared statement cache invalidation on UDT changes β Prepared statements that reference a user-defined type could remain in the cache after
ALTER TYPE, because the invalidation check compared UDT metadata with full field equality rather than by keyspace/type name. Stale cached statements are now correctly evicted. (#904) -
Fix NPE and channel leak in ChannelPool during reconnection β Two related issues with uninitialized channel pools: (1) a
NullPointerExceptionthrown by Dropwizard Metrics reporters (JMX, Graphite, Prometheus bridge, etc.) when scraping per-node gauges during the reconnection window β fixed by guarding metric methods with the existinginitializedflag; (2) a channel leak where a reconnect completing aftercloseAsync()could leave an open channel and incorrectly emitchannelOpenedafter shutdown (CUSTOMER-413). (#928) -
Fix: validate non-numeric subnet prefixes β Invalid subnet prefix strings passed to address translation configuration now produce a clear error at startup instead of being silently accepted.
New Features (Upstream 4.19.2)
This release synchronizes with upstream apache/cassandra-java-driver 4.19.2, the first upstream merge since 4.19.0. Key user-facing additions:
-
Custom request ID injection (
CASSJAVA-97) β You can now provide a customRequestIdGeneratorto inject a per-request identifier into the requestβs custom payload, enabling end-to-end request tracing through the server. -
SubnetAddressTranslatorβ A new built-in address translator for IP-range-based address rewriting, useful in private network / NAT deployments where client-visible addresses differ from cluster-internal ones. -
Lock-free
ConcurrencyLimitingRequestThrottlerβ The concurrency-limiting throttler has been rewritten without locking, reducing contention on high-concurrency workloads. -
Configurable SAN validation (
CASSJAVA-80) β A new configuration option lets you disable DNS reverse-lookups during TLS SAN validation, useful for environments where reverse DNS is unavailable or unreliable. -
Fix:
RequestIdGenerator+ Retry/Speculative Execution (CASSJAVA-116) β Resolved a βDuplicate Keyβ error thrown when a request with a custom ID was retried or speculatively executed.
(#895)
Security
-
Bump Netty to 4.1.135.Final β Remediates three CVEs affecting prior Netty versions:
CVE CVSS Description CVE-2026-42583 7.5 (HIGH) Lz4FrameDecoderallocates up to 32 MB per crafted header before decompression β remote memory exhaustion (DoS)CVE-2026-44249 8.1 (HIGH) IpSubnetFilterRule.compareTo()incorrect masking allows bypass of IPv6 subnet ACL rulesCVE-2026-45416 7.5 (HIGH) SslClientHelloHandler.decode()allocates up to 16 MiB on crafted TLS ClientHello β memory exhaustion (DoS)All users are encouraged to upgrade. (#925)
Resources
As always, feedback and questions are welcome β feel free to reply to this thread!