Author: asmuts
Date: Wed Aug 16 13:59:26 2006
New Revision: 432032
URL: http://svn.apache.org/viewvc?rev=432032&view=rev
Log:
Fixed JCS-1
Recyle bin was returning the last element even if it was smaller.
I added tests and updated the changes file.
I started a new sub.sub version for this and the previous fix JCS-5
Modified:
jakarta/jcs/trunk/project.xml
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/indexed/IndexedDiskCache.java
jakarta/jcs/trunk/src/java/org/apache/jcs/utils/struct/SortedPreferentialArray.java
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
jakarta/jcs/trunk/src/test/org/apache/jcs/utils/struct/SortedPrefArrayUnitTest.java
jakarta/jcs/trunk/xdocs/RegionProperties.xml
jakarta/jcs/trunk/xdocs/changes.xml
Modified: jakarta/jcs/trunk/project.xml
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/project.xml?rev=432032&r1=432031&r2=432032&view=diff
==============================================================================
--- jakarta/jcs/trunk/project.xml (original)
+++ jakarta/jcs/trunk/project.xml Wed Aug 16 13:59:26 2006
@@ -5,7 +5,7 @@
<pomVersion>3</pomVersion>
<name>JCS</name>
<id>jcs</id>
- <currentVersion>1.2.7.8</currentVersion>
+ <currentVersion>1.2.7.9</currentVersion>
<organization>
<name>Apache Software Foundation</name>
<url>http://jakarta.apache.org/</url>
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=432032&r1=432031&r2=432032&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 Aug 16 13:59:26 2006
@@ -386,7 +386,6 @@
recycleCnt++;
if ( log.isDebugEnabled() )
{
-
log.debug( "using recycled ded " + ded.pos + "
rep.len = " + rep.len + " ded.len = "
+ ded.len );
}
Modified:
jakarta/jcs/trunk/src/java/org/apache/jcs/utils/struct/SortedPreferentialArray.java
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/utils/struct/SortedPreferentialArray.java?rev=432032&r1=432031&r2=432032&view=diff
==============================================================================
---
jakarta/jcs/trunk/src/java/org/apache/jcs/utils/struct/SortedPreferentialArray.java
(original)
+++
jakarta/jcs/trunk/src/java/org/apache/jcs/utils/struct/SortedPreferentialArray.java
Wed Aug 16 13:59:26 2006
@@ -1,28 +1,24 @@
package org.apache.jcs.utils.struct;
/*
- * Copyright 2001-2004 The Apache Software Foundation. Licensed 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.
+ * Copyright 2001-2004 The Apache Software Foundation. Licensed 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.
*/
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
- * This maintains a sorted array with a preferential replacement policy when
- * full.
+ * This maintains a sorted array with a preferential replacement policy when
full.
* <p>
* Insertion time is n, search is log(n)
* <p>
- * Clients must manage thread safety on previous version. I synchronized the
- * public methods to add easy thread safety. I synchronized all public methods
- * that make modifications.
+ * Clients must manage thread safety on previous version. I synchronized the
public methods to add
+ * easy thread safety. I synchronized all public methods that make
modifications.
*/
public class SortedPreferentialArray
{
@@ -42,8 +38,7 @@
/**
* Consruct the array with the maximum size.
* <p>
- * @param maxSize
- * int
+ * @param maxSize int
*/
public SortedPreferentialArray( int maxSize )
{
@@ -52,12 +47,10 @@
}
/**
- * If the array is full this will remove the smallest if preferLarge==true
- * and if obj is bigger, or the largest if preferLarge=false and obj is
- * smaller than the largest.
+ * If the array is full this will remove the smallest if preferLarge==true
and if obj is bigger,
+ * or the largest if preferLarge=false and obj is smaller than the largest.
* <p>
- * @param obj
- * Object
+ * @param obj Object
*/
public synchronized void add( Comparable obj )
{
@@ -125,17 +118,16 @@
}
/**
- * Insert looks for the nearest largest. It then determines which way to
- * shuffle depending on the preference.
+ * Insert looks for the nearest largest. It then determines which way to
shuffle depending on
+ * the preference.
* <p>
- * @param obj
- * Comparable
+ * @param obj Comparable
*/
private void insert( Comparable obj )
{
try
{
- int nLar = findNearestLargerOrEqualPosition( obj );
+ int nLar = findNearestLargerEqualOrLastPosition( obj );
if ( log.isDebugEnabled() )
{
log.debug( "nLar = " + nLar + " obj = " + obj );
@@ -249,8 +241,7 @@
/**
* Determines whether the preference is for large or small.
* <p>
- * @param pref
- * boolean
+ * @param pref boolean
*/
public synchronized void setPreferLarge( boolean pref )
{
@@ -260,8 +251,7 @@
/**
* Returns and removes the nearer larger or equal object from the aray.
* <p>
- * @param obj
- * Comparable
+ * @param obj Comparable
* @return Comparable, null if arg is null or none was found.
*/
public synchronized Comparable takeNearestLargerOrEqual( Comparable obj )
@@ -313,11 +303,10 @@
}
/**
- * This determines the position in the array that is occupied by an object
- * that is larger or equal to the argument. If none exists, -1 is returned.
+ * This determines the position in the array that is occupied by an object
that is larger or
+ * equal to the argument. If none exists, -1 is returned.
* <p>
- * @param obj
- * Object
+ * @param obj Object
* @return Object
*/
private int findNearestOccupiedLargerOrEqualPosition( Comparable obj )
@@ -329,7 +318,8 @@
}
// this gives us an insert position.
- int pos = findNearestLargerOrEqualPosition( obj );
+ int pos = findNearestLargerEqualOrLastPosition( obj );
+
// see if the previous will do to handle the empty insert spot position
if ( pos == curSize )
{ // && curSize < maxSize ) {
@@ -343,36 +333,42 @@
pos = -1;
}
}
+ else
+ {
+ // the find nearest, returns the last, since it is used by
insertion.
+ if ( obj.compareTo( array[pos] ) > 0 )
+ {
+ return -1;
+ }
+ }
+
return pos;
}
/**
- * This method determines the position where an insert should take place
for
- * a given object. With some additional checking, this can also be used to
- * find an object matching or greater than the argument.
+ * This method determines the position where an insert should take place
for a given object.
+ * With some additional checking, this can also be used to find an object
matching or greater
+ * than the argument.
* <p>
- * If the array is not full and the current object is larger than all the
- * rest the first open slot at the end will be returned.
+ * If the array is not full and the current object is larger than all the
rest the first open
+ * slot at the end will be returned.
* <p>
- * If the object is larger than the largest and it is full, it will return
- * the last position.
+ * NOTE: If the object is larger than the largest and it is full, it will
return the last position.
* <p>
* If the array is empty, the first spot is returned.
* <p>
- * If the object is smaller than all the rests, the first position is
- * returned. The caller must decide what to do given the preference.
+ * If the object is smaller than all the rests, the first position is
returned. The caller must
+ * decide what to do given the preference.
* <p>
- * Returns the position of the object nearest to or equal to the larger
- * object.
+ * Returns the position of the object nearest to or equal to the larger
object.
* <p>
* If you want to find the takePosition, you have to calculate it.
- * findNearestOccupiedLargerOrEqualPosition will calculate this for you
+ * findNearestOccupiedLargerOrEqualPosition will calculate this for you.
* <p>
- * @param obj
- * Comparable
+ * @param obj Comparable
* @return int
*/
- private int findNearestLargerOrEqualPosition( Comparable obj )
+ private int findNearestLargerEqualOrLastPosition( Comparable obj )
{
// do nothing if a null was passed in
if ( obj == null )
@@ -441,9 +437,8 @@
}
else
{
- // the obj is less than the largest, so we know that the
- // last
- // item is larger
+ // the obj is less than or equal to the largest, so we
know that the
+ // last item is larger or equal
greaterPos = curSize - 1;
}
}
@@ -548,11 +543,10 @@
}
/**
- * Removes the item from the array at the specified position. The remaining
- * items to the right are shifted left.
+ * Removes the item from the array at the specified position. The
remaining items to the right
+ * are shifted left.
* <p>
- * @param position
- * int
+ * @param position int
* @throw IndexOutOfBoundsException if position is out of range.
*/
private void remove( int position )
Modified:
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java?rev=432032&r1=432031&r2=432032&view=diff
==============================================================================
---
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
(original)
+++
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/indexed/IndexDiskCacheUnitTest.java
Wed Aug 16 13:59:26 2006
@@ -9,9 +9,8 @@
/**
* Tests for common functionality.
- *
+ * <p>
* @author Aaron Smuts
- *
*/
public class IndexDiskCacheUnitTest
extends TestCase
@@ -19,7 +18,6 @@
/**
* Simply verify that we can put items in the disk cache and retrieve them.
- *
*/
public void testSimplePutAndGet()
{
@@ -47,13 +45,12 @@
assertNotNull( "Should have recevied an element.", element );
assertEquals( "Element is wrong.", "data:" + i, element.getVal() );
}
-
+
System.out.println( disk.getStats() );
}
/**
* Add some items to the disk cache and then remove them one by one.
- *
*/
public void testRemoveItems()
{
@@ -82,6 +79,83 @@
ICacheElement element = disk.doGet( "key:" + i );
assertNull( "Should not have recevied an element.", element );
}
+ }
+
+ /**
+ * Verify that we don't override the largest item.
+ */
+ public void testRecycleBin()
+ {
+ IndexedDiskCacheAttributes cattr = new IndexedDiskCacheAttributes();
+ cattr.setCacheName( "testRemoveItems" );
+ cattr.setMaxRecycleBinSize( 2 );
+ cattr.setOptimizeAtRemoveCount( 7 );
+ cattr.setMaxKeySize( 5 );
+ cattr.setMaxPurgatorySize( 0 );
+ cattr.setDiskPath( "target/test-sandbox/BreakIndexTest" );
+ IndexedDiskCache disk = new IndexedDiskCache( cattr );
+
+ String[] test = { "a", "bb", "ccc", "dddd", "eeeee", "ffffff",
"ggggggg", "hhhhhhhhh", "iiiiiiiiii" };
+ String[] expect = { null, "bb", "ccc", null, null, "ffffff", null,
"hhhhhhhhh", "iiiiiiiiii" };
+
+ System.out.println( "------------------------- testRecycleBin " );
+
+ for ( int i = 0; i < 6; i++ )
+ {
+ ICacheElement element = new CacheElement( "testRecycleBin", "key:"
+ test[i], test[i] );
+ System.out.println( "About to add " + "key:" + test[i] + " i = " +
i );
+ disk.doUpdate( element );
+ }
+
+ for ( int i = 3; i < 5; i++ )
+ {
+ System.out.println( "About to remove " + "key:" + test[i] + " i =
" + i );
+ disk.remove( "key:" + test[i] );
+ }
+
+ // there was a bug where 7 would try to be put in the empty slot left
by 4's removal, but it
+ // will not fit.
+ for ( int i = 7; i < 9; i++ )
+ {
+ ICacheElement element = new CacheElement( "testRecycleBin", "key:"
+ test[i], test[i] );
+ System.out.println( "About to add " + "key:" + test[i] + " i = " +
i );
+ disk.doUpdate( element );
+ }
+
+ try
+ {
+ for ( int i = 0; i < 9; i++ )
+ {
+ ICacheElement element = disk.get( "key:" + test[i] );
+ if ( element != null )
+ {
+ System.out.println( "element = " + element.getVal() );
+ }
+ else
+ {
+ System.out.println( "null --" + "key:" + test[i] );
+ }
+
+ String expectedValue = expect[i];
+ if ( expectedValue == null )
+ {
+ assertNull( "Expected a null element", element );
+ }
+ else
+ {
+ assertNotNull( "The element for key [" + "key:" + test[i]
+ "] should not be null. i = " + i,
+ element );
+ assertEquals( "Elements contents do not match expected",
element.getVal(), expectedValue );
+ }
+ }
+ }
+ catch ( Exception e )
+ {
+ e.printStackTrace();
+ fail( "Should not get an exception: " + e.toString() );
+ }
+
+ disk.removeAll();
}
}
Modified:
jakarta/jcs/trunk/src/test/org/apache/jcs/utils/struct/SortedPrefArrayUnitTest.java
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/utils/struct/SortedPrefArrayUnitTest.java?rev=432032&r1=432031&r2=432032&view=diff
==============================================================================
---
jakarta/jcs/trunk/src/test/org/apache/jcs/utils/struct/SortedPrefArrayUnitTest.java
(original)
+++
jakarta/jcs/trunk/src/test/org/apache/jcs/utils/struct/SortedPrefArrayUnitTest.java
Wed Aug 16 13:59:26 2006
@@ -1,28 +1,19 @@
package org.apache.jcs.utils.struct;
/*
- * Copyright 2001-2004 The Apache Software Foundation.
- *
- * Licensed 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.
+ * Copyright 2001-2004 The Apache Software Foundation. Licensed 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.
*/
import junit.framework.TestCase;
/**
* Tests the SortedPrefArray used by the recycle bin.
- *
* @author aaronsm
- *
*/
public class SortedPrefArrayUnitTest
extends TestCase
@@ -30,9 +21,7 @@
/**
* Constructor for the TestSimpleLoad object
- *
- * @param testName
- * Description of the Parameter
+ * @param testName Description of the Parameter
*/
public SortedPrefArrayUnitTest( String testName )
{
@@ -41,9 +30,7 @@
/**
* Description of the Method
- *
- * @param args
- * Description of the Parameter
+ * @param args Description of the Parameter
*/
public static void main( String args[] )
{
@@ -52,8 +39,6 @@
}
/**
- *
- *
* @exception Exception
*/
public void testLargePref()
@@ -125,7 +110,6 @@
/**
* Verify that we don't get an error when taking from an empty array.
- *
* @throws Exception
*/
public void testEmptyTake()
@@ -143,7 +127,6 @@
/**
* Verify that we don't get a null pointer if we insert a null.
- *
* @throws Exception
*/
public void testNullInsertion()
@@ -211,7 +194,6 @@
/**
* Verify that we don't get an npe when taking with a null
- *
* @throws Exception
*/
public void testNullTake()
@@ -234,7 +216,6 @@
/**
* Verify that we don't get an npe when taking from an array of only one
- *
* @throws Exception
*/
public void testSingleItemTake()
@@ -261,7 +242,6 @@
/**
* Verify that we don't get an npe when taking from an array of only one
- *
* @throws Exception
*/
public void testSingleItemTakeLarger()
@@ -286,7 +266,6 @@
/**
* Verify that we don't get an npe when taking from an array of none
- *
* @throws Exception
*/
public void testSingleItemTakeLargerEmpty()
@@ -309,7 +288,6 @@
/**
* Test taking the largest item.
- *
* @exception Exception
*/
public void testTakeLargestItem()
@@ -320,16 +298,7 @@
SortedPreferentialArray array = new SortedPreferentialArray( maxSize );
// array.setPreferLarge( false );
array.setPreferLarge( true );
- String[] elem = {
- "01",
- "02",
- "03",
- "04",
- "05",
- "08",
- "07",
- "06",
- "09",};
+ String[] elem = { "01", "02", "03", "04", "05", "08", "07", "06",
"09", };
// put more than the max in a random order
for ( int i = 0; i < elem.length; i++ )
@@ -357,7 +326,7 @@
/**
* Test taking every last item.
- *
+ * <p>
* @exception Exception
*/
public void testTakeEveryLastItem()
@@ -368,16 +337,7 @@
SortedPreferentialArray array = new SortedPreferentialArray( maxSize );
// array.setPreferLarge( false );
array.setPreferLarge( true );
- String[] elem = {
- "01",
- "02",
- "03",
- "04",
- "05",
- "08",
- "07",
- "06",
- "09",};
+ String[] elem = { "01", "02", "03", "04", "05", "08", "07", "06",
"09", };
// put more than the max in a random order
for ( int i = 0; i < elem.length; i++ )
@@ -398,18 +358,46 @@
// this should take 96;
String taken = (String) array.takeNearestLargerOrEqual( "09" );
assertEquals( "Taken is not as expected", "09", taken );
- assertEquals( "Size was not as expected.", ( maxSize - 1 ),
array.size() );
+ assertEquals( "Size was not as expected. " + array.dumpArray(), (
maxSize - 1 ), array.size() );
System.out.println( "testTakeEveryLastItem" + array.dumpArray() );
// take the rest
- // put more than the max in a random order
- for ( int i = elem.length -1; i >= 0; i-- )
+ // take more than the max in a reverse order
+ for ( int i = elem.length - 1; i >= 0; i-- )
{
array.takeNearestLargerOrEqual( elem[i] );
- }
+ }
System.out.println( "testTakeEveryLastItem" + array.dumpArray() );
-
- assertEquals( "There should nothing left.", 0, array.size() );
- }
+
+ assertEquals( "There should nothing left. " + array.dumpArray(), 0,
array.size() );
+ }
+
+ /**
+ * Try taking an item larger than the greatest.
+ */
+ public void testTakeLargerThanGreatest()
+ {
+ int maxSize = 3;
+
+ SortedPreferentialArray array = new SortedPreferentialArray( maxSize );
+ // array.setPreferLarge( false );
+ array.setPreferLarge( true );
+ String[] elem = { "01", "02", "03" };
+
+ // put more than the max in a random order
+ for ( int i = 0; i < elem.length; i++ )
+ {
+ array.add( elem[i] );
+ System.out.println( array.dumpArray() );
+ }
+
+ // DO WORK
+ Comparable taken = array.takeNearestLargerOrEqual( "04" );
+ System.out.println( "testTakeLargerThanGreatest" + array.dumpArray() );
+
+ assertNull( "We should have nothing since the largest element was
smaller than what we asked for. "
+ + " Instead we got " + taken, taken );
+ }
+
}
Modified: jakarta/jcs/trunk/xdocs/RegionProperties.xml
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/xdocs/RegionProperties.xml?rev=432032&r1=432031&r2=432032&view=diff
==============================================================================
--- jakarta/jcs/trunk/xdocs/RegionProperties.xml (original)
+++ jakarta/jcs/trunk/xdocs/RegionProperties.xml Wed Aug 16 13:59:26 2006
@@ -1,166 +1,217 @@
<?xml version="1.0"?>
<document>
- <properties>
- <title>Cache Region Configuration</title>
- <author email="[EMAIL PROTECTED]">Aaron Smuts</author>
- </properties>
-
- <body>
- <section name="Cache Region Configuration">
-
- <p>
- The following properties apply to any cache region. They can be
specified as
- default values and specified on a region by region basis. There are
three types
- of settings: auxiliary, cache, and element. The cache settings define
the memory management for the region.
- The element settings define default element behavior within the region.
- </p>
-
- <subsection name="Region (Auxiliary) Properties">
- <table>
- <tr>
- <th>Property</th>
- <th>Description</th>
- <th>Required</th>
- <th>Default Value</th>
- </tr>
- <tr>
- <td></td>
- <td>
- You can specify the list of auxiliaries that regions can use.
This has no attribute name.
- The list can be empty, otherwise it should be comma delimited.
- </td>
- <td>Y</td>
- <td>n/a</td>
- </tr>
- </table>
- </subsection>
-
- <subsection name="Region (Cache) Properties">
- <table>
- <tr>
- <th>Property</th>
- <th>Description</th>
- <th>Required</th>
- <th>Default Value</th>
- </tr>
- <tr>
- <td>MaxObjects</td>
- <td>
- The maximum number of items allowed in memory.
Eviction of elements
- in excess of this number is determined by the memory
cache. By default
- JCS uses the LRU memory cache.
- </td>
- <td>Y</td>
- <td>n/a</td>
- </tr>
- <tr>
- <td>MemoryCacheName</td>
- <td>
- This property allows you to specify what memory
manager you would like to use.
- You can create your own memory manager by
implementing the org.apache.jcs.engine.memory.MemoryCache interface.
- Alternatively, you can extend the
org.apache.jcs.engine.memory.AbstractMemoryCache class. Several different
- memory caches are available: two LRU implementations,
an LFU, and an adaptive replacement algorithm.
- </td>
- <td>N</td>
- <td>org.apache.jcs.engine.memory.lru.LRUMemoryCache</td>
- </tr>
- <tr>
- <td>UseMemoryShrinker</td>
- <td>
- By default, the memory shrinker is shared by all
regions that use the
- LRU memory cache. The memory shrinker iterates
through the items in
- memory, looking for items that have expired or that
have exceeded their max
- memory idle time.
- </td>
- <td>N</td>
- <td>false</td>
- </tr>
- <tr>
- <td>MaxMemoryIdleTimeSeconds</td>
- <td>
- This is only used if you are using the memory
shrinker. If
- this value is set above -1, then if an item has not
been accessed
- in this number of seconds, it will be spooled to disk
if
- the disk is available. You can register an event
handler on this
- event.
- </td>
- <td>N</td>
- <td>-1</td>
- </tr>
- <tr>
- <td>ShrinkerIntervalSeconds</td>
- <td>
- This specifies how often the shrinker should run, if it has
- been activated. If you set UseMemoryShrinker to false, then
this
- setting has no effect.
- </td>
- <td>N</td>
- <td>60</td>
- </tr>
- </table>
- </subsection>
-
- <subsection name="Region (Element) Properties">
- <table>
- <tr>
- <th>Property</th>
- <th>Description</th>
- <th>Required</th>
- <th>Default Value</th>
- </tr>
- <tr>
- <td>IsEternal</td>
- <td>
- If an element is specified as eternal, then it will
never be subject to
- removal for exceeding its max life.
- </td>
- <td>N</td>
- <td>true</td>
- </tr>
- <tr>
- <td>MaxLifeSeconds</td>
- <td>
- If you specify that elements within a region are not
eternal, then
- you can set the max life seconds. If this is
exceeded the elmenets will
- be removed passively when a client tries to retrieve
them. If you
- are using a memory shrinker, then the items can be
removed actively.
- </td>
- <td>N</td>
- <td>-1</td>
- </tr>
- <tr>
- <td>IsSpool</td>
- <td>
- By default, can elements in this region be sent to a disk cache
- if one is available.
- </td>
- <td>N</td>
- <td>true</td>
- </tr>
- <tr>
- <td>IsRemote</td>
- <td>
- By default, can elements in this region be sent to a lateral
cache
- if one is available.
- </td>
- <td>N</td>
- <td>true</td>
- </tr>
- <tr>
- <td>IsLateral</td>
- <td>
- By default, can elements in this region be sent to a remote cache
- if one is available.
- </td>
- <td>N</td>
- <td>true</td>
- </tr>
- </table>
- </subsection>
-
- <subsection name="Example Configuration">
- <source><![CDATA[
+ <properties>
+ <title>Cache Region Configuration</title>
+ <author email="[EMAIL PROTECTED]">Aaron Smuts</author>
+ </properties>
+
+ <body>
+ <section name="Cache Region Configuration">
+
+ <p>
+ The following properties apply to any cache
region. They
+ can be specified as default values and
specified on a
+ region by region basis. There are three types of
+ settings: auxiliary, cache, and element. The
cache
+ settings define the memory management for the
region.
+ The element settings define default element
behavior
+ within the region.
+ </p>
+
+ <subsection name="Region (Auxiliary) Properties">
+ <table>
+ <tr>
+ <th>Property</th>
+ <th>Description</th>
+ <th>Required</th>
+ <th>Default Value</th>
+ </tr>
+ <tr>
+ <td></td>
+ <td>
+ You can specify the
list of auxiliaries that
+ regions can use. This
has no attribute name.
+ The list can be empty,
otherwise it should
+ be comma delimited.
+ </td>
+ <td>Y</td>
+ <td>n/a</td>
+ </tr>
+ </table>
+ </subsection>
+
+ <subsection name="Region (Cache) Properties">
+ <table>
+ <tr>
+ <th>Property</th>
+ <th>Description</th>
+ <th>Required</th>
+ <th>Default Value</th>
+ </tr>
+ <tr>
+ <td>MaxObjects</td>
+ <td>
+ The maximum number of
items allowed in
+ memory. Eviction of
elements in excess of
+ this number is
determined by the memory
+ cache. By default JCS
uses the LRU memory
+ cache.
+ </td>
+ <td>Y</td>
+ <td>n/a</td>
+ </tr>
+ <tr>
+ <td>MemoryCacheName</td>
+ <td>
+ This property allows
you to specify what
+ memory manager you
would like to use. You
+ can create your own
memory manager by
+ implementing the
+
org.apache.jcs.engine.memory.MemoryCache
+ interface.
Alternatively, you can extend the
+
org.apache.jcs.engine.memory.AbstractMemoryCache
+ class. Several
different memory caches are
+ available: two LRU
implementations, an LFU,
+ and an adaptive
replacement algorithm.
+ </td>
+ <td>N</td>
+ <td>
+
org.apache.jcs.engine.memory.lru.LRUMemoryCache
+ </td>
+ </tr>
+ <tr>
+ <td>UseMemoryShrinker</td>
+ <td>
+ By default, the memory
shrinker is shared by
+ all regions that use
the LRU memory cache.
+ The memory shrinker
iterates through the
+ items in memory,
looking for items that have
+ expired or that have
exceeded their max
+ memory idle time.
+ </td>
+ <td>N</td>
+ <td>false</td>
+ </tr>
+ <tr>
+
<td>MaxMemoryIdleTimeSeconds</td>
+ <td>
+ This is only used if
you are using the
+ memory shrinker. If
this value is set above
+ -1, then if an item has
not been accessed in
+ this number of seconds,
it will be spooled
+ to disk if the disk is
available. You can
+ register an event
handler on this event.
+ </td>
+ <td>N</td>
+ <td>-1</td>
+ </tr>
+ <tr>
+ <td>ShrinkerIntervalSeconds</td>
+ <td>
+ This specifies how
often the shrinker should
+ run, if it has been
activated. If you set
+ UseMemoryShrinker to
false, then this
+ setting has no effect.
+ </td>
+ <td>N</td>
+ <td>60</td>
+ </tr>
+ <tr>
+ <td>DiskUsagePattern</td>
+ <td>
+ SWAP is the default.
Under the swap pattern,
+ data is only put to
disk when the max memory
+ size is reached. Since
items puled from disk
+ are put into memory, if
the memory cache is
+ full and you get an
item off disk, the lest
+ recently used item will
be spooled to disk.
+ If you have a low
memory hit ration, you end
+ up thrashing.
+
+ The UPDATE usage
pattern allows items to go
+ to disk on an update.
It disables the swap.
+ This allows you to
persist all items to
+ disk. If you are using
the JDBC disk cache
+ for instance, you can
put all the items on
+ disk while using the
memory cache for
+ performance, and not
worry about lossing
+ data from a system
crash or improper
+ shutdown. Also, since
all items are on disk,
+ there is no need to
swap to disk. This
+ prevents the
possibility of thrashing.
+ </td>
+ <td>N</td>
+ <td>SWAP</td>
+ </tr>
+ </table>
+ </subsection>
+
+ <subsection name="Region (Element) Properties">
+ <table>
+ <tr>
+ <th>Property</th>
+ <th>Description</th>
+ <th>Required</th>
+ <th>Default Value</th>
+ </tr>
+ <tr>
+ <td>IsEternal</td>
+ <td>
+ If an element is
specified as eternal, then
+ it will never be
subject to removal for
+ exceeding its max life.
+ </td>
+ <td>N</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>MaxLifeSeconds</td>
+ <td>
+ If you specify that
elements within a region
+ are not eternal, then
you can set the max
+ life seconds. If this
is exceeded the
+ elmenets will be
removed passively when a
+ client tries to
retrieve them. If you are
+ using a memory
shrinker, then the items can
+ be removed actively.
+ </td>
+ <td>N</td>
+ <td>-1</td>
+ </tr>
+ <tr>
+ <td>IsSpool</td>
+ <td>
+ By default, can
elements in this region be
+ sent to a disk cache if
one is available.
+ </td>
+ <td>N</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>IsRemote</td>
+ <td>
+ By default, can
elements in this region be
+ sent to a lateral cache
if one is available.
+ </td>
+ <td>N</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>IsLateral</td>
+ <td>
+ By default, can
elements in this region be
+ sent to a remote cache
if one is available.
+ </td>
+ <td>N</td>
+ <td>true</td>
+ </tr>
+ </table>
+ </subsection>
+
+ <subsection name="Example Configuration">
+ <source>
+ <![CDATA[
jcs.default=
jcs.default.cacheattributes=org.apache.jcs.engine.CompositeCacheAttributes
jcs.default.cacheattributes.MaxObjects=200001
@@ -190,9 +241,10 @@
jcs.region.testCache1.elementattributes.IsSpool=true
jcs.region.testCache1.elementattributes.IsLateral=true
jcs.region.testCache1.elementattributes.IsRemote=true
- ]]></source>
- </subsection>
-
- </section>
- </body>
-</document>
\ No newline at end of file
+ ]]>
+ </source>
+ </subsection>
+
+ </section>
+ </body>
+</document>
\ No newline at end of file
Modified: jakarta/jcs/trunk/xdocs/changes.xml
URL:
http://svn.apache.org/viewvc/jakarta/jcs/trunk/xdocs/changes.xml?rev=432032&r1=432031&r2=432032&view=diff
==============================================================================
--- jakarta/jcs/trunk/xdocs/changes.xml (original)
+++ jakarta/jcs/trunk/xdocs/changes.xml Wed Aug 16 13:59:26 2006
@@ -5,11 +5,31 @@
</properties>
<body>
+ <release version="1.2.7.9" date="in CVS">
+ <action dev="asmuts" type="update" issue="JCS-5">
+ Added the ability to send all items to disk or
to use
+ the disk merely as a swap. This is done by
setting the
+ DiskUsagePattern on the cache attributes for a
region.
+ </action>
+ <action dev="asmuts" type="fix" issue="JCS-1">
+ Fixed last element too small recycle bin bug.
+ </action>
+ </release>
+
+ <release version="1.2.7.8" date="in CVS">
+ <action dev="asmuts" type="update">
+ Added the ability to schedule optimizations for
the
+ MySQL disk cache. It can also recover from
optimization
+ failure and repair the table. It's been tested
and is
+ running in a production environment.
+ </action>
+ </release>
+
<release version="1.2.7.7" date="in CVS">
<action dev="asmuts" type="fix"
- due-to="Brian Crow @noteworthyms.com">
- Fixed the array index out of bounds exception
in the Sorted
- Preferential Array.
+ due-to="Brian Crow @noteworthyms.com">
+ Fixed the array index out of bounds exception
in the
+ Sorted Preferential Array.
</action>
</release>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]