Mercurial > hg > blitz_condensed
view src/org/dancres/blitz/entry/CleanerImpl.java @ 0:3dc0c5604566
Initial checkin of blitz 2.0 fcs - no installer yet.
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 21 Mar 2009 11:00:06 +0000 |
parents | |
children |
line wrap: on
line source
package org.dancres.blitz.entry; import java.io.IOException; import org.dancres.blitz.arc.CacheBlockDescriptor; import org.dancres.blitz.lease.ReapFilter; import org.dancres.blitz.oid.OID; /** Responsible for taking each ID passed, attempting to load the specified sleeve, checking with ReapFilters and then deleting sleeve if appropriate. Note, Storage is expected to pass OID's to us whilst we pass EntrySleeveImpls to our ReapFilter. */ public class CleanerImpl implements EntryReaper { private SleeveCache theCache; private ReapFilter theFilter; /** * @param aCache the cache to request sleeves from for OIDs * passed in by Storage * @param aFilter the filter to check with before performing deletion. */ CleanerImpl(SleeveCache aCache, ReapFilter aFilter) { theCache = aCache; theFilter = aFilter; } public void clean(TupleLocator aLocator) throws IOException { /** Accept TupleLocator from Storage Attempt load to cache Check with theFilter Mark deleted (if filter says okay) Release CBD */ long myCurrentTime = System.currentTimeMillis(); long myPurged = 0; while (aLocator.fetchNext()) { OID myOID = aLocator.getOID(); CacheBlockDescriptor myCBD = theCache.load(myOID); if (myCBD != null) { EntrySleeveImpl mySleeve = (EntrySleeveImpl) myCBD.getContent(); /* If you expect a particular EntrySleeve to be cleaned and it's not happening, uncomment these to provide some hints System.err.println("Has expired: " + mySleeve.hasExpired(myCurrentTime)); System.err.println("Has deleted: " + mySleeve.getState().test(SleeveState.DELETED)); System.err.println("Filtered: " + theFilter.filter(mySleeve)); */ if ((mySleeve.hasExpired(myCurrentTime)) && (! mySleeve.getState().test(SleeveState.DELETED)) && (! theFilter.filter(mySleeve))) { /* System.err.println("Lease delete:" + mySleeve.getUid()); */ mySleeve.getState().set(SleeveState.DELETED); mySleeve.markDirty(); theCache.getCounters().didPurge(); ++myPurged; } myCBD.release(); } } EntryStorage.theLogger.info("Reaper purged " + theCache + " " + myPurged); } }