Hi to all, I coud not find in any documentation this feature or answer to this question:
If I have this (simplified) network configuration:
Jboss node A and B are on the same network but are linked with 2 switches. Let say the ethernet wire that connects the switches get broken.
In that case I assume node A will become a new cluster "ALONEA" as B will become"ALONEB". LEt suppose we connect tonode A for a session (if we are on the same switch)
When the switches will reconnect (with a good wire now) is there a way to say to the 2 cluster to MERGE in one, naturally indicating
in some way (also programmatically) what will be the TRUE state to acquire (in our case from node A) ?
This would be crucial in real-time application where it is necessary to have redundant systems that cannot be human-supervised.
N.B. yes, a human could switch off node B, and the restart the cluster. But this is exactly what we wanto to avoid on our systems, that could be in desert where maintenance people are far hundreds of kilometers....
We are thinking to use TCP unicast with 2 NODES.
The real problem is the algorithm to decide how to merge the state of the cluster after the nodes have been divided for a while ( and 2 different user have accessed and modified the same business data). It is possible to implement some sort of algorithm or is it symply out of the scope of jboss clustering?
Hm, I guess you could compare timestamps you store yourself in HTTP sessions and merge them together keeping the newer, evicting the older one.
However, I am under impression this has not been implemented https://issues.jboss.org/browse/JBCACHE-772 as split brain scenario is not easy to handle. BTW these reconnects are not handled by JGroups (and cant really be), it should be handled by JBoss Cache.
In our scenario is not a simple matter of HTTP session timestamps, but we have data acquired from one independent sources (for every node) and we have to look at data collected to understand what is the "RIGHT" node.
can you link me some JBoss Cache resources about this ?
Than you very much. At the moment I googled around a lot (for a lot of months) but no applications serves seems to resolve this need.
This is a difficult problem to solve. If you have a DB, to which both nodes have access, you could simply clear the cache on a MergeView, and have it warm up gradually by using a DB CacheLoader.
Note that, similar to Amazon's Dynamo, Infinispan will (next version?) carry versions with the data. When there are conflicting updates to the same data, the application developer will be asked to resolve the conflict. If this might be of interest to you, I suggest post to the Infinispan forums or dev list.
Here is a link to what Bela is talking about -- the eventual consistency in Infinispan: https://issues.jboss.org/browse/ISPN-999 Its on plan for the next major version of Infinispan. One of the main improvements is partition tolerance which is what you seem to be after Version-aware entries could make it to 5.2 release, see https://issues.jboss.org/browse/ISPN-1116