Tuesday, 05 March 2019
Infinispan uses JGroups as its underlying clustering layer. In order to configure the finer details of clustering (discovery, flow control, cross-site, etc) you have to provide a separate XML file with the desired configuration and reference it from your Infinispan XML file as follows:
For simple configurations this is usually fine, but configuring complex setups, such as cross-site replication, means juggling multiple files (one for the local stack, one for the cross-site stack and one for the relay configuration).
Starting with Infinispan 10 Alpha2 we have introduced a number of changes to make your life with JGroups configurations a lot easier.
Infinispan now comes with two pre-declared stacks:
udp. Using them is as simple as just referencing their names in the
Inlining a stack means you can put the JGroups configuration inside the Infinispan one as follows:
You can use the full JGroups schema, and by using XML namespaces you get full validation.
Most of the time you want to reuse one of the pre-declared stacks but just override some of the parameters (e.g. discovery) to suit your environment. The following example creates a new
tcpgossip stack which is based on the default tcp stack but replaces the discovery protocol with
In the above example you can see that we have enhanced the JGroups protocol declarations with two new attributes:
ispn:stack.position which affect how and where protocol changes are applied on the parent configuration to obtain a new configuration.
stack.combine can be one of
COMBINE (the default, possibly overriding any specified attributes),
REPLACE (which completely replaces the protocol and resets all attributes),
REMOVE (removes the protocol) and
INSERT_AFTER (which places this protocol in the stack immediately after the protocol specified by
The inline configuration really shows its usefulness in cross-site configurations. In fact, the JGroups stack declaration has been extended with a special element which replaces the need for a separate relay XML file and can reference other stacks just by name. The following configuration uses the default
udp stack for the local cluster transport and uses the default
tcp stack for connecting to a remote site:
Having the entire configuration in a single place greatly simplifies management. Of course you can combine all of the above features to obtain the configuration you need for your environment. You can find more details and examples in the documentation. Enjoy ! Tristan
Tags: configuration jgroups
Thursday, 22 June 2017
Once upon a time Infinispan cache configurations were all orphans.
Actually, it wasn’t as sad as that: they all shared a single parent - the default cache. While this gave caches a limited form of inheritance, it led to confusion as users weren’t really aware of it and it was impossible to turn it off: the limited gene pool was propagating possibly unwanted traits to all of its children.
Infinispan 7.2 finally introduced proper configuration templates and inheritance. But there was a catch. Backwards compatibility dictated that the "default mother of all caches" behaviour survived.
In the above example, the default cache is a replicated cache with a file store. The distributed cache inherits the "transactional" configuration. However, because of default inheritance present up to Infinispan 8.2, the distributed-cache also ended up having a file store. Confusing or what !?! The best workaround was to never give it a specific configuration, let Infinispan use its internal defaults and essentially avoid it. Just like the black sheep in the family.
With Infinispan 9.0 we decided it was finally time to cut the umbilical cord between the default cache and all the other caches: if you declare one, it will never be used as default inheritance for every other cache. In the above example, the distributed cache won’t have a file store any more.
We’ve gone even further: unless you declare a default cache, we will not even set one up for you, not even one with default settings!
Aleksandr Sergeevich Serebrovskii, the Russian geneticist who first formulated the concept of the gene pool and the diversity benefits it brings, would be proud of us.