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 2009/08/11 19:15:38 UTC
svn commit: r803209 - in /jakarta/jcs/trunk/src:
java/org/apache/jcs/auxiliary/disk/block/BlockDisk.java
test/org/apache/jcs/auxiliary/disk/block/BlockDiskUnitTest.java
Author: asmuts
Date: Tue Aug 11 17:15:38 2009
New Revision: 803209
URL: http://svn.apache.org/viewvc?rev=803209&view=rev
Log:
Fixed bug in block disk cache. It couldn't handle items with more than 127 blocks. Now it can. (Note: for performance reasons, you should try to fit your items in as few blocks as possible.)
Modified:
jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDisk.java
jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/block/BlockDiskUnitTest.java
Modified: jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDisk.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDisk.java?rev=803209&r1=803208&r2=803209&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDisk.java (original)
+++ jakarta/jcs/trunk/src/java/org/apache/jcs/auxiliary/disk/block/BlockDisk.java Tue Aug 11 17:15:38 2009
@@ -177,7 +177,7 @@
int[] blocks = new int[numBlocksNeeded];
// get them from the empty list or take the next one
- for ( short i = 0; i < numBlocksNeeded; i++ )
+ for ( int i = 0; i < numBlocksNeeded; i++ )
{
Integer emptyBlock = (Integer) emptyBlocks.takeFirst();
if ( emptyBlock != null )
@@ -194,7 +194,7 @@
byte[][] chunks = getBlockChunks( data, numBlocksNeeded );
// write the blocks
- for ( byte i = 0; i < numBlocksNeeded; i++ )
+ for ( int i = 0; i < numBlocksNeeded; i++ )
{
int position = calculateByteOffsetForBlock( blocks[i] );
write( position, chunks[i] );
Modified: jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/block/BlockDiskUnitTest.java
URL: http://svn.apache.org/viewvc/jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/block/BlockDiskUnitTest.java?rev=803209&r1=803208&r2=803209&view=diff
==============================================================================
--- jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/block/BlockDiskUnitTest.java (original)
+++ jakarta/jcs/trunk/src/test/org/apache/jcs/auxiliary/disk/block/BlockDiskUnitTest.java Tue Aug 11 17:15:38 2009
@@ -47,15 +47,39 @@
}
/**
+ * Test writing a null object within a single block size.
+ * <p>
+ * @throws Exception
+ */
+ public void testWrite_NullBlockElement()
+ throws Exception
+ {
+ // SETUP
+ String fileName = "testWrite_NullBlockElement";
+ File file = new File( rafDir, fileName + ".data" );
+ file.delete();
+ BlockDisk disk = new BlockDisk( file, new StandardSerializer() );
+
+ // DO WORK
+ int[] blocks = disk.write( null );
+
+ // VERIFY
+ System.out.println( "testWrite_NullBlockElement " + disk );
+ assertEquals( "Wrong number of blocks recorded.", 1, disk.getNumberOfBlocks() );
+ assertEquals( "Wrong number of blocks returned.", 1, blocks.length );
+ assertEquals( "Wrong block returned.", 0, blocks[0] );
+ }
+
+ /**
* Test writing an element within a single block size.
* <p>
* @throws Exception
*/
- public void testWriteSingleBlockElement()
+ public void testWrite_SingleBlockElement()
throws Exception
{
// SETUP
- String fileName = "testWriteSingleBlockElement";
+ String fileName = "testWrite_SingleBlockElement";
File file = new File( rafDir, fileName + ".data" );
file.delete();
BlockDisk disk = new BlockDisk( file, new StandardSerializer() );
@@ -76,11 +100,11 @@
* <p>
* @throws Exception
*/
- public void testWriteAndReadSingleBlockElement()
+ public void testWriteAndRead_SingleBlockElement()
throws Exception
{
// SETUP
- String fileName = "testWriteAndReadSingleBlockElement";
+ String fileName = "testWriteAndRead_SingleBlockElement";
File file = new File( rafDir, fileName + ".data" );
file.delete();
BlockDisk disk = new BlockDisk( file, new StandardSerializer() );
@@ -100,11 +124,11 @@
* <p>
* @throws Exception
*/
- public void testWriteTwoSingleBlockElements()
+ public void testWrite_TwoSingleBlockElements()
throws Exception
{
// SETUP
- String fileName = "testWriteSingleBlockElement";
+ String fileName = "testWrite_TwoSingleBlockElements";
File file = new File( rafDir, fileName + ".data" );
file.delete();
BlockDisk disk = new BlockDisk( file, new StandardSerializer() );
@@ -149,7 +173,7 @@
* <p>
* @throws Exception
*/
- public void testWriteDoubleBlockElement()
+ public void testWrite_DoubleBlockElement()
throws Exception
{
// SETUP
@@ -168,6 +192,33 @@
assertEquals( "Wrong number of blocks returned.", 2, blocks.length );
assertEquals( "Wrong block returned.", 0, blocks[0] );
}
+
+ /**
+ * Test writing an element that takes 128 blocks. There was a byte in a for loop that limited the number to 127. I fixed this.
+ * <p>
+ * @throws Exception
+ */
+ public void testWrite_128BlockElement()
+ throws Exception
+ {
+ // SETUP
+ int numBlocks = 128;
+
+ String fileName = "testWrite_128BlockElement";
+ File file = new File( rafDir, fileName + ".data" );
+ BlockDisk disk = new BlockDisk( file, new StandardSerializer() );
+
+ // DO WORK
+ // byte arrays encur 27 bytes of serialization overhead.
+ int bytes = getBytesForBlocksOfByteArrays( disk.getBlockSizeBytes(), numBlocks );
+ int[] blocks = disk.write( new byte[bytes] );
+
+ // VERIFY
+ System.out.println( "testWriteDoubleBlockElement " + disk );
+ assertEquals( "Wrong number of blocks recorded.", numBlocks, disk.getNumberOfBlocks() );
+ assertEquals( "Wrong number of blocks returned.", numBlocks, blocks.length );
+ assertEquals( "Wrong block returned.", 0, blocks[0] );
+ }
/**
* Test writing and reading elements that do not fit within a single block.
@@ -259,7 +310,7 @@
File file = new File( rafDir, fileName + ".data" );
file.delete();
int blockSizeBytes = 4096;//1024;
- BlockDisk disk = new BlockDisk( file, blockSizeBytes, new StandardSerializer() );
+ BlockDisk disk = new BlockDisk( file, blockSizeBytes, new StandardSerializer() );
String string = "This is my big string ABCDEFGH";
StringBuffer sb = new StringBuffer();
@@ -277,10 +328,10 @@
// VERIFY
System.out.println( string );
System.out.println( result );
- System.out.println( disk );
+ System.out.println( disk );
assertEquals( "Wrong item retured.", string, result );
}
-
+
/**
* Verify that the block disk can handle a big string.
* <p>
@@ -294,18 +345,17 @@
File file = new File( rafDir, fileName + ".data" );
file.delete();
int blockSizeBytes = 47;//4096;//1024;
- BlockDisk disk = new BlockDisk( file, blockSizeBytes, new StandardSerializer() );
+ BlockDisk disk = new BlockDisk( file, blockSizeBytes, new StandardSerializer() );
String string = "abcdefghijklmnopqrstuvwxyz1234567890";
string += string;
string += string;
-
// DO WORK
int[] blocks = disk.write( string );
String result = (String) disk.read( blocks );
// VERIFY
assertEquals( "Wrong item retured.", string, result );
- }
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jcs-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jcs-dev-help@jakarta.apache.org