Releases: Query-farm/vgi-rpc-java
v0.10.2
HTTP transport state-serialization hardening (continuation tokens over the stateless HTTP transport). Re-cut of 0.10.1 (whose tag was published immutable before a javadoc fix).
- Round-trip producer state by field rather than getters, plus an Arrow
Schemacodec (IPC message round-trip) so state objects can hold aSchemadirectly. - Handle
java.timefields in state (jsr310). - Write empty dictionaries for zero-row token/continuation batches so dict-encoded (ENUM) schemas render; carry the input batch's dictionaries through to the exchange response.
- Self-describing state tokens: prefix the concrete state class name so
/exchangeresolves the right type even when many state types are multiplexed through one wildcardinitRPC (VGI). VGI_STREAM_DEBUGlogs otherwise-swallowed stream-handler exceptions server-side.
Upload is validated by CI but gated on a manual "Publish" click in the Sonatype Central Portal.
v0.10.0
Highlights
- HTTP gzip codec negotiation, cookies, and supported-encodings — the HTTP transport now negotiates gzip content coding and carries request/response cookies.
- Windows is now a supported target —
ShmFactory.available()probes for POSIXshm_openinstead of assuming shared memory is present on any JDK ≥ 22. A Windows worker now cleanly degrades to the pure-JVM pipe/HTTP path rather than failing at shm attach time. - CI hardening — the test matrix now runs on Linux x64, macOS arm64, and Windows x64, across JDK 21, 22, and 25 (the FFM shared-memory overlay is exercised on a real JDK 22 runtime and on macOS's Darwin
shm_openbranch). - Branded published Javadoc (Query.Farm theme).
Full changelog: v0.9.1...v0.10.0
v0.9.1
Docs-only release — no wire or behavior changes. Still tracks vgi-rpc-python 0.20.0.
implementation("farm.query:vgirpc:0.9.1") // core
implementation("farm.query:vgirpc-oauth:0.9.1") // optional: JWT / OAuth / PKCE
implementation("farm.query:vgirpc-s3:0.9.1") // optional: S3 external storage
implementation("farm.query:vgirpc-gcs:0.9.1") // optional: GCS external storageHighlights
- Javadoc for the consumer-facing public API: real descriptions across
RpcServer,CallContext, the auth types, the stream primitives (StreamState/ProducerState/ExchangeState/RpcStream),RpcErrorand the error-kind family, the dispatch-hook surface (DispatchHook/DispatchInfo/CallStatistics/AccessLogHook), the HTTP server config + authenticators,ExternalStorage/ExternalLocationConfig, and the transports — these ship in the Maven Central javadoc jars and show up in IDE quick-doc. - Doclint enforcement: published modules now build javadoc with
-Xdoclint:all,-missing, so broken HTML and dangling{@link}s fail the build going forward.
Requires --add-opens=java.base/java.nio=ALL-UNNAMED at runtime (Apache Arrow). See the README for a quick start.
v0.9.0
Tracks vgi-rpc-python 0.20.0 (continuation-only stream resume).
implementation("farm.query:vgirpc:0.9.0") // core
implementation("farm.query:vgirpc-oauth:0.9.0") // optional: JWT / OAuth / PKCE
implementation("farm.query:vgirpc-s3:0.9.0") // optional: S3 external storage
implementation("farm.query:vgirpc-gcs:0.9.0") // optional: GCS external storageHighlights
- Continuation-only stream resume (HTTP):
HttpStreamHandlerresolves each stream method's concreteStreamStateclass at construction by introspecting the implementation's generic return types (the Java mirror of Python's_resolve_state_types). A continuation-onlyPOST /{method}/exchange— e.g. a stateless relay resuming from a held per-batch token via the Python 0.20.0resume_streamclient — now works on a worker that never served the stream's/init, as long as workers share a token key. - To be resumable cross-process, implementations must declare concrete stream returns (
RpcStream<Counter> produce_n(...)); wildcard returns (RpcStream<? extends ProducerState>) keep the previous in-process behaviour. - Interop verified against the Python 0.20.0 client (
next_with_token/seek_to_token/resume_stream) across two workers sharing a--token-key.
Requires --add-opens=java.base/java.nio=ALL-UNNAMED at runtime (Apache Arrow). See the README for a quick start.
v0.8.0
First public release of vgi-rpc-java — the Java port of vgi-rpc, a transport-agnostic RPC framework built on Apache Arrow IPC.
Published to Maven Central under the farm.query group:
implementation("farm.query:vgirpc:0.8.0") // core
implementation("farm.query:vgirpc-oauth:0.8.0") // optional: JWT / OAuth / PKCE
implementation("farm.query:vgirpc-s3:0.8.0") // optional: S3 external storage
implementation("farm.query:vgirpc-gcs:0.8.0") // optional: GCS external storageHighlights
- Services defined as plain Java interfaces; Arrow schemas derived from signatures.
- Unary and streaming (producer / exchange) methods.
- Transports: stdio pipe, subprocess, Unix socket, shared memory (JDK 22+), HTTP.
- Wire-compatible with the Python reference.
- Java 21+ baseline (shared-memory side-channel auto-activates on JDK 22+).
See the README for a quick start. Requires --add-opens=java.base/java.nio=ALL-UNNAMED at runtime (Apache Arrow).