com.sleepycat.je.evictor
Class SharedEvictor

java.lang.Object
  extended by com.sleepycat.je.utilint.DaemonThread
      extended by com.sleepycat.je.evictor.Evictor
          extended by com.sleepycat.je.evictor.SharedEvictor
All Implemented Interfaces:
DaemonRunner, ExceptionListenerUser, Runnable

public class SharedEvictor
extends Evictor

The Evictor that operates on the INLists for multiple environments that share a single cache. Multiple iterators, once for each INList, are used to implement getNextIN. INs are returned from from each iterator in a round-robin rotation, giving larger INLists proportionally more rotations. This "mixes up" the INs from all INlists so that the LRU algorithm is applied across all lists.


Nested Class Summary
 
Nested classes/interfaces inherited from class com.sleepycat.je.evictor.Evictor
Evictor.EvictionSource, Evictor.EvictProfile
 
Field Summary
 
Fields inherited from class com.sleepycat.je.evictor.Evictor
evictProfile, sharedCacheEnvs
 
Fields inherited from class com.sleepycat.je.utilint.DaemonThread
envImpl, logger, name, nWakeupRequests, stifleExceptionChatter
 
Constructor Summary
SharedEvictor(EnvironmentImpl env, long wakeupInterval, String name)
           
 
Method Summary
 void addEnvironment(EnvironmentImpl env)
          Synchronized so that the set of environments cannot be changed in the middle of an eviction (which is also synchronized).
 boolean checkEnv(EnvironmentImpl env)
          Returns true if the given environment is present in the set of subject environments.
 void clearEnv()
          Only supported by PrivateEvictor.
(package private)  StatGroup getINListStats(StatsConfig config)
          Return stats for the multiple INLists covered by this evictor.
(package private)  int getMaxINsPerBatch()
          Returns the total of all INList sizes, as of the last time sizes were initialized.
(package private)  IN getNextIN()
          Returns the next IN, wrapping if necessary.
(package private)  Iterator<IN> getScanIterator()
           
 StatGroup loadStats(StatsConfig config)
          Load stats.
 void noteINListChange(int nINs)
          After 1/INIT_SIZE_THRESHOLD of all INs have been changed, reinitialize the sizes.
 void removeEnvironment(EnvironmentImpl env)
          Synchronized so that the set of environments cannot be changed in the middle of an eviction (which is also synchronized).
(package private)  void setScanIterator(Iterator<IN> iter)
           
(package private)  long startBatch()
          Initializes the sizes if needed, and performs special eviction for one environment in rotatation.
 
Methods inherited from class com.sleepycat.je.evictor.Evictor
alert, doCriticalEviction, doEvict, evictBatch, evictIN, incBINEvictStats, incBINFetchStats, incINEvictStats, incINFetchStats, incLNFetchStats, isCacheFull, nDeadlockRetries, normalizeLevel, onWakeup, setPreEvictINHook, setRunnableHook, wasCacheEverFull
 
Methods inherited from class com.sleepycat.je.utilint.DaemonThread
checkErrorListener, createLogger, getExceptionListener, getNWakeupRequests, getThread, isPaused, isRunning, isShutdownRequested, requestShutdown, run, runOrPause, setExceptionListener, shutdown, toString, wakeup
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

SharedEvictor

public SharedEvictor(EnvironmentImpl env,
                     long wakeupInterval,
                     String name)
              throws DatabaseException
Throws:
DatabaseException
Method Detail

getINListStats

StatGroup getINListStats(StatsConfig config)
Return stats for the multiple INLists covered by this evictor.

Specified by:
getINListStats in class Evictor

loadStats

public StatGroup loadStats(StatsConfig config)
Description copied from class: Evictor
Load stats.

Overrides:
loadStats in class Evictor

clearEnv

public void clearEnv()
Only supported by PrivateEvictor.

Specified by:
clearEnv in class Evictor

noteINListChange

public void noteINListChange(int nINs)
After 1/INIT_SIZE_THRESHOLD of all INs have been changed, reinitialize the sizes.

Specified by:
noteINListChange in class Evictor

addEnvironment

public void addEnvironment(EnvironmentImpl env)
Synchronized so that the set of environments cannot be changed in the middle of an eviction (which is also synchronized).

Specified by:
addEnvironment in class Evictor

removeEnvironment

public void removeEnvironment(EnvironmentImpl env)
Synchronized so that the set of environments cannot be changed in the middle of an eviction (which is also synchronized).

Specified by:
removeEnvironment in class Evictor

checkEnv

public boolean checkEnv(EnvironmentImpl env)
Returns true if the given environment is present in the set of subject environments. Used in assertions.

Specified by:
checkEnv in class Evictor

startBatch

long startBatch()
          throws DatabaseException
Initializes the sizes if needed, and performs special eviction for one environment in rotatation.

Specified by:
startBatch in class Evictor
Throws:
DatabaseException

getMaxINsPerBatch

int getMaxINsPerBatch()
Returns the total of all INList sizes, as of the last time sizes were initialized.

Specified by:
getMaxINsPerBatch in class Evictor

getNextIN

IN getNextIN()
Returns the next IN, wrapping if necessary. Returns a number of INs from each INList that is proportional to the sizes of the lists. When a round is complete (we have returned the correct ratio from all INLists and all Subject.remaining fields are less than zero), start a new round by reinitializing the Subject.remaining fields.

Specified by:
getNextIN in class Evictor

getScanIterator

Iterator<IN> getScanIterator()
Specified by:
getScanIterator in class Evictor

setScanIterator

void setScanIterator(Iterator<IN> iter)
Specified by:
setScanIterator in class Evictor


Copyright (c) 2004-2010 Oracle. All rights reserved.