v2.1.5

Genymobile/scrcpyv2.1.5Aug 12, 2026by krinart

AI Summary

A patch release focused on dependable cached data and predictable operation under load. It improves cache reliability, manages memory more effectively for Cayenne workloads, and ensures health checks remain responsive during cache updates.

Key Highlights

  • Cached queries now reflect data changes more reliably after refreshes and writes.
  • Cayenne workloads stay within configured memory limits, improving predictability under heavy load.
  • Health checks remain responsive while cached results are being updated.
  • Cache dashboards provide a more complete view of activity and space usage.

New Features

  • Improved cache eviction logic for stale results
  • Memory pool tracking for query preparation
  • Shared memory pools for multiple accelerated tables

Full Release Notes

Spice v2.1.5 is a patch release focused on dependable cached data and predictable operation under load. Cached queries now reflect data changes more reliably, Cayenne workloads stay within configured memory limits, health checks remain responsive while cached results are updated, and cache dashboards provide a more complete view of activity.

## What's New in v2.1.5

### Cached Queries Stay Fresh as Data Changes

Cached results are now cleared reliably after refreshes, writes, retention changes, and updates to dependent local datasets. Expired entries are removed promptly, and entries for data that is no longer part of a Cayenne dataset are not reused by later queries.

These improvements prevent a completed data change from being followed by an older cached answer. No configuration changes are required.

### More Predictable Cayenne Behavior Under Heavy Load

Cayenne now keeps track of the memory needed to prepare query results, including when several parts of a query are prepared at once. Multiple accelerated tables also share available memory instead of each planning as though it were the only table in the deployment.

Large and concurrent workloads are therefore less likely to exhaust the available memory. When a query cannot fit within the configured limit, it fails cleanly instead of putting the entire service at risk. Operators can also limit how much work one dataset does at once when it needs a smaller memory footprint, without slowing every query.

### Health Checks Remain Responsive During Cache Updates

Refreshing or writing a dataset with many cached results no longer holds up Spice while it finds old answers that need to be cleared. Health checks and other requests can continue during this work, reducing avoidable service restarts under load.

### More Trustworthy Cache Dashboards

Cache dashboards now show total space, space in use, stored results, requests, and successful reuse whenever the dashboard is refreshed, including for new or lightly used datasets. Counts for expired results, automatic size cleanup, and cleanup after data changes are also reported consistently, so a zero value represents no activity rather than missing information.

## Contributors

- [@bjchambers](https://github.com/bjchambers)
- [@krinart](https://github.com/krinart)
- [@lukekim](https://github.com/lukekim)
- [@phillipleblanc](https://github.com/phillipleblanc)

## Breaking Changes

No breaking changes.

## Cookbook Updates

No new cookbook recipes.

The [Spice Cookbook](https://spiceai.org/cookbook) includes more than 100 recipes to help you get started with Spice quickly and easily.

## Upgrading

To upgrade to v2.1.5, use one of the following methods:

**CLI**:

```console
spice upgrade
```

**Homebrew**:

```console
brew upgrade spiceai/spiceai/spice
```

**Docker**:

Pull the `spiceai/spiceai:2.1.5` image:

```console
docker pull spiceai/spiceai:2.1.5
```

For available tags, see [DockerHub](https://hub.docker.com/r/spiceai/spiceai/tags).

**Helm**:

```console
helm repo update
helm upgrade spiceai spiceai/spiceai --version 2.1.5
```

**AWS Marketplace**:

Spice is available in the [AWS Marketplace](https://aws.amazon.com/marketplace/pp/prodview-jmf6jskjvnq7i).

## What's Changed

### Changelog

- fix: arrow IndexedMemTable serves stale results after DML/retention/sync (fixes #11262) by [@claudespice](https://github.com/claudespice) in [#11532](https://github.com/spiceai/spiceai/pull/11532)
- fix(cache): evict the Pingora cache down to max_size instead of only recording it (fixes #12688) by [@grokspice](https://github.com/grokspice) in [#12694](https://github.com/spiceai/spiceai/pull/12694)
- fix(cache): count an invalidation as an eviction, and export the counters before one fires (fixes #12687) by [@grokspice](https://github.com/grokspice) in [#12791](https://github.com/spiceai/spiceai/pull/12791)
- fix(cache): never serve a result whose tables changed after it read them by [@bjchambers](https://github.com/bjchambers) in [#12703](https://github.com/spiceai/spiceai/pull/12703)
- Remove unnecessary allocations from results-cache and hot conversion paths by [@phillipleblanc](https://github.com/phillipleblanc) in [#11895](https://github.com/spiceai/spiceai/pull/11895)
- fix(cache): read and expire a Pingora entry under one hold of its shard (fixes #12832) by [@grokspice](https://github.com/grokspice) in [#12839](https://github.com/spiceai/spiceai/pull/12839)
- fix(runtime): invalidate localpod children's cached results on parent refresh by [@krinart](https://github.com/krinart) in [#12897](https://github.com/spiceai/spiceai/pull/12897)
- fix(cache): run the Pingora invalidation scan off the calling runtime worker (fixes #12806) by [@grokspice](https://github.com/grokspice) in [#12808](https://github.com/spiceai/spiceai/pull/12808)
- fix(cache): count the removals the Pingora engine performs itself (fixes #12792) by [@grokspice](https://github.com/grokspice) in [#12830](https://github.com/spiceai/spiceai/pull/12830)
- feat(cayenne): charge scan materialization to the query memory pool by [@lukekim](https://github.com/lukekim) in [#12759](https://github.com/spiceai/spiceai/pull/12759)
- feat(cayenne): bound the SUM of the per-table PK keyset caches by [@lukekim](https://github.com/lukekim) in [#12802](https://github.com/spiceai/spiceai/pull/12802)
- Charge the query memory pool for concurrent Vortex split decodes by [@lukekim](https://github.com/lukekim) in [#12940](https://github.com/spiceai/spiceai/pull/12940)
- fix(vortex): invalidate retired segment cache entries by [@phillipleblanc](https://github.com/phillipleblanc) in [#12943](https://github.com/spiceai/spiceai/pull/12943)
- fix(vortex): expose segment cache metrics on scrape by [@phillipleblanc](https://github.com/phillipleblanc) in [#12944](https://github.com/spiceai/spiceai/pull/12944)

**Full Changelog**: <https://github.com/spiceai/spiceai/compare/v2.1.4...v2.1.5>