in commons-jcs3-core/src/main/java/org/apache/commons/jcs3/auxiliary/remote/server/RemoteCacheServer.java [1114:1193]
private void processUpdate( final ICacheElement<K, V> item, final long requesterId )
{
final ElapsedTimer timer = new ElapsedTimer();
logUpdateInfo( item );
try
{
final CacheListeners<K, V> cacheDesc = getCacheListeners( item.getCacheName() );
final boolean fromCluster = isRequestFromCluster( requesterId );
log.debug( "In update, requesterId = [{0}] fromCluster = {1}", requesterId, fromCluster );
// ordered cache item update and notification.
synchronized ( cacheDesc )
{
try
{
final CompositeCache<K, V> c = (CompositeCache<K, V>) cacheDesc.cache;
// If the source of this request was not from a cluster,
// then consider it a local update. The cache manager will
// try to
// update all auxiliaries.
//
// This requires that two local caches not be connected to
// two clustered remote caches. The failover runner will
// have to make sure of this. ALos, the local cache needs
// avoid updating this source. Will need to pass the source
// id somehow. The remote cache should update all local
// caches
// but not update the cluster source. Cluster remote caches
// should only be updated by the server and not the
// RemoteCache.
if ( fromCluster )
{
log.debug( "Put FROM cluster, NOT updating other auxiliaries for region. "
+ " requesterId [{0}]", requesterId );
c.localUpdate( item );
}
else
{
log.debug( "Put NOT from cluster, updating other auxiliaries for region. "
+ " requesterId [{0}]", requesterId );
c.update( item );
}
}
catch ( final IOException ce )
{
// swallow
log.info( "Exception caught updating item. requesterId [{0}]: {1}",
requesterId, ce.getMessage() );
}
// UPDATE LOCALS IF A REQUEST COMES FROM A CLUSTER
// IF LOCAL CLUSTER CONSISTENCY IS CONFIGURED
if (!fromCluster || fromCluster && remoteCacheServerAttributes.isLocalClusterConsistency())
{
final List<ICacheEventQueue<K,V>> qlist = getEventQList( cacheDesc, requesterId );
log.debug("qlist.size() = {0}", qlist.size());
for (final ICacheEventQueue<K, V> element : qlist)
{
element.addPutEvent( item );
}
}
}
}
catch ( final IOException e )
{
if ( cacheEventLogger != null )
{
cacheEventLogger.logError( "RemoteCacheServer", ICacheEventLogger.UPDATE_EVENT, e.getMessage()
+ " REGION: " + item.getCacheName() + " ITEM: " + item );
}
log.error( "Trouble in Update. requesterId [{0}]", requesterId, e );
}
// TODO use JAMON for timing
log.debug( "put took {0} ms.", timer::getElapsedTime);
}