java/sandbox/v1.0.19
opensandbox-group/OpenSandboxjava/sandbox/v1.0.19Aug 25, 2026by ninan-nn
AI Summary
The Java/Kotlin SDK introduces scalable asynchronous warmup, lifecycle hooks, and richer runtime metadata, while removing client-pool reconcile interval configuration.
Key Highlights
- Client-pool reconcile interval is no longer configurable
- Scalable asynchronous client-pool warmup
- Lifecycle hook models
- Shared HTTP connections for client pools
Breaking Changes
- Client-pool reconcile interval is no longer configurable
New Features
- Scalable asynchronous client-pool warmup
- Pool warmup tracing and operational summaries
- Lifecycle hook models
- Detached runs in isolated sessions
- Richer runtime metadata
- Shared HTTP connections for client pools
Full Release Notes
## What's New ### ⚠️ Breaking Changes - **Client-pool reconcile interval is no longer configurable** — `SandboxPool.Builder.reconcileInterval(...)` and the corresponding `PoolConfig` setting have been removed. Pool reconciliation now runs on a fixed one-second cadence, while new sandbox creation is bounded by `warmupCreateQps`; callers should delete uses of `reconcileInterval` with no replacement. [#1575](https://github.com/opensandbox-group/OpenSandbox/pull/1575) ### ✨ Features - **Scalable asynchronous client-pool warmup** — Pool refill now separates create, readiness, prepare, post-prepare health checking, renewal, and commit into a staged asynchronous pipeline. Create admission is rate-limited per pool, delayed retries no longer occupy worker threads, and staged warmups use a single create transport attempt while direct create and other non-pool paths retain their existing retry behavior. [#1575](https://github.com/opensandbox-group/OpenSandbox/pull/1575) - **Pool warmup tracing and operational summaries** — Applications can opt in with `ConnectionConfig.enableTracing(true)` to emit OpenTelemetry traces covering queue wait and every warmup phase, using the application's global SDK, exporter, sampler, and propagators. Warmups now also expose bounded terminal outcome attributes, rate-limited failure logs, and active-pool summaries without allowing telemetry failures to affect pool behavior. [#1524](https://github.com/opensandbox-group/OpenSandbox/pull/1524) [#1604](https://github.com/opensandbox-group/OpenSandbox/pull/1604) - **Lifecycle hook models** — Sandbox creation now accepts additive `preStart` and `periodic` lifecycle hook models. Hook timeout validation remains authoritative on the server rather than being duplicated in stable Kotlin models; Docker support, PATCH operations, and additional hook types remain outside this release's scope. [#1588](https://github.com/opensandbox-group/OpenSandbox/pull/1588) [#1605](https://github.com/opensandbox-group/OpenSandbox/pull/1605) - **Detached runs in isolated sessions** — Kotlin consumers can start background work inside a persistent isolated session, poll its status, and read logs incrementally. Background runs are bounded by the session lifetime, do not support per-run timeouts, and are rejected for read-only workspaces because they require a host-visible writable log location. [#1456](https://github.com/opensandbox-group/OpenSandbox/pull/1456) - **Richer runtime metadata** — The SDK now models execd hardening capability results and exposes an optional `Sandbox.allocation` summary for confirmed Kubernetes Pool allocations. Allocation metadata is omitted when evidence is incomplete or inconsistent and does not expose Pod, node, namespace, or internal controller details. [#1474](https://github.com/opensandbox-group/OpenSandbox/pull/1474) [#1481](https://github.com/opensandbox-group/OpenSandbox/pull/1481) - **Shared HTTP connections for client pools** — When callers do not provide an OkHttp connection pool, `SandboxPool` now creates and owns one sized from `warmupConcurrency`, reuses it across warmup, acquire, and direct-create paths, and evicts it on shutdown. User-supplied connection pools retain their existing ownership semantics. [#1517](https://github.com/opensandbox-group/OpenSandbox/pull/1517) ### 🐛 Bug Fixes - **Stable warmup pacing under failures and throttling** — Fast create failures can no longer drive a self-sustaining reconcile loop, and pool warmups now honor `Retry-After` without counting rate limits as degraded failures. Stale-sandbox cleanup triggers prompt replenishment, while concurrent warmup commits no longer serialize behind a single JVM mutex or starve health-check work. [#1494](https://github.com/opensandbox-group/OpenSandbox/pull/1494) [#1512](https://github.com/opensandbox-group/OpenSandbox/pull/1512) [#1519](https://github.com/opensandbox-group/OpenSandbox/pull/1519) [#1621](https://github.com/opensandbox-group/OpenSandbox/pull/1621) - **More actionable client errors** — Kotlin `ClientException` messages now retain response bodies for caller-fixable 4xx responses across generated and handwritten paths. Readiness timeout messages no longer suggest Docker bridge, remote-network, or server-proxy settings that may not apply, while preserving timeout and last-error context. [#1496](https://github.com/opensandbox-group/OpenSandbox/pull/1496) [#1493](https://github.com/opensandbox-group/OpenSandbox/pull/1493) - **Faster bounded idle cleanup** — `releaseAllIdle()` now deletes idle sandboxes with bounded concurrency instead of serially, preserving best-effort cleanup semantics while substantially reducing drain time for large pools. [#1475](https://github.com/opensandbox-group/OpenSandbox/pull/1475) ### 📦 Misc - Published Kotlin/JVM sandbox, code-interpreter, Redis pool, and BOM artifacts at version `1.0.19` under the existing `com.alibaba.opensandbox` coordinates. ### 👥 Contributors - @Gujiassh - @KXHXK - @Pangjiping - @cwj2001 - @jianpingpei - @ninan-nn