jakarta-jcs-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From asm...@apache.org
Subject 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/
Date Wed, 03 Jun 2009 21:31:03 GMT
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="ASmuts@apache.org">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



---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org


Mime
View raw message