You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jcs-dev@jakarta.apache.org by as...@apache.org on 2005/06/11 02:35:27 UTC
cvs commit: jakarta-turbine-jcs/src/java/org/apache/jcs/engine/memory AbstractMemoryCache.java
asmuts 2005/06/10 17:35:27
Modified: src/java/org/apache/jcs/auxiliary/disk
AbstractDiskCacheAttributes.java
AbstractDiskCache.java
src/java/org/apache/jcs/engine/behavior
ICacheEventQueue.java
src/java/org/apache/jcs/auxiliary/disk/behavior
IDiskCacheAttributes.java
src/java/org/apache/jcs/auxiliary/disk/indexed
IndexedDiskCacheAttributes.java
src/java/org/apache/jcs/engine/control CompositeCache.java
src/java/org/apache/jcs/auxiliary/disk/jisp
JISPCacheAttributes.java
src/java/org/apache/jcs/engine/memory
AbstractMemoryCache.java
Log:
Working on disk cache shutdown bug. Items in memory were not making it to disk.
The disk cache was killing the event queue and then optimizing the file and storing the keys.
I changed it so the disk cache will wait a configuratble number of seconds for the event queue to
empty out before shutting down. (we still need a way to make the event queue stop accepting input during this process.)
There is a new disk cache config param
jcs.auxiliary.DC.attributes.ShutdownSpoolTimeLimit=60
The default is 60 seconds. This is a per region setting. It will wait this long for each region if it takes that long.
. . .I want to add a setting for disk duplication of memory, so that all memory items will be backed on disk.
Revision Changes Path
1.4 +21 -0 jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/AbstractDiskCacheAttributes.java
Index: AbstractDiskCacheAttributes.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/AbstractDiskCacheAttributes.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AbstractDiskCacheAttributes.java 4 Jun 2005 02:01:56 -0000 1.3
+++ AbstractDiskCacheAttributes.java 11 Jun 2005 00:35:27 -0000 1.4
@@ -37,6 +37,11 @@
/** default to 5000 */
protected int maxPurgatorySize = MAX_PURGATORY_SIZE_DEFUALT;
+ private static final int DEFAULT_shutdownSpoolTimeLimit = 60;
+
+ protected int shutdownSpoolTimeLimit = DEFAULT_shutdownSpoolTimeLimit;
+
+
/*
* (non-Javadoc)
*
@@ -77,6 +82,22 @@
this.maxPurgatorySize = maxPurgatorySize;
}
+ /* (non-Javadoc)
+ * @see org.apache.jcs.auxiliary.disk.behavior.IDiskCacheAttributes#getShutdownSpoolTimeLimit()
+ */
+ public int getShutdownSpoolTimeLimit()
+ {
+ return this.shutdownSpoolTimeLimit;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.jcs.auxiliary.disk.behavior.IDiskCacheAttributes#setShutdownSpoolTimeLimit(int)
+ */
+ public void setShutdownSpoolTimeLimit( int shutdownSpoolTimeLimit )
+ {
+ this.shutdownSpoolTimeLimit = shutdownSpoolTimeLimit;
+ }
+
/**
* Description of the Method
*
1.32 +52 -2 jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/AbstractDiskCache.java
Index: AbstractDiskCache.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/AbstractDiskCache.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -r1.31 -r1.32
--- AbstractDiskCache.java 4 Jun 2005 02:01:56 -0000 1.31
+++ AbstractDiskCache.java 11 Jun 2005 00:35:27 -0000 1.32
@@ -328,14 +328,64 @@
/**
* Adds a dispose request to the disk cache.
+ * <p>
+ * Disposal proceeds in several steps.
+ * <ul>
+ * <li> 1. Prior to this call the Composite cache dumped the memory
+ * into the disk cache. If it is large then we need to wait for
+ * the event queue to finish.
+ * <li> 2. Wait until the event queue is empty of until the configured ShutdownSpoolTimeLimit
+ * is reached.
+ * <li> 3. Call doDispose on the concrete impl.
+ * </ul>
+ *
*/
public final void dispose()
{
+ Runnable disR = new Runnable()
+ {
+ public void run()
+ {
+ boolean keepGoing = true;
+ long total = 0;
+ long interval = 100;
+ while ( keepGoing )
+ {
+ keepGoing = !cacheEventQueue.isEmpty();
+ try
+ {
+ Thread.sleep( interval );
+ total += interval;
+ //log.info( "total = " + total );
+ }
+ catch ( InterruptedException e )
+ {
+ break;
+ }
+ }
+ log.info( "No longer waiting for event queue to finish: " + cacheEventQueue.getStatistics() );
+ }
+ };
+ Thread t = new Thread( disR );
+ t.start();
+ // wait up to 60 seconds for dispose and then quit if not done.
+ try
+ {
+ t.join( this.dcattr.getShutdownSpoolTimeLimit() * 1000 );
+ }
+ catch ( InterruptedException ex )
+ {
+ log.error( ex );
+ }
+
+ log.info( "In dispose, destroying event queue." );
// This stops the processor thread.
cacheEventQueue.destroy();
-
+
+
// Invoke any implementation specific disposal code
+ // need to handle the disposal first.
doDispose();
alive = false;
1.10 +7 -0 jakarta-turbine-jcs/src/java/org/apache/jcs/engine/behavior/ICacheEventQueue.java
Index: ICacheEventQueue.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/engine/behavior/ICacheEventQueue.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ICacheEventQueue.java 4 Jun 2005 02:01:56 -0000 1.9
+++ ICacheEventQueue.java 11 Jun 2005 00:35:27 -0000 1.10
@@ -106,6 +106,13 @@
public boolean isWorking();
/**
+ * Are there elements in the queue.
+ *
+ * @return true if there are stil elements.
+ */
+ public boolean isEmpty();
+
+ /**
* Returns the historical and statistical data for an event queue cache.
*
* @return
1.3 +20 -0 jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/behavior/IDiskCacheAttributes.java
Index: IDiskCacheAttributes.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/behavior/IDiskCacheAttributes.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- IDiskCacheAttributes.java 4 Jun 2005 02:01:57 -0000 1.2
+++ IDiskCacheAttributes.java 11 Jun 2005 00:35:27 -0000 1.3
@@ -58,5 +58,25 @@
*/
public void setMaxPurgatorySize( int maxPurgatorySize );
+ /**
+ * Get the amount of time in seconds we will wait for elements to
+ * move to disk during shutdown for a particular region.
+ *
+ * @return the time in seconds.
+ */
+ public int getShutdownSpoolTimeLimit();
+
+ /**
+ * Sets the amount of time in seconds we will wait for elements to
+ * move to disk during shutdown for a particular region.
+ * <p>
+ * This is how long we give the event queue to empty.
+ * <p>
+ * The default is 60 seconds.
+ *
+ * @param shutdownSpoolTimeLimit the time in seconds
+ */
+ public void setShutdownSpoolTimeLimit( int shutdownSpoolTimeLimit );
+
}
// end interface
1.16 +9 -7 jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java
Index: IndexedDiskCacheAttributes.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- IndexedDiskCacheAttributes.java 4 Jun 2005 02:01:55 -0000 1.15
+++ IndexedDiskCacheAttributes.java 11 Jun 2005 00:35:27 -0000 1.16
@@ -29,11 +29,12 @@
private static final int DEFAULT_maxKeySize = 5000;
- private static final int DEFAULT_maxRecycleBinSize = 5000;
-
- /** -1 mean no limit. */
+ /** -1 means no limit. */
private int maxKeySize = DEFAULT_maxKeySize;
+
+ private static final int DEFAULT_maxRecycleBinSize = 5000;
+
/**
* Cannot be larger than the max size. If max is less than 0, this will be
* 5000
@@ -42,7 +43,7 @@
// default to -1, i.e., don't optimize until shutdown
private int optimizeAtRemoveCount = -1;
-
+
/**
* Constructor for the DiskCacheAttributes object
*/
@@ -120,9 +121,9 @@
{
return maxRecycleBinSize;
}
-
+
/**
- * Description of the Method
+ * Returns a copy of the attributes.
*
* @return AuxiliaryCacheAttributes
*/
@@ -137,7 +138,7 @@
}
return this;
}
-
+
/**
* Description of the Method
*
@@ -152,6 +153,7 @@
str.append( "\n maxKeySize = " + maxKeySize );
str.append( "\n maxRecycleBinSize = " + maxRecycleBinSize );
str.append( "\n optimizeAtRemoveCount = " + optimizeAtRemoveCount );
+ str.append( "\n shutdownSpoolTimeLimit = " + shutdownSpoolTimeLimit );
return str.toString();
}
1.26 +19 -11 jakarta-turbine-jcs/src/java/org/apache/jcs/engine/control/CompositeCache.java
Index: CompositeCache.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/engine/control/CompositeCache.java,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -r1.25 -r1.26
--- CompositeCache.java 4 Jun 2005 02:01:58 -0000 1.25
+++ CompositeCache.java 11 Jun 2005 00:35:27 -0000 1.26
@@ -877,8 +877,12 @@
{
Iterator itr = memCache.getIterator();
+ log.info( "In dispose, " + this.cacheName + " memCache.size = " + memCache.getSize() );
+
+ int cnt = 0;
while ( itr.hasNext() )
{
+ cnt++;
Map.Entry entry = (Map.Entry) itr.next();
ICacheElement ce = (ICacheElement) entry.getValue();
@@ -896,8 +900,11 @@
log.error( e );
}
}
- }
+ log.info( "In dispose, " + this.cacheName + " put " + cnt + " into auxiliary " + aux );
+
+ }
+
// Dispose of the auxiliary
aux.dispose();
@@ -907,17 +914,18 @@
log.error( "Failure disposing of aux", ex );
}
- try
- {
- memCache.dispose();
- }
- catch ( IOException ex )
- {
- log.error( "Failure disposing of memCache", ex );
- }
-
}
+ log.info( "In dispose, " + this.cacheName + " disposing of memory cache." );
+ try
+ {
+ memCache.dispose();
+ }
+ catch ( IOException ex )
+ {
+ log.error( "Failure disposing of memCache", ex );
+ }
+
log.warn( "Called close for " + cacheName );
}
1.9 +16 -0 jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/jisp/JISPCacheAttributes.java
Index: JISPCacheAttributes.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/auxiliary/disk/jisp/JISPCacheAttributes.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- JISPCacheAttributes.java 4 Jun 2005 02:01:56 -0000 1.8
+++ JISPCacheAttributes.java 11 Jun 2005 00:35:27 -0000 1.9
@@ -58,6 +58,22 @@
return clearOnStart;
}
+ /* (non-Javadoc)
+ * @see org.apache.jcs.auxiliary.disk.behavior.IDiskCacheAttributes#getShutdownSpoolTimeLimit()
+ */
+ public int getShutdownSpoolTimeLimit()
+ {
+ return this.shutdownSpoolTimeLimit;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.jcs.auxiliary.disk.behavior.IDiskCacheAttributes#setShutdownSpoolTimeLimit(int)
+ */
+ public void setShutdownSpoolTimeLimit( int shutdownSpoolTimeLimit )
+ {
+ this.shutdownSpoolTimeLimit = shutdownSpoolTimeLimit;
+ }
+
/** Description of the Method */
public AuxiliaryCacheAttributes copy()
{
1.13 +2 -1 jakarta-turbine-jcs/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java
Index: AbstractMemoryCache.java
===================================================================
RCS file: /home/cvs/jakarta-turbine-jcs/src/java/org/apache/jcs/engine/memory/AbstractMemoryCache.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- AbstractMemoryCache.java 4 Jun 2005 02:01:56 -0000 1.12
+++ AbstractMemoryCache.java 11 Jun 2005 00:35:27 -0000 1.13
@@ -183,6 +183,7 @@
public void dispose()
throws IOException
{
+ log.info( "Memory Cache dispose called. Shutting down shrinker thread if it is running." );
if ( shrinkerDaemon != null )
{
shrinkerDaemon.shutDown();
---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org