-
Notifications
You must be signed in to change notification settings - Fork 1
feat: Update version to 0.6.0 and enhance documentation with release … #42
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,83 @@ | ||
| # Spice Java SDK v0.6.0 | ||
|
|
||
| ## Highlights | ||
|
|
||
| This release focuses on **transport resilience** and **dependency upgrades**. A new `reset()` method provides manual recovery from stuck transport connections, gRPC keep-alive detects dead connections early, and DNS re-resolution enables automatic recovery from load-balancer IP rotation. | ||
|
|
||
| ## What's New | ||
|
|
||
| ### 🔄 Connection Reset | ||
|
|
||
| The SDK now supports a `reset()` method for manual transport recovery. When the underlying gRPC connection becomes permanently stuck (e.g. TLS handshake to a wrong backend, persistent `UNAVAILABLE` after retries), `reset()` discards the bad connection and immediately establishes a fresh one: | ||
|
|
||
| ```java | ||
| SpiceClient client = SpiceClient.builder() | ||
| .withApiKey(API_KEY) | ||
| .withSpiceCloud() | ||
| .build(); | ||
|
|
||
| try { | ||
| try (FlightStream stream = client.query(sql)) { | ||
| // process results... | ||
| } | ||
| } catch (ExecutionException e) { | ||
| if (isTransportFailure(e.getCause())) { | ||
| client.reset(); // discard bad transport, reconnect immediately | ||
| try (FlightStream stream = client.query(sql)) { | ||
| // process results with fresh connection... | ||
| } | ||
| } else { | ||
| throw e; | ||
| } | ||
| } | ||
| ``` | ||
|
|
||
| Key behaviors: | ||
| - Thread-safe (`synchronized`) — concurrent reset calls are serialized | ||
| - Idempotent — safe to call multiple times | ||
| - Throws `IllegalStateException` if client is already closed | ||
| - Resets both Flight and ADBC connections | ||
|
|
||
| ### 🏥 gRPC Keep-Alive | ||
|
|
||
| HTTP/2 keep-alive pings are now enabled by default to detect dead connections quickly: | ||
|
|
||
| - **Keep-alive interval**: 30 seconds | ||
| - **Keep-alive timeout**: 10 seconds | ||
| - **Keep-alive without calls**: enabled (pings even when idle) | ||
|
|
||
| ### 🌐 DNS Re-Resolution | ||
|
|
||
| The SDK now uses `dns:///` target resolution for gRPC channels, enabling periodic hostname re-resolution. This allows clients to automatically recover from load-balancer IP rotation (e.g. AWS NLB) without manual intervention. | ||
|
|
||
| **DNS cache TTL:** For more aggressive DNS refresh (recommended for cloud-deployed clients), set the JVM property: | ||
|
|
||
| ```bash | ||
| -Dnetworkaddress.cache.ttl=30 | ||
| ``` | ||
|
|
||
| ### 🛡️ Lazy Transport Recovery | ||
|
|
||
| A new `ensureFlightClient()` safety net automatically rebuilds the Flight client if the internal reference is null at query time, adding an extra layer of resilience. | ||
|
|
||
| ## ⬆️ Updated Dependencies | ||
|
|
||
| | Dependency | Previous | Current | | ||
| | ----------------------------------- | ------------- | ------------ | | ||
| | Apache Arrow Flight SQL | 18.3.0 | 19.0.0 | | ||
| | Apache Arrow ADBC Driver Flight SQL | 0.21.0 | 0.22.0 | | ||
| | Apache Arrow ADBC Core | 0.21.0 | 0.22.0 | | ||
| | Gson | 2.13.1 | 2.13.2 | | ||
| | Netty | 4.1.130.Final | 4.2.12.Final | | ||
|
|
||
| ## 🔧 Updated Build Plugins | ||
|
|
||
| | Plugin | Previous | Current | | ||
| | ------------------------------- | -------- | ------- | | ||
| | maven-surefire-plugin | 3.5.4 | 3.5.5 | | ||
| | maven-source-plugin | 3.3.1 | 3.4.0 | | ||
|
Comment on lines
+75
to
+78
|
||
| | central-publishing-maven-plugin | 0.9.0 | 0.10.0 | | ||
| | spotbugs-maven-plugin | 4.9.3.0 | 4.9.8.2 | | ||
| | dependency-check-maven | 12.1.1 | 12.2.0 | | ||
| | jacoco-maven-plugin | 0.8.13 | 0.8.14 | | ||
| | maven-enforcer-plugin | 3.5.0 | 3.6.2 | | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -4,7 +4,7 @@ | |
| <groupId>ai.spice</groupId> | ||
| <artifactId>spiceai</artifactId> | ||
| <packaging>jar</packaging> | ||
| <version>0.5.0</version> | ||
| <version>0.6.0</version> | ||
| <name>Java Spice SDK</name> | ||
| <url>https://github.com/spiceai/spice-java/</url> | ||
| <description>Spice provides a unified SQL query interface and portable runtime to locally materialize, accelerate, and query datasets from any database, data warehouse, or data lake.</description> | ||
|
|
@@ -36,22 +36,22 @@ | |
| <dependency> | ||
| <groupId>org.apache.arrow</groupId> | ||
| <artifactId>flight-sql</artifactId> | ||
| <version>18.3.0</version> | ||
| <version>19.0.0</version> | ||
| </dependency> | ||
| <dependency> | ||
| <groupId>org.apache.arrow.adbc</groupId> | ||
| <artifactId>adbc-driver-flight-sql</artifactId> | ||
| <version>0.21.0</version> | ||
| <version>0.22.0</version> | ||
| </dependency> | ||
| <dependency> | ||
| <groupId>org.apache.arrow.adbc</groupId> | ||
| <artifactId>adbc-core</artifactId> | ||
| <version>0.21.0</version> | ||
| <version>0.22.0</version> | ||
| </dependency> | ||
| <dependency> | ||
| <groupId>com.google.code.gson</groupId> | ||
| <artifactId>gson</artifactId> | ||
| <version>2.13.1</version> | ||
| <version>2.13.2</version> | ||
| </dependency> | ||
| <dependency> | ||
| <groupId>com.github.rholder</groupId> | ||
|
|
@@ -61,7 +61,7 @@ | |
| <dependency> | ||
| <groupId>io.netty</groupId> | ||
| <artifactId>netty-all</artifactId> | ||
| <version>4.1.130.Final</version> | ||
| <version>4.2.12.Final</version> | ||
| </dependency> | ||
|
Comment on lines
61
to
65
|
||
| <dependency> | ||
| <groupId>org.slf4j</groupId> | ||
|
|
@@ -87,7 +87,7 @@ | |
| <plugin> | ||
| <groupId>org.apache.maven.plugins</groupId> | ||
| <artifactId>maven-surefire-plugin</artifactId> | ||
| <version>3.5.4</version> | ||
| <version>3.5.5</version> | ||
| <configuration> | ||
| <!-- @{argLine} is set by JaCoCo's prepare-agent goal --> | ||
| <argLine>@{argLine} --add-opens=java.base/java.nio=ALL-UNNAMED</argLine> | ||
|
|
@@ -96,7 +96,7 @@ | |
| <plugin> | ||
| <groupId>org.apache.maven.plugins</groupId> | ||
| <artifactId>maven-source-plugin</artifactId> | ||
| <version>3.3.1</version> | ||
| <version>3.4.0</version> | ||
| <executions> | ||
| <execution> | ||
| <id>attach-sources</id> | ||
|
|
@@ -141,7 +141,7 @@ | |
| <plugin> | ||
| <groupId>org.sonatype.central</groupId> | ||
| <artifactId>central-publishing-maven-plugin</artifactId> | ||
| <version>0.9.0</version> | ||
| <version>0.10.0</version> | ||
| <extensions>true</extensions> | ||
| <configuration> | ||
| <publishingServerId>central</publishingServerId> | ||
|
|
@@ -153,7 +153,7 @@ | |
| <plugin> | ||
| <groupId>com.github.spotbugs</groupId> | ||
| <artifactId>spotbugs-maven-plugin</artifactId> | ||
| <version>4.9.3.0</version> | ||
| <version>4.9.8.2</version> | ||
| <configuration> | ||
| <excludeFilterFile>spotbugs-exclude.xml</excludeFilterFile> | ||
| </configuration> | ||
|
|
@@ -162,7 +162,7 @@ | |
| <plugin> | ||
| <groupId>org.owasp</groupId> | ||
| <artifactId>dependency-check-maven</artifactId> | ||
| <version>12.1.1</version> | ||
| <version>12.2.0</version> | ||
| <configuration> | ||
| <failBuildOnCVSS>7</failBuildOnCVSS> | ||
| </configuration> | ||
|
|
@@ -171,7 +171,7 @@ | |
| <plugin> | ||
| <groupId>org.jacoco</groupId> | ||
| <artifactId>jacoco-maven-plugin</artifactId> | ||
| <version>0.8.13</version> | ||
| <version>0.8.14</version> | ||
| <executions> | ||
| <execution> | ||
| <id>prepare-agent</id> | ||
|
|
@@ -192,7 +192,7 @@ | |
| <plugin> | ||
| <groupId>org.apache.maven.plugins</groupId> | ||
| <artifactId>maven-enforcer-plugin</artifactId> | ||
| <version>3.5.0</version> | ||
| <version>3.6.2</version> | ||
| <executions> | ||
| <execution> | ||
| <id>enforce</id> | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The dependency table uses
||at the start of each row, which adds an unintended empty column and renders incorrectly in standard Markdown. Use a single leading|for the header and separator rows (and each data row) to match the formatting used in other release notes files.