Blogs Infinispan 15.0.3.Final

Infinispan 15.0.3.Final

Since our 15 release a couple of months ago, we’ve been busy fixing bugs and adding new functionality. This post highlights the most notable enhancements:

Protocol Buffers compatibility checks

When uploading new versions of existing schemas to Infinispan, these will be validated using a set of backwards-compatibility rules based upon Proto Best Practices. The types of checks can be configured via the schema-compatibility attribute of the global serialization configuration:

<infinispan>
   <serialization schema-compatibility="UNRESTRICTED|LENIENT|STRICT"/>
</infinispan>

The available levels are:

  • UNRESTRICTED: no checks are performed

  • LENIENT: a subset of the rules are enforced

  • STRICT: all the rules are enforced (default)

HTTP compression/decompression

The REST endpoint has supported compressing responses since Infinispan 10, but now it also supports receiving compressed requests using the standard HTTP content-encoding header.

Query/index by key

Entry keys can now be indexed and referenced in Ickle queries:

select s.key.column from model.Structure s where s.key.zone = 'z7'

It’s now possible to limit vector searches by applying predicates to the kNN queries:

Query<Object[]> query = remoteCache.query(
   "select score(i), i from Item i where i.floatVector <-> [:a]~:k filtering (i.buggy : 'cat' or i.text : 'code')");
query.setParameter("a", new float[]{7, 7, 7});
query.setParameter("k", 3);

More detailed metrics

Metrics for reads/writes are now split into the following categories:

  • primary owner

  • backup owner

  • non-owner

Additionally, transaction operations (prepare, commit and rollback) now have their own metrics for counts and response times.

Cache aliases

Caches can now have aliases associated with them, so a cache may be accessed either by its primary name or one of its aliases. The aliases attribute can be manipulated at runtime using the CLI or the REST API, so you can reassign aliases to different caches. With this functionality it is possible to implement cache snapshots. Given the following configuration:

<caches>
    <distributed-cache name="snapshot1" aliases="data" />
    <distributed-cache name="snapshot2"/>
</caches>

Clients could be accessing an older snapshot through the data alias, while the other snapshot is being populated. Once the new snapshot cache is ready, reassign the data alias to it and clients will automatically see the new data.

Redis protocol

Infinispan can now support multiple Redis databases, even in clustered mode (something that the original Redis cannot do). You can use the cache alias feature to assign logical database numbers to named caches.

We’ve also implemented a few more Redis commands:

  • BLMPOP

  • DB

  • HSTRLEN

  • PUBSUB

  • PUBSUB NUMPAT

as well as fixing a number of buglets in other commands.

Reactive methods for Spring Cache

The Spring Cache (retrieve) methods have been implemented.

JDBC_PING and datasources

Infinispan server can now inject a managed datasource into the JDBC_PING protocol:

<cache-container>
    <transport stack="jdbc" server:data-source="ds" />
</cache-container>

Removal of OpenSSL

Infinispan server no longer ships with the OpenSSL wrapper: the performance of the JDK’s SSLEngine has been vastly improved in Java 17 to the point where there is no noticeable difference (and in some cases it is slightly faster, since it no longer needs to jump over JNI).

Documentation

Many improvements, updates and fixes.

Release notes

You can look at the release notes to see what has changed since our latest CR.

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 JIRA 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.