[Joafip-svn] SF.net SVN: joafip:[3070] trunk
Brought to you by:
luc_peuvrier
|
From: <luc...@us...> - 2012-05-05 03:18:30
|
Revision: 3070
http://joafip.svn.sourceforge.net/joafip/?rev=3070&view=rev
Author: luc_peuvrier
Date: 2012-05-05 03:18:24 +0000 (Sat, 05 May 2012)
Log Message:
-----------
io buffer optimization
Modified Paths:
--------------
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockPageRecord.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileReadWriteCache.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/IFileStorable.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockPageRecord.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockPageRecord.java 2012-05-05 01:59:44 UTC (rev 3069)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockPageRecord.java 2012-05-05 03:18:24 UTC (rev 3070)
@@ -17,7 +17,11 @@
}
@Override
- public byte[] writeToFile() throws HeapException {
+ public void writeToFile() throws HeapException {
+ }
+
+ @Override
+ public byte[] writeToFileGetWrited() throws HeapException {
return null;
}
Modified: trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileReadWriteCache.java
===================================================================
--- trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileReadWriteCache.java 2012-05-05 01:59:44 UTC (rev 3069)
+++ trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileReadWriteCache.java 2012-05-05 03:18:24 UTC (rev 3070)
@@ -245,7 +245,12 @@
@Override
public int readImpl(final byte[] data) throws FileIOException {
- final int length = data.length;
+ return readImpl(data, 0, data.length);
+ }
+
+ @Override
+ protected int readImpl(final byte[] data, final int offset, final int length)
+ throws FileIOException {
int readLength = 0;
byte[] page;
do {
@@ -262,8 +267,8 @@
} else {
copyLength = toRead;
}
- System.arraycopy(page, positionInPage, data, readLength,
- copyLength);
+ System.arraycopy(page, positionInPage, data, readLength
+ + offset, copyLength);
positionInFile += copyLength;
readLength += copyLength;
}
@@ -272,13 +277,6 @@
}
@Override
- protected int readImpl(final byte[] data, final int offset, final int length)
- throws FileIOException {
- // TODO Auto-generated method stub
- return 0;
- }
-
- @Override
public void writeImpl(final byte[] data) throws FileIOException {
writeImpl(data, 0, data.length);
}
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java 2012-05-05 01:59:44 UTC (rev 3069)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java 2012-05-05 03:18:24 UTC (rev 3070)
@@ -67,7 +67,7 @@
protected transient int numberOfByteReadWrote = 0;
/** input output buffer */
- private transient byte[] ioBuffer;
+ private static transient byte[] ioBuffer = new byte[256];
private transient int readInIoBuffer;
@@ -109,27 +109,38 @@
assert !valueChangedToSave : READING_ERASE_VALUE_CHANGE;
fileForStorable.seek(positionInFile);
// crc32 = 0;
- ioBuffer = null;// NOPMD
+ // ioBuffer = null;// NOPMD
unmarshallImpl();
- ioBuffer = null;// NOPMD
+ // ioBuffer = null;// NOPMD
justCreated = false;
}
- public byte[] writeToFile() throws HeapException {
+ public void writeToFile() throws HeapException {
// ASSERTX
assert valueChangedToSave : NO_VALUE_CHANGE_TO_WRITE;
fileForStorable.seek(positionInFile);
// crc32 = 0;
numberOfByteReadWrote = 0;
- ioBuffer = new byte[toMarshallSize()];
+ readInIoBuffer = toMarshallSize();
+ int length = ioBuffer.length;
+ if (readInIoBuffer > length) {
+ do {
+ length <<= 1;
+ } while (readInIoBuffer > length);
+ ioBuffer = Arrays.copyOf(ioBuffer, length);
+ }
marshallImpl();
- fileForStorable.write(ioBuffer);
+ fileForStorable.write(ioBuffer, 0, readInIoBuffer);
valueChangedToSave = false;
- final byte[] result = ioBuffer;
- ioBuffer = null;// NOPMD discard
- return result;
+ // ioBuffer = null;// NOPMD discard
}
+ @Override
+ public byte[] writeToFileGetWrited() throws HeapException {
+ writeToFile();
+ return Arrays.copyOf(ioBuffer, readInIoBuffer);
+ }
+
/**
*
* @return number of byte to marshal
@@ -276,8 +287,14 @@
// }
protected int readFileToIoBuffer(final int size) throws HeapException {
- ioBuffer = new byte[size];
- readInIoBuffer = fileForStorable.read(ioBuffer);
+ int length = ioBuffer.length;
+ if (size > length) {
+ do {
+ length <<= 1;
+ } while (size > length);
+ ioBuffer = new byte[length];
+ }
+ readInIoBuffer = fileForStorable.read(ioBuffer, 0, size);
// bad test because must read when only maximum size is known
// if( readInIoBuffer!=size) {
// throw new
@@ -297,17 +314,29 @@
*/
protected int readFileAppendToIoBuffer(final int newSize)
throws HeapException {
- final int totalRead;
- if (newSize > ioBuffer.length) {
- ioBuffer = Arrays.copyOf(ioBuffer, newSize);
+ // if (newSize > ioBuffer.length) {
+ // ioBuffer = Arrays.copyOf(ioBuffer, newSize);
+ // final int appendSize = newSize - readInIoBuffer;
+ // final int read = fileForStorable.read(ioBuffer,
+ // readInIoBuffer/* offset */, appendSize/* length */);
+ // totalRead = readInIoBuffer + read;
+ // } else {
+ // totalRead = ioBuffer.length;
+ // }
+ if (newSize > readInIoBuffer) {
+ int length = ioBuffer.length;
+ if (newSize > length) {
+ do {
+ length <<= 1;
+ } while (newSize > length);
+ ioBuffer = Arrays.copyOf(ioBuffer, length);
+ }
final int appendSize = newSize - readInIoBuffer;
final int read = fileForStorable.read(ioBuffer,
readInIoBuffer/* offset */, appendSize/* length */);
- totalRead = readInIoBuffer + read;
- } else {
- totalRead = ioBuffer.length;
+ readInIoBuffer += read;
}
- return totalRead;
+ return readInIoBuffer;
}
// /**
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/IFileStorable.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/IFileStorable.java 2012-05-05 01:59:44 UTC (rev 3069)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/IFileStorable.java 2012-05-05 03:18:24 UTC (rev 3070)
@@ -47,8 +47,10 @@
* @return bytes wrote
* @throws HeapException
*/
- byte[] writeToFile() throws HeapException;
+ void writeToFile() throws HeapException;
+ byte[] writeToFileGetWrited() throws HeapException;
+
/**
* read this file storable from file
*
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java 2012-05-05 01:59:44 UTC (rev 3069)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java 2012-05-05 03:18:24 UTC (rev 3070)
@@ -920,7 +920,7 @@
if (toBackupList == null) {
header.writeToFile();
} else {
- final byte[] data = header.writeToFile();
+ final byte[] data = header.writeToFileGetWrited();
toBackupList.add(new ToBackupRecord(header
.getPositionInFile(), data));
}
@@ -940,7 +940,7 @@
if (toBackupList == null) {
heapRecord.writeToFile();
} else {
- final byte[] data = heapRecord.writeToFile();
+ final byte[] data = heapRecord.writeToFileGetWrited();
toBackupList.add(new ToBackupRecord(heapRecord.getPositionInFile(),
data));
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|