The latest Cellar release (2.2.5) didn’t work with the new Karaf branch and release: 2.3.0.
If the first purpose of Cellar 2.3.0 is to be able to work with Karaf 2.3.x, actually, it’s more than that.
Let’s take a tour in the new Apache Karaf Cellar 2.3.0.
Apache Karaf 2.3.x support
Cellar 2.3.0 is fully compatible with Karaf 2.3.x branch.
Starting from Karaf 2.3.2, Cellar can be install “out of the box”.
If you want to use Cellar with Karaf 2.3.0 or Karaf 2.3.1, in order to avoid some Cellar bootstrap issue, you have to add the following property in etc/config.properties:
Upgrade to Hazelcast 2.5
As you may know, Cellar is clustered provision tool powered by Hazelcast.
We did a big jump: from Hazelcast 1.9 to Hazelcast 2.5.
Hazelcast 2.5 brings a lot of bug fixes and interesting new features. You can find more details here: http://www.hazelcast.com/docs/2.5/manual/multi_html/ch18s04.html.
In Cellar, all Hazelcast configuration is performed using an unique file: etc/hazelcast.xml.
Hazelcast 2.5 gives you more properties to configure your cluster, and the behaviors of the cluster events. The default configuration is largely enough for most use cases, but thanks to this Hazelcast version, you have the possibility to perform fine tuning.
More over, some new features are interesting for Cellar, especially:
- IPv6 support
- more complete backup support, when a node is disconnected from the cluster
- better security and encryption support
- higher tolerancy to connection failures
- parallel IO support
Cluster groups persistence
In previous Cellar versions, the cluster groups were not store, and relay only on the cluster states. It means that it was possible to loose an existing cluster group if the group didn’t have any node.
Now, each node stores the cluster groups list, and its membership.
Like this, the cluster groups are persistent and we can restart the cluster, we won’t loose the “empty” cluster groups.
Cluster event producers, consumers, handlers status persistence
A Cellar node uses different components to manage cluster events:
- the producer (one per node) is responsible to broadcast a cluster event to the other nodes
- the consumer (one per node) receives cluster events and delegates the handling of the event to a handler
- handlers (one per resource) handles a specific cluster events (features, bundles, etc) and update the node local states
The user has a complete control on producer, consumer, handlers. It means that it can stop or start the node producer, consumer, or handler.
The problem is that the current state of the producer/consumer/handler was not persistent. It means that a restart of the node will reset producer/consumer/handler to the default state (and not the previous one).
To avoid this issue, the producer/consumer/handler state is now persistent on the local node.
The synchronization of the different resources supported by Cellar is now better than before. Cellar now checks the local state of the node. Cellar checks a kind of diff between the local state and the state on the cluster. If the states differ, Cellar updates the local state as described on the cluster.
For the config especially, to avoid important CPU consumption, some properties are not considered during the synchronization because they are local to the node (for instance, service.factoryPid).
A new command has been introduced (cluster:sync) to “force” the synchronization of the local node with the cluster. It’s interesting when the node has been disconnected from the cluster, and you want to re-sync as soon as possible.
Improvement on Cellar Cloud support
My friend Achim (Achim Nierbeck) did a great job on the Cellar Cloud support.
First, he fixes some issues that we had on this module.
He gave a great demo during JAX: Integration In the Cloud With Camel, Karaf and Cellar.
Improvement on the cluster:* commands and MBeans
In order to be closer to the Karaf core commands, the cluster:* commands (and MBeans) now provide exactly the same options that you can find in the Karaf core commands.
And more is coming …
The first purpose of Cellar 2.3.0 is to provide a version ready to run on Karaf 2.3.x, and insure the stability. So I postponed some new features and improvements to Cellar 2.3.1.
In the mean time, I also released a new Cellar 2.2.6 release, containing mostly bug fixes (for the ones that still use Karaf 2.2.x with Cellar 2.2.x).