Blogs Infinispan 16.0 is out!

Infinispan 16.0 is out!

"Keep Rollin'"

Infinispan 16.0 is here, and it is codenamed "Keep Rollin'".

This is a very significant release, as it introduces zero-downtime in-place rolling upgrades: the capability of incrementally upgrading individual nodes in a cluster without having to stop operations.

Keep Rollin'

Final not .Final

Starting with this release, we will no longer be appending .Final to the version number. This release is therefore just 16.0.1. Why not 16.0.0 ? Don’t ask 😀.

In-place rolling upgrades

Starting with Infinispan 16.0, we guarantee that it will be possible to upgrade the nodes of a live Infinispan cluster to a newer version with zero downtime. This guarantee will initially cover point releases (16.0.x → 16.0.y), but we will strive to also maintain it across minor releases (16.x → 16.y): for every new release, we will be providing a table of supported upgrade paths to help you plan your upgrade strategies.

Clustering

The clustering messages, that Infinispan nodes use to communicate with each other, have been rewritten to use Protocol Buffers, via the ProtoStream serialization library. By adopting ProtoBuf’s best practices for schema evolution and a number of supporting tools, we can guarantee that incompatibilities cannot be introduced into these messages without breaking our builds and tests.

Upgrade test harness

We have implemented an extensive test harness, integrated into our CI pipelines, that validates that every change that is made to Infinispan does not break backwards compatibility. This harness exercises every command, supported by coverage reports that help us identify untested code paths.

Console

Since Infinispan 15.2, the console has used PatternFly 6 for its interface. With this major update, we also added new features for users starting from version 16.0.

Update at runtime cache configuration

We have allowed mutating some cache configuration attributes at runtime for a while, and, starting with this release, this can also be done from the Web Console.

A new menu option is now available for administrators:

Edit Runtime Configuration Menu

The runtime properties that can be updated will be listed:

Edit Runtime Configuration Screen

Rolling Upgrade detection

From version 16.0 onward, when a rolling upgrade is in progress, the Console will display a warning to inform users that the operation is underway.

Rolling Upgrade Detection

Working behind a Reverse Proxy

Previously, the console URL could not be configured to work behind a reverse proxy. Starting with version 16.0, you can set up Infinispan and the console to run behind one, such as NGINX. The X-Forwarded-Prefix header is now supported by both Infinispan and the console to correctly serve the console and the REST API.

 location /infinispan/console/ {
            proxy_pass http://infinispan:11222/console/;
            proxy_set_header X-Forwarded-Prefix /infinispan;
}

See the Reverse Proxy Simple Tutorial in the Infinispan Simple Tutorials repository for more details.

Schemas Management Client API

Users can now manage ProtoStream Schemas with a dedicated administration API.

RemoteSchemasAdmin admin = remoteCacheManager.administration().schemas(); Optional<Schema> = admin.get("schemaName");

See the Schemas Simple Tutorial in the Infinispan Simple Tutorials repository for more details.

Query

Refactoring

The various query modules have all been aggregated into the single infinispan-query JAR, greatly simplifying our dependency tree and paving the way for JPMS encapsulation.

Aggregations

Previously, only the count aggregation query could be executed in an indexed clustered query, providing excellent performance. Now, all other aggregation types (such as sum, avg, and others) work in the same way. This improvement comes from the new capabilities in Hibernate Search 8.1, which has been integrated into Infinispan’s internal engine.

Server

We have introduced several fixes and enhancements to the Infinispan Server.

Server container image

The Infinispan Server container image is now built using the bare minimum required components, aiming to provide a significantly reduced attack surface.

Server startup

We have decoupled the server and the cache container start procedure, where they can start concurrently. This provides a faster startup time for the server, that can start replying to requests earlier. This helps in scenarios where the server receive probe requests for liveness and readiness. Also, this allows for better handling when a cache may fail to start allowing other caches to continue operating.

On-demand caches

The caches associated with dedicated connectors, such as Memcached and RESP, do not create the caches at start. These caches are now created on demand at the first access. In case these endpoints are not accessed, the caches are never created.

Updated Lua engine

We are shipping an updated Lua 5.1 engine, for Redis scripting, that includes a number of CVE fixes that have not been applied to the upstream Lua repository. Also, a number of dangerous Lua scripting operations have been disabled. The security of your servers is of the highest priority to us.

JDK improvements

While Infinispan still requires at least JDK 17, we have made several changes to take advantage of the features introduced in newer JDKs, including support for the recently released JDK 25.

Virtual threads

Infinispan by default not utilized Virtual Threads in both Embedded and Server modes. This includes Infinispan enabling virtual threads in JGroups by default. Virtual threads are used by the non-blocking and blocking thread pools in Embedded mode and the blocking thread pool in Server mode. The latter utilizes Netty event loop for its non-blocking thread pool which does not yet support virtual threads.

If necessary is possible to disable by setting the org.infinispan.threads.virtual system property to false.

AOT

Infinispan Server (and the CLI) can leverage OpenJDK’s Ahead-of-Time features introduced in JEP 483 to decrease startup time and initial memory usage.

Fixes

Lots of these. However, should you find something that doesn’t work, head over to our issues and provide any details that help us debug and solve problems.

Deprecations and removals

The old Single File Store has now been completely replaced by the more scalable Soft-Index File Store and cannot be configured declaratively any longer.

Documentation

As usual, many improvements, updates and fixes.

What’s next?

Infinispan is adopting timeboxed releases starting with our next release (16.1). See our roadmap for information. We will soon be blogging more about it.

Release notes

You can look at the release notes to see what was changed since our last development build.

Get them from our download page.

Get it, Use it, Ask us!

We’re hard at work on new features, improvements and fixes, so watch this space for more announcements!

Please, download and test the latest release.

The source code is hosted on GitHub. If you need to report a bug or request a new feature, look for a similar one on our GitHub issues tracker. If you don’t find any, create a new issue.

If you have questions, are experiencing a bug or want advice on using Infinispan, you can use GitHub discussions. We will do our best to answer you as soon as we can.

The Infinispan community uses Zulip for real-time communications. Join us using either a web-browser or a dedicated application on the Infinispan chat.

Tristan Tarrant

Tristan has been leading the Infinispan Engineering Team at Red Hat for quite a while now, as well as being Principal Architect for Red Hat Data Grid. He's been a passionate open-source advocate and contributor for over three decades.