org.codehaus.wadi.impl
Class ClusterContextualiser

java.lang.Object
  extended byorg.codehaus.wadi.impl.AbstractContextualiser
      extended byorg.codehaus.wadi.impl.AbstractChainedContextualiser
          extended byorg.codehaus.wadi.impl.AbstractMotingContextualiser
              extended byorg.codehaus.wadi.impl.AbstractSharedContextualiser
                  extended byorg.codehaus.wadi.impl.ClusterContextualiser
All Implemented Interfaces:
ClusterListener, Config, Contextualiser, EventListener, Lifecycle, RelocaterConfig, StateManager.ImmigrationListener

public class ClusterContextualiser
extends AbstractSharedContextualiser
implements RelocaterConfig, ClusterListener, StateManager.ImmigrationListener

A cache of Locations. If the Location of a Context is not known, the Cluster may be queried for it. If it is forthcoming, we can proxy to it. After a given number of successful proxies, the Context will be migrated to this Contextualiser which should promote it so that future requests for it can be run straight off the top of the stack. Node N1 sends LocationRequest to Cluster Node N2 contextualises this request with a FilterChain that will send a LocationResponse and wait a specified handover period. Node N1 receives the response, updates its cache and then proxies through the Location to the required resource. The promotion mutex is held correctly during the initial Location lookup, so that searches for the same Context are correctly collapsed. Proxy should be applied before Migration- if it succeeds, we don't migrate... This class is getting out of hand !

Version:
$Revision: 1430 $
Author:
Jules Gosnell

Field Summary
protected  Cluster _cluster
           
protected  Collapser _collapser
           
protected  DIndex _dindex
           
protected  ActiveClusterDispatcher _dispatcher
           
protected  Emoter _emoter
           
protected  boolean _evacuating
           
protected static String _evacuatingKey
           
protected  SynchronizedInt _evacuationPartnerCount
           
protected  Immoter _immoter
           
protected  HttpProxyLocation _location
           
protected  int _locationMaxInactiveInterval
           
protected  Log _lockLog
           
protected  String _nodeName
           
protected static String _nodeNameKey
           
protected  ProxiedLocation _proxiedLocation
           
protected  Relocater _relocater
           
protected  int _resTimeout
           
protected  SynchronizedBoolean _shuttingDown
           
protected static String _shuttingDownKey
           
protected  Contextualiser _top
           
 
Fields inherited from class org.codehaus.wadi.impl.AbstractMotingContextualiser
_clean, _config, _locker
 
Fields inherited from class org.codehaus.wadi.impl.AbstractChainedContextualiser
_next
 
Fields inherited from class org.codehaus.wadi.impl.AbstractContextualiser
_log
 
Constructor Summary
ClusterContextualiser(Contextualiser next, Collapser collapser, Relocater relocater)
           
 
Method Summary
protected  void createEvacuationQueue()
           
 void destroy()
           
protected  void destroyEvacuationQueue()
           
protected  void ensureEvacuationJoined(String nodeName)
           
protected  void ensureEvacuationLeft(String nodeName)
           
protected  void ensureEvacuationQueue()
           
 Motable get(String name)
           
 Collapser getCollapser()
           
 Contextualiser getContextualiser()
           
 Immoter getDemoter(String name, Motable motable)
          Return a Demoter to the first Contextualiser which would be happy to accept this Motable - in other words - would not evict() it.
 DIndex getDIndex()
           
 Dispatcher getDispatcher()
           
 Emoter getEmoter()
           
protected  int getEvacuationPartnersCount()
           
 Immoter getImmoter()
           
 InvocationProxy getInvocationProxy()
           
 Location getLocation()
           
 String getNodeName()
           
 ProxiedLocation getProxiedLocation()
           
 Immoter getSharedDemoter()
           
 SynchronizedBoolean getShuttingDown()
           
 String getStartInfo()
           
 boolean handle(InvocationContext invocationContext, String id, Immoter immoter, Sync motionLock)
           
 void init(ContextualiserConfig config)
           
 void load(Emoter emoter, Immoter immoter)
           
 void notifySessionRelocation(String name)
           
 void onCoordinatorChanged(ClusterEvent event)
           
 void onImmigration(ObjectMessage message, Motable emotable)
           
 void onNodeAdd(ClusterEvent event)
           
 void onNodeFailed(ClusterEvent event)
           
 void onNodeRemoved(ClusterEvent event)
           
 void onNodeStateChange(ClusterEvent event)
           
 void onNodeUpdate(ClusterEvent event)
           
protected  void refreshEvacuationPartnersCount()
           
 void stop()
           
 
Methods inherited from class org.codehaus.wadi.impl.AbstractSharedContextualiser
getLocalSessionCount, isExclusive
 
Methods inherited from class org.codehaus.wadi.impl.AbstractMotingContextualiser
contextualise, getPromoter, promote, promoteToExclusive
 
Methods inherited from class org.codehaus.wadi.impl.AbstractChainedContextualiser
findRelevantSessionNames, setLastAccessedTime, setMaxInactiveInterval, start
 
Methods inherited from class org.codehaus.wadi.impl.AbstractContextualiser
getStopInfo
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

_nodeNameKey

protected static final String _nodeNameKey
See Also:
Constant Field Values

_shuttingDownKey

protected static final String _shuttingDownKey
See Also:
Constant Field Values

_evacuatingKey

protected static final String _evacuatingKey
See Also:
Constant Field Values

_evacuationPartnerCount

protected final SynchronizedInt _evacuationPartnerCount

_collapser

protected final Collapser _collapser

_relocater

protected final Relocater _relocater

_immoter

protected final Immoter _immoter

_emoter

protected final Emoter _emoter

_resTimeout

protected final int _resTimeout
See Also:
Constant Field Values

_lockLog

protected final Log _lockLog

_shuttingDown

protected SynchronizedBoolean _shuttingDown

_nodeName

protected String _nodeName

_evacuating

protected boolean _evacuating

_dispatcher

protected ActiveClusterDispatcher _dispatcher

_cluster

protected Cluster _cluster

_location

protected HttpProxyLocation _location

_proxiedLocation

protected ProxiedLocation _proxiedLocation

_dindex

protected DIndex _dindex

_top

protected Contextualiser _top

_locationMaxInactiveInterval

protected int _locationMaxInactiveInterval
Constructor Detail

ClusterContextualiser

public ClusterContextualiser(Contextualiser next,
                             Collapser collapser,
                             Relocater relocater)
Method Detail

init

public void init(ContextualiserConfig config)
Specified by:
init in interface Contextualiser
Overrides:
init in class AbstractMotingContextualiser

getStartInfo

public String getStartInfo()
Overrides:
getStartInfo in class AbstractContextualiser

destroy

public void destroy()
Specified by:
destroy in interface Contextualiser
Overrides:
destroy in class AbstractMotingContextualiser

getImmoter

public Immoter getImmoter()
Specified by:
getImmoter in class AbstractMotingContextualiser
Returns:
- an Immoter that facilitates insertion of Motables into this Contextualiser's own store

getEmoter

public Emoter getEmoter()
Specified by:
getEmoter in class AbstractMotingContextualiser
Returns:
- an Emoter that facilitates removal of Motables from this Contextualiser's own store

getEvacuationPartnersCount

protected int getEvacuationPartnersCount()

refreshEvacuationPartnersCount

protected void refreshEvacuationPartnersCount()

getDemoter

public Immoter getDemoter(String name,
                          Motable motable)
Description copied from interface: Contextualiser
Return a Demoter to the first Contextualiser which would be happy to accept this Motable - in other words - would not evict() it.

Specified by:
getDemoter in interface Contextualiser
Overrides:
getDemoter in class AbstractSharedContextualiser

getSharedDemoter

public Immoter getSharedDemoter()
Specified by:
getSharedDemoter in interface Contextualiser
Overrides:
getSharedDemoter in class AbstractMotingContextualiser

handle

public boolean handle(InvocationContext invocationContext,
                      String id,
                      Immoter immoter,
                      Sync motionLock)
               throws InvocationException
Overrides:
handle in class AbstractMotingContextualiser
Throws:
InvocationException

createEvacuationQueue

protected void createEvacuationQueue()
                              throws Exception
Throws:
Exception

destroyEvacuationQueue

protected void destroyEvacuationQueue()
                               throws Exception
Throws:
Exception

ensureEvacuationQueue

protected void ensureEvacuationQueue()

stop

public void stop()
          throws Exception
Specified by:
stop in interface Lifecycle
Overrides:
stop in class AbstractChainedContextualiser
Throws:
Exception

onImmigration

public void onImmigration(ObjectMessage message,
                          Motable emotable)
Specified by:
onImmigration in interface StateManager.ImmigrationListener

load

public void load(Emoter emoter,
                 Immoter immoter)
Specified by:
load in interface Contextualiser

onNodeAdd

public void onNodeAdd(ClusterEvent event)
Specified by:
onNodeAdd in interface ClusterListener

onNodeUpdate

public void onNodeUpdate(ClusterEvent event)
Specified by:
onNodeUpdate in interface ClusterListener

onNodeStateChange

public void onNodeStateChange(ClusterEvent event)

ensureEvacuationJoined

protected void ensureEvacuationJoined(String nodeName)

ensureEvacuationLeft

protected void ensureEvacuationLeft(String nodeName)

onNodeRemoved

public void onNodeRemoved(ClusterEvent event)
Specified by:
onNodeRemoved in interface ClusterListener

onNodeFailed

public void onNodeFailed(ClusterEvent event)
Specified by:
onNodeFailed in interface ClusterListener

onCoordinatorChanged

public void onCoordinatorChanged(ClusterEvent event)
Specified by:
onCoordinatorChanged in interface ClusterListener

getCollapser

public Collapser getCollapser()
Specified by:
getCollapser in interface RelocaterConfig

getDispatcher

public Dispatcher getDispatcher()
Specified by:
getDispatcher in interface RelocaterConfig

getLocation

public Location getLocation()
Specified by:
getLocation in interface RelocaterConfig

getProxiedLocation

public ProxiedLocation getProxiedLocation()
Specified by:
getProxiedLocation in interface RelocaterConfig

getContextualiser

public Contextualiser getContextualiser()
Specified by:
getContextualiser in interface RelocaterConfig

getNodeName

public String getNodeName()
Specified by:
getNodeName in interface RelocaterConfig

getShuttingDown

public SynchronizedBoolean getShuttingDown()
Specified by:
getShuttingDown in interface RelocaterConfig

getInvocationProxy

public InvocationProxy getInvocationProxy()
Specified by:
getInvocationProxy in interface RelocaterConfig

getDIndex

public DIndex getDIndex()
Specified by:
getDIndex in interface RelocaterConfig

notifySessionRelocation

public void notifySessionRelocation(String name)
Specified by:
notifySessionRelocation in interface RelocaterConfig

get

public Motable get(String name)
Specified by:
get in class AbstractMotingContextualiser


Copyright © 2004-2008 Core Developers Network Ltd.. All Rights Reserved.