svn commit: r781588 - in /jakarta/jcs/trunk: src/java/org/apache/jcs/auxiliary/disk/block/ src/java/org/apache/jcs/auxiliary/disk/indexed/ src/java/org/apache/jcs/auxiliary/disk/jdbc/ src/test-conf/ src/test/org/apache/jcs/auxiliary/remote/server/ xdocs/
[email protected] Wed, 03 Jun 2009 21:31:03 -0000
| Newsgroups | gmane.comp.jakarta.turbine.jcs.devel |
|---|---|
| Message-ID | <[email protected]> |
Author: asmuts
Date: Wed Jun 3 21:31:03 2009
New Revision: 781588
URL: http://svn.apache.org/viewvc?rev=781588&view=rev
Log:
Added a clearDiskOnStartup configuration option for the IndexedDisk Cache.
Modified:
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
jakarta/jcs/trunk/src/test-conf/TestRemoteCacheClientServer.ccf
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerStartupUtil.java
jakarta/jcs/trunk/xdocs/IndexedDiskCacheProperties.xml
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java?rev=781588&r1=781587&r2=781588&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDiskCache.java Wed Jun 3 21:31:03 2009
@@ -183,14 +183,14 @@
Object data = this.dataFile.read( (int[]) entry.getValue() );
if ( data == null )
{
- throw new Exception( "Couldn't find data for key [" + entry.getKey() + "]" );
+ throw new Exception( logCacheName + "Couldn't find data for key [" + entry.getKey() + "]" );
}
}
alright = true;
}
catch ( Exception e )
{
- log.warn( "Problem verifying disk. Message [" + e.getMessage() + "]" );
+ log.warn( logCacheName + "Problem verifying disk. Message [" + e.getMessage() + "]" );
alright = false;
}
return alright;
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCache.java?rev=781588&r1=781587&r2=781588&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCache.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCache.java Wed Jun 3 21:31:03 2009
@@ -20,6 +20,7 @@
*/
import java.io.File;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.Serializable;
import java.util.ArrayList;
@@ -154,81 +155,28 @@
* Constructor for the DiskCache object.
* <p>
* @param cattr
- * @param elementSerializer used if supplied, the super's super will not set a null
+ * @param elementSerializer used if supplied, the super's super will not set a null
*/
public IndexedDiskCache( IndexedDiskCacheAttributes cattr, IElementSerializer elementSerializer )
{
super( cattr );
+
setElementSerializer( elementSerializer );
- String rootDirName = cattr.getDiskPath();
+ this.cattr = cattr;
this.maxKeySize = cattr.getMaxKeySize();
-
this.isRealTimeOptimizationEnabled = cattr.getOptimizeAtRemoveCount() > 0;
this.isShutdownOptimizationEnabled = cattr.isOptimizeOnShutdown();
-
- this.cattr = cattr;
-
this.logCacheName = "Region [" + getCacheName() + "] ";
this.fileName = getCacheName();
- this.rafDir = new File( rootDirName );
- this.rafDir.mkdirs();
-
- if ( log.isInfoEnabled() )
- {
- log.info( logCacheName + "Cache file root directory: " + rootDirName );
- }
-
try
{
- this.dataFile = new IndexedDisk( new File( rafDir, fileName + ".data" ), getElementSerializer() );
+ initializeFileSystem( cattr );
- this.keyFile = new IndexedDisk( new File( rafDir, fileName + ".key" ), getElementSerializer() );
+ initializeKeysAndData( cattr );
- // If the key file has contents, try to initialize the keys
- // from it. In no keys are loaded reset the data file.
-
- if ( keyFile.length() > 0 )
- {
- loadKeys();
-
- if ( keyHash.size() == 0 )
- {
- dataFile.reset();
- }
- else
- {
- boolean isOk = checkKeyDataConsistency( false );
- if ( !isOk )
- {
- keyHash.clear();
- keyFile.reset();
- dataFile.reset();
- log.warn( logCacheName + "Corruption detected. Reset data and keys files." );
- }
- else
- {
- startupSize = keyHash.size();
- }
- }
- }
-
- // Otherwise start with a new empty map for the keys, and reset
- // the data file if it has contents.
-
- else
- {
- initKeyMap();
-
- if ( dataFile.length() > 0 )
- {
- dataFile.reset();
- }
- }
-
- // create the recyclebin
- initRecycleBin();
+ initializeRecycleBin();
// Initialization finished successfully, so set alive to true.
alive = true;
@@ -239,8 +187,8 @@
}
catch ( Exception e )
{
- log.error( logCacheName + "Failure initializing for fileName: " + fileName + " and root directory: "
- + rootDirName, e );
+ log.error( logCacheName + "Failure initializing for fileName: " + fileName + " and directory: "
+ + this.rafDir.getAbsolutePath(), e );
}
// TODO: Should we improve detection of whether or not the file should be optimized.
@@ -252,6 +200,111 @@
}
/**
+ * Tries to create the root directory if it does not already exist.
+ * <p>
+ * @param cattr
+ */
+ private void initializeFileSystem( IndexedDiskCacheAttributes cattr )
+ {
+ String rootDirName = cattr.getDiskPath();
+ this.rafDir = new File( rootDirName );
+ boolean createdDirectories = this.rafDir.mkdirs();
+ if ( log.isInfoEnabled() )
+ {
+ log.info( logCacheName + "Cache file root directory: " + rootDirName );
+ log.info( logCacheName + "Created root directory: " + createdDirectories );
+ }
+ }
+
+ /**
+ * Creates the key and data disk caches.
+ * <p>
+ * Loads any keys if they are present and ClearDiskOnStartup is false.
+ * <p>
+ * @param cattr
+ * @throws FileNotFoundException
+ * @throws IOException
+ * @throws InterruptedException
+ */
+ private void initializeKeysAndData( IndexedDiskCacheAttributes cattr )
+ throws FileNotFoundException, IOException, InterruptedException
+ {
+ this.dataFile = new IndexedDisk( new File( rafDir, fileName + ".data" ), getElementSerializer() );
+
+ this.keyFile = new IndexedDisk( new File( rafDir, fileName + ".key" ), getElementSerializer() );
+
+ if ( cattr.isClearDiskOnStartup() )
+ {
+ if ( log.isInfoEnabled() )
+ {
+ log.info( logCacheName + "ClearDiskOnStartup is set to true. Ingnoring any persisted data." );
+ }
+ initializeEmptyStore();
+ }
+ else if ( keyFile.length() > 0 )
+ {
+ // If the key file has contents, try to initialize the keys
+ // from it. In no keys are loaded reset the data file.
+ initializeStoreFromPersistedData();
+ }
+ else
+ {
+ // Otherwise start with a new empty map for the keys, and reset
+ // the data file if it has contents.
+ initializeEmptyStore();
+ }
+ }
+
+ /**
+ * Initializes an empty disk cache.
+ * <p>
+ * @throws IOException
+ */
+ private void initializeEmptyStore()
+ throws IOException
+ {
+ initializeKeyMap();
+
+ if ( dataFile.length() > 0 )
+ {
+ dataFile.reset();
+ }
+ }
+
+ /**
+ * Loads any persisted data and checks for consistency. If there is a consistency issue, the
+ * files are cleared.
+ * <p>
+ * @throws InterruptedException
+ * @throws IOException
+ */
+ private void initializeStoreFromPersistedData()
+ throws InterruptedException, IOException
+ {
+ loadKeys();
+
+ if ( keyHash.size() == 0 )
+ {
+ dataFile.reset();
+ }
+ else
+ {
+ boolean isOk = checkKeyDataConsistency( false );
+ if ( !isOk )
+ {
+ keyHash.clear();
+ keyFile.reset();
+ dataFile.reset();
+ log.warn( logCacheName + "Corruption detected. Reseting data and keys files." );
+ }
+ else
+ {
+ startupSize = keyHash.size();
+ }
+ }
+ }
+
+ /**
* Loads the keys from the .key file. The keys are stored in a HashMap on disk. This is
* converted into a LRUMap.
* <p>
@@ -270,7 +323,7 @@
try
{
// create a key map to use.
- initKeyMap();
+ initializeKeyMap();
HashMap keys = (HashMap) keyFile.readObject( new IndexedDiskElementDescriptor( 0, (int) keyFile.length()
- IndexedDisk.RECORD_HEADER ) );
@@ -307,7 +360,7 @@
}
/**
- * Check for minimal consitency between the keys and the datafile. Makes sure no starting
+ * Check for minimal consistency between the keys and the datafile. Makes sure no starting
* positions in the keys exceed the file length.
* <p>
* The caller should take the appropriate action if the keys and data are not consistent.
@@ -405,9 +458,9 @@
{
try
{
- if ( log.isDebugEnabled() )
+ if ( log.isInfoEnabled() )
{
- log.debug( logCacheName + "Saving keys to: " + fileName + ", key count: " + keyHash.size() );
+ log.info( logCacheName + "Saving keys to: " + fileName + ", key count: " + keyHash.size() );
}
keyFile.reset();
@@ -420,9 +473,9 @@
keyFile.writeObject( keys, 0 );
}
- if ( log.isDebugEnabled() )
+ if ( log.isInfoEnabled() )
{
- log.debug( logCacheName + "Finished saving keys." );
+ log.info( logCacheName + "Finished saving keys." );
}
}
catch ( Exception e )
@@ -933,9 +986,9 @@
keyFile = new IndexedDisk( new File( rafDir, fileName + ".key" ), getElementSerializer() );
- initRecycleBin();
+ initializeRecycleBin();
- initKeyMap();
+ initializeKeyMap();
}
catch ( Exception e )
{
@@ -951,7 +1004,7 @@
* If the maxKeySize is < 0, use 5000, no way to have an unlimted recycle bin right now, or one
* less than the mazKeySize.
*/
- private void initRecycleBin()
+ private void initializeRecycleBin()
{
int recycleBinSize = cattr.getMaxRecycleBinSize() >= 0 ? cattr.getMaxRecycleBinSize() : 0;
recycle = new SortedPreferentialArray( recycleBinSize );
@@ -964,7 +1017,7 @@
/**
* Create the map for keys that contain the index position on disk.
*/
- private void initKeyMap()
+ private void initializeKeyMap()
{
keyHash = null;
if ( maxKeySize >= 0 )
@@ -1233,7 +1286,7 @@
// RESTORE NORMAL OPERATION
removeCount = 0;
bytesFree = 0;
- initRecycleBin();
+ initializeRecycleBin();
queuedPutList.clear();
queueInput = false;
// turn recycle back on.
@@ -1251,9 +1304,9 @@
}
/**
- * Defragments the file inplace by compacting out the free space (i.e., moving records forward).
- * If there were no gaps the resulting file would be the same size as the previous file. This
- * must be supplied an ordered defragList.
+ * Defragments the file in place by compacting out the free space (i.e., moving records
+ * forward). If there were no gaps the resulting file would be the same size as the previous
+ * file. This must be supplied an ordered defragList.
* <p>
* @param defragList sorted list of descriptors for optimization
* @param startingPos the start position in the file
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java?rev=781588&r1=781587&r2=781588&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCacheAttributes.java Wed Jun 3 21:31:03 2009
@@ -41,8 +41,7 @@
private static final int DEFAULT_maxRecycleBinSize = 5000;
/**
- * Cannot be larger than the max size. If max is less than 0, this will be
- * 5000
+ * Cannot be larger than the max size. If max is less than 0, this will be 5000
*/
private int maxRecycleBinSize = DEFAULT_maxRecycleBinSize;
@@ -55,6 +54,12 @@
/** Should we optimize on shutdown. */
private boolean optimizeOnShutdown = DEFAULT_OPTIMIZE_ON_SHUTDOWN;
+ /** Should we clear the disk on startup. */
+ public static final boolean DEFAULT_CLEAR_DISK_ON_STARTUP = false;
+
+ /** Should we clear the disk on startup. If true the congtents of disk are cleared. */
+ private boolean clearDiskOnStartup = DEFAULT_CLEAR_DISK_ON_STARTUP;
+
/**
* Constructor for the DiskCacheAttributes object
*/
@@ -76,8 +81,7 @@
/**
* Sets the maxKeySize attribute of the DiskCacheAttributes object
* <p>
- * @param maxKeySize
- * The new maxKeySize value
+ * @param maxKeySize The new maxKeySize value
*/
public void setMaxKeySize( int maxKeySize )
{
@@ -88,8 +92,7 @@
}
/**
- * Gets the optimizeAtRemoveCount attribute of the DiskCacheAttributes
- * object
+ * Gets the optimizeAtRemoveCount attribute of the DiskCacheAttributes object
* <p>
* @return The optimizeAtRemoveCount value
*/
@@ -99,12 +102,10 @@
}
/**
- * Sets the optimizeAtRemoveCount attribute of the DiskCacheAttributes
- * object This number determines how often the disk cache should run real
- * time optimizations.
+ * Sets the optimizeAtRemoveCount attribute of the DiskCacheAttributes object This number
+ * determines how often the disk cache should run real time optimizations.
* <p>
- * @param cnt
- * The new optimizeAtRemoveCount value
+ * @param cnt The new optimizeAtRemoveCount value
*/
public void setOptimizeAtRemoveCount( int cnt )
{
@@ -112,14 +113,12 @@
}
/**
- * This cannot be larger than the maxKeySize. It wouldn't hurt anything, but
- * it makes the config necessary. The recycle bin entry willbe at least as
- * large as a key.
+ * This cannot be larger than the maxKeySize. It wouldn't hurt anything, but it makes the config
+ * necessary. The recycle bin entry willbe at least as large as a key.
* <p>
* If the maxKeySize is -1 this will be set tot he default, which is 5000.
* <p>
- * @param maxRecycleBinSize
- * The maxRecycleBinSize to set.
+ * @param maxRecycleBinSize The maxRecycleBinSize to set.
*/
public void setMaxRecycleBinSize( int maxRecycleBinSize )
{
@@ -151,6 +150,22 @@
}
/**
+ * @param clearDiskOnStartup the clearDiskOnStartup to set
+ */
+ public void setClearDiskOnStartup( boolean clearDiskOnStartup )
+ {
+ this.clearDiskOnStartup = clearDiskOnStartup;
+ }
+
+ /**
+ * @return the clearDiskOnStartup
+ */
+ public boolean isClearDiskOnStartup()
+ {
+ return clearDiskOnStartup;
+ }
+
+ /**
* Returns a copy of the attributes.
* <p>
* @return AuxiliaryCacheAttributes
@@ -184,7 +199,7 @@
str.append( "\n optimizeAtRemoveCount = " + optimizeAtRemoveCount );
str.append( "\n shutdownSpoolTimeLimit = " + shutdownSpoolTimeLimit );
str.append( "\n optimizeOnShutdown = " + optimizeOnShutdown );
+ str.append( "\n clearDiskOnStartup = " + clearDiskOnStartup );
return str.toString();
}
-
}
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java?rev=781588&r1=781587&r2=781588&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/jdbc/JDBCDiskCache.java Wed Jun 3 21:31:03 2009
@@ -253,25 +253,7 @@
return;
}
- boolean exists = false;
-
- // First do a query to determine if the element already exists
- if ( this.getJdbcDiskCacheAttributes().isTestBeforeInsert() )
- {
- exists = doesElementExist( ce );
- }
-
- // If it doesn't exist, insert it, otherwise update
- if ( !exists )
- {
- exists = insertRow( ce, con, element );
- }
-
- // update if it exists.
- if ( exists )
- {
- updateRow( ce, con, element );
- }
+ insertOrUpdate( ce, con, element );
}
finally
{
@@ -296,6 +278,38 @@
}
/**
+ * If test before insert it true, we check to see if the element exists. If the element exists
+ * we will update. Otherwise, we try inserting. If this fails because the item exists, we will
+ * update.
+ * <p>
+ * @param ce
+ * @param con
+ * @param element
+ */
+ private void insertOrUpdate( ICacheElement ce, Connection con, byte[] element )
+ {
+ boolean exists = false;
+
+ // First do a query to determine if the element already exists
+ if ( this.getJdbcDiskCacheAttributes().isTestBeforeInsert() )
+ {
+ exists = doesElementExist( ce );
+ }
+
+ // If it doesn't exist, insert it, otherwise update
+ if ( !exists )
+ {
+ exists = insertRow( ce, con, element );
+ }
+
+ // update if it exists.
+ if ( exists )
+ {
+ updateRow( ce, con, element );
+ }
+ }
+
+ /**
* This inserts a new row in the database.
* <p>
* @param ce
@@ -773,7 +787,6 @@
log.error( "Problem closing statement.", e1 );
}
}
-
}
catch ( Exception e )
{
Modified: jakarta/jcs/trunk/src/test-conf/TestRemoteCacheClientServer.ccf
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test-conf/TestRemoteCacheClientServer.ccf?rev=781588&r1=781587&r2=781588&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test-conf/TestRemoteCacheClientServer.ccf (original)
+++ jakarta/jcs/trunk/src/test-conf/TestRemoteCacheClientServer.ccf Wed Jun 3 21:31:03 2009
@@ -21,7 +21,7 @@
registry.port=1102
# client callback port.
-remote.cache.service.port=1103
+remote.cache.service.port=1301
remote.cache.rmiSocketFactoryTimeoutMillis=12345
# cluster setting
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerStartupUtil.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerStartupUtil.java?rev=781588&r1=781587&r2=781588&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerStartupUtil.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/remote/server/RemoteCacheServerStartupUtil.java Wed Jun 3 21:31:03 2009
@@ -119,7 +119,6 @@
{
log.error( "Problem starting remote cache server.", e );
}
-
catch ( Throwable t )
{
log.error( "Problem starting remote cache server.", t );
@@ -132,5 +131,4 @@
return RemoteCacheServerFactory.getRemoteCacheServer();
}
-
}
Modified: jakarta/jcs/trunk/xdocs/IndexedDiskCacheProperties.xml
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/xdocs/IndexedDiskCacheProperties.xml?rev=781588&r1=781587&r2=781588&view=diff
==============================================================================
--- jakarta/jcs/trunk/xdocs/IndexedDiskCacheProperties.xml (original)
+++ jakarta/jcs/trunk/xdocs/IndexedDiskCacheProperties.xml Wed Jun 3 21:31:03 2009
@@ -1,37 +1,27 @@
<?xml version="1.0"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-
+ <!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to you under the Apache License, Version
+ 2.0 (the "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0 Unless required by
+ applicable law or agreed to in writing, software distributed under the
+ License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
+ CONDITIONS OF ANY KIND, either express or implied. See the License for
+ the specific language governing permissions and limitations under the
+ License.
+ -->
<document>
<properties>
<title>Indexed Disk Cache Configuration</title>
<author email="[email protected]">Aaron Smuts</author>
</properties>
-
<body>
<section name="Indexed Disk Auxiliary Cache Configuration">
-
- <p>
- The following properties apply to the Indexed Disk Cache
- plugin.
+ <p> The following properties apply to the Indexed Disk Cache plugin.
</p>
-
<subsection name="Indexed Disk Configuration Properties">
<table>
<tr>
@@ -42,75 +32,64 @@
</tr>
<tr>
<td>DiskPath</td>
- <td>
- The directory where the disk cache should
- write its files.
+ <td> The directory where the disk cache should write its files.
</td>
<td>Y</td>
<td>n/a</td>
</tr>
<tr>
<td>MaxPurgatorySize</td>
- <td>
- The maximum number of items allowed in the
- queue of items to be written to disk.
- </td>
+ <td> The maximum number of items allowed in the queue of items to
+ be written to disk.</td>
<td>N</td>
<td>5000</td>
</tr>
<tr>
<td>MaxKeySize</td>
- <td>
- The maximum number of keys that the indexed
- disk cache can have. Since the keys are
- stored in memory, you may want to limit this
- number to something reasonable. The default
- is a bit small.
+ <td> The maximum number of keys that the indexed disk cache can
+ have. Since the keys are stored in memory, you may want to limit
+ this number to something reasonable. The default is a bit small.
</td>
<td>N</td>
<td>5000</td>
</tr>
<tr>
<td>OptimizeAtRemoveCount</td>
- <td>
- At how many removes should the cache try to
- defragment the data file. Since we recycle
- empty spots, defragmentation is usually not
- needed. To prevent the cache from
- defragmenting the data file, you can set
- this to -1. This is the default value.
+ <td> At how many removes should the cache try to defragment the
+ data file. Since we recycle empty spots, defragmentation is
+ usually not needed. To prevent the cache from defragmenting the
+ data file, you can set this to -1. This is the default value.
</td>
<td>N</td>
<td>-1</td>
</tr>
<tr>
<td>OptimizeOnShutdown</td>
- <td>
- By default the Indexed Disk Cache will
- optimize on shutdown if the free data size
- is greater than 0. If you want to prevent
- this behavior, you can set this parameter to
- false.
- </td>
+ <td> By default the Indexed Disk Cache will optimize on shutdown
+ if the free data size is greater than 0. If you want to prevent
+ this behavior, you can set this parameter to false.</td>
<td>N</td>
<td>true</td>
</tr>
<tr>
+ <td>ClearDiskOnStartup</td>
+ <td> By default the Indexed Disk Cache will use items found on
+ disk on startup. If you set this value to try, the old key and
+ data files will be cleared.</td>
+ <td>N</td>
+ <td>false</td>
+ </tr>
+ <tr>
<td>MaxRecycleBinSize</td>
- <td>
- The maximum number of empty spots the cache
- will keep track of. The smallest are removed
- when the maximum size is reached. Keeping
- track of empty spots on disk allows us to
- reuse spots, thereby keeping the file from
- growing unncessarily.
- </td>
+ <td> The maximum number of empty spots the cache will keep track
+ of. The smallest are removed when the maximum size is reached.
+ Keeping track of empty spots on disk allows us to reuse spots,
+ thereby keeping the file from growing unncessarily.</td>
<td>N</td>
<td>5000</td>
</tr>
</table>
</subsection>
-
<subsection name="Example Configuration">
<source>
<![CDATA[
@@ -121,13 +100,12 @@
jcs.auxiliary.DC.attributes.MaxKeySize=10000
jcs.auxiliary.DC.attributes.OptimizeAtRemoveCount=300000
jcs.auxiliary.DC.attributes.OptimizeOnShutdown=true
+jcs.auxiliary.DC.attributes.ClearDiskOnStartup=false
jcs.auxiliary.DC.attributes.MaxRecycleBinSize=7500
]]>
</source>
</subsection>
-
<subsection name="Indexed Disk Event Queue Configuration">
-
<table>
<tr>
<th>Property</th>
@@ -137,41 +115,29 @@
</tr>
<tr>
<td>EventQueueType</td>
- <td>
- This should be either SINGLE or POOLED. By
- default the single style pool is used. The
- single style pool uses a single thread per
- event queue. That thread is killed whenever
- the queue is inactive for 30 seconds. Since
- the disk cache uses an event queue for every
- region, if you have many regions and they
- are all active, you will be using many
- threads. To limit the number of threads, you
- can configure the disk cache to use the
- pooled event queue. Using more threads than
- regions will not add any benefit for the
- indexed disk cache, since only one thread
- can read or write at a time for a single
- region.
- </td>
+ <td> This should be either SINGLE or POOLED. By default the single
+ style pool is used. The single style pool uses a single thread
+ per event queue. That thread is killed whenever the queue is
+ inactive for 30 seconds. Since the disk cache uses an event queue
+ for every region, if you have many regions and they are all
+ active, you will be using many threads. To limit the number of
+ threads, you can configure the disk cache to use the pooled event
+ queue. Using more threads than regions will not add any benefit
+ for the indexed disk cache, since only one thread can read or
+ write at a time for a single region.</td>
<td>N</td>
<td>SINGLE</td>
</tr>
<tr>
<td>EventQueuePoolName</td>
- <td>
- This is the name of the pool to use. It is
- required if you choose the POOLED event
- queue type, otherwise it is ignored.
- </td>
+ <td> This is the name of the pool to use. It is required if you
+ choose the POOLED event queue type, otherwise it is ignored.</td>
<td>Y</td>
<td>n/a</td>
</tr>
</table>
</subsection>
-
- <subsection
- name="Example Configuration Using Thread Pool">
+ <subsection name="Example Configuration Using Thread Pool">
<source>
<![CDATA[
jcs.auxiliary.DC=org.apache.jcs.auxiliary.disk.indexed.IndexedDiskCacheFactory
@@ -196,8 +162,6 @@
]]>
</source>
</subsection>
-
-
</section>
</body>
-</document>
+</document>
\ No newline at end of file