Releases: Query-farm/vgi-rpc-java
Release list
v0.16.0
Added
Intermediary framing helpers (farm.query.vgirpc.wire.Wire) — vgirpc has first-class client (RpcConnection) and server (RpcServer) roles; an intermediary (proxy, router, gateway, test harness) needs to read a request off the wire, rewrite it, re-frame it, and synthesize in-band errors without standing up either.
readRequest/writeRequest(+Requestrecord)buildErrorStreamfindStateToken— walks concatenated IPC streams (a producer init response is a header stream followed by the data stream)findProtocolVersionreadUnaryResult/writeUnaryResult(+UnaryResultrecord)
http.ContentCodec.decode(data, contentEncoding, maxOutputSize) — zstd/gzip; comma-list codings decoded in reverse, unknown/identity left as-is.
Public upload-URL contract — HttpServer.UPLOAD_URL_METHOD, UPLOAD_URL_PARAMS_SCHEMA, UPLOAD_URL_RESPONSE_SCHEMA, MAX_UPLOAD_URL_COUNT.
Ports vgi-rpc 1a96b88, 9434c7d, 59952c3, 13d9dc9.
Fixed
HttpStreamHandler: the /init request's batch metadata now reaches a producer's first tick. The stateless HTTP producer path handed state.process() a synthetic empty AnnotatedBatch with no metadata, dropping the request batch's custom_metadata. The subprocess transport delivers per-call signals there, so a producer reading them silently behaved as if the client had sent none — e.g. a worker never saw vgi.cache.if_none_match and so never answered 304 not_modified for conditional result-cache revalidation. The synthetic tick-input root was also leaked; it is now closed.
v0.15.0
Refresh vendored landing.html to v3 (Markdown tables, descriptions, two-tier Cupola CTA, footer).
v0.14.0
Refresh vendored landing.html to the v2 shared asset (Markdown docs, Arrow→DuckDB type display, expand-only table/view descriptions, footer cleanup).
v0.13.0
Standardized VGI landing surface: content-negotiated GET / serving the shared landing.html to browsers, DescribeProvider hook for describe.json + lazy columns, and a _vgi_identity cookie from the OIDC id_token at the OAuth callback.
v0.12.0
Add Windows shared-memory transport — page-file-backed named CreateFileMapping + MapViewOfFile, mirroring the POSIX shm_open/mmap path and wire-compatible with the C++/Python/Go/Rust/Java peers.
Add size-gated pipe-vs-shm batch routing: batches below a byte threshold use the faster pipe, larger ones use shared memory. Threshold via VGI_RPC_SHM_MIN_BATCH_BYTES; default 128 KiB on POSIX, 1 MiB on Windows.
Fix ShmSession to re-attach the shared-memory segment when a pooled worker serves a new connection (the engine creates a fresh segment per connection).
v0.11.0
Raw-TCP socket transport
New TcpSocketTransport — the network analog of UnixSocketTransport, speaking the same raw Arrow-IPC framing without the HTTP envelope. Loopback-only by default (127.0.0.1); no auth/TLS, so use HTTP for untrusted networks.
- Conformance worker gains
--tcp [HOST:]PORT, emitting aTCP:<host>:<port>discovery line. - Verified at full conformance parity (98 pass / 4 skip) via the Python
vgi-rpc-test --tcpharness, matching the--unixbaseline.
Full changelog: v0.10.0...v0.11.0
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.