> 1) What does the client stub do if the node that is
> serving it fails during the execution of a
> Transaction? Does it report an exception to the
> application or it contacts another node?
When it is a communication exception it will retry with a healthy node. I think this only happens before it connects to a healthy server, once the call is in progress, the exception is propagated to the client. But do check the code to verify this.
> 2) How is the primary partition determined (majority
> of all,majority of previous view, partition with HTTP
> dispatcher)?
JavaGroups does *not* support a primary partition concept. *All* partitions are allowed to make progress -- at the cost of a messier merge when a partition heals.
Note that it would be possible to implement a primary partition approach in JavaGroups - it is just that the current set of protocols do not implement the PP approach.
> 3) Doesn't a node refuse connections from clients if
> it's not part of the primary partition? Where's the
> code that does this?
No - see above.
> 4) When HASessionState calls _setState() via
> callMethodOnCluster, what do we do if the nodes that
> respond are less than majority?
Nothing - see above.
> 5) How is merging partitions handled? Which are the
> classes I should look at?
In JavaGroups: have a look at org.javagroups.protocols.pbcast.{GMS,CoordGmsImpl.java,DESIGN}.
DESIGN explains how the merge protocol works.
In a nutshell: we merge group info and then call the app to merge the state.
Bela