Author: asmuts Date: Wed Aug 27 12:44:33 2008 New Revision: 689591 URL: http://svn.apache.org/viewvc?rev=689591&view=rev Log: https://issues.apache.org/jira/browse/JCS-44
Made the spool chunk size configurable. Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/event/ElementEventQueue.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupAttrName.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupId.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/mru/MRUMemoryCache.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/shrinking/ShrinkerThread.java jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/util/MemoryElementDescriptor.java jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java jakarta/jcs/trunk/xdocs/changes.xml Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/CompositeCacheAttributes.java Wed Aug 27 12:44:33 2008 @@ -31,28 +31,43 @@ public class CompositeCacheAttributes implements ICompositeCacheAttributes, Cloneable { + /** Don't change */ private static final long serialVersionUID = 6754049978134196787L; + /** default lateral switch */ private static final boolean DEFAULT_USE_LATERAL = true; + /** default remote switch */ private static final boolean DEFAULT_USE_REMOTE = true; + /** default disk switch */ private static final boolean DEFAULT_USE_DISK = true; + /** default shrinker setting */ private static final boolean DEFAULT_USE_SHRINKER = false; + /** default max objects value */ private static final int DEFAULT_MAX_OBJECTS = 100; + /** default */ private static final int DEFAULT_MAX_MEMORY_IDLE_TIME_SECONDS = 60 * 120; + /** default interval to run the shrinker */ private static final int DEFAULT_SHRINKER_INTERVAL_SECONDS = 30; + /** default */ private static final int DEFAULT_MAX_SPOOL_PER_RUN = -1; + /** default */ private static final String DEFAULT_MEMORY_CACHE_NAME = "org.apache.jcs.engine.memory.lru.LRUMemoryCache"; + /** Default number to send to disk at a time when memory fills. */ + private static final int DEFAULT_CHUNK_SIZE = 2; + + /** allow lateral caches */ private boolean useLateral = DEFAULT_USE_LATERAL; + /** allow remote caches */ private boolean useRemote = DEFAULT_USE_REMOTE; /** Whether we should use a disk cache if it is configured. */ @@ -79,8 +94,12 @@ /** The name of the memory cache implementation class. */ private String memoryCacheName; + /** Set via DISK_USAGE_PATTERN_NAME */ private short diskUsagePattern = DISK_USAGE_PATTERN_SWAP; + /** How many to spool to disk at a time. */ + private int spoolChunkSize = DEFAULT_CHUNK_SIZE; + /** * Constructor for the CompositeCacheAttributes object */ @@ -331,6 +350,26 @@ } /** + * Number to send to disk at at time when memory is full. + * <p> + * @return int + */ + public int getSpoolChunkSize() + { + return spoolChunkSize; + } + + /** + * Number to send to disk at a time. + * <p> + * @param spoolChunkSize + */ + public void setSpoolChunkSize( int spoolChunkSize ) + { + this.spoolChunkSize = spoolChunkSize; + } + + /** * @return Returns the diskUsagePattern. */ public short getDiskUsagePattern() @@ -341,7 +380,7 @@ /** * Description of the Method * <p> - * @return + * @return ICompositeCacheAttributes a copy */ public ICompositeCacheAttributes copy() { @@ -373,6 +412,7 @@ dump.append( ", maxObjs = " ).append( maxObjs ); dump.append( ", maxSpoolPerRun = " ).append( maxSpoolPerRun ); dump.append( ", diskUsagePattern = " ).append( diskUsagePattern ); + dump.append( ", spoolChunkSize = " ).append( spoolChunkSize ); dump.append( " ]" ); return dump.toString(); Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/behavior/ICompositeCacheAttributes.java Wed Aug 27 12:44:33 2008 @@ -226,4 +226,18 @@ * @return Returns the diskUsagePattern. */ public short getDiskUsagePattern(); + + /** + * Number to send to disk at at time when memory is full. + * <p> + * @return int + */ + public int getSpoolChunkSize(); + + /** + * Number to send to disk at a time. + * <p> + * @param spoolChunkSize + */ + public void setSpoolChunkSize( int spoolChunkSize ); } Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCache.java Wed Aug 27 12:44:33 2008 @@ -965,7 +965,6 @@ * <p> * @param key * @return true is it was removed - * @throws IOException * @see org.apache.jcs.engine.behavior.ICache#remove(java.io.Serializable) */ public boolean remove( Serializable key ) Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheConfigurator.java Wed Aug 27 12:44:33 2008 @@ -50,24 +50,31 @@ */ public class CompositeCacheConfigurator { + /** The logger */ private final static Log log = LogFactory.getLog( CompositeCacheConfigurator.class ); + /** default region prefix */ final static String DEFAULT_REGION = "jcs.default"; + /** normal region prefix */ final static String REGION_PREFIX = "jcs.region."; + /** system region prefix. might not be used */ final static String SYSTEM_REGION_PREFIX = "jcs.system."; + /** auxiliary prefix */ final static String AUXILIARY_PREFIX = "jcs.auxiliary."; /** .attributes */ final static String ATTRIBUTE_PREFIX = ".attributes"; + /** .cacheattributes */ final static String CACHE_ATTRIBUTE_PREFIX = ".cacheattributes"; + /** .elementattributes */ final static String ELEMENT_ATTRIBUTE_PREFIX = ".elementattributes"; - /** Can't operate on the interface. */ + /** Can't operate on the interface. */ private CompositeCacheManager compositeCacheManager; /** @@ -365,11 +372,11 @@ } /** - * Get an compositecacheattributes for the listed region. + * Get an ICompositeCacheAttributes for the listed region. *<p> * @param props * @param regName - * @return + * @return ICompositeCacheAttributes */ protected ICompositeCacheAttributes parseCompositeCacheAttributes( Properties props, String regName ) { @@ -549,7 +556,7 @@ auxAttr.setCacheName( regName ); String auxPrefix = AUXILIARY_PREFIX + auxName; - + // CONFIGURE THE EVENT LOGGER ICacheEventLogger cacheEventLogger = AuxiliaryCacheConfigurator.parseCacheEventLogger( props, auxPrefix ); @@ -561,7 +568,7 @@ // need to make sure the manager already has the cache // before the auxiliary is created. auxCache = auxFac.createCache( auxAttr, compositeCacheManager, cacheEventLogger, elementSerializer ); - + return auxCache; } } Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/CompositeCacheManager.java Wed Aug 27 12:44:33 2008 @@ -61,8 +61,10 @@ public class CompositeCacheManager implements IRemoteCacheConstants, Serializable, ICompositeCacheManager, IShutdownObservable { + /** Don't change */ private static final long serialVersionUID = 7598584393134401756L; + /** The logger */ private final static Log log = LogFactory.getLog( CompositeCacheManager.class ); /** Caches managed by this cache manager */ @@ -95,10 +97,13 @@ /** The Singleton Instance */ protected static CompositeCacheManager instance; + /** The prefix of relevant system properties */ private static final String SYSTEM_PROPERTY_KEY_PREFIX = "jcs"; + /** Should we use system property substitutions. */ private static final boolean DEFAULT_USE_SYSTEM_PROPERTIES = true; + /** Those waiting for notification of a shutdown. */ private Set shutdownObservers = new HashSet(); /** Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/event/ElementEventQueue.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/event/ElementEventQueue.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/event/ElementEventQueue.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/event/ElementEventQueue.java Wed Aug 27 12:44:33 2008 @@ -212,10 +212,13 @@ // /////////////////////////// Inner classes ///////////////////////////// + /** A node in the queue. These are chained forming a singly linked list */ private static class Node { + /** The next node. */ Node next = null; + /** The event to run */ ElementEventQueue.AbstractElementEventRunner event = null; } Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupAttrName.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupAttrName.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupAttrName.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupAttrName.java Wed Aug 27 12:44:33 2008 @@ -27,6 +27,7 @@ public class GroupAttrName implements Serializable { + /** Don't change */ private static final long serialVersionUID = 1586079686300744198L; /** Description of the Field */ @@ -35,6 +36,7 @@ /** the name of the attribute */ public final Object attrName; + /** Cached toString value */ private String toString; /** Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupId.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupId.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupId.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/control/group/GroupId.java Wed Aug 27 12:44:33 2008 @@ -37,10 +37,12 @@ /** the name of the region. */ public final String cacheName; + /** Cached toString value. */ private String toString; /** * Constructor for the GroupId object + * <p> * @param cacheName * @param groupName */ @@ -60,7 +62,7 @@ } /** - * @param obj + * @param obj * @return cacheName.equals( g.cacheName ) && groupName.equals( g.groupName ); */ public boolean equals( Object obj ) Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java Wed Aug 27 12:44:33 2008 @@ -59,9 +59,6 @@ /** log instance */ private final static Log log = LogFactory.getLog( AbstractMemoryCache.class ); - /** default chunking size */ - private static final int DEFAULT_CHUNK_SIZE = 2; - /** The region name. This defines a namespace of sorts. */ protected String cacheName; @@ -80,8 +77,8 @@ /** status */ protected int status; - /** How many to spool at a time. TODO make configurable */ - protected int chunkSize = DEFAULT_CHUNK_SIZE; + /** How many to spool at a time. */ + protected int chunkSize; /** The background memory shrinker, one for all regions. */ private static ClockDaemon shrinkerDaemon; @@ -103,7 +100,8 @@ this.cacheName = hub.getCacheName(); this.cattr = hub.getCacheAttributes(); this.cache = hub; - + + chunkSize = cattr.getSpoolChunkSize(); status = CacheConstants.STATUS_ALIVE; if ( cattr.getUseMemoryShrinker() ) @@ -342,8 +340,6 @@ /** * Allows us to set the daemon status on the clockdaemon - * <p> - * @author aaronsm */ class MyThreadFactory implements ThreadFactory Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/mru/MRUMemoryCache.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/mru/MRUMemoryCache.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/mru/MRUMemoryCache.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/mru/MRUMemoryCache.java Wed Aug 27 12:44:33 2008 @@ -50,14 +50,19 @@ public class MRUMemoryCache extends AbstractMemoryCache { + /** Don't change */ private static final long serialVersionUID = 5013101678192336129L; + /** The logger */ private final static Log log = LogFactory.getLog( MRUMemoryCache.class ); + /** Simple stat. Number of hits. */ private int hitCnt = 0; + /** Number of misses */ private int missCnt = 0; + /** Number of puts */ private int putCnt = 0; /** Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/shrinking/ShrinkerThread.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/shrinking/ShrinkerThread.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/shrinking/ShrinkerThread.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/shrinking/ShrinkerThread.java Wed Aug 27 12:44:33 2008 @@ -44,6 +44,7 @@ public class ShrinkerThread implements Runnable { + /** The logger */ private final static Log log = LogFactory.getLog( ShrinkerThread.class ); /** The MemoryCache instance which this shrinker is watching */ @@ -55,11 +56,12 @@ /** Maximum number of items to spool per run. Default is -1, or no limit. */ private int maxSpoolPerRun; + /** Should we limit the number spooled per run. If so, the maxSpoolPerRun will be used. */ private boolean spoolLimit = false; /** * Constructor for the ShrinkerThread object. - * + * <p> * @param cache * The MemoryCache which the new shrinker should watch. */ Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/util/MemoryElementDescriptor.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/util/MemoryElementDescriptor.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/util/MemoryElementDescriptor.java (original) +++ jakarta/jcs/trunk/src/java/org/apache/jcs/engine/memory/util/MemoryElementDescriptor.java Wed Aug 27 12:44:33 2008 @@ -28,7 +28,7 @@ public class MemoryElementDescriptor extends DoubleLinkedListNode { - + /** Don't change */ private static final long serialVersionUID = -1905161209035522460L; /** The CacheElement wrapped by this descriptor */ @@ -36,7 +36,7 @@ /** * Constructor for the MemoryElementDescriptor object - * + * <p> * @param ce */ public MemoryElementDescriptor( ICacheElement ce ) Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java (original) +++ jakarta/jcs/trunk/src/test/org/apache/jcs/engine/control/CompositeCacheConfiguratorUnitTest.java Wed Aug 27 12:44:33 2008 @@ -28,7 +28,7 @@ String auxPrefix = "jcs.auxiliary." + auxName; String auxiliaryClassName = MockAuxiliaryCacheFactory.class.getCanonicalName(); String eventLoggerClassName = MockCacheEventLogger.class.getCanonicalName(); - String auxiliaryAttributeClassName = MockAuxiliaryCacheAttributes.class.getCanonicalName(); + String auxiliaryAttributeClassName = MockAuxiliaryCacheAttributes.class.getCanonicalName(); Properties props = new Properties(); props.put( auxPrefix, auxiliaryClassName ); @@ -36,7 +36,7 @@ props.put( auxPrefix + AuxiliaryCacheConfigurator.CACHE_EVENT_LOGGER_PREFIX, eventLoggerClassName ); System.out.print( props ); - + CompositeCacheManager manager = CompositeCacheManager.getUnconfiguredInstance(); CompositeCacheConfigurator configurator = new CompositeCacheConfigurator( manager ); @@ -51,4 +51,27 @@ assertNotNull( "Should have an auxcache.", result ); assertNotNull( "Should have an event logger.", result.cacheEventLogger ); } + + /** + * Verify that we can parse the spool chunk size + */ + public void testParseSpoolChunkSize_Normal() + { + // SETUP + String regionName = "MyRegion"; + int chunkSize = 5; + + Properties props = new Properties(); + props.put( "jcs.default", "" ); + props.put( "jcs.default.cacheattributes.SpoolChunkSize", String.valueOf( chunkSize ) ); + + CompositeCacheManager manager = CompositeCacheManager.getUnconfiguredInstance(); + + // DO WORK + manager.configure( props ); + + // VERIFY + CompositeCache cache = manager.getCache( regionName ); + assertEquals( "Wrong chunkSize", cache.getCacheAttributes().getSpoolChunkSize(), chunkSize ); + } } Modified: jakarta/jcs/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/xdocs/changes.xml?rev=689591&r1=689590&r2=689591&view=diff ============================================================================== --- jakarta/jcs/trunk/xdocs/changes.xml (original) +++ jakarta/jcs/trunk/xdocs/changes.xml Wed Aug 27 12:44:33 2008 @@ -23,8 +23,8 @@ </release> <release version="1.3.2.0" date="in SVN"> <action dev="asmuts" type="update"> Added eventLogging to major - auxiliaries and to the auxiliary factory interface. This allows you to - time and monitor the internal working of the cache.</action> + auxiliaries and to the auxiliary factory interface. This allows you + to time and monitor the internal working of the cache.</action> <action dev="asmuts" type="update"> Added the ability to inject custom serializers into auxiliary caches.</action> <action dev="asmuts" type="fix" issue="JCS-40" due-to="Niall Gallagher"> Added a @@ -32,6 +32,8 @@ and the remote cache.</action> <action dev="asmuts" type="fix" issue="JCS-38" due-to="Timothy Cronin"> Added getSource to IElementEvent interface.</action> + <action dev="asmuts" type="update" issue="JCS-44" due-to="Maxim Gordienko"> Made + spool chunk size configurable.</action> </release> <release version="1.3.1.0" date="in SVN"> <action dev="asmuts" type="update"> Added getMultiple() method to --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]