Class BackgroundCleaner
java.lang.Object
org.apache.derby.impl.services.cache.BackgroundCleaner
- All Implemented Interfaces:
Serviceable
A background cleaner that
ConcurrentCache can use to clean
Cacheables asynchronously in a background instead of synchronously in the
user threads. It is normally used by the replacement algorithm in order to
make dirty Cacheables clean and evictable in the future. When the
background cleaner is asked to clean an item, it puts the item in a queue
and requests to be serviced by a DaemonService running in a
separate thread.-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final ConcurrentCacheThe cache manager owning this cleaner.private final intSubscription number for thisServiceable.private final DaemonServiceThe service thread which performs the clean operations.private final ArrayBlockingQueue<CacheEntry> A queue of cache entries that need to be cleaned.private final AtomicBooleanFlag which tells whether the cleaner has a still unprocessed job scheduled with the daemon service.private booleanFlag which tells whether the cleaner should try to shrink the cache the next time it wakes up.Fields inherited from interface Serviceable
DONE, REQUEUE -
Constructor Summary
ConstructorsConstructorDescriptionBackgroundCleaner(ConcurrentCache cache, DaemonService daemon, int queueSize) Create a background cleaner instance and subscribe it to a daemon service. -
Method Summary
Modifier and TypeMethodDescriptionintperformWork(ContextManager context) Clean the first entry in the queue.private voidNotify the daemon service that the cleaner needs to be serviced.(package private) booleanscheduleClean(CacheEntry entry) Try to schedule a clean operation in the background cleaner.(package private) voidRequest that the cleaner tries to shrink the cache the next time it wakes up.booleanIndicate that we want to be serviced ASAP.booleanIndicate that we don't want the work to happen immediately in the user thread.(package private) voidStop subscribing to the daemon service.
-
Field Details
-
daemonService
The service thread which performs the clean operations. -
clientNumber
private final int clientNumberSubscription number for thisServiceable. -
scheduled
Flag which tells whether the cleaner has a still unprocessed job scheduled with the daemon service. If this flag istrue, calls toserviceNow()won't result in the cleaner being serviced. -
queue
A queue of cache entries that need to be cleaned. -
shrink
private volatile boolean shrinkFlag which tells whether the cleaner should try to shrink the cache the next time it wakes up. -
cacheManager
The cache manager owning this cleaner.
-
-
Constructor Details
-
BackgroundCleaner
BackgroundCleaner(ConcurrentCache cache, DaemonService daemon, int queueSize) Create a background cleaner instance and subscribe it to a daemon service.- Parameters:
cache- the cache manager that owns the cleanerdaemon- the daemon service which perfoms the workqueueSize- the maximum number of entries to keep in the queue (must be greater than 0)
-
-
Method Details
-
scheduleClean
Try to schedule a clean operation in the background cleaner.- Parameters:
entry- the entry that needs to be cleaned- Returns:
trueif the entry has been scheduled for clean,falseif the background cleaner can't clean the entry (its queue is full)
-
scheduleShrink
void scheduleShrink()Request that the cleaner tries to shrink the cache the next time it wakes up. -
requestService
private void requestService()Notify the daemon service that the cleaner needs to be serviced. -
unsubscribe
void unsubscribe()Stop subscribing to the daemon service. -
performWork
Clean the first entry in the queue. If there is more work, re-request service from the daemon service.- Specified by:
performWorkin interfaceServiceable- Parameters:
context- ignored- Returns:
- status for the performed work (normally
Serviceable.DONE) - Throws:
StandardException- ifCacheable.clean()fails
-
serviceASAP
public boolean serviceASAP()Indicate that we want to be serviced ASAP.- Specified by:
serviceASAPin interfaceServiceable- Returns:
true
-
serviceImmediately
public boolean serviceImmediately()Indicate that we don't want the work to happen immediately in the user thread.- Specified by:
serviceImmediatelyin interfaceServiceable- Returns:
false
-