com.sleepycat.je.evictor
Class Evictor

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

public abstract class Evictor
extends DaemonThread

The Evictor looks through the INList for IN's and BIN's that are worthy of eviction. Once the nodes are selected, it removes all references to them so that they can be GC'd by the JVM.


Field Summary
static java.lang.String SOURCE_CRITICAL
           
static java.lang.String SOURCE_DAEMON
           
static java.lang.String SOURCE_MANUAL
           
 
Fields inherited from class com.sleepycat.je.utilint.DaemonThread
name, nWakeupRequests, stifleExceptionChatter
 
Method Summary
abstract  void addEnvironment(EnvironmentImpl envImpl)
          Only supported by SharedEvictor.
 void alert()
          Wakeup the evictor only if it's not already active.
abstract  boolean checkEnvs(java.util.Set<EnvironmentImpl> envs)
          Only supported by SharedEvictor.
abstract  void clearEnv()
          Standard daemon method to set envImpl to null.
 void doCriticalEviction(boolean backgroundIO)
          Do a check on whether synchronous eviction is needed.
 void doEvict(java.lang.String source)
          May be called by the evictor thread on wakeup or programatically.
 void loadStats(StatsConfig config, EnvironmentStats stat)
          Load stats.
protected  long nDeadlockRetries()
          Return the number of retries when a deadlock exception occurs.
 int normalizeLevel(IN in, int evictType)
          Normalize the tree level of the given IN.
abstract  void noteINListChange(int nINs)
          Called whenever INs are added to, or removed from, the INList.
 void onWakeup()
          Called whenever the daemon thread wakes up from a sleep.
abstract  void removeEnvironment(EnvironmentImpl envImpl)
          Only supported by SharedEvictor.
 void setRunnableHook(TestHook hook)
           
 
Methods inherited from class com.sleepycat.je.utilint.DaemonThread
checkErrorListener, 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
 

Field Detail

SOURCE_DAEMON

public static final java.lang.String SOURCE_DAEMON
See Also:
Constant Field Values

SOURCE_MANUAL

public static final java.lang.String SOURCE_MANUAL
See Also:
Constant Field Values

SOURCE_CRITICAL

public static final java.lang.String SOURCE_CRITICAL
See Also:
Constant Field Values
Method Detail

loadStats

public void loadStats(StatsConfig config,
                      EnvironmentStats stat)
               throws DatabaseException
Load stats.

Throws:
DatabaseException

nDeadlockRetries

protected long nDeadlockRetries()
                         throws DatabaseException
Return the number of retries when a deadlock exception occurs.

Overrides:
nDeadlockRetries in class DaemonThread
Throws:
DatabaseException

alert

public void alert()
Wakeup the evictor only if it's not already active.


onWakeup

public void onWakeup()
              throws DatabaseException
Called whenever the daemon thread wakes up from a sleep.

Specified by:
onWakeup in class DaemonThread
Throws:
DatabaseException

doEvict

public void doEvict(java.lang.String source)
             throws DatabaseException
May be called by the evictor thread on wakeup or programatically.

Throws:
DatabaseException

doCriticalEviction

public void doCriticalEviction(boolean backgroundIO)
                        throws DatabaseException
Do a check on whether synchronous eviction is needed.

Throws:
DatabaseException

normalizeLevel

public int normalizeLevel(IN in,
                          int evictType)
Normalize the tree level of the given IN. Is public for unit testing. A BIN containing evictable LNs is given level 0, so it will be stripped first. For non-duplicate and DBMAP trees, the high order bits are cleared to make their levels correspond; that way, all bottom level nodes (BINs and DBINs) are given the same eviction priority. Note that BINs in a duplicate tree are assigned the same level as BINs in a non-duplicate tree. This isn't always optimimal, but is the best we can do considering that BINs in duplicate trees may contain a mix of LNs and DINs. BINs in the mapping tree are also assigned the same level as user DB BINs. When doing by-level eviction (lruOnly=false), this seems counter-intuitive since we should evict user DB nodes before mapping DB nodes. But that does occur because mapping DB INs referencing an open DB are unevictable. The level is only used for selecting among evictable nodes. If we did NOT normalize the level for the mapping DB, then INs for closed evictable DBs would not be evicted until after all nodes in all user DBs were evicted. If there were large numbers of closed DBs, this would have a negative performance impact.


setRunnableHook

public void setRunnableHook(TestHook hook)

clearEnv

public abstract void clearEnv()
Standard daemon method to set envImpl to null.


noteINListChange

public abstract void noteINListChange(int nINs)
Called whenever INs are added to, or removed from, the INList.


addEnvironment

public abstract void addEnvironment(EnvironmentImpl envImpl)
Only supported by SharedEvictor.


removeEnvironment

public abstract void removeEnvironment(EnvironmentImpl envImpl)
Only supported by SharedEvictor.


checkEnvs

public abstract boolean checkEnvs(java.util.Set<EnvironmentImpl> envs)
Only supported by SharedEvictor.