[jbosscache-dev] JBCACHE-471 - Handling JGroups MERGE

Manik Surtani manik at jboss.org
Thu Mar 20 07:00:47 EDT 2008


On 20 Mar 2008, at 03:46, Brian Stansberry wrote:
> Bela Ban wrote:
>>>> I suggest you come up with a number of scenarios you'd like to  
>>>> cover in JBC and then we see what information is needed. Maybe  
>>>> implementing this will make the interface clearer...
>>>
>>> As far as JBC is concerned, I think we can only handle 2 scenarios  
>>> effectively.
>>>
>>> 1.  EvictEntireClusterStateHandler
>>> Each instance evicts it's local tree when it gets this.  A  
>>> variation of this could do a remove instead of an evict (to clear  
>>> local cache loader state as well).  Useful if the data exists  
>>> elsewhere - e.g., when used with Hibernate.
>>>
>>> 2.  FatalStopMergeHandler
>>> Logs a fatal error and shuts down the cache when a merge is detected
>> These are simple policies, let's try to find a hard one. For example,
>> 3. HTTP session replication (Brian): here, we could provide a  
>> policy which merges the (usually disjoint) data sets. If there are  
>> conflicts, we could use the number of updates to a session as  
>> arbiter. Or the time stamp of the last update, or something  
>> deterministic.
>
> The following applies to non-FIELD based sessions.  Once POJO Cache  
> is involved its a whole different subject.
>
> A handler that merged sessions would need to be able to:
>
> a) Find out where in the tree the root of interesting data is. That  
> is the /JSESSION/localhost/webapp Fqn.  A session cache might have  
> several such points (different webapps) and not all would  
> necessarily follow the same structure. e.g. you may also have things  
> like /SFSB/ear=foo,jar=bar,bean=fubar in the same cache if you are  
> caching SFSBs as well.  With BR this includes the buddy backup  
> subtrees associated with any "dead" data owners.
>
> b) Identify what nodes are the "data owners".  With total  
> replication this could just be the former coordinator nodes of the  
> subpartitions. With BR it's every node.
>
> c) Provide the names of all the children of the interesting root  
> across the data owners.
>
> d) Provide the data from all the data owners for a given Fqn so the  
> winner can be selected.
>
> e) Compare the contents of nodes to determine a winner. What  
> attribute map key holds the timestamp; what method on the sfsb holds  
> the timestamp.
>
> f) Merge a given subtree once a winner has been picked for a given  
> Fqn. Get the winner data stored in the right place (which buddy  
> groups) and the loser data removed.

So in terms of what you'd need from JBC's merge handler callback:

1)  List of each subpartition's members (in order, so you can  
determine coordinator)
2)  Remote (proxy) access to a given cache.  Something like:

	Cache c = new CacheProxy(currentInstance, addressToProxyTo);

      so that you could query any caches (coordinators, or all caches  
in the case of BR) you care about, about their "interesting" roots and  
children.

I'm guessing everything you need in c, d and f can be achieved with  
proxy access described above?

So I'm now the callback hasn't changed, and still looks like:


	void handleMerge(Cache currentInstance, List<Address>  
mergedMembership, List<Address>... subpartitionMemberships);

NB: CacheProxy does not exist as yet.  It is something we need for  
Partitioning (JBCACHE-60), so I thought it may make sense here.

Cheers,
Manik


--
Manik Surtani
Lead, JBoss Cache
manik at jboss.org









More information about the jbosscache-dev mailing list