Skip to content

v0.7.0

Latest

Choose a tag to compare

@lukekim lukekim released this 01 Aug 03:58
· 3 commits to trunk since this release
a52c89a

Highlights

v0.7.0 is a performance and operability release. Parameterized queries move off ADBC onto native Arrow Flight SQL prepared statements running on the same tuned connection as regular queries, prepared statements are cached and reused, retries use real exponential backoff, and the Netty/gRPC dependency stack is aligned onto supported versions. The release also delivers mTLS client certificates and health, readiness, and runtime status checks.

Most applications can upgrade without code changes — see the upgrade guide.

<dependency>
  <groupId>ai.spice</groupId>
  <artifactId>spiceai</artifactId>
  <version>0.7.0</version>
</dependency>

What's New

🔐 mTLS Client Certificates

Connect to Spice deployments requiring mutual TLS and/or a custom CA — withTlsClientCertFile, withTlsClientKeyFile, withTlsRootCertFile (PEM), applied to Flight queries, parameterized queries, and HTTP operations.

🏥 Health, Readiness, and Runtime Status

isHealthy() (liveness), isReady() (datasets loaded), and runtimeStatus() (per-connection detail) — poll-friendly, never throw on an unreachable runtime.

⚡ Native Flight SQL Prepared Statements (ADBC removed)

queryWithParams now runs on Arrow Flight SQL prepared statements on the same tuned channels as query() — inheriting DNS re-resolution, HTTP/2 keep-alive, and mTLS — with prepared statement caching (default 64, withPreparedStatementCacheSize(0) to disable) that removes two network round trips from every repeated query, transparent re-prepare on stale handles, and full multi-endpoint result consumption. Two dependencies removed.

🚀 Performance Tuning Options

  • withChannelCount(n) — round-robin gRPC connection pool for highly concurrent workloads
  • withQueryTimeout(d) — deadline for query planning / prepare / bind RPCs (result streaming unaffected)
  • withPreparedStatementCacheSize(n) — prepared statement reuse

🔁 Real Retry Backoff

Exponential backoff with jitter (~250ms, 500ms, 1s, … capped at 10s) replaces the previous 1–2ms waits, so default retries actually survive load-balancer failovers and restarts.

🔄 Automatic Re-Authentication

Expired handshake tokens (UNAUTHENTICATED) trigger a single automatic re-handshake and retry — no manual reset() needed.

🛡️ Safer reset() Under Concurrency

reset() retires old connections gracefully: in-flight queries and open result streams complete while new queries move to fresh connections.

🐝 HikariCP / JDBC Interop

Pooling JDBC connections to Spice with HikariCP via the Arrow Flight SQL JDBC driver is now verified by tests and documented in the README.

Dependency Changes

Dependency v0.6.0 v0.7.0
Apache Arrow Flight SQL 19.0.0 19.0.0
Apache Arrow ADBC (driver + core) 0.22.0 removed
netty-all 4.2.12.Final removed
Netty (netty-bom) 4.2.12 (forced) 4.1.130.Final
gRPC (grpc-bom) transitive 1.79.0 (pinned)
netty-transport-native-epoll 4.1.130.Final (Linux)
BouncyCastle bcprov/bcpkix transitive 1.80 (explicit)

Compatibility

Public API unchanged; new APIs are additive. Two things to know:

  • queryWithParams failure causes are now FlightRuntimeException (was AdbcException), still wrapped in ExecutionException.
  • Failed queries take longer to surface by default (real retry backoff); use withMaxRetries(0) for fail-fast paths.

Full details: release notes · upgrade guide