joafip-svn Mailing List for java data object persistence in file (Page 9)
Brought to you by:
luc_peuvrier
You can subscribe to this list here.
| 2011 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(4) |
Oct
(102) |
Nov
(52) |
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2012 |
Jan
(4) |
Feb
|
Mar
(14) |
Apr
(116) |
May
(100) |
Jun
(14) |
Jul
|
Aug
|
Sep
(30) |
Oct
|
Nov
(108) |
Dec
(2) |
|
From: <luc...@us...> - 2012-05-09 01:45:03
|
Revision: 3079
http://joafip.svn.sourceforge.net/joafip/?rev=3079&view=rev
Author: luc_peuvrier
Date: 2012-05-09 01:44:57 +0000 (Wed, 09 May 2012)
Log Message:
-----------
todo update
Modified Paths:
--------------
trunk/joafip/doc/_todo.txt
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-09 01:45:03
|
Revision: 3079
http://joafip.svn.sourceforge.net/joafip/?rev=3079&view=rev
Author: luc_peuvrier
Date: 2012-05-09 01:44:57 +0000 (Wed, 09 May 2012)
Log Message:
-----------
todo update
Modified Paths:
--------------
trunk/joafip/doc/_todo.txt
Modified: trunk/joafip/doc/_todo.txt
===================================================================
--- trunk/joafip/doc/_todo.txt 2012-05-08 09:26:36 UTC (rev 3078)
+++ trunk/joafip/doc/_todo.txt 2012-05-09 01:44:57 UTC (rev 3079)
@@ -35,7 +35,8 @@
- static field persistence feature removed because a non sense
- heap file project make able to create a map in file with a comparable key
- new joafip-pmap project, a file persisted tree map
-- heap data manager implemented in btree+
+- heap data manager implemented in btree+ (not use by joafip since HeapFileDataManager speeder)
+- improve speed for file access using mapped byte buffer (+70%)
minor changes:
- added search last in red black tree manager
@@ -90,18 +91,11 @@
currently:
-------------------------------------------------------------------------------------
-btree+ implementation
-- management of leaf page link
- - add to header first leaf page position
- - check link to leaf page to next
- - implement quick iterator
-- consistency check to add
+file input/output stream
+- existing FileOutputStreamNIO
+- create FileOutputStreamMapped to use instead of FileOutputStreamNIO
+- create FileInputStreamNIO and FileInputStreamMapped
-storage in btree+
-- performance tests when use as main store, then add usage option in file persistence builder
-- replace HeapDataFileManager direct use and option for main joafip storage
-- replace internal use of HeapFileDataManager by BtreePlusDataManager
-
changes for garbage management because of autosave
- tests to add
- test for state machine
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-08 09:26:50
|
Revision: 3078
http://joafip.svn.sourceforge.net/joafip/?rev=3078&view=rev
Author: luc_peuvrier
Date: 2012-05-08 09:26:36 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: PMD warning corrections
Modified Paths:
--------------
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CheckRandomList.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CreateRandomList.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlock.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/DataBlockPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/NonTerminalPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockDataBlock.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockLeafPage.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockNonTerminalPage.java
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/MockPageRecordable.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgrTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/CacheMap.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/CacheMap2.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/ToWriteIterator.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/ToWriteIterator2.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirect.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectNio.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileCacheTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMapped2GBLimitedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectNioTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/TestRandomAccessFileCache.java
trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/service/HeapFileDataManager.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapElementManagerWithHeapRecord.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordManage.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordIdentifier.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordKey.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/RecordForTest.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestDataRecordIdentifier.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/TestHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockFileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestDataMgrMemoryLeak.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerBackup.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerImpl.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerRecord.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/BlockDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/DualWrapDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/FileForStorableBridge.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/HeapMemoryDataManagerMock.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/HeapMultiFileDataManager.java
Added Paths:
-----------
trunk/joafip-btreeplus/.pmd
trunk/joafip-btreeplus/.ruleset
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -66,7 +66,7 @@
insertLogFilePath));
// "runtime_perf/toDelete.txt"));
String line;
- while ((line = reader.readLine()) != null) {
+ while ((line = reader.readLine()) != null) {// NOPMD
reader.readLine();// skip one
final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
@@ -92,10 +92,10 @@
count = 0;
reader = new BufferedReader(new FileReader(insertLogFilePath));
// "runtime_perf/toSearch.txt"));
- while (reader.readLine() != null && (line = reader.readLine()) != null) {
+ while (reader.readLine() != null && (line = reader.readLine()) != null) {// NOPMD
final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
- Item item = itemList.get(identifier);
+ final Item item = itemList.get(identifier);
if (item == null) {
throw new FilePersistenceException("must found #" + identifier
+ " because not deleted");
@@ -116,7 +116,7 @@
count = 0;
reader = new BufferedReader(new FileReader(insertLogFilePath));
// "runtime_perf/toDelete.txt"));
- while ((line = reader.readLine()) != null) {
+ while ((line = reader.readLine()) != null) { // NOPMD
reader.readLine();// skip
final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -80,7 +80,7 @@
inputStream));
int count = 0;
String line;
- while ((line = reader.readLine()) != null) {
+ while ((line = reader.readLine()) != null) { // NOPMD
count++;
final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CheckRandomList.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CheckRandomList.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CheckRandomList.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -44,19 +44,19 @@
final BufferedReader reader = new BufferedReader(
new InputStreamReader(inputStream));
String line;
- while ((line = reader.readLine()) != null) {
+ while ((line = reader.readLine()) != null) { // NOPMD
final int identifier = Integer.parseInt(line);
if (!set.add(identifier)) {
- throw new Exception(identifier + " is duplicate");
+ throw new Exception(identifier + " is duplicate");// NOPMD
}
}
reader.close();
if (set.size() != AbstractPerfService.NUMBER_OF_ITEM) {
- throw new Exception(set.size() + " for "
+ throw new Exception(set.size() + " for "// NOPMD
+ AbstractPerfService.NUMBER_OF_ITEM + " expected");
}
} catch (Exception exception) {
- exception.printStackTrace();
+ exception.printStackTrace();// NOPMD
}
}
}
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CreateRandomList.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CreateRandomList.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CreateRandomList.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -36,13 +36,13 @@
*/
public class CreateRandomList {
- public static void main(String[] args) {
+ public static void main(final String[] args) {
try {
final List<Integer> list = new PTreeList<Integer>();
for (int identifier = 0; identifier < AbstractPerfService.NUMBER_OF_ITEM; identifier++) {
list.add(identifier);
}
- PrintWriter allWriter = new PrintWriter(
+ final PrintWriter allWriter = new PrintWriter(
"src/main/resources/all.txt");
PrintWriter writer = new PrintWriter(
"src/main/resources/firstHalf.txt");
@@ -51,7 +51,7 @@
for (count = 0; count < AbstractPerfService.NUMBER_OF_ITEM / 2; count++) {
final int upperBound = list.size();
final int index = random.nextInt(upperBound);
- int identifier = list.remove(index);
+ final int identifier = list.remove(index);
writer.println(identifier);
allWriter.println(identifier);
}
@@ -60,14 +60,14 @@
for (; count < AbstractPerfService.NUMBER_OF_ITEM; count++) {
final int upperBound = list.size();
final int index = random.nextInt(upperBound);
- int identifier = list.remove(index);
+ final int identifier = list.remove(index);
writer.println(identifier);
allWriter.println(identifier);
}
writer.close();
allWriter.close();
} catch (Exception e) {
- e.printStackTrace();
+ e.printStackTrace();// NOPMD
}
}
}
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -54,6 +54,7 @@
private final static JoafipLogger LOGGER = JoafipLogger
.getLogger(DeleterBtreePlus.class);
+ @SuppressWarnings("PMD")
@Override
protected void consistencyCheck() throws HeapException,
FilePersistenceException {
@@ -99,7 +100,7 @@
public static void main(final String[] args) {
try {
- DeleterBtreePlus deleter = new DeleterBtreePlus();
+ final DeleterBtreePlus deleter = new DeleterBtreePlus();
deleter.run();
} catch (final Throwable throwable) {// NOPMD catch all
LOGGER.fatal("error", throwable);
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -13,6 +13,7 @@
private static final JoafipLogger LOGGER = JoafipLogger
.getLogger(InserterBtreePlusIntigrityCheck.class);
+ @SuppressWarnings("PMD")
@Override
protected void consistencyCheck() throws HeapException,
FilePersistenceException {
@@ -29,7 +30,7 @@
public static void main(final String[] args) {
try {
- InserterBtreePlusIntigrityCheck inserter = new InserterBtreePlusIntigrityCheck();
+ final InserterBtreePlusIntigrityCheck inserter = new InserterBtreePlusIntigrityCheck();
inserter.run();
inserter.close();
} catch (final Throwable throwable) {// NOPMD catch all
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -68,7 +68,7 @@
public static void main(final String[] args) {
try {
- SearcherBtreePlus searcher = new SearcherBtreePlus();
+ final SearcherBtreePlus searcher = new SearcherBtreePlus();
searcher.run();
} catch (final Throwable throwable) {// NOPMD catch all
LOGGER.fatal("error", throwable);
Added: trunk/joafip-btreeplus/.pmd
===================================================================
--- trunk/joafip-btreeplus/.pmd (rev 0)
+++ trunk/joafip-btreeplus/.pmd 2012-05-08 09:26:36 UTC (rev 3078)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<pmd>
+ <useProjectRuleSet>true</useProjectRuleSet>
+ <ruleSetFile>../joafip-parent/pmd/.ruleset</ruleSetFile>
+ <includeDerivedFiles>false</includeDerivedFiles>
+ <violationsAsErrors>false</violationsAsErrors>
+</pmd>
Added: trunk/joafip-btreeplus/.ruleset
===================================================================
--- trunk/joafip-btreeplus/.ruleset (rev 0)
+++ trunk/joafip-btreeplus/.ruleset 2012-05-08 09:26:36 UTC (rev 3078)
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<ruleset xmlns="http://pmd.sf.net/ruleset/1.0.0" name="pmd-eclipse" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd" xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd">
+ <description>PMD Plugin preferences rule set</description>
+ <rule ref="rulesets/typeresolution.xml/LooseCoupling"/>
+ <rule ref="rulesets/typeresolution.xml/CloneMethodMustImplementCloneable"/>
+ <rule ref="rulesets/typeresolution.xml/UnusedImports"/>
+ <rule ref="rulesets/typeresolution.xml/SignatureDeclareThrowsException"/>
+ <rule ref="rulesets/basic.xml/EmptyCatchBlock"/>
+ <rule ref="rulesets/basic.xml/EmptyIfStmt"/>
+ <rule ref="rulesets/basic.xml/EmptyWhileStmt"/>
+ <rule ref="rulesets/basic.xml/EmptyTryBlock"/>
+ <rule ref="rulesets/basic.xml/EmptyFinallyBlock"/>
+ <rule ref="rulesets/basic.xml/EmptySwitchStatements"/>
+ <rule ref="rulesets/basic.xml/JumbledIncrementer"/>
+ <rule ref="rulesets/basic.xml/ForLoopShouldBeWhileLoop"/>
+ <rule ref="rulesets/basic.xml/UnnecessaryConversionTemporary"/>
+ <rule ref="rulesets/basic.xml/OverrideBothEqualsAndHashcode"/>
+ <rule ref="rulesets/basic.xml/DoubleCheckedLocking"/>
+ <rule ref="rulesets/basic.xml/ReturnFromFinallyBlock"/>
+ <rule ref="rulesets/basic.xml/EmptySynchronizedBlock"/>
+ <rule ref="rulesets/basic.xml/UnnecessaryReturn"/>
+ <rule ref="rulesets/basic.xml/EmptyStaticInitializer"/>
+ <rule ref="rulesets/basic.xml/UnconditionalIfStatement"/>
+ <rule ref="rulesets/basic.xml/EmptyStatementNotInLoop"/>
+ <rule ref="rulesets/basic.xml/BooleanInstantiation"/>
+ <rule ref="rulesets/basic.xml/UnnecessaryFinalModifier"/>
+ <rule ref="rulesets/basic.xml/CollapsibleIfStatements"/>
+ <rule ref="rulesets/basic.xml/UselessOverridingMethod"/>
+ <rule ref="rulesets/basic.xml/ClassCastExceptionWithToArray"/>
+ <rule ref="rulesets/basic.xml/AvoidDecimalLiteralsInBigDecimalConstructor"/>
+ <rule ref="rulesets/basic.xml/UselessOperationOnImmutable"/>
+ <rule ref="rulesets/basic.xml/MisplacedNullCheck"/>
+ <rule ref="rulesets/basic.xml/UnusedNullCheckInEquals"/>
+ <rule ref="rulesets/basic.xml/AvoidThreadGroup"/>
+ <rule ref="rulesets/basic.xml/BrokenNullCheck"/>
+ <rule ref="rulesets/basic.xml/BigIntegerInstantiation"/>
+ <rule ref="rulesets/basic.xml/AvoidUsingOctalValues"/>
+ <rule ref="rulesets/basic.xml/AvoidUsingHardCodedIP"/>
+ <rule ref="rulesets/basic.xml/CheckResultSet"/>
+ <rule ref="rulesets/basic.xml/AvoidMultipleUnaryOperators"/>
+ <rule ref="rulesets/basic.xml/EmptyInitializer"/>
+ <rule ref="rulesets/braces.xml/IfStmtsMustUseBraces"/>
+ <rule ref="rulesets/braces.xml/WhileLoopsMustUseBraces"/>
+ <rule ref="rulesets/braces.xml/IfElseStmtsMustUseBraces"/>
+ <rule ref="rulesets/braces.xml/ForLoopsMustUseBraces"/>
+ <rule ref="rulesets/unusedcode.xml/UnusedPrivateField"/>
+ <rule ref="rulesets/unusedcode.xml/UnusedLocalVariable"/>
+ <rule ref="rulesets/unusedcode.xml/UnusedPrivateMethod"/>
+ <rule ref="rulesets/unusedcode.xml/UnusedFormalParameter"/>
+ <rule ref="rulesets/logging-java.xml/MoreThanOneLogger"/>
+ <rule ref="rulesets/logging-java.xml/SystemPrintln"/>
+ <rule ref="rulesets/logging-java.xml/AvoidPrintStackTrace"/>
+ <rule ref="rulesets/controversial.xml/UnnecessaryConstructor"/>
+ <rule ref="rulesets/controversial.xml/NullAssignment"/>
+ <rule ref="rulesets/controversial.xml/OnlyOneReturn"/>
+ <rule ref="rulesets/controversial.xml/UnusedModifier"/>
+ <rule ref="rulesets/controversial.xml/AssignmentInOperand"/>
+ <rule ref="rulesets/controversial.xml/AtLeastOneConstructor"/>
+ <rule ref="rulesets/controversial.xml/DontImportSun"/>
+ <rule ref="rulesets/controversial.xml/SuspiciousOctalEscape"/>
+ <rule ref="rulesets/controversial.xml/CallSuperInConstructor"/>
+ <rule ref="rulesets/controversial.xml/UnnecessaryParentheses"/>
+ <rule ref="rulesets/controversial.xml/DefaultPackage"/>
+ <rule ref="rulesets/controversial.xml/BooleanInversion"/>
+ <rule ref="rulesets/controversial.xml/DataflowAnomalyAnalysis"/>
+ <rule ref="rulesets/controversial.xml/AvoidFinalLocalVariable"/>
+ <rule ref="rulesets/controversial.xml/AvoidUsingShortType"/>
+ <rule ref="rulesets/controversial.xml/AvoidUsingVolatile"/>
+ <rule ref="rulesets/controversial.xml/AvoidUsingNativeCode"/>
+ <rule ref="rulesets/controversial.xml/AvoidAccessibilityAlteration"/>
+ <rule ref="rulesets/controversial.xml/DoNotCallGarbageCollectionExplicitly"/>
+ <rule ref="rulesets/strings.xml/AvoidDuplicateLiterals"/>
+ <rule ref="rulesets/strings.xml/StringInstantiation"/>
+ <rule ref="rulesets/strings.xml/StringToString"/>
+ <rule ref="rulesets/strings.xml/InefficientStringBuffering"/>
+ <rule ref="rulesets/strings.xml/UnnecessaryCaseChange"/>
+ <rule ref="rulesets/strings.xml/UseStringBufferLength"/>
+ <rule ref="rulesets/strings.xml/AppendCharacterWithChar"/>
+ <rule ref="rulesets/strings.xml/ConsecutiveLiteralAppends"/>
+ <rule ref="rulesets/strings.xml/UseIndexOfChar"/>
+ <rule ref="rulesets/strings.xml/InefficientEmptyStringCheck"/>
+ <rule ref="rulesets/strings.xml/InsufficientStringBufferDeclaration"/>
+ <rule ref="rulesets/strings.xml/UselessStringValueOf"/>
+ <rule ref="rulesets/strings.xml/StringBufferInstantiationWithChar"/>
+ <rule ref="rulesets/strings.xml/UseEqualsToCompareStrings"/>
+ <rule ref="rulesets/strings.xml/AvoidStringBufferField"/>
+ <rule ref="rulesets/strictexception.xml/AvoidCatchingThrowable"/>
+ <rule ref="rulesets/strictexception.xml/SignatureDeclareThrowsException"/>
+ <rule ref="rulesets/strictexception.xml/ExceptionAsFlowControl"/>
+ <rule ref="rulesets/strictexception.xml/AvoidCatchingNPE"/>
+ <rule ref="rulesets/strictexception.xml/AvoidThrowingRawExceptionTypes"/>
+ <rule ref="rulesets/strictexception.xml/AvoidThrowingNullPointerException"/>
+ <rule ref="rulesets/strictexception.xml/AvoidRethrowingException"/>
+ <rule ref="rulesets/strictexception.xml/DoNotExtendJavaLangError"/>
+ <rule ref="rulesets/strictexception.xml/DoNotThrowExceptionInFinally"/>
+ <rule ref="rulesets/migrating.xml/ReplaceVectorWithList"/>
+ <rule ref="rulesets/migrating.xml/ReplaceHashtableWithMap"/>
+ <rule ref="rulesets/migrating.xml/ReplaceEnumerationWithIterator"/>
+ <rule ref="rulesets/migrating.xml/AvoidEnumAsIdentifier"/>
+ <rule ref="rulesets/migrating.xml/AvoidAssertAsIdentifier"/>
+ <rule ref="rulesets/migrating.xml/IntegerInstantiation"/>
+ <rule ref="rulesets/migrating.xml/ByteInstantiation"/>
+ <rule ref="rulesets/migrating.xml/ShortInstantiation"/>
+ <rule ref="rulesets/migrating.xml/LongInstantiation"/>
+ <rule ref="rulesets/migrating.xml/JUnit4TestShouldUseBeforeAnnotation"/>
+ <rule ref="rulesets/migrating.xml/JUnit4TestShouldUseAfterAnnotation"/>
+ <rule ref="rulesets/migrating.xml/JUnit4TestShouldUseTestAnnotation"/>
+ <rule ref="rulesets/migrating.xml/JUnit4SuitesShouldUseSuiteAnnotation"/>
+ <rule ref="rulesets/migrating.xml/JUnitUseExpected"/>
+ <rule ref="rulesets/optimizations.xml/LocalVariableCouldBeFinal"/>
+ <rule ref="rulesets/optimizations.xml/MethodArgumentCouldBeFinal"/>
+ <rule ref="rulesets/optimizations.xml/AvoidInstantiatingObjectsInLoops"/>
+ <rule ref="rulesets/optimizations.xml/UseArrayListInsteadOfVector"/>
+ <rule ref="rulesets/optimizations.xml/SimplifyStartsWith"/>
+ <rule ref="rulesets/optimizations.xml/UseStringBufferForStringAppends"/>
+ <rule ref="rulesets/optimizations.xml/UseArraysAsList"/>
+ <rule ref="rulesets/optimizations.xml/AvoidArrayLoops"/>
+ <rule ref="rulesets/optimizations.xml/UnnecessaryWrapperObjectCreation"/>
+ <rule ref="rulesets/optimizations.xml/AddEmptyString"/>
+ <rule ref="rulesets/sunsecure.xml/MethodReturnsInternalArray"/>
+ <rule ref="rulesets/sunsecure.xml/ArrayIsStoredDirectly"/>
+ <rule ref="rulesets/coupling.xml/CouplingBetweenObjects"/>
+ <rule ref="rulesets/coupling.xml/ExcessiveImports"/>
+ <rule ref="rulesets/coupling.xml/LooseCoupling"/>
+ <rule ref="rulesets/imports.xml/DuplicateImports"/>
+ <rule ref="rulesets/imports.xml/DontImportJavaLang"/>
+ <rule ref="rulesets/imports.xml/UnusedImports"/>
+ <rule ref="rulesets/imports.xml/ImportFromSamePackage"/>
+ <rule ref="rulesets/imports.xml/TooManyStaticImports"/>
+ <rule ref="rulesets/junit.xml/JUnitStaticSuite"/>
+ <rule ref="rulesets/junit.xml/JUnitSpelling"/>
+ <rule ref="rulesets/junit.xml/JUnitAssertionsShouldIncludeMessage"/>
+ <rule ref="rulesets/junit.xml/JUnitTestsShouldIncludeAssert"/>
+ <rule ref="rulesets/junit.xml/TestClassWithoutTestCases"/>
+ <rule ref="rulesets/junit.xml/UnnecessaryBooleanAssertion"/>
+ <rule ref="rulesets/junit.xml/UseAssertEqualsInsteadOfAssertTrue"/>
+ <rule ref="rulesets/junit.xml/UseAssertSameInsteadOfAssertTrue"/>
+ <rule ref="rulesets/junit.xml/UseAssertNullInsteadOfAssertTrue"/>
+ <rule ref="rulesets/junit.xml/SimplifyBooleanAssertion"/>
+ <rule ref="rulesets/naming.xml/ShortVariable"/>
+ <rule ref="rulesets/naming.xml/LongVariable"/>
+ <rule ref="rulesets/naming.xml/ShortMethodName"/>
+ <rule ref="rulesets/naming.xml/AbstractNaming"/>
+ <rule ref="rulesets/naming.xml/AvoidDollarSigns"/>
+ <rule ref="rulesets/naming.xml/MethodWithSameNameAsEnclosingClass"/>
+ <rule ref="rulesets/naming.xml/SuspiciousHashcodeMethodName"/>
+ <rule ref="rulesets/naming.xml/SuspiciousConstantFieldName"/>
+ <rule ref="rulesets/naming.xml/SuspiciousEqualsMethodName"/>
+ <rule ref="rulesets/naming.xml/AvoidFieldNameMatchingTypeName"/>
+ <rule ref="rulesets/naming.xml/AvoidFieldNameMatchingMethodName"/>
+ <rule ref="rulesets/naming.xml/NoPackage"/>
+ <rule ref="rulesets/naming.xml/PackageCase"/>
+ <rule ref="rulesets/naming.xml/MisleadingVariableName"/>
+ <rule ref="rulesets/naming.xml/BooleanGetMethodName"/>
+ <rule ref="rulesets/codesize.xml/ExcessiveMethodLength"/>
+ <rule ref="rulesets/codesize.xml/ExcessiveParameterList"/>
+ <rule ref="rulesets/codesize.xml/ExcessiveClassLength"/>
+ <rule ref="rulesets/codesize.xml/ExcessivePublicCount"/>
+ <rule ref="rulesets/codesize.xml/NcssMethodCount"/>
+ <rule ref="rulesets/codesize.xml/NcssTypeCount"/>
+ <rule ref="rulesets/codesize.xml/NcssConstructorCount"/>
+ <rule ref="rulesets/codesize.xml/TooManyMethods"/>
+ <rule ref="rulesets/finalizers.xml/EmptyFinalizer"/>
+ <rule ref="rulesets/finalizers.xml/FinalizeOnlyCallsSuperFinalize"/>
+ <rule ref="rulesets/finalizers.xml/FinalizeOverloaded"/>
+ <rule ref="rulesets/finalizers.xml/FinalizeDoesNotCallSuperFinalize"/>
+ <rule ref="rulesets/finalizers.xml/FinalizeShouldBeProtected"/>
+ <rule ref="rulesets/finalizers.xml/AvoidCallingFinalize"/>
+ <rule ref="rulesets/logging-jakarta-commons.xml/UseCorrectExceptionLogging"/>
+ <rule ref="rulesets/logging-jakarta-commons.xml/ProperLogger"/>
+ <rule ref="rulesets/javabeans.xml/BeanMembersShouldSerialize"/>
+ <rule ref="rulesets/javabeans.xml/MissingSerialVersionUID"/>
+ <rule ref="rulesets/clone.xml/ProperCloneImplementation"/>
+ <rule ref="rulesets/clone.xml/CloneThrowsCloneNotSupportedException"/>
+ <rule ref="rulesets/clone.xml/CloneMethodMustImplementCloneable"/>
+ <rule ref="rulesets/design.xml/UseSingleton"/>
+ <rule ref="rulesets/design.xml/SimplifyBooleanReturns"/>
+ <rule ref="rulesets/design.xml/SimplifyBooleanExpressions"/>
+ <rule ref="rulesets/design.xml/SwitchStmtsShouldHaveDefault"/>
+ <rule ref="rulesets/design.xml/AvoidDeeplyNestedIfStmts"/>
+ <rule ref="rulesets/design.xml/AvoidReassigningParameters"/>
+ <rule ref="rulesets/design.xml/SwitchDensity"/>
+ <rule ref="rulesets/design.xml/ConstructorCallsOverridableMethod"/>
+ <rule ref="rulesets/design.xml/AccessorClassGeneration"/>
+ <rule ref="rulesets/design.xml/FinalFieldCouldBeStatic"/>
+ <rule ref="rulesets/design.xml/CloseResource"/>
+ <rule ref="rulesets/design.xml/NonStaticInitializer"/>
+ <rule ref="rulesets/design.xml/DefaultLabelNotLastInSwitchStmt"/>
+ <rule ref="rulesets/design.xml/NonCaseLabelInSwitchStatement"/>
+ <rule ref="rulesets/design.xml/OptimizableToArrayCall"/>
+ <rule ref="rulesets/design.xml/BadComparison"/>
+ <rule ref="rulesets/design.xml/EqualsNull"/>
+ <rule ref="rulesets/design.xml/ConfusingTernary"/>
+ <rule ref="rulesets/design.xml/InstantiationToGetClass"/>
+ <rule ref="rulesets/design.xml/IdempotentOperations"/>
+ <rule ref="rulesets/design.xml/SimpleDateFormatNeedsLocale"/>
+ <rule ref="rulesets/design.xml/ImmutableField"/>
+ <rule ref="rulesets/design.xml/UseLocaleWithCaseConversions"/>
+ <rule ref="rulesets/design.xml/AvoidProtectedFieldInFinalClass"/>
+ <rule ref="rulesets/design.xml/AssignmentToNonFinalStatic"/>
+ <rule ref="rulesets/design.xml/MissingStaticMethodInNonInstantiatableClass"/>
+ <rule ref="rulesets/design.xml/AvoidSynchronizedAtMethodLevel"/>
+ <rule ref="rulesets/design.xml/MissingBreakInSwitch"/>
+ <rule ref="rulesets/design.xml/UseNotifyAllInsteadOfNotify"/>
+ <rule ref="rulesets/design.xml/AvoidInstanceofChecksInCatchClause"/>
+ <rule ref="rulesets/design.xml/AbstractClassWithoutAbstractMethod"/>
+ <rule ref="rulesets/design.xml/SimplifyConditional"/>
+ <rule ref="rulesets/design.xml/CompareObjectsWithEquals"/>
+ <rule ref="rulesets/design.xml/PositionLiteralsFirstInComparisons"/>
+ <rule ref="rulesets/design.xml/UnnecessaryLocalBeforeReturn"/>
+ <rule ref="rulesets/design.xml/NonThreadSafeSingleton"/>
+ <rule ref="rulesets/design.xml/UncommentedEmptyMethod"/>
+ <rule ref="rulesets/design.xml/UncommentedEmptyConstructor"/>
+ <rule ref="rulesets/design.xml/AvoidConstantsInterface"/>
+ <rule ref="rulesets/design.xml/UnsynchronizedStaticDateFormatter"/>
+ <rule ref="rulesets/design.xml/PreserveStackTrace"/>
+ <rule ref="rulesets/design.xml/UseCollectionIsEmpty"/>
+ <rule ref="rulesets/design.xml/ClassWithOnlyPrivateConstructorsShouldBeFinal"/>
+ <rule ref="rulesets/design.xml/EmptyMethodInAbstractClassShouldBeAbstract"/>
+ <rule ref="rulesets/design.xml/SingularField"/>
+ <rule ref="rulesets/design.xml/ReturnEmptyArrayRatherThanNull"/>
+ <rule ref="rulesets/design.xml/AbstractClassWithoutAnyMethod"/>
+ <rule ref="rulesets/design.xml/TooFewBranchesForASwitchStatement"/>
+</ruleset>
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlock.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlock.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlock.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -94,7 +94,8 @@
@Override
public byte[] getDataHolder() {
- return data;
+ return data; // NOPMD i want this to make arrays accessible for
+ // modification
}
@Override
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -41,7 +41,7 @@
public static final int HEAD_TAIL_SIZE = HEAD_SIZE + 4/* crc32 */;
- private byte bits;
+ private final byte bits;
private final int numberOfPage;
@@ -51,7 +51,7 @@
private final int numberOfBlock;
- public static byte bitsForLength(int length) throws HeapException {
+ public static byte bitsForLength(final int length) throws HeapException {
for (byte bits = PageConstant.MIN_DATA_BLOCK_BITS; bits <= PageConstant.MAX_DATA_BLOCK_BITS; bits++) {
if (length < (1 << bits)) {
return bits;
@@ -70,11 +70,11 @@
// one data block on one or more pages
numberOfBlock = 1;
final int totalSize = HEAD_TAIL_SIZE + dataBlockSize;
- final int n = totalSize >> PageConstant.PAGE_BITS;
+ final int nPage = totalSize >> PageConstant.PAGE_BITS;
if ((totalSize & PageConstant.IN_PAGE_POSITION_MASK) == 0) {
- numberOfPage = n;
+ numberOfPage = nPage;
} else {
- numberOfPage = n + 1;
+ numberOfPage = nPage + 1;
}
// FIXMELUC ____waste space, see below
// dataBlockDataSize=(numberOfPage<<PageConstant.PAGE_BITS)-
@@ -91,7 +91,7 @@
: ((1 << (bits - 1)) + 1);
dataBlocks = new DataBlock[numberOfBlock];
for (int dataBlockIndex = 0; dataBlockIndex < numberOfBlock; dataBlockIndex++) {
- dataBlocks[dataBlockIndex] = new DataBlock(this, dataBlockIndex,
+ dataBlocks[dataBlockIndex] = new DataBlock(this, dataBlockIndex, // NOPMD
bits, minSize, maxSize);
}
@@ -126,7 +126,7 @@
}
public IDataBlock[] getDataBlocks() {
- return dataBlocks;
+ return dataBlocks;// NOPMD
}
public IDataBlock getDataBlock(final long dataBlockPosition) {
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -120,7 +120,7 @@
fileSizeAsNumberOfPage = 1L;
pageNumberOfFirstFreePage = -1L;
rootPagePosition = -1L;
- freeDataBlocks = null;
+ freeDataBlocks = null;// NOPMD free it
nextDataRecordIdentifier = 0;
lastRecordPositionInFile = -1L;
numberOfDataRecord = 0;
@@ -216,13 +216,14 @@
}
@Override
- public void setPageRecord(IPageRecord pageRecord) throws HeapException {
- throw new HeapException("unsupported");
+ public void setPageRecord(final IPageRecord pageRecord)
+ throws HeapException {
+ throw new HeapException("unsupported");// NOPMD
}
@Override
public PageRecord getPageRecord() throws HeapException {
- throw new HeapException("unsupported");
+ throw new HeapException("unsupported");// NOPMD
}
public long getNextFreeDataRecordIdentifier() {
@@ -248,7 +249,7 @@
}
public void setFreeDataBlockPosition(final int bits,
- long freeDataBlockPosition) throws HeapException {
+ final long freeDataBlockPosition) throws HeapException {
initializeFreeDataBlock();
freeDataBlocks[bits - PageConstant.MIN_DATA_BLOCK_BITS] = freeDataBlockPosition;
setValueIsChangedValueToSave();
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -62,7 +62,7 @@
@Override
public String toString() {
- StringBuilder builder = new StringBuilder();
+ final StringBuilder builder = new StringBuilder();
builder.append("IntegrityCheckResult [depth=");
builder.append(depth);
builder.append(", entriesCount=");
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -35,14 +35,14 @@
@NotStorableClass
public class LeafPage extends AbstractNodePage implements ILeafPage {
- public static int HEAD_TAIL_SIZE =
+ public static final int HEAD_TAIL_SIZE =
/**/8/* byte size for previous record position */+
/**/1/* byte size for record type */+
/**/4/* int size for number of entries */+
/**/4/* int size for crc32 */+
/**/8/* for next */;
- public static int MAX_NUMBER_OF_ENTRIES =
+ public static final int MAX_NUMBER_OF_ENTRIES =
/**/(int) ((PageConstant.PAGE_SIZE - HEAD_TAIL_SIZE) / (8/*
* long size for
* pointer
@@ -134,12 +134,12 @@
@Override
public int getByteSize() {
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
return byteSize;
}
@Override
- public void updateByteSize() throws HeapException {
+ public final void updateByteSize() throws HeapException {
byteSize = computeByteSize();
}
@@ -233,7 +233,7 @@
final IDataBlock dataBlock) throws HeapException {
final int entrySize = entrySize(dataRecordIdentifier);
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
final boolean canAdd = entrySize + byteSize <= PageConstant.PAGE_SIZE;
if (canAdd) {
// can add
@@ -298,7 +298,7 @@
final DataRecordIdentifier dataRecordIdentifier = nodes[index].dataRecordIdentifier;
final int entrySize = entrySize(dataRecordIdentifier);
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
final int afterLength = numberOfKeyEntries - (index + 1);
numberOfKeyEntries--;
if (afterLength != 0) {
@@ -313,7 +313,7 @@
public boolean wellFilled() {
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
return byteSize >= (PageConstant.PAGE_SIZE >> 1);
}
@@ -351,7 +351,7 @@
*/
public int tryBalanceOrMerge(final LeafPage leafPage) throws HeapException {
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
final int leafPageByteSize = leafPage.getByteSize();
final int leafPageNumberOfKeyEntries = leafPage.numberOfKeyEntries;
final int totalNumberOfEntries = numberOfKeyEntries
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -37,14 +37,14 @@
public class NonTerminalPage extends AbstractNodePage implements
INonTerminalPage {
- public static int HEAD_TAIL_SIZE =
+ public static final int HEAD_TAIL_SIZE =
/**/8/* byte size for previous record position */+
/**/1/* byte size for record type */+
/**/4/* int size for number of entries */+
/**/4/* int size for crc32 */+
/**/8/* last pointer long size */;
- public static int MAX_NUMBER_OF_ENTRIES =
+ public static final int MAX_NUMBER_OF_ENTRIES =
/**/(int) ((PageConstant.PAGE_SIZE - HEAD_TAIL_SIZE) / (8/*
* long size for
* pointer
@@ -157,9 +157,9 @@
// ASSERTX
assert checkKeys();
setValueIsChangedValueToSave();
- return true;
+ return true;// NOPMD
} else {
- DataRecordIdentifier oldKey = keys[index];
+ final DataRecordIdentifier oldKey = keys[index];
keys[index] = key;
// ASSERTX
assert checkKeys();
@@ -167,19 +167,19 @@
// ASSERTX
assert byteSize == computeByteSize();
setValueIsChangedValueToSave();
- return byteSize < PageConstant.PAGE_SIZE;
+ return byteSize < PageConstant.PAGE_SIZE;// NOPMD
}
}
@Override
public int getByteSize() {
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
return byteSize;
}
@Override
- public void updateByteSize() throws HeapException {
+ public final void updateByteSize() throws HeapException {
byteSize = computeByteSize();
}
@@ -312,7 +312,7 @@
// ASSERTX
assert checkKeys();
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
byteSize += entrySize;
// ASSERTX
assert byteSize == computeByteSizeAcceptBigger();
@@ -347,7 +347,7 @@
// ASSERTX
assert checkKeys();
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
byteSize += entrySize;
// ASSERTX
assert byteSize == computeByteSizeAcceptBigger();
@@ -387,11 +387,11 @@
*/
public DataRecordIdentifier getAndClearMiddleKey() {
final DataRecordIdentifier result = middleKey;
- middleKey = null;
+ middleKey = null;// NOPMD
return result;
}
- public void remove(int leafPageInParentIndex) {
+ public void remove(final int leafPageInParentIndex) {
final DataRecordIdentifier key = keys[leafPageInParentIndex];
numberOfKeyEntries--;
final int length = numberOfKeyEntries - leafPageInParentIndex;
@@ -404,7 +404,7 @@
// ASSERTX
assert checkKeys();
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
byteSize -= entrySize(key);
// ASSERTX
assert byteSize == computeByteSizeForAssert() : "byteSize=" + byteSize
@@ -413,7 +413,7 @@
public boolean wellFilled() {
// ASSERTX
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
return byteSize >= (PageConstant.PAGE_SIZE >> 1);
}
@@ -427,7 +427,7 @@
*/
public int tryBalanceOrMerge(final DataRecordIdentifier middleKey,
final NonTerminalPage rightNonTerminalPage) throws HeapException {
- assert byteSize != 0 : "unknow current byte size";
+ assert byteSize != 0 : "unknow current byte size";// NOPMD
final int rightPageByteSize = rightNonTerminalPage.getByteSize();
final int middleKeySize = entrySize(middleKey);
final int rightPageNumberOfKeyEntries = rightNonTerminalPage.numberOfKeyEntries;
@@ -553,14 +553,14 @@
*
* @return true if keys ok
*/
- public boolean checkKeys() {
+ public final boolean checkKeys() {
DataRecordIdentifier currentKey = keys[0];
- boolean ok = true;
- for (int index = 1; ok && index < numberOfKeyEntries; index++) {
+ boolean keysOk = true;
+ for (int index = 1; keysOk && index < numberOfKeyEntries; index++) {
final DataRecordIdentifier nextKey = keys[index];
- ok = currentKey.compareTo(nextKey) < 0;
+ keysOk = currentKey.compareTo(nextKey) < 0;
currentKey = nextKey;
}
- return ok;
+ return keysOk;
}
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -38,7 +38,7 @@
public long pointer;
- public PageNode(DataRecordIdentifier dataRecordIdentifier, long pointer) {
+ public PageNode(final DataRecordIdentifier dataRecordIdentifier,final long pointer) {
super();
this.dataRecordIdentifier = dataRecordIdentifier;
this.pointer = pointer;
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -77,7 +77,8 @@
}
@Override
- public String backup(long identifier, int maxBackup) throws HeapException {
+ public String backup(final long identifier, final int maxBackup)
+ throws HeapException {
return btreePlusElementMgr.backup(identifier, maxBackup);
}
@@ -91,7 +92,8 @@
@Override
public void setDataRecordKeyManager(
- IDataRecordKeyManager dataRecordKeyManager) throws HeapException {
+ final IDataRecordKeyManager dataRecordKeyManager)
+ throws HeapException {
btreePlusElementMgr.setDataRecordKeyManager(dataRecordKeyManager);
}
@@ -101,7 +103,8 @@
}
@Override
- protected void startServiceImpl(boolean removeFiles) throws HeapException {
+ protected void startServiceImpl(final boolean removeFiles)
+ throws HeapException {
if (removeFiles) {
btreePlusElementMgr.removeFiles();
}
@@ -160,7 +163,8 @@
@Override
protected void setNextFreeDataRecordIdentifierImpl(
- DataRecordIdentifier dataRecordIdentifier) throws HeapException {
+ final DataRecordIdentifier dataRecordIdentifier)
+ throws HeapException {
btreePlusElementMgr
.setNextFreeDataRecordIdentifier(dataRecordIdentifier.value);
}
@@ -174,7 +178,8 @@
@Override
protected byte[] readDataRecordImpl(
- DataRecordIdentifier dataRecordIdentifier) throws HeapException {
+ final DataRecordIdentifier dataRecordIdentifier)
+ throws HeapException {
final IPageRecordable root = btreePlusElementMgr.getRoot();
final long dataBlockPosition = dataBlockPosition(root,
dataRecordIdentifier);
@@ -214,7 +219,7 @@
btreePlusElementMgr.incrementNumberOfDataRecord();
} else {
// existing leaf page for key
- long dataBlockPosition = leafPage
+ final long dataBlockPosition = leafPage
.getDataBlockPosition(dataRecordIdentifier);
if (dataBlockPosition == -1) {
// data record not found
@@ -241,7 +246,7 @@
} else {
// data record found
created = false;
- IDataBlock dataBlock = btreePlusElementMgr
+ final IDataBlock dataBlock = btreePlusElementMgr
.getDataBlock(dataBlockPosition);
if (data.length >= dataBlock.getMinSize()
&& data.length <= dataBlock.getMaxSize()) {
@@ -274,7 +279,8 @@
final DataRecordIdentifier dataRecordIdentifier,
final NonTerminalPage nonTerminalPage, final IDataBlock dataBlock)
throws HeapException {
- LeafPage newLeafPage = leafPage.split(dataRecordIdentifier, dataBlock);
+ final LeafPage newLeafPage = leafPage.split(dataRecordIdentifier,
+ dataBlock);
btreePlusElementMgr.appendPageRecordable(newLeafPage);
newLeafPage.setValueIsChangedValueToSave();
newLeafPage.setNext(leafPage.getNext());
@@ -300,7 +306,7 @@
} else {
deleted = true;
final LeafPage leafPage = dataBlock.getParentLeafPage();
- int indexInLeafPage = dataBlock.getIndexInLeafPage();
+ final int indexInLeafPage = dataBlock.getIndexInLeafPage();
btreePlusElementMgr.remove(dataBlock);
leafPage.remove(indexInLeafPage);
final NonTerminalPage nonTerminalPage = (NonTerminalPage) leafPage
@@ -315,11 +321,10 @@
final int leafPageInParentIndex = leafPage
.getInParentIndex();
if (leafPageInParentIndex != nonTerminalPage
- .getNumberOfKeyEntries()) {
- if (!nonTerminalPage.setKey(leafPageInParentIndex,
- leafPage.getLastKey())) {
- split(nonTerminalPage);
- }
+ .getNumberOfKeyEntries()
+ && !nonTerminalPage.setKey(leafPageInParentIndex,
+ leafPage.getLastKey())) {
+ split(nonTerminalPage);
}
} else {
tryBalanceOrMerge(leafPage, nonTerminalPage);
@@ -365,11 +370,12 @@
} else {
split(leafPageParentNonTerminalPage);
}
- } else if (result == 1) {
- if (!leafPageParentNonTerminalPage.setKey(
- leftLeafPageInParentIndex, leftLeafPage.getLastKey())) {
- split(leafPageParentNonTerminalPage);
- }
+ } else if (result == 1
+ && !leafPageParentNonTerminalPage.setKey(
+ leftLeafPageInParentIndex,
+ leftLeafPage.getLastKey())) {
+ split(leafPageParentNonTerminalPage);
+
}
}
@@ -397,11 +403,10 @@
} else {
split(leafPageParentNonTerminalPage);
}
- } else if (result == 1) {
- if (!leafPageParentNonTerminalPage.setKey(
- leafPageInParentIndex, leafPage.getLastKey())) {
- split(leafPageParentNonTerminalPage);
- }
+ } else if (result == 1
+ && !leafPageParentNonTerminalPage.setKey(
+ leafPageInParentIndex, leafPage.getLastKey())) {
+ split(leafPageParentNonTerminalPage);
}
}
return result != 2;
@@ -413,7 +418,8 @@
* a too big page
* @throws HeapException
*/
- private void split(NonTerminalPage nonTerminalPage) throws HeapException {
+ private void split(final NonTerminalPage nonTerminalPage)
+ throws HeapException {
if (!tryBalance(nonTerminalPage)) {
final INonTerminalPage newNonTerminalPage = nonTerminalPage.split();
final DataRecordIdentifier middleKey = nonTerminalPage
@@ -448,7 +454,7 @@
if (parentNonterminal == null) {
result = 2;
} else {
- int inParentIndex = nonTerminalPage.getInParentIndex();
+ final int inParentIndex = nonTerminalPage.getInParentIndex();
if (inParentIndex == 0) {
result = 2;
} else {
@@ -479,11 +485,10 @@
} else {
split(nonTerminalPage);
}
- } else if (result == 1) {
- if (!parentNonterminal.setKey(leftPageInParentIndex,
- leftPage.getAndClearMiddleKey())) {
- split(nonTerminalPage);
- }
+ } else if (result == 1
+ && !parentNonterminal.setKey(leftPageInParentIndex,
+ leftPage.getAndClearMiddleKey())) {
+ split(nonTerminalPage);
}
}
@@ -517,11 +522,10 @@
} else {
split(nonTerminalPage);
}
- } else if (result == 1) {
- if (!parentNonterminal.setKey(inParentIndex,
- nonTerminalPage.getAndClearMiddleKey())) {
- split(nonTerminalPage);
- }
+ } else if (result == 1
+ && !parentNonterminal.setKey(inParentIndex,
+ nonTerminalPage.getAndClearMiddleKey())) {
+ split(nonTerminalPage);
}
}
}
@@ -563,7 +567,7 @@
final long pagePosition = nonTerminalPage.getPagePointer(0);
page = btreePlusElementMgr.getPage(pagePosition, page, 0);
}
- LeafPage leafPage = (LeafPage) page;
+ final LeafPage leafPage = (LeafPage) page;
first = leafPage.getFirstKey();
final boolean deleted = deleteDataRecordImpl(first);
// ASSRTX
@@ -628,7 +632,7 @@
throws HeapException {
IPageRecordable page;
if (root == null) {
- page = null;
+ page = null;// NOPMD
} else {
page = root;
while (!EnumRecordType.LEAF_PAGE.equals(page.getRecordType())) {
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -88,7 +88,7 @@
while (pageRecordable != null) {
elementMgr.clearReadCache();
final EnumRecordType recordType = pageRecordable.getRecordType();
- switch (recordType) {
+ switch (recordType) {// NOPMD
case LEAF_PAGE: {
final LeafPage leafPage = (LeafPage) pageRecordable;
@@ -225,7 +225,7 @@
final DataRecordIdentifier maxKey = index == nonTerminalPage
.getNumberOfKeyEntries() ? state.maxKey
: nonTerminalPage.getKey(index);
- stack.push(new State(minKey, maxKey));
+ stack.push(new State(minKey, maxKey));// NOPMD
index = 0;
currentDepth++;
}
@@ -249,8 +249,8 @@
}
private class State {
- private DataRecordIdentifier minKey;
- private DataRecordIdentifier maxKey;
+ private DataRecordIdentifier minKey;// NOPMD
+ private DataRecordIdentifier maxKey;// NOPMD
public State(final DataRecordIdentifier minKey,
final DataRecordIdentifier maxKey) {
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -144,12 +144,12 @@
}
public long freeSize() throws HeapException {
- // FIXMELUC ________to implement
+ // FIXMELUC ____btree+ to implement
throw new HeapException("not implemented");
}
public long usedSize() throws HeapException {
- // FIXMELUC ________to implement
+ // FIXMELUC ____btree+ to implement
throw new HeapException("not implemented");
}
@@ -278,9 +278,9 @@
.getFreeDataBlockPosition(bits);
final IDataBlock dataBlock;
if (freeDataBlockPosition == -1L) {
- DataBlockPage dataBlockPage = new DataBlockPage(bits);
- long pageNumber = header.getFileSizeAsNumberOfPage();
- long previousRecordPositionInFile = header
+ final DataBlockPage dataBlockPage = new DataBlockPage(bits);
+ final long pageNumber = header.getFileSizeAsNumberOfPage();
+ final long previousRecordPositionInFile = header
.getLastRecordPositionInFile();
// the new page record for page recordable
final IPageRecord pageRecord = new PageRecord(heapElementManager,
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -41,7 +41,7 @@
private int nextIndex;
- private DataRecordIdentifier next;
+ private DataRecordIdentifier next;// NOPMD
private final BtreePlusElementMgr btreePlusElementMgr;
@@ -68,7 +68,7 @@
private void computeNext() {
try {
if (nextPosition == -1L) {
- next = null;
+ next = null;// NOPMD
} else {
final LeafPage leafPage = (LeafPage) btreePlusElementMgr
.getPage(nextPosition, null, -1);
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -40,9 +40,9 @@
*/
private static final long serialVersionUID = 3314321640101100134L;
- private long value;
+ private final long value;
- private byte[] dummyData = new byte[512];
+ private final byte[] dummyData = new byte[512];
public BigKey(final long value) {
super();
@@ -55,7 +55,7 @@
}
public byte[] getDummyData() {
- return dummyData;
+ return dummyData;//NOPMD
}
@Override
@@ -79,6 +79,7 @@
return result;
}
+ @SuppressWarnings("PMD")
@Override
public boolean equals(Object obj) {
if (this == obj)
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/DataBlockPageTest.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/DataBlockPageTest.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/DataBlockPageTest.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -47,7 +47,7 @@
super(name);
}
- public void testCreation() throws HeapException {
+ public void testCreation() throws HeapException {// NOPMD
for (byte bits = PageConstant.MIN_DATA_BLOCK_BITS; bits < PageConstant.MAX_DATA_BLOCK_BITS; bits++) {
checkCreationState(bits);
}
@@ -80,7 +80,7 @@
assertEquals("bad byte size", dataBlockPageByteSize,
dataBlockPage.getByteSize());
dataBlockPage.setAllFree();
- IDataBlock[] dataBlocks = dataBlockPage.getDataBlocks();
+ final IDataBlock[] dataBlocks = dataBlockPage.getDataBlocks();
assertEquals("number of block missmatch", numberOfBlock,
dataBlocks.length);
int index = 0;
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java 2012-05-08 07:11:39 UTC (rev 3077)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java 2012-05-08 09:26:36 UTC (rev 3078)
@@ -42,6 +42,7 @@
@NoStorableAccess
public class LeafPageTest extends AbstractJoafipCommonTestCase {
+ private static final String BAD_ = "bad #";
private final static IPageRecord PAGE_RECORD = new MockPageRecord();
public LeafPageTest() throws TestException {
@@ -53,7 +54,7 @@
}
public void testCreation() throws HeapException {
- LeafPage leafPage = new LeafPage(true);
+ final LeafPage leafPage = new LeafPage(true);
leafPage.setPageRecord(PAGE_RECORD);
assertEquals("must be empty", 0, leafPage.getNumberOfKeyEntries());
assertEquals("must be one page", 1, leafPage.getNumberOfPage());
@@ -63,7 +64,7 @@
}
public void testAdd() throws HeapException {
- LeafPage leafPage = new LeafPage(true);
+ final LeafPage leafPage = new LeafPage(true);
leafPage.setPageRecord(PAGE_RECORD);
addToLeafPage(leafPage, 1000/* position */, 10/* key value */, 10, 1);
checkContent(leafPage,
@@ -100,9 +101,9 @@
private void addToLeafPage(final LeafPage leafPage, final int position,
final int idValue, final int lastKeyValue,
final int numberOfKeyEntries) throws HeapException {
- MockDataBlock dataBlock = new MockDataBlock();
+ final MockDataBlock dataBlock = new MockDataBlock();
dataBlock.setPosition(position);
- DataRecordIdentifier dataRecordIdentifier = new DataRecordIdentifier(
+ final DataRecordIdentifier dataRecordIdentifier = new DataRecordIdentifier(
idValue);
leafPage.add(dataRecordIdentifier, dataBlock);
assertEquals("must has " + numberOfKeyEntries + " entry",
@@ -173,10 +174,10 @@
final int maxNumberOfEntries = maxNumberOfEntries();
int count = 0;
while (leafPage.getNumberOfKeyEntries() != maxNumberOfEntries) {
- final MockDataBlock dataBlock = new MockDataBlock();
+ final MockDataBlock dataBlock = new MockDataBlock();// NOPMD
dataBlock.setPosition(count);
assertTrue("add must suceed",
- leafPage.add(new DataRecordIdentifier(count), dataBlock));
+ leafPage.add(new DataRecordIdentifier(count), dataBlock));// NOPMD
count++;
}
final MockDataBlock dataBlock = new MockDataBlock();
@@ -192,10 +193,10 @@
final int maxNumberOfEntries = maxNumberOfEntries();
int count = 1;
while (leafPage.getNumberOfKeyEntries() != maxNumberOfEntries) {
- final MockDataBlock dataBlock = new MockDataBlock();
+ final MockDataBlock dataBlock = new MockDataBlock();// NOPMD
dataBlock.setPosition(count);
assertTrue("add must suceed",
- leafPage.add(new DataRecordIdentifier(count), dataBlock));
+ leafPage.add(new DataRecordIdentifier(count), dataBlock));// NOPMD
count++;
}
final MockDataBlock dataBlock = new MockDataBlock();
@@ -214,20 +215,20 @@
leafPage.getNumberOfKeyEntries()
+ rightLeafPage.getNumberOfKeyEntries());
for (count = 0; count < leafPage.getNumberOfKeyEntries(); count++) {
- assertEquals("bad #" + count + " position", count,
+ assertEquals(BAD_ + count + " position", count,
leafPage.getBlockPointer(count));
- assertEquals("bad #" + count + " key", new DataRecordIdentifier(
+ assertEquals(BAD_ + count + " key", new DataRecordIdentifier(// NOPMD
count), leafPage.getKey(count));
}
for (int rightCount = 0; count < maxNumberOfEntries + 1; count++, rightCount++) {
- assertEquals("bad #" + count + " position", count,
+ assertEquals(BAD_ + count + " position", count,
rightLeafPage.getBlockPointer(rightCount));
- assertEquals("bad #" + count + " key", new DataRecordIdentifier(
+ assertEquals(BAD_ + count + " key", new DataRecordIdentifier(// NOPMD
count), rightLeafPage.getKey(rightCount));
}
}
- public void testRemove() throws HeapException {
+ public void testRemove(...
[truncated message content] |
|
From: <luc...@us...> - 2012-05-08 09:26:44
|
Revision: 3078
http://joafip.svn.sourceforge.net/joafip/?rev=3078&view=rev
Author: luc_peuvrier
Date: 2012-05-08 09:26:36 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: PMD warning corrections
Modified Paths:
--------------
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CheckRandomList.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/CreateRandomList.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlock.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/DataBlockPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/NonTerminalPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockDataBlock.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockLeafPage.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockNonTerminalPage.java
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/MockPageRecordable.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgrTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/CacheMap.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/CacheMap2.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/ToWriteIterator.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/entity/ToWriteIterator2.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirect.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectNio.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileCacheTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMapped2GBLimitedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectNioTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/TestRandomAccessFileCache.java
trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/service/HeapFileDataManager.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapElementManagerWithHeapRecord.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordManage.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordIdentifier.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordKey.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/RecordForTest.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestDataRecordIdentifier.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/TestHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockFileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestDataMgrMemoryLeak.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerBackup.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerImpl.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerRecord.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/BlockDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/DualWrapDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/FileForStorableBridge.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/HeapMemoryDataManagerMock.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/HeapMultiFileDataManager.java
Added Paths:
-----------
trunk/joafip-btreeplus/.pmd
trunk/joafip-btreeplus/.ruleset
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-08 07:11:45
|
Revision: 3077
http://joafip.svn.sourceforge.net/joafip/?rev=3077&view=rev
Author: luc_peuvrier
Date: 2012-05-08 07:11:39 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: added free data block count
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-08 07:11:45
|
Revision: 3077
http://joafip.svn.sourceforge.net/joafip/?rev=3077&view=rev
Author: luc_peuvrier
Date: 2012-05-08 07:11:39 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: added free data block count
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-08 06:54:26 UTC (rev 3076)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-08 07:11:39 UTC (rev 3077)
@@ -54,6 +54,8 @@
private long firstLeafPagePosition = -1L;
+ private int numberOfFreeRecord;
+
public HeaderPage(final IHeapElementManager heapElementManager) {
super(heapElementManager, 0L);
}
@@ -122,6 +124,7 @@
nextDataRecordIdentifier = 0;
lastRecordPositionInFile = -1L;
numberOfDataRecord = 0;
+ numberOfFreeRecord = 0;
firstLeafPagePosition = -1L;
}
@@ -159,6 +162,7 @@
writeLong(nextDataRecordIdentifier);
writeLong(lastRecordPositionInFile);
writeInteger(numberOfDataRecord);
+ writeInteger(numberOfFreeRecord);
writeLong(firstLeafPagePosition);
initializeFreeDataBlock();
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
@@ -185,6 +189,7 @@
nextDataRecordIdentifier = readLong();
lastRecordPositionInFile = readLong();
numberOfDataRecord = readInteger();
+ numberOfFreeRecord = readInteger();
firstLeafPagePosition = readLong();
initializeFreeDataBlock();
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
@@ -286,4 +291,24 @@
public int getNumberOfDataRecord() {
return numberOfDataRecord;
}
+
+ public int getNumberOfFreeRecord() {
+ return numberOfFreeRecord;
+ }
+
+ public void setNumberOfFreeRecord(final int numberOfFreeRecord) {
+ this.numberOfFreeRecord = numberOfFreeRecord;
+ }
+
+ public void incrementNumberOfFreeRecord() {
+ this.numberOfFreeRecord++;
+ }
+
+ public void decrementNumberOfFreeRecord() {
+ this.numberOfFreeRecord--;
+ }
+
+ public void incrementNumberOfFreeRecord(final int increment) {
+ this.numberOfFreeRecord += increment;
+ }
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-08 06:54:26 UTC (rev 3076)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-08 07:11:39 UTC (rev 3077)
@@ -26,6 +26,7 @@
import java.io.File;
import java.util.Iterator;
import java.util.Set;
+import java.util.TreeSet;
import net.sf.joafip.Fortest;
import net.sf.joafip.NotStorableClass;
@@ -578,8 +579,7 @@
@Override
protected int getNumberOfFreeRecordImpl() throws HeapException {
- // FIXMELUC ________to implement
- throw new HeapException("not implemented");
+ return btreePlusElementMgr.getNumberOfFreeRecord();
}
private long dataBlockPosition(final IPageRecordable root,
@@ -663,8 +663,12 @@
@Override
protected Set<DataRecordIdentifier> getDataRecordIdentifierSetImpl()
throws HeapException {
- // FIXMELUC ________to implement
- throw new HeapException("not implemented");
+ final Set<DataRecordIdentifier> set = new TreeSet<DataRecordIdentifier>();
+ final Iterator<DataRecordIdentifier> iterator = dataRecordIteratorImpl();
+ while (iterator.hasNext()) {
+ set.add(iterator.next());
+ }
+ return set;
}
@Fortest
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-08 06:54:26 UTC (rev 3076)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-08 07:11:39 UTC (rev 3077)
@@ -291,6 +291,7 @@
dataBlockPage.setPageRecord(pageRecord);
heapElementManager.appendHeapFileRecord(pageRecord);
dataBlockPage.setAllFree();
+ header.incrementNumberOfFreeRecord(dataBlockPage.getNumberOfBlock());
dataBlock = dataBlockPage.getDataBlocks()[0];
} else {
dataBlock = getDataBlock(freeDataBlockPosition);
@@ -299,6 +300,7 @@
.getNextFreeDataBlockPositionOfFree();
header.setFreeDataBlockPosition(bits, nextFreeDataBlockPosition);
dataBlock.setData(data);
+ header.decrementNumberOfFreeRecord();
return dataBlock;
}
@@ -314,6 +316,7 @@
dataBlock.setNextFreeDataBlockPositionOfFree(freeDataBlockPosition);
final long position = dataBlock.getPositionInFile();
header.setFreeDataBlockPosition(bits, position);
+ header.incrementNumberOfFreeRecord();
}
public void appendPageRecordable(final IPageRecordable pageRecordable)
@@ -338,6 +341,7 @@
header.setPageNumberOfFirstFreePage(freePage.getNextFreePage());
previousRecordPositionInFile = -1L;// do not care value // freePage
// .getPreviousRecordPositionInFile();
+ header.decrementNumberOfFreeRecord();
}
if (freePageRecord == null) {
@@ -371,6 +375,7 @@
// freePage.setValueIsChangedValueToSave();
final long newFreePageNumber = pageRecord.getPageNumber();
header.setPageNumberOfFirstFreePage(newFreePageNumber);
+ header.incrementNumberOfFreeRecord();
}
@Fortest
@@ -390,6 +395,10 @@
return header.getNumberOfDataRecord();
}
+ public int getNumberOfFreeRecord() throws HeapException {
+ return header.getNumberOfFreeRecord();
+ }
+
public void clearReadCache() {
heapElementManager.clearReadCache();
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-08 06:54:32
|
Revision: 3076
http://joafip.svn.sourceforge.net/joafip/?rev=3076&view=rev
Author: luc_peuvrier
Date: 2012-05-08 06:54:26 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: added iterator
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java
Added Paths:
-----------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-08 06:54:32
|
Revision: 3076
http://joafip.svn.sourceforge.net/joafip/?rev=3076&view=rev
Author: luc_peuvrier
Date: 2012-05-08 06:54:26 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: added iterator
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java
Added Paths:
-----------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-08 05:55:35 UTC (rev 3075)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -52,6 +52,8 @@
private int numberOfDataRecord;
+ private long firstLeafPagePosition = -1L;
+
public HeaderPage(final IHeapElementManager heapElementManager) {
super(heapElementManager, 0L);
}
@@ -103,6 +105,14 @@
return freeDataBlocks[blockBits - PageConstant.MIN_DATA_BLOCK_BITS];
}
+ public long getFirstLeafPagePosition() {
+ return firstLeafPagePosition;
+ }
+
+ public void setFirstLeafPagePosition(final long firstLeafPagePosition) {
+ this.firstLeafPagePosition = firstLeafPagePosition;
+ }
+
public void clear() {
super.clear();
fileSizeAsNumberOfPage = 1L;
@@ -112,6 +122,7 @@
nextDataRecordIdentifier = 0;
lastRecordPositionInFile = -1L;
numberOfDataRecord = 0;
+ firstLeafPagePosition = -1L;
}
@Override
@@ -148,6 +159,7 @@
writeLong(nextDataRecordIdentifier);
writeLong(lastRecordPositionInFile);
writeInteger(numberOfDataRecord);
+ writeLong(firstLeafPagePosition);
initializeFreeDataBlock();
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
writeLong(freeDataBlocks[index]);
@@ -173,6 +185,7 @@
nextDataRecordIdentifier = readLong();
lastRecordPositionInFile = readLong();
numberOfDataRecord = readInteger();
+ firstLeafPagePosition = readLong();
initializeFreeDataBlock();
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
freeDataBlocks[index] = readLong();
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-08 05:55:35 UTC (rev 3075)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -57,7 +57,7 @@
private int byteSize;
- private long next;
+ private long next = -1L;
private IPageRecordable parentPage;
@@ -367,6 +367,7 @@
// ASSERTX
assert byteSize == computeByteSize() : byteSize + " for "
+ computeByteSize() + " computed";
+ next = leafPage.getNext();
} else {
final int newNumberOfEntries = totalNumberOfEntries / 2;
final int newLeafPageNumberOfEntries = totalNumberOfEntries
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-08 05:55:35 UTC (rev 3075)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -276,6 +276,7 @@
LeafPage newLeafPage = leafPage.split(dataRecordIdentifier, dataBlock);
btreePlusElementMgr.appendPageRecordable(newLeafPage);
newLeafPage.setValueIsChangedValueToSave();
+ newLeafPage.setNext(leafPage.getNext());
leafPage.setNext(newLeafPage.getPositionInFile());
if (nonTerminalPage == null) {
@@ -670,8 +671,7 @@
@Override
protected Iterator<DataRecordIdentifier> dataRecordIteratorImpl()
throws HeapException {
- // FIXMELUC ________to implement
- throw new HeapException("not implemented");
+ return new BtreePlusIterator(btreePlusElementMgr);
}
@Fortest
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java 2012-05-08 05:55:35 UTC (rev 3075)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -77,13 +77,13 @@
final BtreePlusElementMgr elementMgr = btreePlusDataManager
.getBtreePlusElementMgr();
IPageRecordable pageRecordable = elementMgr.getRoot();
+ long currentLeafPagePosition = elementMgr.getFirstLeafPagePosition();
int index = 0;
int currentDepth = 0;
int depth = -1;
int entriesCount = 0;
int leafPageCount = 0;
int nonTerminalPageCount = 0;
- // FIXMELUC _____________leaf page chain
// System.out.println("--- begin ---");
while (pageRecordable != null) {
elementMgr.clearReadCache();
@@ -120,12 +120,23 @@
+ lastKey + "(last key value) <=" + state.maxKey
+ "(max value)");
}
+
// check well formed
// if (currentDepth != 0 && !leafPage.wellFilled()) {
// throw new
// HeapException("not well filled "+leafPage.getByteSize());
// }
+ // check chaining
+ if (currentLeafPagePosition != leafPage.getPositionInFile()) {
+ throw new HeapException(
+ "bad current leaf page position\nexpected="
+ + currentLeafPagePosition
+ + ", currentLeafPage="
+ + leafPage.getPositionInFile());
+ }
+ currentLeafPagePosition = leafPage.getNext();
+
// check depth, all leaf page must be at same depth
if (depth == -1) {
depth = currentDepth;
@@ -224,6 +235,9 @@
throw new HeapException("bad record type " + recordType);
}
}
+ if (currentLeafPagePosition != -1L) {
+ throw new HeapException("bad current leaf page position");
+ }
// System.out.println("--- end ---");
return new IntegrityCheckResult(depth, entriesCount, leafPageCount,
nonTerminalPageCount);
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-08 05:55:35 UTC (rev 3075)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -240,7 +240,9 @@
leafPage.setNext(-1L);
leafPage.updateByteSize();
leafPage.setValueIsChangedValueToSave();
- header.setRootPagePosition(leafPage.getPositionInFile());
+ final long firstLeafPagePosition = leafPage.getPositionInFile();
+ header.setRootPagePosition(firstLeafPagePosition);
+ header.setFirstLeafPagePosition(firstLeafPagePosition);
}
public void newRootNonTerminalPage(final LeafPage leftLeafPage,
@@ -302,6 +304,7 @@
public void removeRoot() throws HeapException {
header.setRootPagePosition(-1L);
+ header.setFirstLeafPagePosition(-1L);
}
public void remove(final IDataBlock dataBlock) throws HeapException {
@@ -390,4 +393,8 @@
public void clearReadCache() {
heapElementManager.clearReadCache();
}
+
+ public long getFirstLeafPagePosition() {
+ return header.getFirstLeafPagePosition();
+ }
}
Added: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java (rev 0)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusIterator.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.btreeplus.service;
+
+import java.util.Iterator;
+
+import net.sf.joafip.NotStorableClass;
+import net.sf.joafip.btreeplus.entity.LeafPage;
+import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+@NotStorableClass
+public class BtreePlusIterator implements Iterator<DataRecordIdentifier> {
+
+ private long nextPosition;
+
+ private int nextIndex;
+
+ private DataRecordIdentifier next;
+
+ private final BtreePlusElementMgr btreePlusElementMgr;
+
+ public BtreePlusIterator(final BtreePlusElementMgr btreePlusElementMgr) {
+ super();
+ this.btreePlusElementMgr = btreePlusElementMgr;
+ nextPosition = btreePlusElementMgr.getFirstLeafPagePosition();
+ nextIndex = 0;
+ computeNext();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return next != null;
+ }
+
+ @Override
+ public DataRecordIdentifier next() {
+ final DataRecordIdentifier result = next;
+ computeNext();
+ return result;
+ }
+
+ private void computeNext() {
+ try {
+ if (nextPosition == -1L) {
+ next = null;
+ } else {
+ final LeafPage leafPage = (LeafPage) btreePlusElementMgr
+ .getPage(nextPosition, null, -1);
+ next = leafPage.getKey(nextIndex++);
+ if (nextIndex == leafPage.getNumberOfKeyEntries()) {
+ nextPosition = leafPage.getNext();
+ nextIndex = 0;
+ }
+ }
+ } catch (Exception exception) {
+ throw new IllegalStateException("computing next", exception);
+ }
+ }
+
+ @Override
+ public void remove() {
+ throw new UnsupportedOperationException();
+ }
+}
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java 2012-05-08 05:55:35 UTC (rev 3075)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -25,6 +25,7 @@
import java.io.File;
import java.util.Arrays;
+import java.util.Iterator;
import net.sf.joafip.AbstractCommonDeleteFileTestCase;
import net.sf.joafip.NoStorableAccess;
@@ -99,6 +100,7 @@
assertTrue("bad value", Arrays.equals(createData(k), data));
}
}
+ iterate(max);
}
public void testBalanceLeftToRight() throws HeapException {
@@ -114,8 +116,20 @@
assertTrue("bad value", Arrays.equals(createData(k), data));
}
}
+ iterate(max);
}
+ private void iterate(final int max) throws HeapException {
+ final Iterator<DataRecordIdentifier> iterator = dataManager
+ .dataRecordIterator();
+ for (int identifier = 0; identifier < max; identifier++) {
+ assertTrue("must has next", iterator.hasNext());
+ assertEquals("bad value", new DataRecordIdentifier(identifier),
+ iterator.next());
+ }
+ assertFalse("must not has next", iterator.hasNext());
+ }
+
private byte[] createData(final int identifier) {
final byte[] data = new byte[8];
data[0] = (byte) identifier;
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java 2012-05-08 05:55:35 UTC (rev 3075)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java 2012-05-08 06:54:26 UTC (rev 3076)
@@ -25,6 +25,7 @@
import java.io.File;
import java.util.Arrays;
+import java.util.Iterator;
import net.sf.joafip.AbstractCommonDeleteFileTestCase;
import net.sf.joafip.NoStorableAccess;
@@ -131,6 +132,7 @@
assertTrue("bad value", Arrays.equals(createData(k), data));
}
}
+ iterate(max);
}
public void testBalanceLeftToRight() throws HeapException {
@@ -157,8 +159,21 @@
assertTrue("bad value", Arrays.equals(createData(k), data));
}
}
+ iterate(max);
}
+ private void iterate(final int max) throws HeapException {
+ final Iterator<DataRecordIdentifier> iterator = dataManager
+ .dataRecordIterator();
+ for (int identifier = 0; identifier < max; identifier++) {
+ assertTrue("must has next", iterator.hasNext());
+ assertEquals("bad value",
+ DATA_RECORD_KEY_MANAGER.createKey(new BigKey(identifier)),
+ iterator.next());
+ }
+ assertFalse("must not has next", iterator.hasNext());
+ }
+
private byte[] createData(final int identifier) {
final byte[] data = new byte[8];
data[0] = (byte) identifier;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-08 05:55:44
|
Revision: 3075
http://joafip.svn.sourceforge.net/joafip/?rev=3075&view=rev
Author: luc_peuvrier
Date: 2012-05-08 05:55:35 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: new tests and corrections, rotation optimization
Modified Paths:
--------------
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/AbstractNodePage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecordable.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/NonTerminalPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordIdentifier.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordKey.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusServiceTests.java
Added Paths:
-----------
trunk/joafip-btreeplus/logs/
trunk/joafip-btreeplus/src/main/resources/log4j.properties
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java
Property Changed:
----------------
trunk/joafip-btreeplus/
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -171,8 +171,8 @@
final int identifier = Integer.parseInt(reader.readLine());
addItem(session, identifier);
+ // consistencyCheck();
insertLogWriter.println(identifier);
- // consistencyCheck();
if (count % BATCH_SIZE == BATCH_SIZE - 1) {
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -33,6 +33,7 @@
import net.sf.joafip.file.service.HelperFileUtil;
import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.entity.HeapFileSetup;
+import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.kvstore.service.IHeapDataManager;
import net.sf.joafip.logger.JoafipLogger;
@@ -57,7 +58,9 @@
protected void consistencyCheck() throws HeapException,
FilePersistenceException {
final IntegrityCheckResult result = BtreePlusDataMgrIntegrityChecker
- .getInstance().checkIntegrity(getDataManager());
+ .getInstance().checkIntegrity(getDataManager(),
+ new DataRecordIdentifier(-1),
+ new DataRecordIdentifier(Long.MAX_VALUE));
System.out.println("depth " + result.getDepth());
System.out.println("entriesCount " + result.getEntriesCount());
System.out.println("leafPageCount " + result.getLeafPageCount());
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -2,6 +2,7 @@
import net.sf.joafip.btreeplus.entity.IntegrityCheckResult;
import net.sf.joafip.btreeplus.service.BtreePlusDataMgrIntegrityChecker;
+import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.logger.JoafipLogger;
import net.sf.joafip.service.FilePersistenceException;
@@ -16,7 +17,9 @@
protected void consistencyCheck() throws HeapException,
FilePersistenceException {
final IntegrityCheckResult result = BtreePlusDataMgrIntegrityChecker
- .getInstance().checkIntegrity(getDataManager());
+ .getInstance().checkIntegrity(getDataManager(),
+ new DataRecordIdentifier(-1),
+ new DataRecordIdentifier(Long.MAX_VALUE));
System.out.println("depth " + result.getDepth());
System.out.println("entriesCount " + result.getEntriesCount());
System.out.println("leafPageCount " + result.getLeafPageCount());
Property changes on: trunk/joafip-btreeplus
___________________________________________________________________
Modified: svn:ignore
- .settings
.classpath
.project
+ .settings
.classpath
.project
runtime
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/AbstractNodePage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/AbstractNodePage.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/AbstractNodePage.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -41,6 +41,8 @@
this.longKey = longKey;
}
+ public abstract DataRecordIdentifier getLastKey();
+
protected int entrySize(final DataRecordIdentifier key) {
int entryByteSize = 8/* long size for pointer */+ 8/* long size for value */;
if (!longKey) {
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -76,7 +76,7 @@
} else {
numberOfPage = n + 1;
}
- // FIXMELUC ________waste space, see below
+ // FIXMELUC ____waste space, see below
// dataBlockDataSize=(numberOfPage<<PageConstant.PAGE_BITS)-
// HEAD_SIZE - 4/* crc32 */
} else {
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecordable.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecordable.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecordable.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -47,7 +47,7 @@
*/
int getByteSize();
- void updateByteSize();
+ void updateByteSize() throws HeapException;
IPageRecord getPageRecord() throws HeapException;
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -59,4 +59,19 @@
public int getNonTerminalPageCount() {
return nonTerminalPageCount;
}
+
+ @Override
+ public String toString() {
+ StringBuilder builder = new StringBuilder();
+ builder.append("IntegrityCheckResult [depth=");
+ builder.append(depth);
+ builder.append(", entriesCount=");
+ builder.append(entriesCount);
+ builder.append(", leafPageCount=");
+ builder.append(leafPageCount);
+ builder.append(", nonTerminalPageCount=");
+ builder.append(nonTerminalPageCount);
+ builder.append("]");
+ return builder.toString();
+ }
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -42,7 +42,7 @@
/**/4/* int size for crc32 */+
/**/8/* for next */;
- private static int MAX_NUMBER_OF_ENTRIES =
+ public static int MAX_NUMBER_OF_ENTRIES =
/**/(int) ((PageConstant.PAGE_SIZE - HEAD_TAIL_SIZE) / (8/*
* long size for
* pointer
@@ -65,7 +65,7 @@
private int index;
- public LeafPage(final boolean longKey) {
+ public LeafPage(final boolean longKey) throws HeapException {
this(0, longKey);
updateByteSize();
}
@@ -139,11 +139,11 @@
}
@Override
- public void updateByteSize() {
+ public void updateByteSize() throws HeapException {
byteSize = computeByteSize();
}
- private int computeByteSize() {
+ private int computeByteSize() throws HeapException {
int xbyteSize;
if (longKey) {
// <<4 for *16: 8 (long size for pointer) + 8 (long size for value)
@@ -153,10 +153,29 @@
for (int index = 0; index < numberOfKeyEntries; index++) {
xbyteSize += entrySize(nodes[index].dataRecordIdentifier);
}
+ if (xbyteSize > PageConstant.PAGE_SIZE) {
+ throw new HeapException("too much data " + xbyteSize
+ + " bytes for maximum of " + PageConstant.PAGE_SIZE);
+ }
}
return xbyteSize;
}
+ private int computeByteSize(final int offset, final int length) {
+ int xbyteSize;
+ if (longKey) {
+ // <<4 for *16: 8 (long size for pointer) + 8 (long size for value)
+ xbyteSize = HEAD_TAIL_SIZE + (length << 4);
+ } else {
+ xbyteSize = HEAD_TAIL_SIZE;
+ int index = offset;
+ for (int count = 0; count < length; count++) {
+ xbyteSize += entrySize(nodes[index++].dataRecordIdentifier);
+ }
+ }
+ return xbyteSize;
+ }
+
/**
*
* @param dataRecordIdentifier
@@ -236,6 +255,15 @@
return canAdd;
}
+ /**
+ *
+ * @param dataRecordIdentifier
+ * key to add
+ * @param dataBlock
+ * added data for the key
+ * @return
+ * @throws HeapException
+ */
public LeafPage split(final DataRecordIdentifier dataRecordIdentifier,
final IDataBlock dataBlock) throws HeapException {
final int insertBeforeIndex = computeInsertBeforeIndex(dataRecordIdentifier);
@@ -318,18 +346,19 @@
/**
*
* @param leafPage
- * @return true if merge in this page, leafPage is to be destroyed
+ * @return 0 if merged, 1 if balanced, or 2 if no changes
+ * @throws HeapException
*/
- public boolean equilibrate(final LeafPage leafPage) {
+ public int tryBalanceOrMerge(final LeafPage leafPage) throws HeapException {
// ASSERTX
assert byteSize != 0 : "unknow current byte size";
final int leafPageByteSize = leafPage.getByteSize();
final int leafPageNumberOfKeyEntries = leafPage.numberOfKeyEntries;
final int totalNumberOfEntries = numberOfKeyEntries
+ leafPageNumberOfKeyEntries;
- final boolean merged;
+ final int result;
if (byteSize + leafPageByteSize - HEAD_TAIL_SIZE <= PageConstant.PAGE_SIZE) {
- merged = true;
+ result = 0;// merged
System.arraycopy(leafPage.nodes, 0, nodes, numberOfKeyEntries,
leafPageNumberOfKeyEntries);
numberOfKeyEntries = totalNumberOfEntries;
@@ -339,39 +368,58 @@
assert byteSize == computeByteSize() : byteSize + " for "
+ computeByteSize() + " computed";
} else {
- merged = false;
final int newNumberOfEntries = totalNumberOfEntries / 2;
final int newLeafPageNumberOfEntries = totalNumberOfEntries
- newNumberOfEntries;
if (newNumberOfEntries > numberOfKeyEntries) {
- final int length = newNumberOfEntries - numberOfKeyEntries;
- System.arraycopy(leafPage.nodes, 0, nodes, numberOfKeyEntries,
- length);
-
- System.arraycopy(leafPage.nodes, length, leafPage.nodes, 0,
- leafPageNumberOfKeyEntries);
-
- numberOfKeyEntries = newNumberOfEntries;
- leafPage.numberOfKeyEntries = newLeafPageNumberOfEntries;
- updateByteSize();
- leafPage.updateByteSize();
+ // right to left
+ if (longKey) {
+ result = 1;
+ } else {
+ final int newLeftSize = byteSize
+ + leafPage.computeByteSize(0,
+ leafPageNumberOfKeyEntries
+ - newLeafPageNumberOfEntries);
+ result = newLeftSize > PageConstant.PAGE_SIZE ? 2 : 1;
+ }
+ if (result == 1) {
+ final int length = newNumberOfEntries - numberOfKeyEntries;
+ System.arraycopy(leafPage.nodes, 0, nodes,
+ numberOfKeyEntries, length);
+ System.arraycopy(leafPage.nodes, length, leafPage.nodes, 0,
+ newLeafPageNumberOfEntries);
+ numberOfKeyEntries = newNumberOfEntries;
+ leafPage.numberOfKeyEntries = newLeafPageNumberOfEntries;
+ updateByteSize();
+ leafPage.updateByteSize();
+ }
} else if (newLeafPageNumberOfEntries > leafPageNumberOfKeyEntries) {
- final int length = newLeafPageNumberOfEntries
- - leafPageNumberOfKeyEntries;
-
- System.arraycopy(leafPage.nodes, 0, leafPage.nodes, length,
- leafPageNumberOfKeyEntries);
-
- System.arraycopy(nodes, newNumberOfEntries, leafPage.nodes, 0,
- length);
-
- numberOfKeyEntries = newNumberOfEntries;
- leafPage.numberOfKeyEntries = newLeafPageNumberOfEntries;
- updateByteSize();
- leafPage.updateByteSize();
- }// else no changes
+ // left to right
+ if (longKey) {
+ result = 1;
+ } else {
+ final int newRightSize = leafPageByteSize
+ + computeByteSize(newNumberOfEntries,
+ numberOfKeyEntries - newNumberOfEntries);
+ result = newRightSize > PageConstant.PAGE_SIZE ? 2 : 1;
+ }
+ if (result == 1) {
+ final int length = newLeafPageNumberOfEntries
+ - leafPageNumberOfKeyEntries;
+ System.arraycopy(leafPage.nodes, 0, leafPage.nodes, length,
+ leafPageNumberOfKeyEntries);
+ System.arraycopy(nodes, newNumberOfEntries, leafPage.nodes,
+ 0, length);
+ numberOfKeyEntries = newNumberOfEntries;
+ leafPage.numberOfKeyEntries = newLeafPageNumberOfEntries;
+ updateByteSize();
+ leafPage.updateByteSize();
+ }
+ } else {
+ result = 2; // no changes
+ }
}
- return merged;
+ return result;
}
public DataRecordIdentifier getFirstKey() {
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -44,7 +44,7 @@
/**/4/* int size for crc32 */+
/**/8/* last pointer long size */;
- private static int MAX_NUMBER_OF_ENTRIES =
+ public static int MAX_NUMBER_OF_ENTRIES =
/**/(int) ((PageConstant.PAGE_SIZE - HEAD_TAIL_SIZE) / (8/*
* long size for
* pointer
@@ -69,11 +69,18 @@
private DataRecordIdentifier middleKey;
- public NonTerminalPage(final boolean longKey) {
+ @Fortest
+ public NonTerminalPage(final boolean longKey) throws HeapException {
this(0, longKey);
updateByteSize();
}
+ /**
+ * not static set creation
+ *
+ * @param numberOfKeyEntries
+ * @param longKey
+ */
public NonTerminalPage(final int numberOfKeyEntries, final boolean longKey) {
super(longKey);
this.numberOfKeyEntries = numberOfKeyEntries;
@@ -83,7 +90,7 @@
@Fortest
public NonTerminalPage(final int numberOfKeyEntries,
final DataRecordIdentifier[] keys, final long[] pagePosition,
- final boolean longKey) {
+ final boolean longKey) throws HeapException {
super(longKey);
assert numberOfKeyEntries == keys.length
&& numberOfKeyEntries + 1 == pagePosition.length;
@@ -92,6 +99,8 @@
System.arraycopy(pagePosition, 0, this.pagePositions, 0,
numberOfKeyEntries + 1);
updateByteSize();
+ // ASSERTX
+ assert checkKeys();
}
@Override
@@ -128,6 +137,9 @@
keys[index] = key;
}
setValueIsChangedValueToSave();
+ // no because us for state setting
+ // //ASSERTX
+ // assert checkKeys();
}
/**
@@ -140,13 +152,23 @@
*/
public boolean setKey(final int index, final DataRecordIdentifier key)
throws HeapException {
- DataRecordIdentifier oldKey = keys[index];
- keys[index] = key;
- byteSize = byteSize - entrySize(oldKey) + entrySize(key);
- // ASSERTX
- assert byteSize == computeByteSize();
- setValueIsChangedValueToSave();
- return byteSize < PageConstant.PAGE_SIZE;
+ if (longKey) {
+ keys[index] = key;
+ // ASSERTX
+ assert checkKeys();
+ setValueIsChangedValueToSave();
+ return true;
+ } else {
+ DataRecordIdentifier oldKey = keys[index];
+ keys[index] = key;
+ // ASSERTX
+ assert checkKeys();
+ byteSize = byteSize - entrySize(oldKey) + entrySize(key);
+ // ASSERTX
+ assert byteSize == computeByteSize();
+ setValueIsChangedValueToSave();
+ return byteSize < PageConstant.PAGE_SIZE;
+ }
}
@Override
@@ -157,11 +179,16 @@
}
@Override
- public void updateByteSize() {
+ public void updateByteSize() throws HeapException {
byteSize = computeByteSize();
}
- private int computeByteSize() {
+ @Fortest
+ public void updateByteSizeAcceptBigger() throws HeapException {
+ byteSize = computeByteSizeAcceptBigger();
+ }
+
+ private int computeByteSize() throws HeapException {
int xbyteSize;
if (longKey) {
// <<4 for *16: 8 (long size for pointer) + 8 (long size for value)
@@ -172,9 +199,51 @@
xbyteSize += entrySize(keys[index]);
}
}
+ if (xbyteSize > PageConstant.PAGE_SIZE) {
+ throw new HeapException("too much data " + xbyteSize
+ + " bytes for maximum of " + PageConstant.PAGE_SIZE);
+ }
return xbyteSize;
}
+ private int computeByteSizeAcceptBigger() {
+ int xbyteSize;
+ if (longKey) {
+ // <<4 for *16: 8 (long size for pointer) + 8 (long size for value)
+ xbyteSize = HEAD_TAIL_SIZE + (numberOfKeyEntries << 4);
+ } else {
+ xbyteSize = HEAD_TAIL_SIZE;
+ for (int index = 0; index < numberOfKeyEntries; index++) {
+ xbyteSize += entrySize(keys[index]);
+ }
+ }
+ return xbyteSize;
+ }
+
+ private int computeByteSize(final int offset, final int length)
+ throws HeapException {
+ int xbyteSize;
+ if (longKey) {
+ // <<4 for *16: 8 (long size for pointer) + 8 (long size for value)
+ xbyteSize = HEAD_TAIL_SIZE + (length << 4);
+ } else {
+ xbyteSize = HEAD_TAIL_SIZE;
+ int index = offset;
+ for (int count = 0; count < length; count++) {
+ xbyteSize += entrySize(keys[index++]);
+ }
+ }
+ return xbyteSize;
+ }
+
+ private int computeByteSizeForAssert() {
+ try {
+ return computeByteSize();
+ } catch (HeapException exception) {
+ throw new AssertionError(exception);
+ }
+ }
+
@Override
public int getNumberOfKeyEntries() {
return numberOfKeyEntries;
@@ -241,10 +310,12 @@
keys[index] = key;
pagePositions[index + 1] = newRightILeafPage.getPositionInFile();
// ASSERTX
+ assert checkKeys();
+ // ASSERTX
assert byteSize != 0 : "unknow current byte size";
byteSize += entrySize;
// ASSERTX
- assert byteSize == computeByteSize();
+ assert byteSize == computeByteSizeAcceptBigger();
setValueIsChangedValueToSave();
return byteSize < PageConstant.PAGE_SIZE;
}
@@ -274,10 +345,12 @@
pagePositions[index + 1] = rightSonNonTerminalPage.getPositionInFile();
// ASSERTX
+ assert checkKeys();
+ // ASSERTX
assert byteSize != 0 : "unknow current byte size";
byteSize += entrySize;
// ASSERTX
- assert byteSize == computeByteSize();
+ assert byteSize == computeByteSizeAcceptBigger();
setValueIsChangedValueToSave();
return byteSize < PageConstant.PAGE_SIZE;
}
@@ -296,6 +369,10 @@
System.arraycopy(pagePositions, splitIndex + 1,
nonTerminalPage.pagePositions, 0, newNumberOfKeyEntries + 1);
+ // ASSERTX
+ assert checkKeys();
+ assert nonTerminalPage.checkKeys();
+
nonTerminalPage.updateByteSize();
numberOfKeyEntries = newNumberOfKeyEntries;
updateByteSize();
@@ -325,11 +402,13 @@
System.arraycopy(pagePositions, leafPageInParentIndex + 1,
pagePositions, leafPageInParentIndex, length + 1);
// ASSERTX
+ assert checkKeys();
+ // ASSERTX
assert byteSize != 0 : "unknow current byte size";
byteSize -= entrySize(key);
// ASSERTX
- assert byteSize == computeByteSize() : "byteSize=" + byteSize
- + ", computed=" + computeByteSize();
+ assert byteSize == computeByteSizeForAssert() : "byteSize=" + byteSize
+ + ", computed=" + computeByteSizeForAssert();
}
public boolean wellFilled() {
@@ -343,20 +422,21 @@
*
* @param middleKey
* @param rightNonTerminalPage
- * @return true if merge in this page, nonTerminalPage is to be destroyed
+ * @return 0 if merged, 1 if balanced, or 2 if no changes
+ * @throws HeapException
*/
- public boolean equilibrate(final DataRecordIdentifier middleKey,
- final NonTerminalPage rightNonTerminalPage) {
+ public int tryBalanceOrMerge(final DataRecordIdentifier middleKey,
+ final NonTerminalPage rightNonTerminalPage) throws HeapException {
assert byteSize != 0 : "unknow current byte size";
final int rightPageByteSize = rightNonTerminalPage.getByteSize();
final int middleKeySize = entrySize(middleKey);
final int rightPageNumberOfKeyEntries = rightNonTerminalPage.numberOfKeyEntries;
final int totalNumberOfEntries = numberOfKeyEntries
+ rightPageNumberOfKeyEntries;
- final boolean merged;
+ final int result;
if (byteSize + middleKeySize + rightPageByteSize - HEAD_TAIL_SIZE <= PageConstant.PAGE_SIZE) {
// can merge
- merged = true;
+ result = 0;
System.arraycopy(rightNonTerminalPage.pagePositions, 0,
pagePositions, numberOfKeyEntries + 1,
rightPageNumberOfKeyEntries + 1);
@@ -366,59 +446,94 @@
numberOfKeyEntries = totalNumberOfEntries + 1;
byteSize += middleKeySize + rightPageByteSize - HEAD_TAIL_SIZE;
// ASSERTX
+ assert checkKeys();
+ // ASSERTX
assert byteSize == computeByteSize() : "byteSize=" + byteSize
+ ", computed=" + computeByteSize();
} else {
- merged = false;
final int newNumberOfEntries = totalNumberOfEntries / 2;
final int newRightPageNumberOfEntries = totalNumberOfEntries
- newNumberOfEntries;
if (newNumberOfEntries > numberOfKeyEntries) {
- int length = newNumberOfEntries - numberOfKeyEntries;
- System.arraycopy(rightNonTerminalPage.pagePositions, 0,
- pagePositions, numberOfKeyEntries + 1, length);
- keys[numberOfKeyEntries] = middleKey;
- System.arraycopy(rightNonTerminalPage.keys, 0, keys,
- numberOfKeyEntries + 1, length - 1);
- this.middleKey = rightNonTerminalPage.keys[length - 1];
- numberOfKeyEntries = newNumberOfEntries;
- updateByteSize();
- length = rightPageNumberOfKeyEntries
- - newRightPageNumberOfEntries;
- System.arraycopy(rightNonTerminalPage.pagePositions, length,
- rightNonTerminalPage.pagePositions, 0,
- rightPageNumberOfKeyEntries + 1);
- System.arraycopy(rightNonTerminalPage.keys, length,
- rightNonTerminalPage.keys, 0,
- rightPageNumberOfKeyEntries);
- rightNonTerminalPage.numberOfKeyEntries = newRightPageNumberOfEntries;
- rightNonTerminalPage.updateByteSize();
+ // right to left
+ if (longKey) {
+ result = 1;
+ } else {
+ final int newLeftSize = byteSize
+ + middleKeySize
+ + rightNonTerminalPage.computeByteSize(0,
+ rightPageNumberOfKeyEntries
+ - newRightPageNumberOfEntries);
+ result = newLeftSize > PageConstant.PAGE_SIZE ? 2 : 1;
+ }
+ if (result == 1) {
+ int length = newNumberOfEntries - numberOfKeyEntries;
+ System.arraycopy(rightNonTerminalPage.pagePositions, 0,
+ pagePositions, numberOfKeyEntries + 1, length);
+ keys[numberOfKeyEntries] = middleKey;
+ System.arraycopy(rightNonTerminalPage.keys, 0, keys,
+ numberOfKeyEntries + 1, length - 1);
+ this.middleKey = rightNonTerminalPage.keys[length - 1];
+ numberOfKeyEntries = newNumberOfEntries;
+ // ASSERTX
+ assert checkKeys();
+ updateByteSize();
+ length = rightPageNumberOfKeyEntries
+ - newRightPageNumberOfEntries;
+ System.arraycopy(rightNonTerminalPage.pagePositions,
+ length, rightNonTerminalPage.pagePositions, 0,
+ newRightPageNumberOfEntries + 1);
+ System.arraycopy(rightNonTerminalPage.keys, length,
+ rightNonTerminalPage.keys, 0,
+ newRightPageNumberOfEntries);
+ rightNonTerminalPage.numberOfKeyEntries = newRightPageNumberOfEntries;
+ rightNonTerminalPage.updateByteSize();
+ // ASSERTX
+ assert rightNonTerminalPage.checkKeys();
+ }
} else if (newRightPageNumberOfEntries > rightPageNumberOfKeyEntries) {
- final int length = newRightPageNumberOfEntries
- - rightPageNumberOfKeyEntries;
- this.middleKey = keys[newNumberOfEntries];
+ // left to right
+ if (longKey) {
+ result = 1;
+ } else {
+ final int newRightSize = rightPageByteSize
+ + middleKeySize
+ + computeByteSize(newNumberOfEntries,
+ numberOfKeyEntries - newNumberOfEntries);
+ result = newRightSize > PageConstant.PAGE_SIZE ? 2 : 1;
+ }
+ if (result == 1) {
+ final int length = newRightPageNumberOfEntries
+ - rightPageNumberOfKeyEntries;
+ this.middleKey = keys[newNumberOfEntries];
- System.arraycopy(rightNonTerminalPage.pagePositions, 0,
- rightNonTerminalPage.pagePositions, length,
- rightPageNumberOfKeyEntries + 1);
- System.arraycopy(rightNonTerminalPage.keys, 0,
- rightNonTerminalPage.keys, length,
- rightPageNumberOfKeyEntries);
+ System.arraycopy(rightNonTerminalPage.pagePositions, 0,
+ rightNonTerminalPage.pagePositions, length,
+ rightPageNumberOfKeyEntries + 1);
+ System.arraycopy(rightNonTerminalPage.keys, 0,
+ rightNonTerminalPage.keys, length,
+ rightPageNumberOfKeyEntries);
- System.arraycopy(pagePositions, newNumberOfEntries + 1,
- rightNonTerminalPage.pagePositions, 0, length);
- System.arraycopy(keys, newNumberOfEntries + 1,
- rightNonTerminalPage.keys, 0, length - 1);
+ System.arraycopy(pagePositions, newNumberOfEntries + 1,
+ rightNonTerminalPage.pagePositions, 0, length);
+ System.arraycopy(keys, newNumberOfEntries + 1,
+ rightNonTerminalPage.keys, 0, length - 1);
- rightNonTerminalPage.keys[length - 1] = middleKey;
+ rightNonTerminalPage.keys[length - 1] = middleKey;
- rightNonTerminalPage.numberOfKeyEntries = newRightPageNumberOfEntries;
- rightNonTerminalPage.updateByteSize();
- numberOfKeyEntries = newNumberOfEntries;
- updateByteSize();
+ rightNonTerminalPage.numberOfKeyEntries = newRightPageNumberOfEntries;
+ rightNonTerminalPage.updateByteSize();
+ numberOfKeyEntries = newNumberOfEntries;
+ updateByteSize();
+ // ASSERTX
+ assert checkKeys();
+ assert rightNonTerminalPage.checkKeys();
+ }
+ } else {
+ result = 2;
}
}
- return merged;
+ return result;
}
public DataRecordIdentifier getLastKey() {
@@ -432,4 +547,20 @@
public DataRecordIdentifier getFirstKey() {
return keys[0];
}
+
+ /**
+ * for assertion
+ *
+ * @return true if keys ok
+ */
+ public boolean checkKeys() {
+ DataRecordIdentifier currentKey = keys[0];
+ boolean ok = true;
+ for (int index = 1; ok && index < numberOfKeyEntries; index++) {
+ final DataRecordIdentifier nextKey = keys[index];
+ ok = currentKey.compareTo(nextKey) < 0;
+ currentKey = nextKey;
+ }
+ return ok;
+ }
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -43,4 +43,15 @@
this.dataRecordIdentifier = dataRecordIdentifier;
this.pointer = pointer;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("PageNode [dataRecordIdentifier=");
+ builder.append(dataRecordIdentifier);
+ builder.append(", pointer=");
+ builder.append(pointer);
+ builder.append("]");
+ return builder.toString();
+ }
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -201,10 +201,10 @@
final DataRecordIdentifier dataRecordIdentifier, final byte[] data)
throws HeapException {
final IPageRecordable root = btreePlusElementMgr.getRoot();
- LeafPage leafPage = leafPage(root, dataRecordIdentifier);
+ final LeafPage leafPage = leafPage(root, dataRecordIdentifier);
final boolean created;
if (leafPage == null) {
- // no existing data
+ // no existing data because no leaf page for key
created = true;
final IDataBlock dataBlock = btreePlusElementMgr
.createDataBlock(data);
@@ -212,7 +212,7 @@
.newRootLeafPage(dataRecordIdentifier, dataBlock);
btreePlusElementMgr.incrementNumberOfDataRecord();
} else {
- // existing data
+ // existing leaf page for key
long dataBlockPosition = leafPage
.getDataBlockPosition(dataRecordIdentifier);
if (dataBlockPosition == -1) {
@@ -221,22 +221,19 @@
final IDataBlock dataBlock = btreePlusElementMgr
.createDataBlock(data);
if (!leafPage.add(dataRecordIdentifier, dataBlock)) {
- // FIXMELUC ________rotation, dispatch on sibling
- LeafPage newLeafPage = leafPage.split(dataRecordIdentifier,
- dataBlock);
- btreePlusElementMgr.appendPageRecordable(newLeafPage);
- newLeafPage.setValueIsChangedValueToSave();
- leafPage.setNext(newLeafPage.getPositionInFile());
-
- NonTerminalPage nonTerminalPage = (NonTerminalPage) leafPage
+ final NonTerminalPage nonTerminalPage = (NonTerminalPage) leafPage
.getParentPage();
if (nonTerminalPage == null) {
- btreePlusElementMgr.newRootNonTerminalPage(leafPage,
- newLeafPage);
+ splitLeafPage(leafPage, dataRecordIdentifier,
+ nonTerminalPage, dataBlock);
+ } else if (tryBalanceOrMerge(leafPage, nonTerminalPage)) {
+ if (!leafPage.add(dataRecordIdentifier, dataBlock)) {
+ splitLeafPage(leafPage, dataRecordIdentifier,
+ nonTerminalPage, dataBlock);
+ }
} else {
- if (!nonTerminalPage.add(leafPage, newLeafPage)) {
- equilibrateFull(nonTerminalPage);
- }
+ splitLeafPage(leafPage, dataRecordIdentifier,
+ nonTerminalPage, dataBlock);
}
}
btreePlusElementMgr.incrementNumberOfDataRecord();
@@ -262,38 +259,32 @@
/**
*
+ * @param leafPage
+ * in which split and add
+ * @param dataRecordIdentifier
+ * key to add
* @param nonTerminalPage
- * a too big page
+ * parent page
+ * @param dataBlock
+ * added data for the key
* @throws HeapException
*/
- private void equilibrateFull(NonTerminalPage nonTerminalPage)
+ private void splitLeafPage(final LeafPage leafPage,
+ final DataRecordIdentifier dataRecordIdentifier,
+ final NonTerminalPage nonTerminalPage, final IDataBlock dataBlock)
throws HeapException {
- // FIXMELUC ________rotation, dispatch on sibling
- INonTerminalPage newNonTerminalPage = nonTerminalPage.split();
- DataRecordIdentifier middleKey = nonTerminalPage.getAndClearMiddleKey();
- // ASSERTX
- assert middleKey != null;
- do {
- btreePlusElementMgr.appendPageRecordable(newNonTerminalPage);
- newNonTerminalPage.setValueIsChangedValueToSave();
- NonTerminalPage parent = (NonTerminalPage) nonTerminalPage
- .getParentPage();
- if (parent == null) {
- btreePlusElementMgr.newRootNonTerminalPage(nonTerminalPage,
- middleKey, newNonTerminalPage);
- newNonTerminalPage = null;
- } else {
- if (parent.add(nonTerminalPage, middleKey, newNonTerminalPage)) {
- newNonTerminalPage = null;
- } else {
- newNonTerminalPage = parent.split();
- middleKey = parent.getAndClearMiddleKey();
- // ASSERTX
- assert middleKey != null;
- nonTerminalPage = parent;
- }
+ LeafPage newLeafPage = leafPage.split(dataRecordIdentifier, dataBlock);
+ btreePlusElementMgr.appendPageRecordable(newLeafPage);
+ newLeafPage.setValueIsChangedValueToSave();
+ leafPage.setNext(newLeafPage.getPositionInFile());
+
+ if (nonTerminalPage == null) {
+ btreePlusElementMgr.newRootNonTerminalPage(leafPage, newLeafPage);
+ } else {
+ if (!nonTerminalPage.add(leafPage, newLeafPage)) {
+ split(nonTerminalPage);
}
- } while (newNonTerminalPage != null);
+ }
}
@Override
@@ -306,7 +297,7 @@
deleted = false;
} else {
deleted = true;
- LeafPage leafPage = dataBlock.getParentLeafPage();
+ final LeafPage leafPage = dataBlock.getParentLeafPage();
int indexInLeafPage = dataBlock.getIndexInLeafPage();
btreePlusElementMgr.remove(dataBlock);
leafPage.remove(indexInLeafPage);
@@ -318,63 +309,18 @@
btreePlusElementMgr.removeRoot();
}
} else {
- final int leafPageInParentIndex = leafPage.getInParentIndex();
if (leafPage.wellFilled()) {
+ final int leafPageInParentIndex = leafPage
+ .getInParentIndex();
if (leafPageInParentIndex != nonTerminalPage
.getNumberOfKeyEntries()) {
if (!nonTerminalPage.setKey(leafPageInParentIndex,
leafPage.getLastKey())) {
- equilibrateFull(nonTerminalPage);
+ split(nonTerminalPage);
}
}
- } else if (leafPageInParentIndex != 0) {
- final int leftLeafPageInParentIndex = leafPageInParentIndex - 1;
- final long leftLeafPagePosition = nonTerminalPage
- .getPagePointer(leftLeafPageInParentIndex);
- final LeafPage leftLeafPage = (LeafPage) btreePlusElementMgr
- .getPage(leftLeafPagePosition, nonTerminalPage,
- leftLeafPageInParentIndex);
- if (leftLeafPage.equilibrate(leafPage)) {
- // leaf page merged in left leaf page
- btreePlusElementMgr.freePage(leafPage.getPageRecord());
- nonTerminalPage.remove(leafPageInParentIndex);
- if (nonTerminalPage.setKey(leftLeafPageInParentIndex,
- leftLeafPage.getLastKey())) {
- equilibrate(nonTerminalPage);
- } else {
- equilibrateFull(nonTerminalPage);
- }
- } else {
- if (!nonTerminalPage.setKey(leftLeafPageInParentIndex,
- leftLeafPage.getLastKey())) {
- equilibrateFull(nonTerminalPage);
- }
- }
- } else if (leafPageInParentIndex != nonTerminalPage
- .getNumberOfKeyEntries() - 1) {
- final int rightLeafPageinParentIndex = leafPageInParentIndex + 1;
- final long rightLeafPagePosition = nonTerminalPage
- .getPagePointer(rightLeafPageinParentIndex);
- final LeafPage rightLeafPage = (LeafPage) btreePlusElementMgr
- .getPage(rightLeafPagePosition, nonTerminalPage,
- rightLeafPageinParentIndex);
- if (leafPage.equilibrate(rightLeafPage)) {
- // right leaf page merged in leaf page
- btreePlusElementMgr.freePage(rightLeafPage
- .getPageRecord());
- nonTerminalPage.remove(rightLeafPageinParentIndex);
- if (nonTerminalPage.setKey(leafPageInParentIndex,
- leafPage.getLastKey())) {
- equilibrate(nonTerminalPage);
- } else {
- equilibrateFull(nonTerminalPage);
- }
- } else {
- if (!nonTerminalPage.setKey(leafPageInParentIndex,
- leafPage.getLastKey())) {
- equilibrateFull(nonTerminalPage);
- }
- }
+ } else {
+ tryBalanceOrMerge(leafPage, nonTerminalPage);
}
}
btreePlusElementMgr.decrementNumberOfDataRecord();
@@ -382,87 +328,224 @@
return deleted;
}
- private void equilibrate(final NonTerminalPage nonTerminalPage)
+ /**
+ *
+ * @param leafPage
+ * @param leafPageParentNonTerminalPage
+ * @return true if balancing done
+ * @throws HeapException
+ */
+ private boolean tryBalanceOrMerge(final LeafPage leafPage,
+ final NonTerminalPage leafPageParentNonTerminalPage)
throws HeapException {
- if (!nonTerminalPage.wellFilled()) {
- NonTerminalPage parentNonterminal = (NonTerminalPage) nonTerminalPage
+ final int leafPageInParentIndex = leafPage.getInParentIndex();
+ int result;
+ if (leafPageInParentIndex == 0) {
+ result = 2;
+ } else {
+ final int leftLeafPageInParentIndex = leafPageInParentIndex - 1;
+ final long leftLeafPagePosition = leafPageParentNonTerminalPage
+ .getPagePointer(leftLeafPageInParentIndex);
+ final LeafPage leftLeafPage = (LeafPage) btreePlusElementMgr
+ .getPage(leftLeafPagePosition,
+ leafPageParentNonTerminalPage,
+ leftLeafPageInParentIndex);
+ result = leftLeafPage.tryBalanceOrMerge(leafPage);
+ if (result == 0) {
+ // leaf page merged in left leaf page
+ btreePlusElementMgr.freePage(leafPage.getPageRecord());
+ leafPageParentNonTerminalPage.remove(leafPageInParentIndex);
+ if (leafPageParentNonTerminalPage.setKey(
+ leftLeafPageInParentIndex, leftLeafPage.getLastKey())) {
+ if (!leafPageParentNonTerminalPage.wellFilled()) {
+ tryBalance(leafPageParentNonTerminalPage);
+ }
+ } else {
+ split(leafPageParentNonTerminalPage);
+ }
+ } else if (result == 1) {
+ if (!leafPageParentNonTerminalPage.setKey(
+ leftLeafPageInParentIndex, leftLeafPage.getLastKey())) {
+ split(leafPageParentNonTerminalPage);
+ }
+ }
+ }
+
+ if (result == 2
+ && leafPageInParentIndex != leafPageParentNonTerminalPage
+ .getNumberOfKeyEntries()) {
+ final int rightLeafPageinParentIndex = leafPageInParentIndex + 1;
+ final long rightLeafPagePosition = leafPageParentNonTerminalPage
+ .getPagePointer(rightLeafPageinParentIndex);
+ final LeafPage rightLeafPage = (LeafPage) btreePlusElementMgr
+ .getPage(rightLeafPagePosition,
+ leafPageParentNonTerminalPage,
+ rightLeafPageinParentIndex);
+ result = leafPage.tryBalanceOrMerge(rightLeafPage);
+ if (result == 0) {
+ // right leaf page merged in leaf page
+ btreePlusElementMgr.freePage(rightLeafPage.getPageRecord());
+ leafPageParentNonTerminalPage
+ .remove(rightLeafPageinParentIndex);
+ if (leafPageParentNonTerminalPage.setKey(leafPageInParentIndex,
+ leafPage.getLastKey())) {
+ if (!leafPageParentNonTerminalPage.wellFilled()) {
+ tryBalance(leafPageParentNonTerminalPage);
+ }
+ } else {
+ split(leafPageParentNonTerminalPage);
+ }
+ } else if (result == 1) {
+ if (!leafPageParentNonTerminalPage.setKey(
+ leafPageInParentIndex, leafPage.getLastKey())) {
+ split(leafPageParentNonTerminalPage);
+ }
+ }
+ }
+ return result != 2;
+ }
+
+ /**
+ *
+ * @param nonTerminalPage
+ * a too big page
+ * @throws HeapException
+ */
+ private void split(NonTerminalPage nonTerminalPage) throws HeapException {
+ if (!tryBalance(nonTerminalPage)) {
+ final INonTerminalPage newNonTerminalPage = nonTerminalPage.split();
+ final DataRecordIdentifier middleKey = nonTerminalPage
+ .getAndClearMiddleKey();
+ // ASSERTX
+ assert middleKey != null;
+ btreePlusElementMgr.appendPageRecordable(newNonTerminalPage);
+ newNonTerminalPage.setValueIsChangedValueToSave();
+ final NonTerminalPage parent = (NonTerminalPage) nonTerminalPage
.getParentPage();
- if (parentNonterminal != null) {
- int inParentIndex = nonTerminalPage.getInParentIndex();
- if (inParentIndex != 0) {
- final int leftPageInParentIndex = inParentIndex - 1;
- final long leftPagePosition = nonTerminalPage
- .getPagePointer(leftPageInParentIndex);
- final NonTerminalPage leftPage = (NonTerminalPage) btreePlusElementMgr
- .getPage(leftPagePosition, nonTerminalPage,
- leftPageInParentIndex);
- final DataRecordIdentifier middleKey = middleKey(leftPage);
- if (leftPage.equilibrate(middleKey, nonTerminalPage)) {
- // page merged in left page
- btreePlusElementMgr.freePage(nonTerminalPage
- .getPageRecord());
- parentNonterminal.remove(inParentIndex);
- if (parentNonterminal.setKey(leftPageInParentIndex,
- leftPage.getAndClearMiddleKey())) {
- equilibrate(parentNonterminal);
- } else {
- equilibrateFull(nonTerminalPage);
+ if (parent == null) {
+ btreePlusElementMgr.newRootNonTerminalPage(nonTerminalPage,
+ middleKey, newNonTerminalPage);
+ } else if (!parent.add(nonTerminalPage, middleKey,
+ newNonTerminalPage)) {
+ split(parent);
+ }
+ }
+ }
+
+ /**
+ *
+ * @param nonTerminalPage
+ * @return true if change made
+ * @throws HeapException
+ */
+ private boolean tryBalance(final NonTerminalPage nonTerminalPage)
+ throws HeapException {
+ final NonTerminalPage parentNonterminal = (NonTerminalPage) nonTerminalPage
+ .getParentPage();
+ int result;
+ if (parentNonterminal == null) {
+ result = 2;
+ } else {
+ int inParentIndex = nonTerminalPage.getInParentIndex();
+ if (inParentIndex == 0) {
+ result = 2;
+ } else {
+ final int leftPageInParentIndex = inParentIndex - 1;
+ final long leftPagePosition = parentNonterminal
+ .getPagePointer(leftPageInParentIndex);
+ final NonTerminalPage leftPage = (NonTerminalPage) btreePlusElementMgr
+ .getPage(leftPagePosition, parentNonterminal,
+ leftPageInParentIndex);
+ // final long middlePagePosition =
+ // leftPage.getLastPagePosition();
+ // final AbstractNodePage middlePage = (AbstractNodePage)
+ // btreePlusElementMgr.getPage(middlePagePosition, null,-1);
+ // final DataRecordIdentifier middleKey=middlePage.getLastKey();
+ final DataRecordIdentifier middleKey = parentNonterminal
+ .getKey(leftPageInParentIndex);
+ result = leftPage.tryBalanceOrMerge(middleKey, nonTerminalPage);
+ if (result == 0) {
+ // page merged in left page
+ btreePlusElementMgr.freePage(nonTerminalPage
+ .getPageRecord());
+ parentNonterminal.remove(inParentIndex);
+ if (parentNonterminal.setKey(leftPageInParentIndex,
+ leftPage.getAndClearMiddleKey())) {
+ if (!parentNonterminal.wellFilled()) {
+ tryBalance(parentNonterminal);
}
} else {
- if (!nonTerminalPage.setKey(leftPageInParentIndex,
- leftPage.getAndClearMiddleKey())) {
- equilibrateFull(nonTerminalPage);
- }
+ split(nonTerminalPage);
}
- } else if (inParentIndex != nonTerminalPage
- .getNumberOfKeyEntries() - 1) {
- final int rightPageinParentIndex = inParentIndex + 1;
- final long rightPagePosition = nonTerminalPage
- .getPagePointer(rightPageinParentIndex);
- final NonTerminalPage rightPage = (NonTerminalPage) btreePlusElementMgr
- .getPage(rightPagePosition, nonTerminalPage,
- rightPageinParentIndex);
- final DataRecordIdentifier middleKey = middleKey(nonTerminalPage);
- if (nonTerminalPage.equilibrate(middleKey, rightPage)) {
- // right leaf page merged in leaf page
- btreePlusElementMgr.freePage(rightPage.getPageRecord());
- parentNonterminal.remove(rightPageinParentIndex);
- if (parentNonterminal.setKey(inParentIndex,
- nonTerminalPage.getAndClearMiddleKey())) {
- equilibrate(parentNonterminal);
- } else {
- equilibrateFull(nonTerminalPage);
+ } else if (result == 1) {
+ if (!parentNonterminal.setKey(leftPageInParentIndex,
+ leftPage.getAndClearMiddleKey())) {
+ split(nonTerminalPage);
+ }
+ }
+ }
+
+ if (result == 2
+ && inParentIndex != parentNonterminal
+ .getNumberOfKeyEntries()) {
+ final int rightPageinParentIndex = inParentIndex + 1;
+ final long rightPagePosition = parentNonterminal
+ .getPagePointer(rightPageinParentIndex);
+ final NonTerminalPage rightPage = (NonTerminalPage) btreePlusElementMgr
+ .getPage(rightPagePosition, parentNonterminal,
+ rightPageinParentIndex);
+ // final long middlePagePosition =
+ // nonTerminalPage.getLastPagePosition();
+ // final AbstractNodePage middlePage = (AbstractNodePage)
+ // btreePlusElementMgr.getPage(middlePagePosition, null,-1);
+ // final DataRecordIdentifier middleKey=middlePage.getLastKey();
+ final DataRecordIdentifier middleKey = parentNonterminal
+ .getKey(inParentIndex);
+ result = nonTerminalPage
+ .tryBalanceOrMerge(middleKey, rightPage);
+ if (result == 0) {
+ // right leaf page merged in leaf page
+ btreePlusElementMgr.freePage(rightPage.getPageRecord());
+ parentNonterminal.remove(rightPageinParentIndex);
+ if (parentNonterminal.setKey(inParentIndex,
+ nonTerminalPage.getAndClearMiddleKey())) {
+ if (!parentNonterminal.wellFilled()) {
+ tryBalance(parentNonterminal);
}
} else {
- if (!nonTerminalPage.setKey(inParentIndex,
- nonTerminalPage.getAndClearMiddleKey())) {
- equilibrateFull(nonTerminalPage);
- }
+ split(nonTerminalPage);
}
+ } else if (result == 1) {
+ if (!parentNonterminal.setKey(inParentIndex,
+ nonTerminalPage.getAndClearMiddleKey())) {
+ split(nonTerminalPage);
+ }
}
}
}
+ return result != 2;
}
- private DataRecordIdentifier middleKey(final NonTerminalPage nonTerminalPage)
- throws HeapException {
- final long position = nonTerminalPage.getLastPagePosition();
- IPageRecordable pageRecordable = btreePlusElementMgr.getPage(position,
- nonTerminalPage, nonTerminalPage.getNumberOfKeyEntries());
- final DataRecordIdentifier result;
- switch (pageRecordable.getRecordType()) {
- case NON_TERMINAL_PAGE:
- result = ((NonTerminalPage) pageRecordable).getLastKey();
- break;
- case LEAF_PAGE:
- result = ((LeafPage) pageRecordable).getLastKey();
- break;
- default:
- throw new HeapException(pageRecordable.getRecordType()
- + " unexpected page type");
- }
- return result;
- }
+ // private DataRecordIdentifier middleKey(final NonTerminalPage
+ // nonTerminalPage)
+ // throws HeapException {
+ // final long position = nonTerminalPage.getLastPagePosition();
+ // IPageRecordable pageRecordable = btreePlusElementMgr.getPage(position,
+ // nonTerminalPage, nonTerminalPage.getNumberOfKeyEntries());
+ // final DataRecordIdentifier result;
+ // switch (pageRecordable.getRecordType()) {
+ // case NON_TERMINAL_PAGE:
+ // result = ((NonTerminalPage) pageRecordable).getLastKey();
+ // break;
+ // case LEAF_PAGE:
+ // result = ((LeafPage) pageRecordable).getLastKey();
+ // break;
+ // default:
+ // throw new HeapException(pageRecordable.getRecordType()
+ // + " unexpected page type");
+ // }
+ // return result;
+ // }
@Override
protected DataRecordIdentifier removeFirstDataRecordImpl()
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -32,6 +32,7 @@
import net.sf.joafip.btreeplus.entity.IntegrityCheckResult;
import net.sf.joafip.btreeplus.entity.LeafPage;
import net.sf.joafip.btreeplus.entity.NonTerminalPage;
+import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.kvstore.service.IHeapDataManager;
@@ -44,6 +45,8 @@
public class BtreePlusDataMgrIntegrityChecker {
private final static BtreePlusDataMgrIntegrityChecker INSTANCE = new BtreePlusDataMgrIntegrityChecker();
+ private DataRecordIdentifier lessThanMinKey;
+ private DataRecordIdentifier maxKey;
private BtreePlusDataMgrIntegrityChecker() {
super();
@@ -54,10 +57,14 @@
}
public IntegrityCheckResult checkIntegrity(
- final IHeapDataManager dataManager) throws HeapException {
+ final IHeapDataManager dataManager,
+ final DataRecordIdentifier lessThanMinKey,
+ final DataRecordIdentifier maxKey) throws HeapException {
if (!BtreePlusDataManager.class.equals(dataManager.getClass())) {
throw new HeapException("bad class " + dataManager.getClass());
}
+ this.lessThanMinKey = lessThanMinKey;
+ this.maxKey = maxKey;
return checkIntegrity((BtreePlusDataManager) dataManager);
}
@@ -65,7 +72,7 @@
final BtreePlusDataManager btreePlusDataManager)
throws HeapException {
final Deque<State> stack = new LinkedList<State>();
- State state = new State(-1, Long.MAX_VALUE);
+ State state = new State(lessThanMinKey, maxKey);
stack.push(state);
final BtreePlusElementMgr elementMgr = btreePlusDataManager
.getBtreePlusElementMgr();
@@ -76,6 +83,7 @@
int entriesCount = 0;
int leafPageCount = 0;
int nonTerminalPageCount = 0;
+ // FIXMELUC _____________leaf page chain
// System.out.println("--- begin ---");
while (pageRecordable != null) {
elementMgr.clearReadCache();
@@ -83,22 +91,41 @@
switch (recordType) {
case LEAF_PAGE: {
final LeafPage leafPage = (LeafPage) pageRecordable;
+
+ // check keys
+ DataRecordIdentifier currentKey = leafPage.getKey(0);
+ for (int kindex = 1; kindex < leafPage.getNumberOfKeyEntries(); kindex++) {
+ final DataRecordIdentifier nextKey = leafPage
+ .getKey(kindex);
+ if (compare(currentKey, nextKey) >= 0) {
+ throw new HeapException("bad keys");
+ }
+ currentKey = nextKey;
+ }
+
// check leaf page value range
- final long firstKeyValue = leafPage.getFirstKey().value;
- final long lastKeyValue = leafPage.getLastKey().value;
+ final DataRecordIdentifier firstKey = leafPage.getFirstKey();
+ // final long firstKeyValue = leafPage.getFirstKey().value;
+ final DataRecordIdentifier lastKey = leafPage.getLastKey();
+ // final long lastKeyValue = leafPage.getLastKey().value;
state = stack.peek();
- if (state.minValue > firstKeyValue
- || state.maxValue < lastKeyValue) {
- throw new HeapException("not have " + state.minValue
- + "(min value)<=" + firstKeyValue
- + "(first key value) " + lastKeyValue
- + "(last key value) <=" + state.maxValue
+ if (/* state.minValue >= firstKeyValue */
+ compare(state.minKey, firstKey) >= 0 || /*
+ * state.maxValue <
+ * lastKeyValue
+ */
+ compare(state.maxKey, lastKey) < 0) {
+ throw new HeapException("not have " + state.minKey
+ + "(min value)<" + firstKey + "(first key value) "
+ + lastKey + "(last key value) <=" + state.maxKey
+ "(max value)");
}
// check well formed
- if (currentDepth != 0 && !leafPage.wellFilled()) {
- throw new HeapException("not well filled");
- }
+ // if (currentDepth != 0 && !leafPage.wellFilled()) {
+ // throw new
+ // HeapException("not well filled "+leafPage.getByteSize());
+ // }
+
// check depth, all leaf page must be at same depth
if (depth == -1) {
depth = currentDepth;
@@ -108,9 +135,12 @@
+ depth);
}
+ // count entries
entriesCount += leafPage.getNumberOfKeyEntries();
+
// count leaf page
leafPageCount++;
+
// go up
pageRecordable = leafPage.getParentPage();
index = leafPage.getInParentIndex() + 1;
@@ -121,22 +151,44 @@
case NON_TERMINAL_PAGE: {
final NonTerminalPage nonTerminalPage = (NonTerminalPage) pageRecordable;
if (index == 0) {
+
+ // check keys
+ DataRecordIdentifier currentKey = nonTerminalPage.getKey(0);
+ for (int kindex = 1; kindex < nonTerminalPage
+ .getNumberOfKeyEntries(); kindex++) {
+ final DataRecordIdentifier nextKey = nonTerminalPage
+ .getKey(kindex);
+ if (compare(currentKey, nextKey) >= 0) {
+ throw new HeapException("bad keys");
+ }
+ currentKey = nextKey;
+ }
+
// check non terminal page value range
- final long firstKeyValue = nonTerminalPage.getFirstKey().value;
- final long lastKeyValue = nonTerminalPage.getLastKey().value;
+ final DataRecordIdentifier firstKey = nonTerminalPage
+ .getFirstKey();
+ final DataRecordIdentifier lastKey = nonTerminalPage
+ .getLastKey();
state = stack.peek();
- if (state.minValue > firstKeyValue
- || state.maxValue < lastKeyValue) {
- throw new HeapException("not have " + state.minValue
- + "(min value)<=" + firstKeyValue
- + "(first key value) " + lastKeyValue
- + "(last key value) <=" + state.maxValue
- + "(max value)");
+ if (/* state.minValue > firstKeyValue */
+ compare(state.minKey, firstKey) >= 0 || /*
+ * state.maxValue <
+ * lastKeyValue
+ */
+ compare(state.maxKey, lastKey) < 0) {
+ throw new HeapException("not have " + state.minKey
+ + "(min value)<" + firstKey
+ + "(first key value) " + lastKey
+ + "(last key value) <=" + state.maxKey
+ + "(max value)\nnon terminal page at "
+ + nonTerminalPage.getPositionInFile());
}
- // check well formed
- if (currentDepth != 0 && !nonTerminalPage.wellFilled()) {
- throw new HeapException("not well filled");
- }
+
+ // // check well formed
+ // if (currentDepth != 0 && !nonTerminalPage.wellFilled()) {
+ // throw new HeapException("not well filled");
+ // }
+
// count non terminal page
nonTerminalPageCount++;
}
@@ -157,12 +209,12 @@
if (state == null) {
throw new HeapException("stack must not be empty");
}
- final long minValue = index == 0 ? state.minValue
- : nonTerminalPage.getFirstKey().value;
- final long maxValue = index == nonTerminalPage
- .getNumberOfKeyEntries() ? state.maxValue
- : nonTerminalPage.getLastKey().value;
- stack.push(new State(minValue, maxValue));
+ final DataRecordIdentifier minKey = index == 0 ? state.minKey
+ : nonTerminalPage.getKey(index - 1);
+ final DataRecordIdentifier maxKey = index == nonTerminalPage
+ .getNumberOfKeyEntries() ? state.maxKey
+ : nonTerminalPage.getKey(index);
+ stack.push(new State(minKey, maxKey));
index = 0;
currentDepth++;
}
@@ -177,14 +229,20 @@
nonTerminalPageCount);
}
+ private int compare(final DataRecordIdentifier keyA,
+ final DataRecordIdentifier keyB) {
+ return keyA.compareTo(keyB);
+ }
+
private class State {
- private long minValue;
- private long maxValue;
+ private DataRecordIdentifier minKey;
+ private DataRecordIdentifier maxKey;
- public State(final long minValue, final long maxValue) {
+ public State(final DataRecordIdentifier minKey,
+ final DataRecordIdentifier maxKey) {
super();
- this.minValue = minValue;
- this.maxValue = maxValue;
+ this.minKey = minKey;
+ this.maxKey = maxKey;
}
}
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-07 02:28:12 UTC (rev 3074)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -63,7 +63,7 @@
private final IFileForStorable fileForStorable;
- private final boolean longKey;
+ private boolean longKey;
public BtreePlusElementMgr(final IHeapElementManager heapElementManager)
throws HeapException {
@@ -79,13 +79,14 @@
+ " and file cache page size is "
+ fileForStorable.getCachePageSize());
}
- longKey = heapElementManager.getDataRecordKeyManager() == null;
+ longKey = true;
}
public void setDataRecordKeyManager(
final IDataRecordKeyManager dataRecordKeyManager)
throws HeapException {
heapElementManager.setDataRecordKeyManager(dataRecordKeyManager);
+ longKey = false;
}
public void startService() throws HeapException {
Added: trunk/joafip-btreeplus/src/main/resources/log4j.properties
===================================================================
--- trunk/joafip-btreeplus/src/main/resources/log4j.properties (rev 0)
+++ trunk/joafip-btreeplus/src/main/resources/log4j.properties 2012-05-08 05:55:35 UTC (rev 3075)
@@ -0,0 +1,24 @@
+
+
+log4j.rootLogger=WARN,CONSOLE,FILE
+
+log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
+log4j.appender.CONSOLE.Target=System.out
+log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
+#log4j.appender.CONSOLE.layout.conversionPattern=[%p,%c{1},%t] %m%n
+#log4j.appender.CONSOLE.layout.ConversionPattern=[%5p] - %d [%t] %c (%F:%M:%L) %n %m%n%n
+log4j.appender.CONSOLE.layout.ConversionPattern=[%5p] - %d [%t] (%c.java:%M:%L) %n %m%n%n
+
+log4j.appender.FILE=org.apache.log4j.RollingFileAppender
+#log4j.appender.FILE.File=${webapp.root}/WEB-INF/log4j.log
+log4j.appender.FILE.File=logs/joafip.log
+log4j.appender.FILE.MaxFileSize=1024KB
+log4j.appender.FILE.MaxBackupIndex=3
+log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
+#log4j.appender.FILE.layout.conversionPattern=%d{ABSOLUTE} %5p %c{1},%t:%L - %m%n
+log4j.appender.FILE.layout.ConversionPattern=[%5p] - %d [%t] (%c.java:%M:%L) %n %m%n%n
+
+log4j.logger.net.sf.joafip=warn
+log4j.logger.net.sf.joafip.HelperMemoryUse=info
+log4j.logger.net.sf.joafip.meminspector=warn
+log4j.logger.net.sf.joafip.java.util=warn
Added: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java (rev 0)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java 2012-05-08 05:55:35 UTC (rev 3075)
@@ -0,0 +1,105 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL Licens...
[truncated message content] |
|
From: <luc...@us...> - 2012-05-08 05:55:42
|
Revision: 3075
http://joafip.svn.sourceforge.net/joafip/?rev=3075&view=rev
Author: luc_peuvrier
Date: 2012-05-08 05:55:35 +0000 (Tue, 08 May 2012)
Log Message:
-----------
WIP btree plus: new tests and corrections, rotation optimization
Modified Paths:
--------------
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/AbstractNodePage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/DataBlockPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecordable.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/NonTerminalPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordIdentifier.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/entity/DataRecordKey.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusServiceTests.java
Added Paths:
-----------
trunk/joafip-btreeplus/logs/
trunk/joafip-btreeplus/src/main/resources/log4j.properties
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/BigKey.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusLeafPageBalanceMergeTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/BtreePlusNonTerminalPageBalanceMergeTest.java
Property Changed:
----------------
trunk/joafip-btreeplus/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-07 02:28:20
|
Revision: 3074
http://joafip.svn.sourceforge.net/joafip/?rev=3074&view=rev
Author: luc_peuvrier
Date: 2012-05-07 02:28:12 +0000 (Mon, 07 May 2012)
Log Message:
-----------
WIP btree plus: consistency check added
Modified Paths:
--------------
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractPerfService.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/ImportSearcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBKM.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterFewInsertAndExport.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/Searcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBKM.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-4test/src/main/resources/log4j.properties
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java
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/IHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockHeapElementManager.java
trunk/joafip-parent/pom.xml
Added Paths:
-----------
trunk/joafip-4test/src/main/java/net/sf/joafip/btreeplus/
trunk/joafip-4test/src/main/java/net/sf/joafip/heapfile/
trunk/joafip-4test/src/main/java/net/sf/joafip/kvstore/
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -28,6 +28,7 @@
import java.io.IOException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.kvstore.service.IHeapDataManager;
import net.sf.joafip.performance.items.entity.Item;
import net.sf.joafip.performance.items.entity.ItemList;
@@ -44,16 +45,17 @@
* @author luc peuvrier
*
*/
-public class AbstractDeleter extends AbstractPerfService {
+public abstract class AbstractDeleter extends AbstractPerfService {
- protected void run(final String pathName,
+ protected void run(final String insertLogFilePath, final String pathName,
final IHeapDataManager dataManager, final Boolean useCache)
throws FilePersistenceException,
FilePersistenceClassNotFoundException,
FilePersistenceInvalidClassException,
FilePersistenceDataCorruptedException,
FilePersistenceNotSerializableException,
- FilePersistenceTooBigForSerializationException, IOException {
+ FilePersistenceTooBigForSerializationException, IOException,
+ HeapException {
initialize(pathName, dataManager, useCache);
final IDataAccessSession session = filePersistence
.createDataAccessSession();
@@ -61,9 +63,11 @@
int batchCount = 0;
int count = 0;
BufferedReader reader = new BufferedReader(new FileReader(
- "runtime_perf/toDelete.txt"));
+ insertLogFilePath));
+ // "runtime_perf/toDelete.txt"));
String line;
while ((line = reader.readLine()) != null) {
+ reader.readLine();// skip one
final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
final Item item = itemList.removeItem(identifier);
@@ -75,6 +79,7 @@
count = 0;
session.close(EnumFilePersistenceCloseAction.SAVE);
session.open();
+ consistencyCheck();
++batchCount;
logger.info("delete batch #" + batchCount);
}
@@ -85,8 +90,9 @@
session.open();
batchCount = 0;
count = 0;
- reader = new BufferedReader(new FileReader("runtime_perf/toSearch.txt"));
- while ((line = reader.readLine()) != null) {
+ reader = new BufferedReader(new FileReader(insertLogFilePath));
+ // "runtime_perf/toSearch.txt"));
+ while (reader.readLine() != null && (line = reader.readLine()) != null) {
final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
Item item = itemList.get(identifier);
@@ -108,8 +114,10 @@
session.open();
batchCount = 0;
count = 0;
- reader = new BufferedReader(new FileReader("runtime_perf/toDelete.txt"));
+ reader = new BufferedReader(new FileReader(insertLogFilePath));
+ // "runtime_perf/toDelete.txt"));
while ((line = reader.readLine()) != null) {
+ reader.readLine();// skip
final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
final Item item = itemList.getItem(identifier);
@@ -128,4 +136,7 @@
reader.close();
session.close(EnumFilePersistenceCloseAction.SAVE);
}
+
+ protected abstract void consistencyCheck() throws HeapException,
+ FilePersistenceException;
}
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -43,6 +43,7 @@
import net.sf.joafip.file.entity.PageNode;
import net.sf.joafip.file.service.RandomAccessFileReadWriteCache;
import net.sf.joafip.java.util.PLinkedTreeSet;
+import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.kvstore.service.IHeapDataManager;
import net.sf.joafip.meminspector.service.MemInspectorException;
import net.sf.joafip.meminspector.service.inspect.MemInspector;
@@ -70,7 +71,7 @@
@SuppressWarnings("PMD")
@NotStorableClass
@StorableAccess
-public class AbstractInserter extends AbstractPerfService {
+public abstract class AbstractInserter extends AbstractPerfService {
private static final File FILE_FOR_LUC = new File(RUNTIME_DIR
+ "/forLuc.txt");
@@ -114,7 +115,7 @@
}
}
- protected void run(final String pathName,
+ protected void run(final String insertLogFilePath, final String pathName,
final IHeapDataManager dataManager, final Boolean useCache,
final int numberOfItem) throws FilePersistenceException,
StoreException, FilePersistenceClassNotFoundException,
@@ -123,7 +124,7 @@
FilePersistenceNotSerializableException, MemInspectorException,
IOException, SecurityException, IllegalArgumentException,
NoSuchFieldException, IllegalAccessException,
- FilePersistenceTooBigForSerializationException {
+ FilePersistenceTooBigForSerializationException, HeapException {
initialize(pathName, dataManager, useCache);
final Runtime runtime = Runtime.getRuntime();
final MemInspector memInspectorForMemory = new MemInspector();
@@ -142,6 +143,7 @@
initializeByItemDuration();
boolean objectAddedInMemory = false;
long duration = 0;
+ final PrintWriter insertLogWriter = new PrintWriter(insertLogFilePath);
final InputStream inputStream = getClass().getResourceAsStream(
"/all.txt");
final BufferedReader reader = new BufferedReader(new InputStreamReader(
@@ -169,6 +171,8 @@
final int identifier = Integer.parseInt(reader.readLine());
addItem(session, identifier);
+ insertLogWriter.println(identifier);
+ // consistencyCheck();
if (count % BATCH_SIZE == BATCH_SIZE - 1) {
@@ -229,9 +233,11 @@
byItemIndex++;
session.open();
+ consistencyCheck();
}
}
reader.close();
+ insertLogWriter.close();
session.closeAndWait(EnumFilePersistenceCloseAction.SAVE);
session.open();
@@ -272,6 +278,9 @@
}
}
+ protected abstract void consistencyCheck() throws HeapException,
+ FilePersistenceException;
+
protected void close() throws FilePersistenceException {
filePersistence.close();
}
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractPerfService.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractPerfService.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractPerfService.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -222,4 +222,8 @@
throw new FilePersistenceException(FAILED_DELETE + dir);
}
}
+
+ protected IHeapDataManager getDataManager() throws FilePersistenceException {
+ return ((FilePersistence) filePersistence).getDataManager();
+ }
}
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -22,9 +22,13 @@
*/
package net.sf.joafip.performance.items.service;
+import java.io.BufferedReader;
+import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.util.LinkedList;
import java.util.List;
@@ -51,7 +55,7 @@
private final JoafipLogger logger = JoafipLogger.getLogger(getClass());
- protected void run(final String pathName,
+ protected void run(final String insertLogFilePath, final String pathName,
final IHeapDataManager dataManager, final Boolean useCache)
throws FilePersistenceException,
FilePersistenceClassNotFoundException,
@@ -71,7 +75,14 @@
final List<Integer> missingList = new LinkedList<Integer>();
int misMatchCount = 0;
final List<String> misMatchList = new LinkedList<String>();
- for (int identifier = 0; identifier < NUMBER_OF_ITEM; identifier++) {
+ final InputStream inputStream = new FileInputStream(insertLogFilePath);
+ final BufferedReader reader = new BufferedReader(new InputStreamReader(
+ inputStream));
+ int count = 0;
+ String line;
+ while ((line = reader.readLine()) != null) {
+ count++;
+ final int identifier = Integer.parseInt(line);
final ItemList itemList = getItemList(session);
final long startSearchTime = System.currentTimeMillis();
final Item item = itemList.get(identifier);
@@ -107,10 +118,11 @@
final long duration = (currentTime - startTime);
final long byItem = duration * 1000 / (identifier + 1);
byItemDuration[byItemIndex++] = (int) byItem;
- logger.info(duration + " mS " + (identifier + 1)
- + " found, by item " + byItem + " uS");
+ logger.info(duration + " mS " + count + " found, by item "
+ + byItem + " uS");
}
}
+ reader.close();
session.close(EnumFilePersistenceCloseAction.DO_NOT_SAVE);
final long endTime = System.currentTimeMillis();
logger.info("min search time " + minSearchTime);
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -26,7 +26,11 @@
import java.io.File;
import java.io.IOException;
+import net.sf.joafip.btreeplus.entity.IntegrityCheckResult;
import net.sf.joafip.btreeplus.service.BtreePlusDataManager;
+import net.sf.joafip.btreeplus.service.BtreePlusDataMgrIntegrityChecker;
+import net.sf.joafip.file.service.FileIOException;
+import net.sf.joafip.file.service.HelperFileUtil;
import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.entity.HeapFileSetup;
import net.sf.joafip.kvstore.service.HeapException;
@@ -49,14 +53,32 @@
private final static JoafipLogger LOGGER = JoafipLogger
.getLogger(DeleterBtreePlus.class);
+ @Override
+ protected void consistencyCheck() throws HeapException,
+ FilePersistenceException {
+ final IntegrityCheckResult result = BtreePlusDataMgrIntegrityChecker
+ .getInstance().checkIntegrity(getDataManager());
+ System.out.println("depth " + result.getDepth());
+ System.out.println("entriesCount " + result.getEntriesCount());
+ System.out.println("leafPageCount " + result.getLeafPageCount());
+ System.out.println("nonTerminalPageCount "
+ + result.getNonTerminalPageCount());
+ }
+
private void run() throws HeapException, FilePersistenceException,
FilePersistenceClassNotFoundException,
FilePersistenceInvalidClassException,
FilePersistenceDataCorruptedException,
FilePersistenceNotSerializableException,
- FilePersistenceTooBigForSerializationException, IOException {
- final String dataFilePath = RUNTIME_DIR + "/block.data";
+ FilePersistenceTooBigForSerializationException, IOException,
+ FileIOException {
+ final String sourceDataFilePath = RUNTIME_DIR + "/block.data";
+ final String dataFilePath = RUNTIME_DIR + "/block_copy.data";
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
+ final File sourceDataFile = new File(sourceDataFilePath);
final File dataFile = new File(dataFilePath);
+ HelperFileUtil.getInstance().copyFile(sourceDataFile, dataFile);
+
final HeapFileSetup setup = new HeapFileSetup(
EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS, dataFile,
CRASH_SAFE_MODE/* crashSafeMode */,
@@ -69,7 +91,7 @@
// }
final IHeapDataManager dataManager =
/**/new BtreePlusDataManager(setup);
- run(null, dataManager, true);
+ run(insertLogFilePath, null, dataManager, true);
}
public static void main(final String[] args) {
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/ImportSearcher.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/ImportSearcher.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/ImportSearcher.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -42,7 +42,8 @@
FilePersistenceDataCorruptedException,
FilePersistenceNotSerializableException, IOException,
FilePersistenceTooBigForSerializationException {
- run("runtime_perf/from_import", null, true);
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
+ run(insertLogFilePath, "runtime_perf/from_import", null, true);
}
public static void main(final String[] args) {
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBKM.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBKM.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBKM.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -50,12 +50,18 @@
IOException, NoSuchFieldException, IllegalAccessException,
FilePersistenceTooBigForSerializationException, HeapException {
final String dataFile = RUNTIME_DIR + "/block.data";
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
clearDirectory(RUNTIME_DIR);
final IHeapDataManager dataManager =
/**/new BlockDataManager(dataFile, 1024);
- run(null, dataManager, null, NUMBER_OF_ITEM);
+ run(insertLogFilePath, null, dataManager, null, NUMBER_OF_ITEM);
}
+ @Override
+ protected void consistencyCheck() {
+ // no implementation
+ }
+
public static void main(final String[] args) {
try {
final InserterBKM inserter = new InserterBKM();
Added: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java (rev 0)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -0,0 +1,36 @@
+package net.sf.joafip.performance.items.service;
+
+import net.sf.joafip.btreeplus.entity.IntegrityCheckResult;
+import net.sf.joafip.btreeplus.service.BtreePlusDataMgrIntegrityChecker;
+import net.sf.joafip.kvstore.service.HeapException;
+import net.sf.joafip.logger.JoafipLogger;
+import net.sf.joafip.service.FilePersistenceException;
+
+public class InserterBtreePlusIntigrityCheck extends
+ InserterBtreePlusWhithCache {
+
+ private static final JoafipLogger LOGGER = JoafipLogger
+ .getLogger(InserterBtreePlusIntigrityCheck.class);
+
+ @Override
+ protected void consistencyCheck() throws HeapException,
+ FilePersistenceException {
+ final IntegrityCheckResult result = BtreePlusDataMgrIntegrityChecker
+ .getInstance().checkIntegrity(getDataManager());
+ System.out.println("depth " + result.getDepth());
+ System.out.println("entriesCount " + result.getEntriesCount());
+ System.out.println("leafPageCount " + result.getLeafPageCount());
+ System.out.println("nonTerminalPageCount "
+ + result.getNonTerminalPageCount());
+ }
+
+ public static void main(final String[] args) {
+ try {
+ InserterBtreePlusIntigrityCheck inserter = new InserterBtreePlusIntigrityCheck();
+ inserter.run();
+ inserter.close();
+ } catch (final Throwable throwable) {// NOPMD catch all
+ LOGGER.fatal("error", throwable);
+ }
+ }
+}
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -36,15 +36,20 @@
import net.sf.joafip.service.FilePersistenceTooBigForSerializationException;
import net.sf.joafip.store.service.StoreException;
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
@SuppressWarnings("PMD")
@NotStorableClass
@StorableAccess
-public final class InserterBtreePlusWhithCache extends AbstractInserter {
+public class InserterBtreePlusWhithCache extends AbstractInserter {
private static final JoafipLogger LOGGER = JoafipLogger
.getLogger(InserterBtreePlusWhithCache.class);
- private void run() throws HeapException, SecurityException,
+ protected void run() throws HeapException, SecurityException,
IllegalArgumentException, FilePersistenceException, StoreException,
FilePersistenceClassNotFoundException,
FilePersistenceInvalidClassException,
@@ -55,6 +60,7 @@
/* remove existing data */
clearDirectory(RUNTIME_DIR);
final String dataFilePath = RUNTIME_DIR + "/block.data";
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
/* remove existing data */
final File dataFile = new File(dataFilePath);
dataFile.delete();
@@ -68,9 +74,15 @@
final IHeapDataManager dataManager =
/**/new BtreePlusDataManager(setup);
- run(null, dataManager, true, NUMBER_OF_ITEM);
+ run(insertLogFilePath, null, dataManager, true, NUMBER_OF_ITEM);
}
+ @Override
+ protected void consistencyCheck() throws HeapException,
+ FilePersistenceException {
+ // no implementation
+ }
+
public static void main(final String[] args) {
try {
InserterBtreePlusWhithCache inserter = new InserterBtreePlusWhithCache();
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -55,6 +55,7 @@
/* remove existing data */
clearDirectory(RUNTIME_DIR);
final String dataFilePath = RUNTIME_DIR + "/block.data";
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
/* remove existing data */
final File dataFile = new File(dataFilePath);
dataFile.delete();
@@ -71,9 +72,14 @@
final IHeapDataManager dataManager =
/**/new BtreePlusDataManager(setup);
- run(null, dataManager, true, NUMBER_OF_ITEM);
+ run(insertLogFilePath, null, dataManager, true, NUMBER_OF_ITEM);
}
+ @Override
+ protected void consistencyCheck() {
+ // no implementation
+ }
+
public static void main(final String[] args) {
try {
InserterBtreePlusWhithoutCache inserter = new InserterBtreePlusWhithoutCache();
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterFewInsertAndExport.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterFewInsertAndExport.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterFewInsertAndExport.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -26,6 +26,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.StorableAccess;
+import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.logger.JoafipLogger;
import net.sf.joafip.meminspector.service.MemInspectorException;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
@@ -56,11 +57,17 @@
FilePersistenceDataCorruptedException,
FilePersistenceNotSerializableException, MemInspectorException,
IOException, NoSuchFieldException, IllegalAccessException,
- FilePersistenceTooBigForSerializationException {
+ FilePersistenceTooBigForSerializationException, HeapException {
+ final String insertLogFilePath = "runtime/inserted.txt";
clearDirectory("runtime");
- run("runtime", null, true, 1);
+ run(insertLogFilePath, "runtime", null, true, 1);
}
+ @Override
+ protected void consistencyCheck() {
+ // no implementation
+ }
+
public static void main(final String[] args) {
InserterFewInsertAndExport inserter;
try {
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithCache.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithCache.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithCache.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -20,6 +20,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.StorableAccess;
+import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.logger.JoafipLogger;
import net.sf.joafip.meminspector.service.MemInspectorException;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
@@ -45,12 +46,18 @@
FilePersistenceDataCorruptedException,
FilePersistenceNotSerializableException, MemInspectorException,
IOException, NoSuchFieldException, IllegalAccessException,
- FilePersistenceTooBigForSerializationException {
+ FilePersistenceTooBigForSerializationException, HeapException {
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
clearDirectory(RUNTIME_DIR);
- run(RUNTIME_DIR, null, true, NUMBER_OF_ITEM);
+ run(insertLogFilePath, RUNTIME_DIR, null, true, NUMBER_OF_ITEM);
close();
}
+ @Override
+ protected void consistencyCheck() {
+ // no implementation
+ }
+
public static void main(final String[] args) {
try {
InserterHeapFileWithCache inserter = new InserterHeapFileWithCache();
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithoutCache.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithoutCache.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithoutCache.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -20,6 +20,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.StorableAccess;
+import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.logger.JoafipLogger;
import net.sf.joafip.meminspector.service.MemInspectorException;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
@@ -45,12 +46,18 @@
FilePersistenceDataCorruptedException,
FilePersistenceNotSerializableException, MemInspectorException,
IOException, NoSuchFieldException, IllegalAccessException,
- FilePersistenceTooBigForSerializationException {
+ FilePersistenceTooBigForSerializationException, HeapException {
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
clearDirectory(RUNTIME_DIR);
- run(RUNTIME_DIR, null, false, NUMBER_OF_ITEM);
+ run(insertLogFilePath, RUNTIME_DIR, null, false, NUMBER_OF_ITEM);
close();
}
+ @Override
+ protected void consistencyCheck() {
+ // no implementation
+ }
+
public static void main(final String[] args) {
try {
InserterHeapFileWithoutCache inserter = new InserterHeapFileWithoutCache();
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/Searcher.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/Searcher.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/Searcher.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -42,7 +42,8 @@
FilePersistenceDataCorruptedException,
FilePersistenceNotSerializableException, IOException,
FilePersistenceTooBigForSerializationException {
- run(RUNTIME_DIR, null, true);
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
+ run(insertLogFilePath, RUNTIME_DIR, null, true);
}
public static void main(final String[] args) {
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBKM.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBKM.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBKM.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -48,7 +48,8 @@
final String dataFile = RUNTIME_DIR + "/block.data";
final IHeapDataManager dataManager =
/**/new BlockDataManager(dataFile, 1024);
- run(null, dataManager, null);
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
+ run(insertLogFilePath, null, dataManager, null);
}
public static void main(final String[] args) {
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -49,6 +49,7 @@
FilePersistenceNotSerializableException, IOException,
FilePersistenceTooBigForSerializationException {
final String dataFilePath = RUNTIME_DIR + "/block.data";
+ final String insertLogFilePath = RUNTIME_DIR + "/inserted.txt";
final File dataFile = new File(dataFilePath);
final HeapFileSetup setup = new HeapFileSetup(
EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS, dataFile,
@@ -62,7 +63,7 @@
// }
final IHeapDataManager dataManager =
/**/new BtreePlusDataManager(setup);
- run(null, dataManager, null);
+ run(insertLogFilePath, null, dataManager, null);
}
public static void main(final String[] args) {
Modified: trunk/joafip-4test/src/main/resources/log4j.properties
===================================================================
--- trunk/joafip-4test/src/main/resources/log4j.properties 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-4test/src/main/resources/log4j.properties 2012-05-07 02:28:12 UTC (rev 3074)
@@ -133,6 +133,7 @@
log4j.logger.net.sf.joafip.performance.items.service.InserterBabuDB=info
log4j.logger.net.sf.joafip.performance.items.service.InserterBtreePlusWhithCache=info
log4j.logger.net.sf.joafip.performance.items.service.InserterBtreePlusWhithoutCache=info
+log4j.logger.net.sf.joafip.performance.items.service.InserterBtreePlusIntigrityCheck=info
log4j.logger.net.sf.joafip.performance.items.service.Searcher=info
log4j.logger.net.sf.joafip.performance.items.service.SearcherBKM=info
Added: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java (rev 0)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.btreeplus.entity;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+public class IntegrityCheckResult {
+
+ private final int depth;
+ private final int entriesCount;
+ private final int leafPageCount;
+ private final int nonTerminalPageCount;
+
+ public IntegrityCheckResult(final int depth, final int entriesCount,
+ final int leafPageCount, final int nonTerminalPageCount) {
+ super();
+ this.depth = depth;
+ this.entriesCount = entriesCount;
+ this.leafPageCount = leafPageCount;
+ this.nonTerminalPageCount = nonTerminalPageCount;
+ }
+
+ public int getDepth() {
+ return depth;
+ }
+
+ public int getEntriesCount() {
+ return entriesCount;
+ }
+
+ public int getLeafPageCount() {
+ return leafPageCount;
+ }
+
+ public int getNonTerminalPageCount() {
+ return nonTerminalPageCount;
+ }
+}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -428,4 +428,8 @@
public long getLastPagePosition() {
return pagePositions[numberOfKeyEntries];
}
+
+ public DataRecordIdentifier getFirstKey() {
+ return keys[0];
+ }
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -66,6 +66,10 @@
btreePlusElementMgr = new BtreePlusElementMgr(heapElementManager);
}
+ public BtreePlusElementMgr getBtreePlusElementMgr() {
+ return btreePlusElementMgr;
+ }
+
@Override
public boolean isDataLost() {
return btreePlusElementMgr.isDataLost();
Added: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java (rev 0)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -0,0 +1,190 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.btreeplus.service;
+
+import java.util.Deque;
+import java.util.LinkedList;
+
+import net.sf.joafip.NotStorableClass;
+import net.sf.joafip.btreeplus.entity.EnumRecordType;
+import net.sf.joafip.btreeplus.entity.IPageRecordable;
+import net.sf.joafip.btreeplus.entity.IntegrityCheckResult;
+import net.sf.joafip.btreeplus.entity.LeafPage;
+import net.sf.joafip.btreeplus.entity.NonTerminalPage;
+import net.sf.joafip.kvstore.service.HeapException;
+import net.sf.joafip.kvstore.service.IHeapDataManager;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+@NotStorableClass
+public class BtreePlusDataMgrIntegrityChecker {
+
+ private final static BtreePlusDataMgrIntegrityChecker INSTANCE = new BtreePlusDataMgrIntegrityChecker();
+
+ private BtreePlusDataMgrIntegrityChecker() {
+ super();
+ }
+
+ public static BtreePlusDataMgrIntegrityChecker getInstance() {
+ return INSTANCE;
+ }
+
+ public IntegrityCheckResult checkIntegrity(
+ final IHeapDataManager dataManager) throws HeapException {
+ if (!BtreePlusDataManager.class.equals(dataManager.getClass())) {
+ throw new HeapException("bad class " + dataManager.getClass());
+ }
+ return checkIntegrity((BtreePlusDataManager) dataManager);
+ }
+
+ private IntegrityCheckResult checkIntegrity(
+ final BtreePlusDataManager btreePlusDataManager)
+ throws HeapException {
+ final Deque<State> stack = new LinkedList<State>();
+ State state = new State(-1, Long.MAX_VALUE);
+ stack.push(state);
+ final BtreePlusElementMgr elementMgr = btreePlusDataManager
+ .getBtreePlusElementMgr();
+ IPageRecordable pageRecordable = elementMgr.getRoot();
+ int index = 0;
+ int currentDepth = 0;
+ int depth = -1;
+ int entriesCount = 0;
+ int leafPageCount = 0;
+ int nonTerminalPageCount = 0;
+ // System.out.println("--- begin ---");
+ while (pageRecordable != null) {
+ elementMgr.clearReadCache();
+ final EnumRecordType recordType = pageRecordable.getRecordType();
+ switch (recordType) {
+ case LEAF_PAGE: {
+ final LeafPage leafPage = (LeafPage) pageRecordable;
+ // check leaf page value range
+ final long firstKeyValue = leafPage.getFirstKey().value;
+ final long lastKeyValue = leafPage.getLastKey().value;
+ state = stack.peek();
+ if (state.minValue > firstKeyValue
+ || state.maxValue < lastKeyValue) {
+ throw new HeapException("not have " + state.minValue
+ + "(min value)<=" + firstKeyValue
+ + "(first key value) " + lastKeyValue
+ + "(last key value) <=" + state.maxValue
+ + "(max value)");
+ }
+ // check well formed
+ if (currentDepth != 0 && !leafPage.wellFilled()) {
+ throw new HeapException("not well filled");
+ }
+ // check depth, all leaf page must be at same depth
+ if (depth == -1) {
+ depth = currentDepth;
+ } else if (depth != currentDepth) {
+ throw new HeapException("bad leaf page depth "
+ + currentDepth + " first leaf apge depth is "
+ + depth);
+ }
+
+ entriesCount += leafPage.getNumberOfKeyEntries();
+ // count leaf page
+ leafPageCount++;
+ // go up
+ pageRecordable = leafPage.getParentPage();
+ index = leafPage.getInParentIndex() + 1;
+ currentDepth--;
+ stack.pop();
+ }
+ break;
+ case NON_TERMINAL_PAGE: {
+ final NonTerminalPage nonTerminalPage = (NonTerminalPage) pageRecordable;
+ if (index == 0) {
+ // check non terminal page value range
+ final long firstKeyValue = nonTerminalPage.getFirstKey().value;
+ final long lastKeyValue = nonTerminalPage.getLastKey().value;
+ state = stack.peek();
+ if (state.minValue > firstKeyValue
+ || state.maxValue < lastKeyValue) {
+ throw new HeapException("not have " + state.minValue
+ + "(min value)<=" + firstKeyValue
+ + "(first key value) " + lastKeyValue
+ + "(last key value) <=" + state.maxValue
+ + "(max value)");
+ }
+ // check well formed
+ if (currentDepth != 0 && !nonTerminalPage.wellFilled()) {
+ throw new HeapException("not well filled");
+ }
+ // count non terminal page
+ nonTerminalPageCount++;
+ }
+
+ // go up or down
+ if (index > nonTerminalPage.getNumberOfKeyEntries()) {
+ // go up
+ pageRecordable = nonTerminalPage.getParentPage();
+ index = nonTerminalPage.getInParentIndex() + 1;
+ currentDepth--;
+ stack.pop();
+ } else {
+ // go down
+ final long position = nonTerminalPage.getPagePointer(index);
+ pageRecordable = elementMgr.getPage(position,
+ pageRecordable, index);
+ state = stack.peek();
+ if (state == null) {
+ throw new HeapException("stack must not be empty");
+ }
+ final long minValue = index == 0 ? state.minValue
+ : nonTerminalPage.getFirstKey().value;
+ final long maxValue = index == nonTerminalPage
+ .getNumberOfKeyEntries() ? state.maxValue
+ : nonTerminalPage.getLastKey().value;
+ stack.push(new State(minValue, maxValue));
+ index = 0;
+ currentDepth++;
+ }
+ }
+ break;
+ default:
+ throw new HeapException("bad record type " + recordType);
+ }
+ }
+ // System.out.println("--- end ---");
+ return new IntegrityCheckResult(depth, entriesCount, leafPageCount,
+ nonTerminalPageCount);
+ }
+
+ private class State {
+ private long minValue;
+ private long maxValue;
+
+ public State(final long minValue, final long maxValue) {
+ super();
+ this.minValue = minValue;
+ this.maxValue = maxValue;
+ }
+ }
+}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -385,4 +385,8 @@
public int getNumberOfDataRecord() {
return header.getNumberOfDataRecord();
}
+
+ public void clearReadCache() {
+ heapElementManager.clearReadCache();
+ }
}
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -50,7 +50,8 @@
@Override
protected void checkIntegrity() throws HeapException {
- // no implementation
+ BtreePlusDataMgrIntegrityChecker.getInstance().checkIntegrity(
+ heapDataManager);
}
@Override
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -68,5 +68,7 @@
@Override
protected void checkIntegrity() throws HeapException {
+ BtreePlusDataMgrIntegrityChecker.getInstance().checkIntegrity(
+ heapDataManager);
}
}
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -72,5 +72,7 @@
@Override
protected void checkIntegrity() throws HeapException {
+ BtreePlusDataMgrIntegrityChecker.getInstance().checkIntegrity(
+ heapDataManager);
}
}
Modified: trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java
===================================================================
--- trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -359,4 +359,9 @@
public String backup(long identifier, int maxBackup) throws HeapException {
throw new UnsupportedOperationException("not implemented");
}
+
+ @Override
+ public void clearReadCache() {
+ // no implementation
+ }
}
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-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -739,13 +739,10 @@
openedTransaction = false;
}
- // private void clearHeaprecordReadMap() {
- // readHeapRecordMap.clear();
- // }
- //
- // private void clearHeaprecordToWriteMap() {
- // heapRecordToWriteMap.clear();
- // }
+ @Override
+ public void clearReadCache() {
+ readHeapRecordMap.clear();
+ }
private void clearHeaprecordMaps() {
heapRecordToWriteMap.clear();
@@ -841,11 +838,6 @@
}
lastWrotePositionInFile = recordPositionInFile
+ heapRecord.getRecordSize() - 1;
- // FIXMELUC _______________________for test
- if (lastWrotePositionInFile == 36863) {
- System.out.println();
- heapRecord.getRecordSize();
- }
lastRecordPositionInFile = recordPositionInFile;
}
saveHeapRecord(heapRecord, toBackupList);
@@ -1074,10 +1066,6 @@
public void appendHeapFileRecord(final IFileStorable heapRecord)
throws HeapException {
final long positionInFile = heapRecord.getPositionInFile();
- // FIXMELUC ______________________for test
- if (positionInFile == 28672) {
- System.out.println();
- }
// ASSERTX
assert assertTransactionOpened();
// ASSERTX
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/IHeapElementManager.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/IHeapElementManager.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/IHeapElementManager.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -190,4 +190,6 @@
IDataRecordKeyManager getDataRecordKeyManager();
String backup(long identifier, int maxBackup) throws HeapException;
+
+ void clearReadCache();
}
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockHeapElementManager.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockHeapElementManager.java 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockHeapElementManager.java 2012-05-07 02:28:12 UTC (rev 3074)
@@ -23,6 +23,7 @@
*/
package net.sf.joafip.kvstore.record.service.mock;
+import java.util.Iterator;
import java.util.Map;
import java.util.TreeMap;
@@ -145,6 +146,17 @@
}
@Override
+ public void clearReadCache() {
+ final Iterator<IFileStorable> iterator = cache.values().iterator();
+ while (iterator.hasNext()) {
+ IFileStorable next = iterator.next();
+ if (!next.isValueChangedToSave()) {
+ iterator.remove();
+ }
+ }
+ }
+
+ @Override
public boolean isTransactionOpened() {
return transactionOpen;
}
Modified: trunk/joafip-parent/pom.xml
===================================================================
--- trunk/joafip-parent/pom.xml 2012-05-06 09:58:36 UTC (rev 3073)
+++ trunk/joafip-parent/pom.xml 2012-05-07 02:28:12 UTC (rev 3074)
@@ -32,7 +32,7 @@
<maven.process-test-sources.skip>true</maven.process-test-sources.skip>
<maven.generate-test-resources.skip>true</maven.generate-test-resources.skip>
<maven.process-test-resources.skip>true</maven.process-test-resources.skip>
- <maven.test-compile.skip>true</maven.test-compile.skip>
+ <!-- <maven.test-compile.skip>true</maven.test-compile.skip> -->
<maven.process-test-classes.skip>true</maven.process-test-classes.skip>
<maven.test.skip>true</maven.test.skip>
</properties>
@@ -283,7 +283,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
- <version>2.9</version>
+ <version>2.12</version>
<configuration>
<parallel>false</parallel>
<forkMode>never</forkMode>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-07 02:28:19
|
Revision: 3074
http://joafip.svn.sourceforge.net/joafip/?rev=3074&view=rev
Author: luc_peuvrier
Date: 2012-05-07 02:28:12 +0000 (Mon, 07 May 2012)
Log Message:
-----------
WIP btree plus: consistency check added
Modified Paths:
--------------
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractDeleter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractInserter.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractPerfService.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/AbstractSearcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/ImportSearcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBKM.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterFewInsertAndExport.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterHeapFileWithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/Searcher.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBKM.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-4test/src/main/resources/log4j.properties
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/NonTerminalPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java
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/IHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockHeapElementManager.java
trunk/joafip-parent/pom.xml
Added Paths:
-----------
trunk/joafip-4test/src/main/java/net/sf/joafip/btreeplus/
trunk/joafip-4test/src/main/java/net/sf/joafip/heapfile/
trunk/joafip-4test/src/main/java/net/sf/joafip/kvstore/
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusIntigrityCheck.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IntegrityCheckResult.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataMgrIntegrityChecker.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-06 09:58:45
|
Revision: 3073
http://joafip.svn.sourceforge.net/joafip/?rev=3073&view=rev
Author: luc_peuvrier
Date: 2012-05-06 09:58:36 +0000 (Sun, 06 May 2012)
Log Message:
-----------
WIP btree plus: tests OK : WIP check and optimization : new tests and corrections
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecord.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockPageRecord.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrMemoryLeak.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithKey.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManager.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerBackup.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerFreeing.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrMemoryLeak.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithKey.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithScenario.java
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/IHeapRecordFactory.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerImpl.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/TestBlockDataManager.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/InErrorTests.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusServiceTests.java
Added Paths:
-----------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -50,6 +50,8 @@
private long lastRecordPositionInFile;
+ private int numberOfDataRecord;
+
public HeaderPage(final IHeapElementManager heapElementManager) {
super(heapElementManager, 0L);
}
@@ -109,6 +111,7 @@
freeDataBlocks = null;
nextDataRecordIdentifier = 0;
lastRecordPositionInFile = -1L;
+ numberOfDataRecord = 0;
}
@Override
@@ -144,6 +147,7 @@
writeLong(rootPagePosition);
writeLong(nextDataRecordIdentifier);
writeLong(lastRecordPositionInFile);
+ writeInteger(numberOfDataRecord);
initializeFreeDataBlock();
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
writeLong(freeDataBlocks[index]);
@@ -168,6 +172,7 @@
rootPagePosition = readLong();
nextDataRecordIdentifier = readLong();
lastRecordPositionInFile = readLong();
+ numberOfDataRecord = readInteger();
initializeFreeDataBlock();
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
freeDataBlocks[index] = readLong();
@@ -254,4 +259,18 @@
public long getLastRecordPositionInFile() {
return lastRecordPositionInFile;
}
+
+ public void incrementNumberOfDataRecord() throws HeapException {
+ numberOfDataRecord++;
+ setValueIsChangedValueToSave();
+ }
+
+ public void decrementNumberOfDataRecord() throws HeapException {
+ numberOfDataRecord--;
+ setValueIsChangedValueToSave();
+ }
+
+ public int getNumberOfDataRecord() {
+ return numberOfDataRecord;
+ }
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecord.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecord.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecord.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -61,4 +61,6 @@
long getPageNumber();
+ void setPageRecordable(IPageRecordable pageRecordable) throws HeapException;
+
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -51,10 +51,8 @@
* value
*/));
- private final long[] dataBlockPosition = new long[MAX_NUMBER_OF_ENTRIES];
+ private final PageNode[] nodes = new PageNode[MAX_NUMBER_OF_ENTRIES];
- private final DataRecordIdentifier[] keys = new DataRecordIdentifier[MAX_NUMBER_OF_ENTRIES];
-
private int numberOfKeyEntries;
private int byteSize;
@@ -110,11 +108,11 @@
}
public DataRecordIdentifier getKey(final int index) {
- return keys[index];
+ return nodes[index].dataRecordIdentifier;
}
public long getBlockPointer(final int index) {
- return dataBlockPosition[index];
+ return nodes[index].pointer;
}
public long getNext() {
@@ -128,8 +126,7 @@
public void setEntry(final int index, final long pagePointer,
final DataRecordIdentifier key) throws HeapException {
- dataBlockPosition[index] = pagePointer;
- keys[index] = key;
+ nodes[index] = new PageNode(key, pagePointer);
byteSize = 0;// unknown size because key size change
setValueIsChangedValueToSave();
}
@@ -154,7 +151,7 @@
} else {
xbyteSize = HEAD_TAIL_SIZE;
for (int index = 0; index < numberOfKeyEntries; index++) {
- xbyteSize += entrySize(keys[index]);
+ xbyteSize += entrySize(nodes[index].dataRecordIdentifier);
}
}
return xbyteSize;
@@ -173,13 +170,17 @@
int end = numberOfKeyEntries - 1;
while (position == -1 && end >= begin) {
final int middle = (begin + end) >> 1;
- final int compareto = dataRecordIdentifier.compareTo(keys[middle]);
+ final int compareto = dataRecordIdentifier
+ .compareTo(nodes[middle].dataRecordIdentifier);
if (compareto < 0) {
end = middle - 1;
} else if (compareto > 0) {
begin = middle + 1;
} else {
- position = dataBlockPosition[middle];
+ position = nodes[middle].pointer;
+ // ASSERTX
+ assert position >= 0;
+ this.index = middle;
}
}
// below was "simpler" implementation
@@ -198,7 +199,7 @@
public void setDataBlock(final int index, final IDataBlock dataBlock)
throws HeapException {
- dataBlockPosition[index] = dataBlock.getPositionInFile();
+ nodes[index].pointer = dataBlock.getPositionInFile();
setValueIsChangedValueToSave();
}
@@ -221,14 +222,11 @@
final int afterLength = numberOfKeyEntries - insertBeforeIndex;
numberOfKeyEntries++;
if (afterLength != 0) {
- System.arraycopy(dataBlockPosition, insertBeforeIndex,
- dataBlockPosition, insertBeforeIndex + 1, afterLength);
- System.arraycopy(keys, insertBeforeIndex, keys,
+ System.arraycopy(nodes, insertBeforeIndex, nodes,
insertBeforeIndex + 1, afterLength);
}
- dataBlockPosition[insertBeforeIndex] = dataBlock
- .getPositionInFile();
- keys[insertBeforeIndex] = dataRecordIdentifier;
+ nodes[insertBeforeIndex] = new PageNode(dataRecordIdentifier,
+ dataBlock.getPositionInFile());
byteSize += entrySize;
// ASSERTX
assert byteSize == computeByteSize() : byteSize + " for "
@@ -247,9 +245,7 @@
final LeafPage newLeafPage = new LeafPage(
newLeafPageNumberOfKeyEntries, longKey);
- System.arraycopy(dataBlockPosition, newNumberOfKeyEntries,
- newLeafPage.dataBlockPosition, 0, newLeafPageNumberOfKeyEntries);
- System.arraycopy(keys, newNumberOfKeyEntries, newLeafPage.keys, 0,
+ System.arraycopy(nodes, newNumberOfKeyEntries, newLeafPage.nodes, 0,
newLeafPageNumberOfKeyEntries);
newLeafPage.updateByteSize();
@@ -271,16 +267,14 @@
}
public void remove(final int index) throws HeapException {
- DataRecordIdentifier dataRecordIdentifier = keys[index];
+ final DataRecordIdentifier dataRecordIdentifier = nodes[index].dataRecordIdentifier;
final int entrySize = entrySize(dataRecordIdentifier);
// ASSERTX
assert byteSize != 0 : "unknow current byte size";
final int afterLength = numberOfKeyEntries - (index + 1);
numberOfKeyEntries--;
if (afterLength != 0) {
- System.arraycopy(dataBlockPosition, index + 1, dataBlockPosition,
- index, afterLength);
- System.arraycopy(keys, index + 1, keys, index, afterLength);
+ System.arraycopy(nodes, index + 1, nodes, index, afterLength);
}
byteSize -= entrySize;
// ASSERTX
@@ -301,7 +295,8 @@
int end = numberOfKeyEntries - 1;
while (end >= begin) {
final int middle = (begin + end) >> 1;
- final int compareto = dataRecordIdentifier.compareTo(keys[middle]);
+ final int compareto = dataRecordIdentifier
+ .compareTo(nodes[middle].dataRecordIdentifier);
if (compareto <= 0) {
end = middle - 1;
} else {
@@ -317,7 +312,7 @@
}
public DataRecordIdentifier getLastKey() {
- return keys[numberOfKeyEntries - 1];
+ return nodes[numberOfKeyEntries - 1].dataRecordIdentifier;
}
/**
@@ -335,9 +330,7 @@
final boolean merged;
if (byteSize + leafPageByteSize - HEAD_TAIL_SIZE <= PageConstant.PAGE_SIZE) {
merged = true;
- System.arraycopy(leafPage.dataBlockPosition, 0, dataBlockPosition,
- numberOfKeyEntries, leafPageNumberOfKeyEntries);
- System.arraycopy(leafPage.keys, 0, keys, numberOfKeyEntries,
+ System.arraycopy(leafPage.nodes, 0, nodes, numberOfKeyEntries,
leafPageNumberOfKeyEntries);
numberOfKeyEntries = totalNumberOfEntries;
// can merge
@@ -352,16 +345,11 @@
- newNumberOfEntries;
if (newNumberOfEntries > numberOfKeyEntries) {
final int length = newNumberOfEntries - numberOfKeyEntries;
- System.arraycopy(leafPage.dataBlockPosition, 0,
- dataBlockPosition, numberOfKeyEntries, length);
- System.arraycopy(leafPage.keys, 0, keys, numberOfKeyEntries,
+ System.arraycopy(leafPage.nodes, 0, nodes, numberOfKeyEntries,
length);
- System.arraycopy(leafPage.dataBlockPosition, length,
- leafPage.dataBlockPosition, 0,
+ System.arraycopy(leafPage.nodes, length, leafPage.nodes, 0,
leafPageNumberOfKeyEntries);
- System.arraycopy(leafPage.keys, length, leafPage.keys, 0,
- leafPageNumberOfKeyEntries);
numberOfKeyEntries = newNumberOfEntries;
leafPage.numberOfKeyEntries = newLeafPageNumberOfEntries;
@@ -371,15 +359,10 @@
final int length = newLeafPageNumberOfEntries
- leafPageNumberOfKeyEntries;
- System.arraycopy(leafPage.dataBlockPosition, 0,
- leafPage.dataBlockPosition, length,
+ System.arraycopy(leafPage.nodes, 0, leafPage.nodes, length,
leafPageNumberOfKeyEntries);
- System.arraycopy(leafPage.keys, 0, leafPage.keys, length,
- leafPageNumberOfKeyEntries);
- System.arraycopy(dataBlockPosition, newNumberOfEntries,
- leafPage.dataBlockPosition, 0, length);
- System.arraycopy(keys, newNumberOfEntries, leafPage.keys, 0,
+ System.arraycopy(nodes, newNumberOfEntries, leafPage.nodes, 0,
length);
numberOfKeyEntries = newNumberOfEntries;
@@ -390,4 +373,8 @@
}
return merged;
}
+
+ public DataRecordIdentifier getFirstKey() {
+ return nodes[0].dataRecordIdentifier;
+ }
}
Added: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java (rev 0)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.btreeplus.entity;
+
+import net.sf.joafip.NotStorableClass;
+import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+@NotStorableClass
+public class PageNode {
+
+ public DataRecordIdentifier dataRecordIdentifier;
+
+ public long pointer;
+
+ public PageNode(DataRecordIdentifier dataRecordIdentifier, long pointer) {
+ super();
+ this.dataRecordIdentifier = dataRecordIdentifier;
+ this.pointer = pointer;
+ }
+}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -72,6 +72,15 @@
}
@Override
+ public void setPageRecordable(final IPageRecordable pageRecordable)
+ throws HeapException {
+ this.pageRecordable = pageRecordable;
+ this.recordType = pageRecordable.getRecordType();
+ pageRecordable.setPageRecord(this);
+ setValueIsChangedValueToSave();
+ }
+
+ @Override
protected void valueChangedAction() throws HeapException {
/*
* is to be saved
@@ -302,4 +311,23 @@
readAndCheckCrc32(0);
pageRecordable = dataBlockPage;
}
+
+ @Override
+ public String toString() {
+ final StringBuilder builder = new StringBuilder();
+ builder.append("PageRecord [recordType=");
+ builder.append(recordType);
+ builder.append(", numberOfPage=");
+ builder.append(getNumberOfPage());
+ builder.append(", pageNumber=");
+ builder.append(pageNumber);
+ builder.append(", previousRecordPositionInFile=");
+ builder.append(previousRecordPositionInFile);
+ builder.append(", longKey=");
+ builder.append(longKey);
+ builder.append(", positionInFile=");
+ builder.append(positionInFile);
+ builder.append("]");
+ return builder.toString();
+ }
}
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -167,12 +167,6 @@
btreePlusElementMgr.getNewDataRecordIdentifier());
}
- // ------------------------------------------------------------------------------
- // ------------------------------------------------------------------------------
- // ------------------------------------------------------------------------------
- // ------------------------------------------------------------------------------
- // ------------------------------------------------------------------------------
-
@Override
protected byte[] readDataRecordImpl(
DataRecordIdentifier dataRecordIdentifier) throws HeapException {
@@ -212,6 +206,7 @@
.createDataBlock(data);
btreePlusElementMgr
.newRootLeafPage(dataRecordIdentifier, dataBlock);
+ btreePlusElementMgr.incrementNumberOfDataRecord();
} else {
// existing data
long dataBlockPosition = leafPage
@@ -240,6 +235,7 @@
}
}
}
+ btreePlusElementMgr.incrementNumberOfDataRecord();
} else {
// data record found
created = false;
@@ -312,63 +308,72 @@
leafPage.remove(indexInLeafPage);
final NonTerminalPage nonTerminalPage = (NonTerminalPage) leafPage
.getParentPage();
- final int leafPageInParentIndex = leafPage.getInParentIndex();
- if (leafPage.wellFilled()) {
- if (leafPageInParentIndex != nonTerminalPage
- .getNumberOfKeyEntries()) {
- if (!nonTerminalPage.setKey(leafPageInParentIndex,
- leafPage.getLastKey())) {
- equilibrateFull(nonTerminalPage);
+ if (nonTerminalPage == null) {
+ if (leafPage.getNumberOfKeyEntries() == 0) {
+ btreePlusElementMgr.freePage(leafPage.getPageRecord());
+ btreePlusElementMgr.removeRoot();
+ }
+ } else {
+ final int leafPageInParentIndex = leafPage.getInParentIndex();
+ if (leafPage.wellFilled()) {
+ if (leafPageInParentIndex != nonTerminalPage
+ .getNumberOfKeyEntries()) {
+ if (!nonTerminalPage.setKey(leafPageInParentIndex,
+ leafPage.getLastKey())) {
+ equilibrateFull(nonTerminalPage);
+ }
}
- }
- } else if (leafPageInParentIndex != 0) {
- final int leftLeafPageInParentIndex = leafPageInParentIndex - 1;
- final long leftLeafPagePosition = nonTerminalPage
- .getPagePointer(leftLeafPageInParentIndex);
- final LeafPage leftLeafPage = (LeafPage) btreePlusElementMgr
- .getPage(leftLeafPagePosition, nonTerminalPage,
- leftLeafPageInParentIndex);
- if (leftLeafPage.equilibrate(leafPage)) {
- // leaf page merged in left leaf page
- btreePlusElementMgr.freePage(leafPage.getPageRecord());
- nonTerminalPage.remove(leafPageInParentIndex);
- if (nonTerminalPage.setKey(leftLeafPageInParentIndex,
- leftLeafPage.getLastKey())) {
- equilibrate(nonTerminalPage);
+ } else if (leafPageInParentIndex != 0) {
+ final int leftLeafPageInParentIndex = leafPageInParentIndex - 1;
+ final long leftLeafPagePosition = nonTerminalPage
+ .getPagePointer(leftLeafPageInParentIndex);
+ final LeafPage leftLeafPage = (LeafPage) btreePlusElementMgr
+ .getPage(leftLeafPagePosition, nonTerminalPage,
+ leftLeafPageInParentIndex);
+ if (leftLeafPage.equilibrate(leafPage)) {
+ // leaf page merged in left leaf page
+ btreePlusElementMgr.freePage(leafPage.getPageRecord());
+ nonTerminalPage.remove(leafPageInParentIndex);
+ if (nonTerminalPage.setKey(leftLeafPageInParentIndex,
+ leftLeafPage.getLastKey())) {
+ equilibrate(nonTerminalPage);
+ } else {
+ equilibrateFull(nonTerminalPage);
+ }
} else {
- equilibrateFull(nonTerminalPage);
+ if (!nonTerminalPage.setKey(leftLeafPageInParentIndex,
+ leftLeafPage.getLastKey())) {
+ equilibrateFull(nonTerminalPage);
+ }
}
- } else {
- if (!nonTerminalPage.setKey(leftLeafPageInParentIndex,
- leftLeafPage.getLastKey())) {
- equilibrateFull(nonTerminalPage);
- }
- }
- } else if (leafPageInParentIndex != nonTerminalPage
- .getNumberOfKeyEntries() - 1) {
- final int rightLeafPageinParentIndex = leafPageInParentIndex + 1;
- final long rightLeafPagePosition = nonTerminalPage
- .getPagePointer(rightLeafPageinParentIndex);
- final LeafPage rightLeafPage = (LeafPage) btreePlusElementMgr
- .getPage(rightLeafPagePosition, nonTerminalPage,
- rightLeafPageinParentIndex);
- if (leafPage.equilibrate(rightLeafPage)) {
- // right leaf page merged in leaf page
- btreePlusElementMgr.freePage(rightLeafPage.getPageRecord());
- nonTerminalPage.remove(rightLeafPageinParentIndex);
- if (nonTerminalPage.setKey(leafPageInParentIndex,
- leafPage.getLastKey())) {
- equilibrate(nonTerminalPage);
+ } else if (leafPageInParentIndex != nonTerminalPage
+ .getNumberOfKeyEntries() - 1) {
+ final int rightLeafPageinParentIndex = leafPageInParentIndex + 1;
+ final long rightLeafPagePosition = nonTerminalPage
+ .getPagePointer(rightLeafPageinParentIndex);
+ final LeafPage rightLeafPage = (LeafPage) btreePlusElementMgr
+ .getPage(rightLeafPagePosition, nonTerminalPage,
+ rightLeafPageinParentIndex);
+ if (leafPage.equilibrate(rightLeafPage)) {
+ // right leaf page merged in leaf page
+ btreePlusElementMgr.freePage(rightLeafPage
+ .getPageRecord());
+ nonTerminalPage.remove(rightLeafPageinParentIndex);
+ if (nonTerminalPage.setKey(leafPageInParentIndex,
+ leafPage.getLastKey())) {
+ equilibrate(nonTerminalPage);
+ } else {
+ equilibrateFull(nonTerminalPage);
+ }
} else {
- equilibrateFull(nonTerminalPage);
+ if (!nonTerminalPage.setKey(leafPageInParentIndex,
+ leafPage.getLastKey())) {
+ equilibrateFull(nonTerminalPage);
+ }
}
- } else {
- if (!nonTerminalPage.setKey(leafPageInParentIndex,
- leafPage.getLastKey())) {
- equilibrateFull(nonTerminalPage);
- }
}
}
+ btreePlusElementMgr.decrementNumberOfDataRecord();
}
return deleted;
}
@@ -458,14 +463,29 @@
@Override
protected DataRecordIdentifier removeFirstDataRecordImpl()
throws HeapException {
- // FIXMELUC ________to implement
- throw new HeapException("not implemented");
+ final DataRecordIdentifier first;
+ final IPageRecordable root = btreePlusElementMgr.getRoot();
+ if (root == null) {
+ first = null;
+ } else {
+ IPageRecordable page = root;
+ while (!EnumRecordType.LEAF_PAGE.equals(page.getRecordType())) {
+ final NonTerminalPage nonTerminalPage = (NonTerminalPage) page;
+ final long pagePosition = nonTerminalPage.getPagePointer(0);
+ page = btreePlusElementMgr.getPage(pagePosition, page, 0);
+ }
+ LeafPage leafPage = (LeafPage) page;
+ first = leafPage.getFirstKey();
+ final boolean deleted = deleteDataRecordImpl(first);
+ // ASSRTX
+ assert deleted;
+ }
+ return first;
}
@Override
protected int getNumberOfDataRecordImpl() throws HeapException {
- // FIXMELUC ________to implement
- throw new HeapException("not implemented");
+ return btreePlusElementMgr.getNumberOfDataRecord();
}
@Override
@@ -504,9 +524,13 @@
} else {
final long dataBlockPosition = leafPage
.getDataBlockPosition(dataRecordIdentifier);
- final int indexinLeafPage = leafPage.getIndex();
- dataBlock = btreePlusElementMgr.getDataBlock(dataBlockPosition);
- dataBlock.setParent(leafPage, indexinLeafPage);
+ if (dataBlockPosition == -1L) {
+ dataBlock = null;
+ } else {
+ final int indexinLeafPage = leafPage.getIndex();
+ dataBlock = btreePlusElementMgr.getDataBlock(dataBlockPosition);
+ dataBlock.setParent(leafPage, indexinLeafPage);
+ }
}
return dataBlock;
}
@@ -567,7 +591,7 @@
@Override
public long getRecordPositionInfile(final DataRecordIdentifier identifier)
throws HeapException {
- return btreePlusElementMgr.getRecordPositionInfile(identifier);
+ return dataBlock(identifier).getPositionInFile();
}
@Fortest
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -276,7 +276,17 @@
final IDataBlock dataBlock;
if (freeDataBlockPosition == -1L) {
DataBlockPage dataBlockPage = new DataBlockPage(bits);
- internalAppendPageRecordable(dataBlockPage);
+ long pageNumber = header.getFileSizeAsNumberOfPage();
+ long previousRecordPositionInFile = header
+ .getLastRecordPositionInFile();
+ // the new page record for page recordable
+ final IPageRecord pageRecord = new PageRecord(heapElementManager,
+ previousRecordPositionInFile, dataBlockPage, pageNumber);
+ header.setFileSizeAsNumberOfPage(pageNumber
+ + pageRecord.getNumberOfPage());
+ header.setLastRecordPositionInFile(pageNumber << PageConstant.PAGE_BITS);
+ dataBlockPage.setPageRecord(pageRecord);
+ heapElementManager.appendHeapFileRecord(pageRecord);
dataBlockPage.setAllFree();
dataBlock = dataBlockPage.getDataBlocks()[0];
} else {
@@ -289,6 +299,10 @@
return dataBlock;
}
+ public void removeRoot() throws HeapException {
+ header.setRootPagePosition(-1L);
+ }
+
public void remove(final IDataBlock dataBlock) throws HeapException {
final byte bits = dataBlock.getBits();
final long freeDataBlockPosition = header
@@ -302,39 +316,43 @@
throws HeapException {
// ASSERTX
assert notInternalyManagedPage(pageRecordable);
- internalAppendPageRecordable(pageRecordable);
- }
-
- private void internalAppendPageRecordable(
- final IPageRecordable pageRecordable) throws HeapException {
long pageNumber = header.getPageNumberOfFirstFreePage();
- boolean newPage;
final long previousRecordPositionInFile;
+ final PageRecord freePageRecord;
if (pageNumber == -1) {
- newPage = true;
+ freePageRecord = null;
pageNumber = header.getFileSizeAsNumberOfPage();
previousRecordPositionInFile = header.getLastRecordPositionInFile();
} else {
- newPage = false;
- final FreePage freePage = (FreePage) ((PageRecord) heapElementManager
- .readHeapFileDataRecord(pageNumber << PageConstant.PAGE_BITS))
+ freePageRecord = (PageRecord) heapElementManager
+ .readHeapFileDataRecord(pageNumber << PageConstant.PAGE_BITS);
+ // ASSERTX
+ assert freePageRecord.getNumberOfPage() == 1
+ && pageRecordable.getNumberOfPage() == 1;
+ final FreePage freePage = (FreePage) freePageRecord
.getPageRecordable();
header.setPageNumberOfFirstFreePage(freePage.getNextFreePage());
- previousRecordPositionInFile = freePage
- .getPreviousRecordPositionInFile();
+ previousRecordPositionInFile = -1L;// do not care value // freePage
+ // .getPreviousRecordPositionInFile();
}
- final IPageRecord pageRecord = new PageRecord(heapElementManager,
- previousRecordPositionInFile, pageRecordable, pageNumber);
- if (newPage) {
+
+ if (freePageRecord == null) {
+ // the new page record for page recordable
+ final IPageRecord pageRecord = new PageRecord(heapElementManager,
+ previousRecordPositionInFile, pageRecordable, pageNumber);
header.setFileSizeAsNumberOfPage(pageNumber
+ pageRecord.getNumberOfPage());
header.setLastRecordPositionInFile(pageNumber << PageConstant.PAGE_BITS);
+ pageRecordable.setPageRecord(pageRecord);
+ heapElementManager.appendHeapFileRecord(pageRecord);
} else {
- // ASSERTX
- assert pageRecord.getNumberOfPage() == 1;
+ freePageRecord.setPageRecordable(pageRecordable);
}
- pageRecordable.setPageRecord(pageRecord);
- heapElementManager.appendHeapFileRecord(pageRecord);
+ // ASSERTX
+ assert pageRecordable.getNumberOfPage() == 1 : pageRecordable
+ .getNumberOfPage()
+ + " pages for "
+ + pageRecordable.getPageRecord().toString();
}
private boolean notInternalyManagedPage(final IPageRecordable pageRecordable) {
@@ -344,26 +362,27 @@
public void freePage(final IPageRecord pageRecord) throws HeapException {
final long freePageNumber = header.getPageNumberOfFirstFreePage();
- FreePage freePage = new FreePage(freePageNumber);
+ final FreePage freePage = new FreePage(freePageNumber);
+ pageRecord.setPageRecordable(freePage);
+ // freePage.setValueIsChangedValueToSave();
final long newFreePageNumber = pageRecord.getPageNumber();
- final long previousRecordPositionInFile = pageRecord
- .getPreviousRecordPositionInFile();
- PageRecord pageRecord2 = new PageRecord(heapElementManager,
- previousRecordPositionInFile, freePage, newFreePageNumber);
- freePage.setPageRecord(pageRecord2);
- freePage.setValueIsChangedValueToSave();
- heapElementManager.appendHeapFileRecord(pageRecord2);
header.setPageNumberOfFirstFreePage(newFreePageNumber);
}
@Fortest
- public long getRecordPositionInfile(final DataRecordIdentifier identifier) {
- throw new UnsupportedOperationException("not implemented");
+ public long getLastRecordPositionInFile() throws HeapException {
+ return header.getLastRecordPositionInFile();
}
- @Fortest
- public long getLastRecordPositionInFile() throws HeapException {
- return (header.getFileSizeAsNumberOfPage() - 1)
- * PageConstant.PAGE_SIZE;
+ public void incrementNumberOfDataRecord() throws HeapException {
+ header.incrementNumberOfDataRecord();
}
+
+ public void decrementNumberOfDataRecord() throws HeapException {
+ header.decrementNumberOfDataRecord();
+ }
+
+ public int getNumberOfDataRecord() {
+ return header.getNumberOfDataRecord();
+ }
}
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -118,9 +118,14 @@
}
public void testSetDataBlock() throws HeapException {
- final LeafPage leafPage = new LeafPage(1, true);
+ final LeafPage leafPage = new LeafPage(0, true);
leafPage.setPageRecord(PAGE_RECORD);
- final MockDataBlock dataBlock = new MockDataBlock();
+ leafPage.updateByteSize();
+ MockDataBlock dataBlock = new MockDataBlock();
+ dataBlock.setPosition(0);
+ leafPage.add(new DataRecordIdentifier(), dataBlock);
+
+ dataBlock = new MockDataBlock();
final long position = 1000;
dataBlock.setPosition(position);
final int index = 0;
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-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockPageRecord.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -3,6 +3,7 @@
import net.sf.joafip.NoStorableAccess;
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.btreeplus.entity.IPageRecord;
+import net.sf.joafip.btreeplus.entity.IPageRecordable;
import net.sf.joafip.kvstore.service.HeapException;
@NotStorableClass
@@ -12,6 +13,10 @@
private long positionInFile;
@Override
+ public void setPageRecordable(final IPageRecordable pageRecordable) {
+ }
+
+ @Override
public long getPreviousRecordPositionInFile() throws HeapException {
return 0;
}
Added: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java (rev 0)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.btreeplus.service;
+
+import net.sf.joafip.DoNotTransform;
+import net.sf.joafip.NotStorableClass;
+import net.sf.joafip.TestException;
+import net.sf.joafip.kvstore.entity.HeapFileSetup;
+import net.sf.joafip.kvstore.service.AbstractTestHeapDataManagerImpl;
+import net.sf.joafip.kvstore.service.HeapException;
+import net.sf.joafip.kvstore.service.IHeapDataManager;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+@NotStorableClass
+@DoNotTransform
+public class TestBtreePlusDataManager extends AbstractTestHeapDataManagerImpl {
+
+ public TestBtreePlusDataManager() throws TestException {
+ super();
+ }
+
+ public TestBtreePlusDataManager(final String name) throws TestException {
+ super(name);
+ }
+
+ @Override
+ protected void checkIntegrity() throws HeapException {
+ // no implementation
+ }
+
+ @Override
+ protected IHeapDataManager createHeapDataManager(final HeapFileSetup setup)
+ throws HeapException {
+ return new BtreePlusDataManager(setup);
+ }
+
+ @Override
+ protected void createHeap(final boolean removeFile) throws HeapException {
+ createFileHeapDataManager(removeFile);
+ }
+
+ @Override
+ protected boolean manageFreeRecord() {
+ return false;
+ }
+
+ @Override
+ protected boolean manageRecordPositionInFile() {
+ return false;
+ }
+}
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -58,10 +58,15 @@
@Override
protected boolean manageFreeRecord() {
- return true;
+ return false;
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return false;
+ }
+
+ @Override
protected void checkIntegrity() throws HeapException {
}
}
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrMemoryLeak.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrMemoryLeak.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrMemoryLeak.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -56,10 +56,15 @@
@Override
protected boolean manageFreeRecord() {
- return true;
+ return false;
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return false;
+ }
+
+ @Override
protected void setUp() throws Exception {// NOPMD
super.setUp();
createHeap(true);
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithKey.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithKey.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithKey.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -60,7 +60,11 @@
@Override
protected boolean manageFreeRecord() {
- // not implemented
return false;
}
+
+ @Override
+ protected boolean manageRecordPositionInFile() {
+ return false;
+ }
}
Modified: trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
===================================================================
--- trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -62,10 +62,15 @@
@Override
protected boolean manageFreeRecord() {
- return true;
+ return false;
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return false;
+ }
+
+ @Override
protected void checkIntegrity() throws HeapException {
}
}
Modified: trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManager.java
===================================================================
--- trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManager.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManager.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -24,6 +24,11 @@
import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.kvstore.service.IHeapDataManager;
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
@NotStorableClass
@DoNotTransform
public class TestHeapFileDataManager extends AbstractTestHeapDataManagerImpl {// NOPMD
@@ -63,6 +68,11 @@
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return true;
+ }
+
+ @Override
protected void checkIntegrity() throws HeapException {
HeapFileDataManagerIntegrityChecker.getInstance().checkIntegrity(
heapDataManager);
Modified: trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerBackup.java
===================================================================
--- trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerBackup.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerBackup.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -55,6 +55,11 @@
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return true;
+ }
+
+ @Override
protected void checkIntegrity() throws HeapException {
HeapFileDataManagerIntegrityChecker.getInstance().checkIntegrity(
heapDataManager);
Modified: trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerFreeing.java
===================================================================
--- trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerFreeing.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerFreeing.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -56,6 +56,11 @@
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return true;
+ }
+
+ @Override
protected void checkIntegrity() throws HeapException {
HeapFileDataManagerIntegrityChecker.getInstance().checkIntegrity(
heapDataManager);
Modified: trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrMemoryLeak.java
===================================================================
--- trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrMemoryLeak.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrMemoryLeak.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -47,6 +47,11 @@
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return true;
+ }
+
+ @Override
protected void setUp() throws Exception {// NOPMD
super.setUp();
createHeap(true);
Modified: trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithKey.java
===================================================================
--- trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithKey.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithKey.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -60,7 +60,11 @@
@Override
protected boolean manageFreeRecord() {
- // not implemented
- return false;
+ return true;
}
+
+ @Override
+ protected boolean manageRecordPositionInFile() {
+ return true;
+ }
}
Modified: trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithScenario.java
===================================================================
--- trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithScenario.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithScenario.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -66,6 +66,11 @@
}
@Override
+ protected boolean manageRecordPositionInFile() {
+ return true;
+ }
+
+ @Override
protected void checkIntegrity() throws HeapException {
HeapFileDataManagerIntegrityChecker.getInstance().checkIntegrity(
heapDataManager);
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-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManager.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -821,7 +821,9 @@
throw new HeapException("last wrote position is "// NOPMD
+ lastWrotePositionInFile
+ " and record position in file is "
- + recordPositionInFile);
+ + recordPositionInFile
+ + " for \n"
+ + heapRecord.toString());
}
final long previousRecordPositionInFile = heapRecord
.getPreviousRecordPositionInFile();
@@ -839,6 +841,11 @@
}
lastWrotePositionInFile = recordPositionInFile
+ heapRecord.getRecordSize() - 1;
+ // FIXMELUC _______________________for test
+ if (lastWrotePositionInFile == 36863) {
+ System.out.println();
+ heapRecord.getRecordSize();
+ }
lastRecordPositionInFile = recordPositionInFile;
}
saveHeapRecord(heapRecord, toBackupList);
@@ -1067,6 +1074,10 @@
public void appendHeapFileRecord(final IFileStorable heapRecord)
throws HeapException {
final long positionInFile = heapRecord.getPositionInFile();
+ // FIXMELUC ______________________for test
+ if (positionInFile == 28672) {
+ System.out.println();
+ }
// ASSERTX
assert assertTransactionOpened();
// ASSERTX
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/IHeapRecordFactory.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/IHeapRecordFactory.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/IHeapRecordFactory.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -33,6 +33,14 @@
*/
public interface IHeapRecordFactory {
+ /**
+ * creation for reading
+ *
+ * @param heapElementManager
+ * @param positionInFile
+ * @return
+ * @throws HeapException
+ */
IFileStorable createHeapRecord(IHeapElementManager heapElementManager,
long positionInFile) throws HeapException;
}
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -141,6 +141,8 @@
protected abstract boolean manageFreeRecord();
+ protected abstract boolean manageRecordPositionInFile();
+
/**
* @throws HeapException
*
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerImpl.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerImpl.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerImpl.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -482,24 +482,28 @@
identifier = new DataRecordIdentifier(0);
assertTrue(MUST_DELETE_0, heapDataManager.deleteDataRecord(identifier));
heapDataManager.flush();
+
final long record2PositionInFile = heapDataManager
.getRecordPositionInfile(expectedIdentifier2);
+ if (manageRecordPositionInFile()) {
+ long lastRecordPositionInFile = heapDataManager
+ .getLastRecordPositionInFile();
+ assertEquals(LAST_RECORD_MISMATCH, record2PositionInFile,
+ lastRecordPositionInFile);
+ }
- long lastRecordPositionInFile = heapDataManager
- .getLastRecordPositionInFile();
- assertEquals(LAST_RECORD_MISMATCH, record2PositionInFile,
- lastRecordPositionInFile);
-
/*
* delete #1
*/
identifier = new DataRecordIdentifier(1);
assertTrue(MUST_DELETE_1, heapDataManager.deleteDataRecord(identifier));
heapDataManager.flush();
- lastRecordPositionInFile = heapDataManager
- .getLastRecordPositionInFile();
- assertEquals(LAST_RECORD_MISMATCH, lastRecordPositionInFile,
- record2PositionInFile);
+ if (manageRecordPositionInFile()) {
+ final long lastRecordPositionInFile = heapDataManager
+ .getLastRecordPositionInFile();
+ assertEquals(LAST_RECORD_MISMATCH, lastRecordPositionInFile,
+ record2PositionInFile);
+ }
}
public void testRecordFreeing2() throws HeapException {
@@ -551,10 +555,12 @@
assertTrue("must delete #2",
heapDataManager.deleteDataRecord(identifier));
heapDataManager.flush();
- long lastRecordPositionInFile = heapDataManager
- .getLastRecordPositionInFile();
- assertEquals(LAST_RECORD_MISMATCH, record2PositionInFile,
- lastRecordPositionInFile);
+ if (manageRecordPositionInFile()) {
+ long lastRecordPositionInFile = heapDataManager
+ .getLastRecordPositionInFile();
+ assertEquals(LAST_RECORD_MISMATCH, record2PositionInFile,
+ lastRecordPositionInFile);
+ }
/*
* delete #1
@@ -562,9 +568,9 @@
identifier = new DataRecordIdentifier(1);
assertTrue(MUST_DELETE_1, heapDataManager.deleteDataRecord(identifier));
heapDataManager.flush();
- lastRecordPositionInFile = heapDataManager
- .getLastRecordPositionInFile();
if (manageFreeRecord()) {
+ final long lastRecordPositionInFile = heapDataManager
+ .getLastRecordPositionInFile();
assertEquals(LAST_RECORD_MISMATCH, record1PositionInFile,
lastRecordPositionInFile);
}
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/TestBlockDataManager.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/TestBlockDataManager.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/TestBlockDataManager.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -66,4 +66,9 @@
protected boolean manageFreeRecord() {
return false;
}
+
+ @Override
+ protected boolean manageRecordPositionInFile() {
+ return false;
+ }
}
Modified: trunk/joafip-testsuite/src/main/java/net/sf/joafip/InErrorTests.java
===================================================================
--- trunk/joafip-testsuite/src/main/java/net/sf/joafip/InErrorTests.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-testsuite/src/main/java/net/sf/joafip/InErrorTests.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -24,6 +24,7 @@
import junit.framework.Test;
import junit.framework.TestSuite;
+import net.sf.joafip.btreeplus.service.TestBtreePlusDataManager;
import net.sf.joafip.btreeplus.service.TestBtreePlusDataManagerBackup;
import net.sf.joafip.btreeplus.service.TestBtreePlusDataMgrWithKey;
import net.sf.joafip.btreeplus.service.TestBtreePlusDataMgrWithScenario;
@@ -43,6 +44,7 @@
public static Test suite() {
final TestSuite suite = new TestSuite("in error Tests");
// $JUnit-BEGIN$
+ suite.addTestSuite(TestBtreePlusDataManager.class);
suite.addTestSuite(TestBtreePlusDataManagerBackup.class);
suite.addTestSuite(TestBtreePlusDataMgrWithKey.class);
suite.addTestSuite(TestBtreePlusDataMgrWithScenario.class);
Modified: trunk/joafip-testsuite/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusServiceTests.java
===================================================================
--- trunk/joafip-testsuite/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusServiceTests.java 2012-05-06 03:16:20 UTC (rev 3072)
+++ trunk/joafip-testsuite/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusServiceTests.java 2012-05-06 09:58:36 UTC (rev 3073)
@@ -43,6 +43,7 @@
final TestSuite suite = new TestSuite("Test for btree plus service");
// $JUnit-BEGIN$
suite.addTestSuite(BtreePlusElementMgrTest.class);
+ suite.addTestSuite(TestBtreePlusDataManager.class);
suite.addTestSuite(TestBtreePlusDataManagerBackup.class);
suite.addTestSuite(TestBtreePlusDataMgrWithKey.class);
suite.addTestSuite(TestBtreePlusDataMgrWithScenario.class);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-06 09:58:44
|
Revision: 3073
http://joafip.svn.sourceforge.net/joafip/?rev=3073&view=rev
Author: luc_peuvrier
Date: 2012-05-06 09:58:36 +0000 (Sun, 06 May 2012)
Log Message:
-----------
WIP btree plus: tests OK : WIP check and optimization : new tests and corrections
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/IPageRecord.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/LeafPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusDataManager.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusElementMgr.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/LeafPageTest.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/entity/mock/MockPageRecord.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManagerBackup.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrMemoryLeak.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithKey.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataMgrWithScenario.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManager.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerBackup.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataManagerFreeing.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrMemoryLeak.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithKey.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/service/TestHeapFileDataMgrWithScenario.java
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/IHeapRecordFactory.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManagerImpl.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/TestBlockDataManager.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/InErrorTests.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/btreeplus/service/BtreePlusServiceTests.java
Added Paths:
-----------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageNode.java
trunk/joafip-btreeplus/src/test/java/net/sf/joafip/btreeplus/service/TestBtreePlusDataManager.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-06 03:16:27
|
Revision: 3072
http://joafip.svn.sourceforge.net/joafip/?rev=3072&view=rev
Author: luc_peuvrier
Date: 2012-05-06 03:16:20 +0000 (Sun, 06 May 2012)
Log Message:
-----------
IrandomAccessFile implementation added. without 2 gigabytes limit implementation use file mapped byte buffer.
Modified Paths:
--------------
trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-example-simplestore/src/main/java/net/sf/joafip/simplestore/SimpleStore.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/file/FileTests.java
Added Paths:
-----------
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMapped2GBLimitedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java.svntmp
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-06 03:16:27
|
Revision: 3072
http://joafip.svn.sourceforge.net/joafip/?rev=3072&view=rev
Author: luc_peuvrier
Date: 2012-05-06 03:16:20 +0000 (Sun, 06 May 2012)
Log Message:
-----------
IrandomAccessFile implementation added. without 2 gigabytes limit implementation use file mapped byte buffer.
Modified Paths:
--------------
trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-example-simplestore/src/main/java/net/sf/joafip/simplestore/SimpleStore.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/file/FileTests.java
Added Paths:
-----------
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMapped2GBLimitedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java.svntmp
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -50,15 +50,14 @@
private final byte[] minusOne;
- // FIXMELUC ___________use of EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS
public ExportStoreQue(final String temporaryDirectoryName)
throws HeapException {
super();
final File dataFile = new File(temporaryDirectoryName + "/set");
final HeapFileSetup setup = new HeapFileSetup(
- EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX,
- dataFile, false/* crashSafeMode */, true/* useCacheMode */,
+ EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS, dataFile,
+ false/* crashSafeMode */, true/* useCacheMode */,
false/* deleteRenaming */, false/* clearResizeFile */,
1/* maxFileOperationRetry */, 0/* fileOperationRetryMsDelay */,
null/* openFileTraceFile */);
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -58,8 +58,8 @@
final String dataFilePath = RUNTIME_DIR + "/block.data";
final File dataFile = new File(dataFilePath);
final HeapFileSetup setup = new HeapFileSetup(
- EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX,
- dataFile, CRASH_SAFE_MODE/* crashSafeMode */,
+ EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS, dataFile,
+ CRASH_SAFE_MODE/* crashSafeMode */,
false/* FILE_CACHE *//* useCacheMode */,
false/* deleteRenaming */, false/* clearResizeFile */,
0/* maxFileOperationRetry */, 0/* fileOperationRetryMsDelay */,
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -59,11 +59,11 @@
final File dataFile = new File(dataFilePath);
dataFile.delete();
final HeapFileSetup setup = new HeapFileSetup(
- EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX,
- dataFile, CRASH_SAFE_MODE/* crashSafeMode */,
- true/* useCacheMode */, false/* deleteRenaming */,
- false/* clearResizeFile */, 0/* maxFileOperationRetry */,
- 0/* fileOperationRetryMsDelay */, null/* openFileTraceFile */);
+ EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS, dataFile,
+ CRASH_SAFE_MODE/* crashSafeMode */, true/* useCacheMode */,
+ false/* deleteRenaming */, false/* clearResizeFile */,
+ 0/* maxFileOperationRetry */, 0/* fileOperationRetryMsDelay */,
+ null/* openFileTraceFile */);
setup.cacheSetup(PAGE_SIZE, NUMBER_OF_PAGE);
final IHeapDataManager dataManager =
/**/new BtreePlusDataManager(setup);
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -59,8 +59,8 @@
final File dataFile = new File(dataFilePath);
dataFile.delete();
final HeapFileSetup setup = new HeapFileSetup(
- EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX,
- dataFile, CRASH_SAFE_MODE/* crashSafeMode */,
+ EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS, dataFile,
+ CRASH_SAFE_MODE/* crashSafeMode */,
false/* FILE_CACHE *//* useCacheMode */,
false/* deleteRenaming */, false/* clearResizeFile */,
0/* maxFileOperationRetry */, 0/* fileOperationRetryMsDelay */,
Modified: trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
===================================================================
--- trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -51,8 +51,8 @@
final String dataFilePath = RUNTIME_DIR + "/block.data";
final File dataFile = new File(dataFilePath);
final HeapFileSetup setup = new HeapFileSetup(
- EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX,
- dataFile, CRASH_SAFE_MODE/* crashSafeMode */,
+ EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS, dataFile,
+ CRASH_SAFE_MODE/* crashSafeMode */,
false/* FILE_CACHE *//* useCacheMode */,
false/* deleteRenaming */, false/* clearResizeFile */,
0/* maxFileOperationRetry */, 0/* fileOperationRetryMsDelay */,
Modified: trunk/joafip-example-simplestore/src/main/java/net/sf/joafip/simplestore/SimpleStore.java
===================================================================
--- trunk/joafip-example-simplestore/src/main/java/net/sf/joafip/simplestore/SimpleStore.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-example-simplestore/src/main/java/net/sf/joafip/simplestore/SimpleStore.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -74,7 +74,7 @@
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
builder.setDataModelIdentifier(1);
builder.setDataModelConversionDefInputStream(null);
- builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS);
builder.setPathName(storageDirectory.getPath());
builder.setRemoveFiles(false);
builder.setGarbageManagement(false);
Added: trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped.java
===================================================================
--- trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped.java (rev 0)
+++ trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -0,0 +1,292 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.file.service;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sf.joafip.NotStorableClass;
+import sun.misc.Cleaner;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+@SuppressWarnings("restriction")
+@NotStorableClass
+public class RandomAccessFileDirectMapped extends RandomAccessFileDirectNio {
+
+ private static final int MAX_MAP_BITS = 30;
+
+ private static final int MAX_MAP_SIZE = 1 << MAX_MAP_BITS;
+
+ private final List<MappedByteBuffer> mappedByteBufferList = new ArrayList<MappedByteBuffer>();
+
+ private long fileSize;
+
+ public RandomAccessFileDirectMapped(final File file, final int maxRetry,
+ final int retryMsDelay) {
+ super(file, maxRetry, retryMsDelay);
+ }
+
+ @Override
+ public void openImpl() throws FileIOException {
+ super.openImpl();
+ try {
+ fileSize = fileChannel.size();
+ } catch (Exception exception) {
+ throw new FileIOErrorException("opening file", file, exception);
+ }
+ }
+
+ @Override
+ public void closeImpl() throws FileIOException {
+ unMapAll();
+ try {
+ randomAccessFile.setLength(fileSize);
+ } catch (IOException exception) {
+ throw new FileIOErrorException("closing file", file, exception);
+ } finally {
+ super.closeImpl();
+ }
+ }
+
+ @Override
+ public void seekImpl(final long positionInFile) throws FileIOException {
+ currentPositionInFile = positionInFile;
+ }
+
+ @Override
+ public void flushImpl() throws FileIOException {
+ for (MappedByteBuffer mappedByteBuffer : mappedByteBufferList) {
+ mappedByteBuffer.force();
+ }
+ }
+
+ @Override
+ public long lengthImpl() throws FileIOException {
+ return fileSize;
+ }
+
+ @Override
+ public void setLengthImpl(long newSize) throws FileIOException {
+ try {
+ unMapIfMapped(newSize);
+ fileSize = newSize;
+ randomAccessFile.setLength(ceilFileSize(newSize));
+ } catch (IOException exception) {
+ throw HELPER_FILE_UTIL.fileIOException("failed set length of "
+ + file, file, exception);
+ }
+ }
+
+ @Override
+ public int readImpl(final byte[] data) throws FileIOException {
+ return readImpl(data, 0, data.length);
+ }
+
+ @Override
+ protected int readImpl(byte[] data, int offset, int length)
+ throws FileIOException {
+ try {
+ map(currentPositionInFile + length);
+ final int index = (int) (currentPositionInFile >> MAX_MAP_BITS);
+ final long position = ((long) index) << MAX_MAP_BITS;
+ final MappedByteBuffer mappedByteBuffer = mappedByteBufferList
+ .get(index);
+ final int inMapposition = (int) (currentPositionInFile - position);
+ mappedByteBuffer.position(inMapposition);
+ final int positionToEndLength = MAX_MAP_SIZE - inMapposition;
+ ByteBuffer slice = mappedByteBuffer.slice();
+ final int toRead;
+ final int maxLength;
+ if (fileSize > currentPositionInFile) {
+ maxLength = (int) Math.min(fileSize - currentPositionInFile,
+ length);
+ } else {
+ maxLength = 0;
+ }
+ final int read;
+ if (maxLength > positionToEndLength) {
+ slice.get(data, offset, positionToEndLength).limit();
+ slice = mappedByteBufferList.get(index + 1).slice();
+ int xMaxLength = maxLength - positionToEndLength;
+ if (slice.limit() > xMaxLength) {
+ slice.limit(xMaxLength);
+ toRead = xMaxLength;
+ } else {
+ toRead = slice.limit();
+ }
+ read = slice.get(data, offset + positionToEndLength, toRead)
+ .limit() + positionToEndLength;
+ } else {
+ if (slice.limit() > maxLength) {
+ slice.limit(maxLength);
+ toRead = maxLength;
+ } else {
+ toRead = slice.limit();
+ }
+ read = slice.get(data, offset, toRead).limit();
+ }
+ currentPositionInFile += read;
+ return read == 0 ? -1 : read;
+
+ } catch (IOException exception) {
+ throw HELPER_FILE_UTIL.fileIOException("failed read in " + file,
+ file, exception);
+ }
+ }
+
+ @Override
+ public void writeImpl(final byte[] data) throws FileIOException {
+ writeImpl(data, 0, data.length);
+ }
+
+ @Override
+ public void writeImpl(final byte[] data, final int length)
+ throws FileIOException {
+ writeImpl(data, 0, length);
+ }
+
+ @Override
+ protected void writeImpl(final byte[] data, final int offset,
+ final int length) throws FileIOException {
+ try {
+ map(currentPositionInFile + length);
+ final int index = (int) (currentPositionInFile >> MAX_MAP_BITS);
+ final long position = ((long) index) << MAX_MAP_BITS;
+ final MappedByteBuffer mappedByteBuffer = mappedByteBufferList
+ .get(index);
+ final int inMapposition = (int) (currentPositionInFile - position);
+ mappedByteBuffer.position(inMapposition);
+ final int positionToEndLength = MAX_MAP_SIZE - inMapposition;
+ if (length > positionToEndLength) {
+ mappedByteBuffer.put(data, offset, positionToEndLength);
+ mappedByteBufferList.get(index + 1).put(data,
+ offset + positionToEndLength,
+ length - positionToEndLength);
+ } else {
+ mappedByteBuffer.put(data, offset, length);
+ }
+ currentPositionInFile += length;
+ if (currentPositionInFile > fileSize) {
+ fileSize = currentPositionInFile;
+ }
+ } catch (IOException exception) {
+ throw HELPER_FILE_UTIL.fileIOException("failed write in " + file,
+ file, exception);
+ }
+ }
+
+ private void map(final long minimumSize) throws IOException,
+ FileIOErrorException {
+ final long fileSize = fileChannel.size();
+ final long toMapFullSize;
+ if (minimumSize < fileSize) {
+ toMapFullSize = fileSize;
+ } else {
+ toMapFullSize = ceilFileSize(minimumSize);
+ }
+ final int toMapIndex = (int) (toMapFullSize >> MAX_MAP_BITS);
+ int index;
+ for (index = 0; index < toMapIndex; index++) {
+ if (mappedByteBufferList.size() <= index) {
+ final long position = ((long) index) << MAX_MAP_BITS;
+ mappedByteBufferList
+ .add(fileChannel.map(FileChannel.MapMode.READ_WRITE,
+ position, MAX_MAP_SIZE));
+ }
+ }
+ final MappedByteBuffer mappedByteBuffer;
+ if (mappedByteBufferList.size() <= index) {
+ mappedByteBuffer = null;
+ } else {
+ mappedByteBuffer = mappedByteBufferList.get(index);
+ }
+ final long position = ((long) index) << MAX_MAP_BITS;
+ final long mapSize = toMapFullSize - position;
+ if (mappedByteBuffer == null) {
+ // if (logger.isInfoEnabled()) {
+ // logger.info("map " + toMapSize);
+ // }
+ // not mapped then map
+ mappedByteBufferList.add(fileChannel.map(
+ FileChannel.MapMode.READ_WRITE, position, mapSize));
+ } else if (mappedByteBuffer.limit() < mapSize) {
+ // if (logger.isInfoEnabled()) {
+ // logger.info("remap " + toMapSize);
+ // }
+ unMap(mappedByteBuffer);
+ if (fileSize < toMapFullSize) {
+ randomAccessFile.setLength(toMapFullSize);
+ }
+ // not more mapped then map
+ mappedByteBufferList.set(index, fileChannel.map(
+ FileChannel.MapMode.READ_WRITE, position, mapSize));
+ }
+ }
+
+ /**
+ * Returns 16 Megabytes plus the smallest size that is not less than the
+ * argument and is multiple of 16 Megabytes.
+ *
+ * @param realSize
+ * @return
+ */
+ private long ceilFileSize(final long realSize) {
+ // 24 bits for 16 Mbytes
+ return ((realSize >> 24) + 1) << 24;
+ }
+
+ private void unMapIfMapped(final long size) {
+ final int mapIndex = (int) (size >> MAX_MAP_BITS);
+ for (int index = mappedByteBufferList.size() - 1; index >= mapIndex; index--) {
+ final MappedByteBuffer mappedByteBuffer = mappedByteBufferList
+ .remove(index);
+ unMap(mappedByteBuffer);
+ }
+ }
+
+ private void unMapAll() {
+ for (MappedByteBuffer mappedByteBuffer : mappedByteBufferList) {
+ unMap(mappedByteBuffer);
+ }
+ mappedByteBufferList.clear();
+ }
+
+ private void unMap(final MappedByteBuffer mappedByteBuffer) {
+ mappedByteBuffer.force();
+ final Cleaner cleaner = ((sun.nio.ch.DirectBuffer) mappedByteBuffer)
+ .cleaner();
+ if (cleaner != null) {
+ cleaner.clean();
+ }
+ }
+}
Modified: trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java
===================================================================
--- trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -101,7 +101,8 @@
public void setLengthImpl(long newSize) throws FileIOException {
try {
unMapIfMapped();
- randomAccessFile.setLength(newSize);
+ fileSize = newSize;
+ randomAccessFile.setLength(ceilFileSize(newSize));
} catch (IOException exception) {
throw HELPER_FILE_UTIL.fileIOException("failed set length of "
+ file, file, exception);
@@ -118,9 +119,9 @@
throws FileIOException {
try {
check2GigaByte(currentPositionInFile + length);
- map(currentPositionInFile);
+ map(currentPositionInFile + length);
mappedByteBuffer.position((int) currentPositionInFile);
- final ByteBuffer ret = mappedByteBuffer.slice();
+ final ByteBuffer slice = mappedByteBuffer.slice();
final int toRead;
final int maxLength;
if (fileSize > currentPositionInFile) {
@@ -129,16 +130,13 @@
} else {
maxLength = 0;
}
- if (ret.limit() > maxLength) {
- ret.limit(maxLength);
+ if (slice.limit() > maxLength) {
+ slice.limit(maxLength);
toRead = maxLength;
} else {
- toRead = ret.limit();
+ toRead = slice.limit();
}
- // // changes written into buffer will be directly written into file
- // // so we need to protect buffer from modifications
- // ret = ret.asReadOnlyBuffer();
- final int read = ret.get(data, offset, toRead).limit();
+ final int read = slice.get(data, offset, toRead).limit();
currentPositionInFile += read;
return read == 0 ? -1 : read;
@@ -177,14 +175,16 @@
}
}
- private void map(final long minimumSize) throws IOException {
+ private void map(final long minimumSize) throws IOException,
+ FileIOErrorException {
final long fileSize = fileChannel.size();
- final long toMapSize;// = Math.max(minimumSize, fileSize);
+ final long toMapSize;
if (minimumSize < fileSize) {
toMapSize = fileSize;
} else {
- toMapSize = ((minimumSize >> 24) + 1) << 24;// 16 Mbytes
+ toMapSize = ceilFileSize(minimumSize);
}
+ check2GigaByte(toMapSize);
if (mappedByteBuffer == null) {
if (logger.isInfoEnabled()) {
logger.info("map " + toMapSize);
@@ -192,7 +192,7 @@
// not mapped then map
mappedByteBuffer = fileChannel.map(FileChannel.MapMode.READ_WRITE,
0, toMapSize);
- } else if (mappedByteBuffer.capacity() < toMapSize) {
+ } else if (mappedByteBuffer.limit() < toMapSize) {
if (logger.isInfoEnabled()) {
logger.info("remap " + toMapSize);
}
@@ -206,6 +206,18 @@
}
}
+ /**
+ * Returns 16 Megabytes plus the smallest size that is not less than the
+ * argument and is multiple of 16 Megabytes.
+ *
+ * @param realSize
+ * @return
+ */
+ private long ceilFileSize(final long realSize) {
+ // 24 bits for 16 Mbytes
+ return ((realSize >> 24) + 1) << 24;
+ }
+
private void unMapIfMapped() {
if (mappedByteBuffer != null) {
unMap();
Copied: trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMapped2GBLimitedTest.java (from rev 3071, trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java)
===================================================================
--- trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMapped2GBLimitedTest.java (rev 0)
+++ trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMapped2GBLimitedTest.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.file.service;
+
+import java.io.File;
+
+import net.sf.joafip.DoNotTransform;
+import net.sf.joafip.NotStorableClass;
+import net.sf.joafip.TestException;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+@NotStorableClass
+@DoNotTransform
+public class RandomFileDirectMapped2GBLimitedTest extends
+ AbstractRandomFileTest {
+
+ public RandomFileDirectMapped2GBLimitedTest() throws TestException {
+ super();
+ }
+
+ public RandomFileDirectMapped2GBLimitedTest(final String name)
+ throws TestException {
+ super(name);
+ }
+
+ @Override
+ protected IRandomAccessFile newRandomAccessFile(final File file,
+ final int maxRetry, final int retryMsDelay) {
+ return new RandomAccessFileDirectMapped2GBLimited(file, maxRetry,
+ retryMsDelay);
+ }
+}
Modified: trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java
===================================================================
--- trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -49,7 +49,6 @@
@Override
protected IRandomAccessFile newRandomAccessFile(final File file,
final int maxRetry, final int retryMsDelay) {
- return new RandomAccessFileDirectMapped2GBLimited(file, maxRetry,
- retryMsDelay);
+ return new RandomAccessFileDirectMapped(file, maxRetry, retryMsDelay);
}
}
Added: trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java.svntmp
===================================================================
--- trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java.svntmp (rev 0)
+++ trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java.svntmp 2012-05-06 03:16:20 UTC (rev 3072)
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 Luc Peuvrier
+ * All rights reserved.
+ *
+ * This file is a part of JOAFIP.
+ *
+ * JOAFIP is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License.
+ *
+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE
+ * Licensed under the LGPL License, Version 3, 29 June 2007 (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.gnu.org/licenses/lgpl.html
+ *
+ * JOAFIP is distributed in the hope that it will be useful, but
+ * 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.
+ */
+package net.sf.joafip.file.service;
+
+import java.io.File;
+
+import net.sf.joafip.DoNotTransform;
+import net.sf.joafip.NotStorableClass;
+import net.sf.joafip.TestException;
+
+/**
+ *
+ * @author luc peuvrier
+ *
+ */
+@NotStorableClass
+@DoNotTransform
+public class RandomFileDirectMappedTest extends AbstractRandomFileTest {
+
+ public RandomFileDirectMappedTest() throws TestException {
+ super();
+ }
+
+ public RandomFileDirectMappedTest(final String name) throws TestException {
+ super(name);
+ }
+
+ @Override
+ protected IRandomAccessFile newRandomAccessFile(final File file,
+ final int maxRetry, final int retryMsDelay) {
+ return new RandomAccessFileDirectMapped2GBLimited(file, maxRetry,
+ retryMsDelay);
+ }
+}
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -22,6 +22,7 @@
import net.sf.joafip.file.service.FileIOException;
import net.sf.joafip.file.service.IRandomAccessFile;
import net.sf.joafip.file.service.RandomAccessFileDirect;
+import net.sf.joafip.file.service.RandomAccessFileDirectMapped;
import net.sf.joafip.file.service.RandomAccessFileDirectMapped2GBLimited;
import net.sf.joafip.file.service.RandomAccessFileDirectNio;
import net.sf.joafip.file.service.RandomAccessFileReadWriteCache;
@@ -211,9 +212,9 @@
file, maxRetry, retryMsDelay);
break;
case MAPPED_RANDOM_FILE_ACCESS:
- // randomAccessFile =
- throw new HeapException("unsupported mode " + fileAccessMode);
- // break;
+ randomAccessFile = new RandomAccessFileDirectMapped(file,
+ maxRetry, retryMsDelay);
+ break;
default:
throw new HeapException("bad file mode " + fileAccessMode);
}
Modified: trunk/joafip-testsuite/src/main/java/net/sf/joafip/file/FileTests.java
===================================================================
--- trunk/joafip-testsuite/src/main/java/net/sf/joafip/file/FileTests.java 2012-05-06 00:37:25 UTC (rev 3071)
+++ trunk/joafip-testsuite/src/main/java/net/sf/joafip/file/FileTests.java 2012-05-06 03:16:20 UTC (rev 3072)
@@ -21,6 +21,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.file.service.RandomAccessFileReadWriteCacheTest;
import net.sf.joafip.file.service.RandomFileCacheTest;
+import net.sf.joafip.file.service.RandomFileDirectMapped2GBLimitedTest;
import net.sf.joafip.file.service.RandomFileDirectMappedTest;
import net.sf.joafip.file.service.RandomFileDirectNioTest;
import net.sf.joafip.file.service.RandomFileDirectTest;
@@ -41,6 +42,7 @@
suite.addTestSuite(RandomFileCacheTest.class);
suite.addTestSuite(RandomAccessFileReadWriteCacheTest.class);
suite.addTestSuite(TestRandomAccessFileCache.class);
+ suite.addTestSuite(RandomFileDirectMapped2GBLimitedTest.class);
suite.addTestSuite(RandomFileDirectMappedTest.class);
// $JUnit-END$
return suite;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-06 00:37:36
|
Revision: 3071
http://joafip.svn.sourceforge.net/joafip/?rev=3071&view=rev
Author: luc_peuvrier
Date: 2012-05-06 00:37:25 +0000 (Sun, 06 May 2012)
Log Message:
-----------
IrandomAccessFile implementation added. this implementation use file mapped byte buffer.
IrandomAccessFile implementation must be choose at joafip setup.
Modified Paths:
--------------
trunk/joafip/pom.xml
trunk/joafip/src/main/java/net/sf/joafip/entity/FilePersistenceProperties.java
trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistenceBuilder.java
trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistencePropertiesReader.java
trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreProperties.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractStoreDelegatingToDataManager.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/Store.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java
trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestCustomObjectIO.java
trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestSerializable.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestBobSerializeStackOverflow.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestClear.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestCrashSafe.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerCheckerFile.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerHeapFile.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestExportImport.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestExportObject.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceNoG.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceOpenClose.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceWithG.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestInnerClassProxy.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestMultiAccessFilePersistence.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestMultipleFilePersistenceInstance.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestSaveFailureDoNotModifyStorage.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestStoreNotStorable.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestVisitedModified.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFileCheckPersistenceForTest.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFilePersistenceForTest.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestBugChangeLog.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestGarbageModeError.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestRootObjectMapAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy1.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy2.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/primitive/TestHoldPrimitive.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumKeptInMemory.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumPersistence.java
trunk/joafip/src/test/java/net/sf/joafip/service/joafip_for_test.properties
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestArraySerialization.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestClassLoaderPersistence.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestExclusiveDataAccessSessionUsingProps.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestImport222.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestImport222NotLazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestKeptInMemory.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionSerialize.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionSerializeReadWriteMethod.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionSubstitutedSerializable.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionWithDataAccessSession.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestThisInConstructor.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestUseRuntime222.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestUseRuntime222NotLazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel301/TestImport300.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel301/TestUseRuntime300Lazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel301/TestUseRuntime300NotLazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestImport301ConversionA.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestImport301ConversionB.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301LazyConversionA.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301LazyConversionB.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301NotLazyConversionA.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301NotLazyConversionB.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestEnumMap.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestFileManagementOptions.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestInstanceFactoryUsage.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestPHashMapNewInstance.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestPrivateAccess.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestRuntime310Garbage.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestSaveInExclusiveDataAccessSession.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestStoredImmutableEnum.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeMapIteratorAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeSetIteratorAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeSupportIterator.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeSupportIteratorAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/sync/TestSynchronizedCollection.java
trunk/joafip/src/test/java/net/sf/joafip/store/service/AbstractDataManagerTestCase.java
trunk/joafip/src/test/java/net/sf/joafip/store/service/StoreForTest.java
trunk/joafip-4test/src/main/java/net/sf/joafip/bugtree/MainTreeDual.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/service/changelog/CheckSaved.java
trunk/joafip-example-simplestore/src/main/java/net/sf/joafip/simplestore/SimpleStore.java
trunk/joafip-file/pom.xml
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirect.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectNio.java
trunk/joafip-heapfile/pom.xml
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/TestIdNode.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordManage.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java
trunk/joafip-kvstore/pom.xml
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/HeapFileSetup.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManagerFactory.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestAbstractFileStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestMarshall.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/AbstractTestHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java
trunk/joafip-pmap/src/test/java/net/sf/joafip/pmap/TestFileTreeMap.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/file/FileTests.java
Added Paths:
-----------
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/DiffBuffer.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/AbstractRandomFileTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomAccessFileLogger.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileCacheTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectNioTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectTest.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/EnumFileAccessMode.java
Removed Paths:
-------------
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileTest.java
Modified: trunk/joafip/pom.xml
===================================================================
--- trunk/joafip/pom.xml 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/pom.xml 2012-05-06 00:37:25 UTC (rev 3071)
@@ -33,6 +33,14 @@
<dependency>
<groupId>net.sf.joafip</groupId>
+ <artifactId>joafip-common</artifactId>
+ <version>4.0.0b8</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.joafip</groupId>
<artifactId>joafip-collection</artifactId>
<version>4.0.0b8</version>
</dependency>
@@ -51,18 +59,42 @@
<dependency>
<groupId>net.sf.joafip</groupId>
+ <artifactId>joafip-heapfile</artifactId>
+ <version>4.0.0b8</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.joafip</groupId>
<artifactId>joafip-rbtree</artifactId>
<version>4.0.0b8</version>
</dependency>
<dependency>
<groupId>net.sf.joafip</groupId>
+ <artifactId>joafip-rbtree</artifactId>
+ <version>4.0.0b8</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.joafip</groupId>
<artifactId>joafip-file</artifactId>
<version>4.0.0b8</version>
</dependency>
<dependency>
<groupId>net.sf.joafip</groupId>
+ <artifactId>joafip-file</artifactId>
+ <version>4.0.0b8</version>
+ <type>test-jar</type>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>net.sf.joafip</groupId>
<artifactId>joafip-callback</artifactId>
<version>4.0.0b8</version>
</dependency>
Modified: trunk/joafip/src/main/java/net/sf/joafip/entity/FilePersistenceProperties.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/entity/FilePersistenceProperties.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/entity/FilePersistenceProperties.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -23,8 +23,11 @@
import java.util.TreeSet;
import net.sf.joafip.NotStorableClass;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.service.IHeapDataManager;
+import net.sf.joafip.service.FilePersistenceException;
import net.sf.joafip.store.entity.StoreProperties;
+import net.sf.joafip.store.service.StoreException;
import net.sf.joafip.store.service.conversion.def.InputStreamAndSource;
/**
@@ -138,6 +141,19 @@
return storeProperties;
}
+ public void setFileAccessMode(final EnumFileAccessMode fileAccessMode) {
+ storeProperties.setFileAccessMode(fileAccessMode);
+ }
+
+ public EnumFileAccessMode getFileAccessMode()
+ throws FilePersistenceException {
+ try {
+ return storeProperties.getFileAccessMode();
+ } catch (StoreException exception) {
+ throw new FilePersistenceException(exception);
+ }
+ }
+
public void setPathName(final String pathName) {
storeProperties.setPathName(pathName);
}
Modified: trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistenceBuilder.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistenceBuilder.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistenceBuilder.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -25,6 +25,7 @@
import net.sf.joafip.NoStorableAccess;
import net.sf.joafip.entity.EnumNoMoreDataAction;
import net.sf.joafip.entity.FilePersistenceProperties;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.service.IHeapDataManager;
import net.sf.joafip.store.service.conversion.def.InputStreamAndSource;
@@ -59,6 +60,10 @@
.setDataModelConversionDefInputStream(dataModelConversionDefInputStream);
}
+ public void setFileAccessMode(final EnumFileAccessMode fileAccessMode) {
+ filePersistenceProperties.setFileAccessMode(fileAccessMode);
+ }
+
/**
*
* @param pathName
Modified: trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistencePropertiesReader.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistencePropertiesReader.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistencePropertiesReader.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -36,6 +36,7 @@
import net.sf.joafip.entity.EnumStoreMode;
import net.sf.joafip.entity.FilePersistenceProperties;
import net.sf.joafip.entity.FilePersistencePropertyEntry;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.conversion.def.InputStreamAndSource;
/**
@@ -54,6 +55,8 @@
/** conversion definition file construction parameter */
private static final String JOAFIP_DATA_MODEL_CONVERSION_DEF_FILE = "joafip.dataModelConvertionDefFile";
+ private static final String JOAFIP_FILE_ACCESS_MODE = "joafip.fileAccessMode";
+
/** storage directory path construction parameter */
private static final String JOAFIP_PATH = "joafip.path";
@@ -176,7 +179,24 @@
for (Entry<Object, Object> entry : entrySet) {
final String key = (String) entry.getKey();
final String value = (String) entry.getValue();
- if (JOAFIP_PATH.equals(key)) {
+ if (JOAFIP_FILE_ACCESS_MODE.equals(key)) {
+ final EnumFileAccessMode fileAccessMode;
+ if ("random".equals(value)) {
+ fileAccessMode = EnumFileAccessMode.RANDOM_FILE_ACCESS;
+ } else if ("nio".equals(value)) {
+ fileAccessMode = EnumFileAccessMode.NIO_RANDOM_FILE_ACCESS;
+ } else if ("mapped2Gb".equals(value)) {
+ fileAccessMode = EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX;
+ } else if ("mapped".equals(value)) {
+ fileAccessMode = EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS;
+ } else {
+ throw new FilePersistenceException(
+ "bad value \""
+ + value
+ + "\",random, nio, mapped2Gb, or mapped expected");
+ }
+ filePersistenceProperties.setFileAccessMode(fileAccessMode);
+ } else if (JOAFIP_PATH.equals(key)) {
filePersistenceProperties.setPathName(value);
} else if (JOAFIP_DATA_MODEL_IDENTIFIER.equals(key)) {
filePersistenceProperties.setDataModelIdentifier(intValue(
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreProperties.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreProperties.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreProperties.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -16,7 +16,9 @@
*/
package net.sf.joafip.store.entity;// NOPMD
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.service.IHeapDataManager;
+import net.sf.joafip.store.service.StoreException;
import net.sf.joafip.store.service.conversion.def.InputStreamAndSource;
/**
@@ -73,6 +75,19 @@
private IHeapDataManager dataManager;
+ private EnumFileAccessMode fileAccessMode;
+
+ public void setFileAccessMode(final EnumFileAccessMode fileAccessMode) {
+ this.fileAccessMode = fileAccessMode;
+ }
+
+ public EnumFileAccessMode getFileAccessMode() throws StoreException {
+ if (dataManager == null && fileAccessMode == null) {
+ throw new StoreException("file access mode is not defined");
+ }
+ return fileAccessMode;
+ }
+
public String getPathName() {
return pathName;
}
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -26,6 +26,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.entity.EnumStoreMode;
import net.sf.joafip.entity.MutableInteger;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
import net.sf.joafip.kvstore.service.IHeapDataManager;
import net.sf.joafip.reflect.HelperReflect;
@@ -175,7 +176,8 @@
protected AbstractDelegatingToStoreManagers(
final int currentDataModelIdentifier,
final InputStreamAndSource dataModelConversionDefInputStream,
- final IHeapDataManager dataManager, final String pathName,
+ final IHeapDataManager dataManager,
+ final EnumFileAccessMode fileAccessMode, final String pathName,
final String dataFileName, final String backupDataFileName,
final String stateOkFlagFileName,
final String stateBackupOkFlagFileName,
@@ -186,11 +188,12 @@
final int maxFileOperationRetry,
final int fileOperationRetryMsDelay, final boolean garbageManagement)
throws StoreException {
- super(dataManager, pathName, dataFileName, backupDataFileName,
- stateOkFlagFileName, stateBackupOkFlagFileName,
- globalStateFlagFileName, crashSafeMode, useCacheMode, pageSize,
- maxPage, deleteRenaming, clearResizeFile,
- maxFileOperationRetry, fileOperationRetryMsDelay);
+ super(dataManager, fileAccessMode, pathName, dataFileName,
+ backupDataFileName, stateOkFlagFileName,
+ stateBackupOkFlagFileName, globalStateFlagFileName,
+ crashSafeMode, useCacheMode, pageSize, maxPage, deleteRenaming,
+ clearResizeFile, maxFileOperationRetry,
+ fileOperationRetryMsDelay);
this.garbageManagement = garbageManagement;
this.proxyMode = proxyMode;
initialize(currentDataModelIdentifier,
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractStoreDelegatingToDataManager.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractStoreDelegatingToDataManager.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractStoreDelegatingToDataManager.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -20,6 +20,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.heapfile.service.HeapFileDataManager;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.entity.HeapFileSetup;
import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
import net.sf.joafip.kvstore.service.HeapException;
@@ -82,7 +83,8 @@
protected IHeapDataManager dataManager;
protected AbstractStoreDelegatingToDataManager(
- final IHeapDataManager dataManager, final String pathName,
+ final IHeapDataManager dataManager,
+ final EnumFileAccessMode fileAccessMode, final String pathName,
final String dataFileName, final String backupDataFileName,
final String stateOkFlagFileName,
final String stateBackupOkFlagFileName,
@@ -98,8 +100,8 @@
: dataFileName;
final File dataFile = new File(pathName, toUseDataFileName);
final File openFileTraceFile = new File(pathName, TRACE_FILE);
- final HeapFileSetup setup = new HeapFileSetup(dataFile,
- crashSafeMode, useCacheMode, deleteRenaming,
+ final HeapFileSetup setup = new HeapFileSetup(fileAccessMode,
+ dataFile, crashSafeMode, useCacheMode, deleteRenaming,
clearResizeFile, maxFileOperationRetry,
fileOperationRetryMsDelay, openFileTraceFile);
if (crashSafeMode) {
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/Store.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/Store.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/Store.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -178,6 +178,7 @@
/**/storeProperties.getDataModelIdentifier(),
/**/storeProperties.getDataModelConversionDefInputStream(),
/**/storeProperties.getDataManager(),
+ /**/storeProperties.getFileAccessMode(),
/**/storeProperties.getPathName(),
/**/storeProperties.getDataFileName(),
/**/storeProperties.getBackupDataFileName(),
Modified: trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java
===================================================================
--- trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -26,6 +26,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.heapfile.service.AutoSaveHeapFileDataManager;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.entity.HeapFileSetup;
import net.sf.joafip.kvstore.record.entity.DataRecordIdentifier;
import net.sf.joafip.kvstore.service.HeapException;
@@ -49,13 +50,15 @@
private final byte[] minusOne;
+ // FIXMELUC ___________use of EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS
public ExportStoreQue(final String temporaryDirectoryName)
throws HeapException {
super();
final File dataFile = new File(temporaryDirectoryName + "/set");
- final HeapFileSetup setup = new HeapFileSetup(dataFile,
- false/* crashSafeMode */, true/* useCacheMode */,
+ final HeapFileSetup setup = new HeapFileSetup(
+ EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX,
+ dataFile, false/* crashSafeMode */, true/* useCacheMode */,
false/* deleteRenaming */, false/* clearResizeFile */,
1/* maxFileOperationRetry */, 0/* fileOperationRetryMsDelay */,
null/* openFileTraceFile */);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestCustomObjectIO.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestCustomObjectIO.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestCustomObjectIO.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -21,6 +21,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.objectfortest.Bob1;
import net.sf.joafip.store.service.objectfortest.Bob2;
import net.sf.joafip.store.service.objectfortest.Bob3;
@@ -49,6 +50,7 @@
// /**/false/* do not remove files */,
// /**/false/* do not manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestSerializable.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestSerializable.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestSerializable.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -26,6 +26,7 @@
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
import net.sf.joafip.java.util.PTreeMap;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.objectfortest.BobSerialize;
import net.sf.joafip.store.service.objectfortest.IBobSerialize;
@@ -61,6 +62,7 @@
// /**/false/* do not remove files */,
// /**/false/* do not manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestBobSerializeStackOverflow.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestBobSerializeStackOverflow.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestBobSerializeStackOverflow.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -30,6 +30,7 @@
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
import net.sf.joafip.java.util.PLinkedTreeSet;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.objectfortest.BobSerialize;
/**
@@ -60,6 +61,7 @@
protected void setUp() throws Exception { // NOPMD
super.setUp();
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestClear.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestClear.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestClear.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -27,6 +27,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.objectfortest.Bob1;
/**
@@ -57,6 +58,7 @@
// /**/false/* do not remove files */,
// /**/false/* do not manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestCrashSafe.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestCrashSafe.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestCrashSafe.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -35,6 +35,7 @@
import net.sf.joafip.file.service.FileIOException;
import net.sf.joafip.file.service.IRandomAccessFile;
import net.sf.joafip.file.service.RandomAccessFileDirectNio;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.entity.EnumFileState;
import net.sf.joafip.logger.JoafipLogger;
import net.sf.joafip.store.service.StoreClassNotFoundException;
@@ -170,6 +171,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -199,6 +201,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -224,6 +227,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerCheckerFile.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerCheckerFile.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerCheckerFile.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -23,6 +23,7 @@
import net.sf.joafip.TestConstant;
import net.sf.joafip.TestException;
import net.sf.joafip.heapfile.service.HeapFileCheckerDataManager;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.entity.HeapFileSetup;
/**
@@ -48,11 +49,14 @@
TestConstant.getWinRamDiskRuntimeDir() + File.separator
+ "trace.txt");
final HeapFileSetup setup = new HeapFileSetup(
- /**/new File(TestConstant.getWinRamDiskRuntimeDir() + "/data.dat"),
- /**/false/* crashsafe */,
- /**/true/* use cache */,
- /**/false/* delete renaming */, false/* clearResizeFile */, 1, 0,
- /**/openFileTraceFile);
+ EnumFileAccessMode.NIO_RANDOM_FILE_ACCESS,
+ /**/new File(TestConstant.getWinRamDiskRuntimeDir()
+ + "/data.dat"),
+ /**/false/* crashsafe */,
+ /**/true/* use cache */,
+ /**/false/* delete renaming */, false/* clearResizeFile */, 1,
+ 0,
+ /**/openFileTraceFile);
setup.cacheSetup(16 * 1024, 100);
dataManager = new HeapFileCheckerDataManager(setup, new File(
TestConstant.getWinRamDiskRuntimeDir() + "/multifile"));
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerHeapFile.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerHeapFile.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerHeapFile.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -23,6 +23,7 @@
import net.sf.joafip.TestConstant;
import net.sf.joafip.TestException;
import net.sf.joafip.heapfile.service.HeapFileDataManager;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.entity.HeapFileSetup;
/**
@@ -48,11 +49,14 @@
TestConstant.getWinRamDiskRuntimeDir() + File.separator
+ "trace.txt");
final HeapFileSetup setup = new HeapFileSetup(
- /**/new File(TestConstant.getWinRamDiskRuntimeDir() + "/data.dat"),
- /**/false/* crash safe */,
- /**/true/* use cache */,
- /**/false/* delete renaming */, false/* clearResizeFile */, 1, 0,
- /**/openFileTraceFile);
+ EnumFileAccessMode.NIO_RANDOM_FILE_ACCESS,
+ /**/new File(TestConstant.getWinRamDiskRuntimeDir()
+ + "/data.dat"),
+ /**/false/* crash safe */,
+ /**/true/* use cache */,
+ /**/false/* delete renaming */, false/* clearResizeFile */, 1,
+ 0,
+ /**/openFileTraceFile);
setup.cacheSetup(16 * 1024, 100);
dataManager = new HeapFileDataManager(setup, false);
super.setUp();
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestExportImport.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestExportImport.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestExportImport.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -34,6 +34,7 @@
import net.sf.joafip.export_import.Container;
import net.sf.joafip.file.service.FileIOException;
import net.sf.joafip.file.service.HelperFileUtil;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.store.service.objectfortest.EnumForTest;
@@ -68,6 +69,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), true, false);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(true);
@@ -163,6 +165,7 @@
// filePersistence = new FilePersistence(1, null, RUNTIME, true, false);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setProxyMode(true);
builder.setRemoveFiles(true);
builder.setGarbageManagement(false);
@@ -272,6 +275,7 @@
filePersistence.close();
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(true);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestExportObject.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestExportObject.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestExportObject.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -33,6 +33,7 @@
import net.sf.joafip.TestConstant;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.BobForExport;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.IStore;
import net.sf.joafip.store.service.StoreClassNotFoundException;
import net.sf.joafip.store.service.StoreDataCorruptedException;
@@ -73,6 +74,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), true, false);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(true);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceNoG.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceNoG.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceNoG.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -5,6 +5,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.objectfortest.Bob1;
@NotStorableClass
@@ -26,6 +27,7 @@
// /**/false/* do not remove files */,
// /**/false/* do not manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceOpenClose.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceOpenClose.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceOpenClose.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -22,6 +22,7 @@
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
import net.sf.joafip.java.util.PLinkedList;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
@NotStorableClass
@StorableAccess
@@ -119,6 +120,7 @@
// /**/false/* do not remove files */,
// /**/true/* manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceWithG.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceWithG.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceWithG.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -3,6 +3,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
@NotStorableClass
@StorableAccess
@@ -23,6 +24,7 @@
// /**/false/* do not remove files */,
// /**/true/* manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestInnerClassProxy.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestInnerClassProxy.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestInnerClassProxy.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -24,6 +24,7 @@
import net.sf.joafip.entity.BobInnerClass;
import net.sf.joafip.entity.BobInnerClass.Entry;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.proxy.ProxyException;
import net.sf.joafip.store.service.proxy.ProxyManager2;
@@ -65,6 +66,7 @@
// final FilePersistence filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), true, false);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestMultiAccessFilePersistence.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestMultiAccessFilePersistence.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestMultiAccessFilePersistence.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -22,6 +22,7 @@
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
import net.sf.joafip.entity.Item;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
@NotStorableClass
@StorableAccess
@@ -53,6 +54,7 @@
// /**/true/* remove files */,
// /**/true/* manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestMultipleFilePersistenceInstance.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestMultipleFilePersistenceInstance.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestMultipleFilePersistenceInstance.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -32,6 +32,7 @@
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
import net.sf.joafip.file.service.FileIOException;
import net.sf.joafip.file.service.HelperFileUtil;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.kvstore.service.HeapException;
import net.sf.joafip.store.service.objectfortest.Bob1;
@@ -109,6 +110,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -124,6 +126,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -161,6 +164,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -181,6 +185,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -218,6 +223,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -239,6 +245,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, false);
builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
@@ -275,6 +282,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), true, true);
FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(true);
@@ -290,6 +298,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), true, false);
builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestSaveFailureDoNotModifyStorage.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestSaveFailureDoNotModifyStorage.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestSaveFailureDoNotModifyStorage.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -27,6 +27,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.objectfortest.Bob1;
@NotStorableClass
@@ -64,6 +65,7 @@
// /**/false/* do not remove files */,
// /**/false/* do not manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestStoreNotStorable.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestStoreNotStorable.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestStoreNotStorable.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -28,6 +28,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.StoreException;
@NotStorableClass
@@ -53,6 +54,7 @@
// /**/false/* do not remove files */,
// /**/false/* do not manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/TestVisitedModified.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/TestVisitedModified.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/TestVisitedModified.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -24,6 +24,7 @@
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
import net.sf.joafip.entity.MutableInteger;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.store.service.AbstractTestVisitedModified;
import net.sf.joafip.store.service.objectfortest.Bob1;
import net.sf.joafip.store.service.objectfortest.Bob2;
@@ -66,6 +67,7 @@
// /**/false/* do not remove files */,
// /**/false/* do not manage garbage */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFileCheckPersistenceForTest.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFileCheckPersistenceForTest.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFileCheckPersistenceForTest.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -22,6 +22,7 @@
import net.sf.joafip.TestConstant;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.IDataAccessSession;
import net.sf.joafip.service.IFilePersistence;
@@ -55,6 +56,7 @@
// * crash safe
// */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFilePersistenceForTest.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFilePersistenceForTest.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFilePersistenceForTest.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -21,6 +21,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.IDataAccessSession;
import net.sf.joafip.service.IFilePersistence;
@@ -48,6 +49,7 @@
super.setUp();
// filePersistence = new FilePersistence(1, null, path, false, true);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setRemoveFiles(false);
builder.setGarbageManagement(true);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestBugChangeLog.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestBugChangeLog.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestBugChangeLog.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -22,6 +22,7 @@
import net.sf.joafip.TestConstant;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
import net.sf.joafip.service.FilePersistenceDataCorruptedException;
@@ -154,6 +155,7 @@
// /**/nombreDePageDuCacheDisque/* number of page */,
// /**/false /* pas de gestion garbage */,
// /**/crashSafeMode/* crash safe mode activé */);
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(repertoireDonnees);
builder.setFileCache(taillePageCacheDisque,
nombreDePageDuCacheDisque);
@@ -167,6 +169,7 @@
// /**/false /* efface pas les fichiers */,
// /**/false /* pas de gestion garbage */,
// /**/crashSafeMode/* crash safe mode activé */);
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(repertoireDonnees);
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestGarbageModeError.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestGarbageModeError.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestGarbageModeError.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -22,6 +22,7 @@
import net.sf.joafip.TestConstant;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
import net.sf.joafip.service.FilePersistenceDataCorruptedException;
@@ -94,6 +95,7 @@
// filePersistence = new FilePersistence(1, null,
// TestConstant.getRuntimeDir(), false, true);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(TestConstant.getWinRamDiskRuntimeDir());
builder.setProxyMode(true);
builder.setRemoveFiles(false);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestRootObjectMapAutoSave.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestRootObjectMapAutoSave.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestRootObjectMapAutoSave.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -26,6 +26,7 @@
import net.sf.joafip.NotStorableClass;
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
import net.sf.joafip.service.FilePersistenceDataCorruptedException;
@@ -68,6 +69,7 @@
// /**/false/* garbageManagement */,
// /**/false/* crash safe mode */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getAbsolutePath());
builder.setProxyMode(true);
builder.setRemoveFiles(true);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy1.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy1.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy1.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -26,6 +26,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.bug.Serializable2;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
/**
@@ -52,6 +53,7 @@
// filePersistence = new FilePersistence(1, null, path,
// /**/true/* removeFile */, true/* garbageManagement */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(true);
builder.setRemoveFiles(true);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy2.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy2.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy2.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -26,6 +26,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.bug.Serializable2;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
/**
@@ -54,6 +55,7 @@
// /**/false/* proxyMode */,
// /**/true/* garbageManagement */);
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(path.getPath());
builder.setProxyMode(false);
builder.setRemoveFiles(true);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/primitive/TestHoldPrimitive.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/primitive/TestHoldPrimitive.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/primitive/TestHoldPrimitive.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -27,6 +27,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
import net.sf.joafip.service.FilePersistenceDataCorruptedException;
@@ -235,6 +236,7 @@
final String xpath = path.getAbsolutePath();
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(xpath);
builder.setRemoveFiles(removeFiles);
builder.setFileCache(taillePageCacheDisque, nombreDePageDuCacheDisque);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumKeptInMemory.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumKeptInMemory.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumKeptInMemory.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -27,6 +27,7 @@
import net.sf.joafip.StorableAccess;
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistence;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
@@ -79,6 +80,7 @@
final String xpath = path.getAbsolutePath();
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(xpath);
builder.setRemoveFiles(removeFiles);
builder.setFileCache(taillePageCacheDisque, nombreDePageDuCacheDisque);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumPersistence.java
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumPersistence.java 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumPersistence.java 2012-05-06 00:37:25 UTC (rev 3071)
@@ -30,6 +30,7 @@
import net.sf.joafip.TestException;
import net.sf.joafip.entity.EnumFilePersistenceCloseAction;
import net.sf.joafip.entity.MutableInteger;
+import net.sf.joafip.kvstore.entity.EnumFileAccessMode;
import net.sf.joafip.service.FilePersistenceBuilder;
import net.sf.joafip.service.FilePersistenceClassNotFoundException;
import net.sf.joafip.service.FilePersistenceDataCorruptedException;
@@ -80,6 +81,7 @@
final String xpath = path.getAbsolutePath();
final FilePersistenceBuilder builder = new FilePersistenceBuilder();
+ builder.setFileAccessMode(EnumFileAccessMode.MAPPED_RANDOM_FILE_ACCESS_2GBYTE_MAX);
builder.setPathName(xpath);
builder.setRemoveFiles(removeFiles);
builder.setFileCache(taillePageCacheDisque, nombreDePageDuCacheDisque);
Modified: trunk/joafip/src/test/java/net/sf/joafip/service/joafip_for_test.properties
===================================================================
--- trunk/joafip/src/test/java/net/sf/joafip/service/joafip_for_test.properties 2012-05-05 03:18:24 UTC (rev 3070)
+++ trunk/joafip/src/test/java/net/sf/joafip/service/joafip_for_test.properties 2012-05-06 00:37...
[truncated message content] |
|
From: <luc...@us...> - 2012-05-06 00:37:34
|
Revision: 3071
http://joafip.svn.sourceforge.net/joafip/?rev=3071&view=rev
Author: luc_peuvrier
Date: 2012-05-06 00:37:25 +0000 (Sun, 06 May 2012)
Log Message:
-----------
IrandomAccessFile implementation added. this implementation use file mapped byte buffer.
IrandomAccessFile implementation must be choose at joafip setup.
Modified Paths:
--------------
trunk/joafip/pom.xml
trunk/joafip/src/main/java/net/sf/joafip/entity/FilePersistenceProperties.java
trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistenceBuilder.java
trunk/joafip/src/main/java/net/sf/joafip/service/FilePersistencePropertiesReader.java
trunk/joafip/src/main/java/net/sf/joafip/store/entity/StoreProperties.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractDelegatingToStoreManagers.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/AbstractStoreDelegatingToDataManager.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/Store.java
trunk/joafip/src/main/java/net/sf/joafip/store/service/export_import/out/ExportStoreQue.java
trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestCustomObjectIO.java
trunk/joafip/src/test/java/net/sf/joafip/service/AbstractTestSerializable.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestBobSerializeStackOverflow.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestClear.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestCrashSafe.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerCheckerFile.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestDataManagerHeapFile.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestExportImport.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestExportObject.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceNoG.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceOpenClose.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestFilePersistenceWithG.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestInnerClassProxy.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestMultiAccessFilePersistence.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestMultipleFilePersistenceInstance.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestSaveFailureDoNotModifyStorage.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestStoreNotStorable.java
trunk/joafip/src/test/java/net/sf/joafip/service/TestVisitedModified.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFileCheckPersistenceForTest.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/AbstractFilePersistenceForTest.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestBugChangeLog.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestGarbageModeError.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestRootObjectMapAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy1.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/TestSerializeAndNotLazy2.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/primitive/TestHoldPrimitive.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumKeptInMemory.java
trunk/joafip/src/test/java/net/sf/joafip/service/bug/savenum/TestEnumPersistence.java
trunk/joafip/src/test/java/net/sf/joafip/service/joafip_for_test.properties
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestArraySerialization.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestClassLoaderPersistence.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestExclusiveDataAccessSessionUsingProps.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestImport222.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestImport222NotLazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestKeptInMemory.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionSerialize.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionSerializeReadWriteMethod.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionSubstitutedSerializable.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestSubstitutionWithDataAccessSession.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestThisInConstructor.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestUseRuntime222.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel300/TestUseRuntime222NotLazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel301/TestImport300.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel301/TestUseRuntime300Lazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel301/TestUseRuntime300NotLazy.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestImport301ConversionA.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestImport301ConversionB.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301LazyConversionA.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301LazyConversionB.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301NotLazyConversionA.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel310/TestUseRuntime301NotLazyConversionB.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestEnumMap.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestFileManagementOptions.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestInstanceFactoryUsage.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestPHashMapNewInstance.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestPrivateAccess.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestRuntime310Garbage.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestSaveInExclusiveDataAccessSession.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestStoredImmutableEnum.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeMapIteratorAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeSetIteratorAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeSupportIterator.java
trunk/joafip/src/test/java/net/sf/joafip/service/rel400/TestTreeSupportIteratorAutoSave.java
trunk/joafip/src/test/java/net/sf/joafip/service/sync/TestSynchronizedCollection.java
trunk/joafip/src/test/java/net/sf/joafip/store/service/AbstractDataManagerTestCase.java
trunk/joafip/src/test/java/net/sf/joafip/store/service/StoreForTest.java
trunk/joafip-4test/src/main/java/net/sf/joafip/bugtree/MainTreeDual.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/DeleterBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/InserterBtreePlusWhithoutCache.java
trunk/joafip-4test/src/main/java/net/sf/joafip/performance/items/service/SearcherBtreePlus.java
trunk/joafip-4test/src/main/java/net/sf/joafip/service/changelog/CheckSaved.java
trunk/joafip-example-simplestore/src/main/java/net/sf/joafip/simplestore/SimpleStore.java
trunk/joafip-file/pom.xml
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirect.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectNio.java
trunk/joafip-heapfile/pom.xml
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/TestIdNode.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordManage.java
trunk/joafip-heapfile/src/test/java/net/sf/joafip/heapfile/record/service/TestHeapRecordStoreRestore.java
trunk/joafip-kvstore/pom.xml
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/HeapFileSetup.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/record/service/HeapElementManagerFactory.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestAbstractFileStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestMarshall.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/AbstractTestHeapElementManager.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/AbstractTestHeapDataManager.java
trunk/joafip-pmap/src/test/java/net/sf/joafip/pmap/TestFileTreeMap.java
trunk/joafip-testsuite/src/main/java/net/sf/joafip/file/FileTests.java
Added Paths:
-----------
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/DiffBuffer.java
trunk/joafip-file/src/main/java/net/sf/joafip/file/service/RandomAccessFileDirectMapped2GBLimited.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/AbstractRandomFileTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomAccessFileLogger.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileCacheTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectMappedTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectNioTest.java
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileDirectTest.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/EnumFileAccessMode.java
Removed Paths:
-------------
trunk/joafip-file/src/test/java/net/sf/joafip/file/service/RandomFileTest.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
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.
|
|
From: <luc...@us...> - 2012-05-05 01:59:51
|
Revision: 3069
http://joafip.svn.sourceforge.net/joafip/?rev=3069&view=rev
Author: luc_peuvrier
Date: 2012-05-05 01:59:44 +0000 (Sat, 05 May 2012)
Log Message:
-----------
additional write in file method
Modified Paths:
--------------
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/IFileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockFileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/FileForStorableBridge.java
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java 2012-05-04 17:54:02 UTC (rev 3068)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java 2012-05-05 01:59:44 UTC (rev 3069)
@@ -327,6 +327,17 @@
}
@Override
+ public void write(final byte[] data, final int offset, final int length)
+ throws HeapException {
+ assertOpened();
+ try {
+ randomAccessFile.write(data, offset, length);
+ } catch (FileIOException e) {
+ throw closeAfterIOException(e);
+ }
+ }
+
+ @Override
public void write(final ToBackupRecord toBackupRecord) throws HeapException {
try {
randomAccessFile.seek(toBackupRecord.getPositionInFile());
Modified: trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/IFileForStorable.java
===================================================================
--- trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/IFileForStorable.java 2012-05-04 17:54:02 UTC (rev 3068)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/IFileForStorable.java 2012-05-05 01:59:44 UTC (rev 3069)
@@ -131,6 +131,8 @@
*/
void write(byte[] data) throws HeapException;
+ void write(byte[] data, int offset, int length) throws HeapException;
+
void write(ToBackupRecord toBackupRecord) throws HeapException;
/**
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockFileForStorable.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockFileForStorable.java 2012-05-04 17:54:02 UTC (rev 3068)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockFileForStorable.java 2012-05-05 01:59:44 UTC (rev 3069)
@@ -142,6 +142,21 @@
}
@Override
+ public void write(final byte[] data, final int offset, final int length)
+ throws HeapException {
+ assertOpenned();
+ if (positionInFile + length > size) {
+ size = (int) (positionInFile + length);
+ if (size > image.length) {
+ throw new HeapException("out of image buffer");
+ }
+ }
+ for (int index = offset; index < length; index++) {
+ image[(int) positionInFile++] = data[index];
+ }
+ }
+
+ @Override
public void write(final ToBackupRecord toBackupRecord) throws HeapException {
throw new HeapException("unsupported");
}
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/FileForStorableBridge.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/FileForStorableBridge.java 2012-05-04 17:54:02 UTC (rev 3068)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/FileForStorableBridge.java 2012-05-05 01:59:44 UTC (rev 3069)
@@ -79,6 +79,12 @@
}
@Override
+ public void write(final byte[] data, final int offset, final int length)
+ throws HeapException {
+ delegate.write(data, offset, length);
+ }
+
+ @Override
public void write(final ToBackupRecord toBackupRecord) throws HeapException {
delegate.write(toBackupRecord);
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-05 01:59:51
|
Revision: 3069
http://joafip.svn.sourceforge.net/joafip/?rev=3069&view=rev
Author: luc_peuvrier
Date: 2012-05-05 01:59:44 +0000 (Sat, 05 May 2012)
Log Message:
-----------
additional write in file method
Modified Paths:
--------------
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/FileForStorable.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/service/IFileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/service/mock/MockFileForStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/service/FileForStorableBridge.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-04 17:54:09
|
Revision: 3068
http://joafip.svn.sourceforge.net/joafip/?rev=3068&view=rev
Author: luc_peuvrier
Date: 2012-05-04 17:54:02 +0000 (Fri, 04 May 2012)
Log Message:
-----------
WIP btree plus: tests OK : WIP check and optimization : write and read/check crc32 change
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java
trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapHeader.java
trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapRecord.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/RecordForTest.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestAbstractFileStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestMarshall.java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-04 17:54:09
|
Revision: 3068
http://joafip.svn.sourceforge.net/joafip/?rev=3068&view=rev
Author: luc_peuvrier
Date: 2012-05-04 17:54:02 +0000 (Fri, 04 May 2012)
Log Message:
-----------
WIP btree plus: tests OK : WIP check and optimization : write and read/check crc32 change
Modified Paths:
--------------
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java
trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapHeader.java
trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapRecord.java
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/RecordForTest.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestAbstractFileStorable.java
trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestMarshall.java
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/HeaderPage.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -148,7 +148,7 @@
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
writeLong(freeDataBlocks[index]);
}
- writeCrc32();
+ writeCrc32(0);
}
@Override
@@ -172,7 +172,7 @@
for (int index = 0; index < PageConstant.NUMBER_OF_BLOCK_TYPE; index++) {
freeDataBlocks[index] = readLong();
}
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
}
private void initializeFreeDataBlock() {
Modified: trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java
===================================================================
--- trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java 2012-05-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-btreeplus/src/main/java/net/sf/joafip/btreeplus/entity/PageRecord.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -204,7 +204,7 @@
writeKey(nonTerminalPage.getKey(index));
}
writeLong(nonTerminalPage.getPagePointer(numberOfKeyEntries));
- writeCrc32();
+ writeCrc32(0);
}
private void unmarshallNonTerminalPage() throws HeapException {
@@ -219,7 +219,7 @@
}
final long pagePointer = readLong();
nonTerminalPage.setEntry(numberOfKeyEntries, pagePointer, null);
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
pageRecordable = nonTerminalPage;
}
@@ -234,7 +234,7 @@
writeLong(leafPage.getBlockPointer(index));
}
writeLong(leafPage.getNext());
- writeCrc32();
+ writeCrc32(0);
}
private void unmarshallLeafPage() throws HeapException {
@@ -247,7 +247,7 @@
leafPage.setEntry(index, pagePointer, key);
}
leafPage.setNext(readLong());
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
pageRecordable = leafPage;
}
@@ -256,14 +256,14 @@
assert pageRecordable.getByteSize() <= PageConstant.PAGE_SIZE;
final FreePage freePage = (FreePage) pageRecordable;
writeLong(freePage.getNextFreePage());
- writeCrc32();
+ writeCrc32(0);
}
private void unmarshallFreePage() throws HeapException {
final long nextFreePage = readLong();
final FreePage freePage = new FreePage(nextFreePage);
freePage.setPageRecord(this);
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
pageRecordable = freePage;
}
@@ -280,7 +280,7 @@
writeInteger(dataBlock.getSize());
writeBytes(dataBlock.getDataHolder());
}
- writeCrc32();
+ writeCrc32(0);
}
private void unmarshallDataBlock() throws HeapException {
@@ -299,7 +299,7 @@
dataBlock.setSize(readInteger());
readBytes(dataBlock.getDataHolder());
}
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
pageRecordable = dataBlockPage;
}
}
Modified: trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapHeader.java
===================================================================
--- trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapHeader.java 2012-05-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapHeader.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -187,7 +187,7 @@
writeLong(usedSize);
writeLong(freeSize);
writeLong(nextDataRecordIdentifierValue);
- writeCrc32();
+ writeCrc32(0);
}
@Override
@@ -204,7 +204,7 @@
usedSize = readLong();
freeSize = readLong();
nextDataRecordIdentifierValue = readLong();
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
}
/**
Modified: trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapRecord.java
===================================================================
--- trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapRecord.java 2012-05-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-heapfile/src/main/java/net/sf/joafip/heapfile/record/entity/HeapRecord.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -428,13 +428,14 @@
writeInteger(keyData.length);
writeBytes(keyData);
}
- writeCrc32();
+ writeCrc32(0);
if (dataValueChanged) {
- clearCrc32();
+ // clearCrc32();
+ final int offset = numberOfByteReadWrote;
// ASSERTX
assert dataAssociatedSize == dataAssociated.length : DATA_SIZE_MISMATCH;
writeBytes(dataAssociated);
- writeCrc32();
+ writeCrc32(offset);
dataAssociated = null;// NOPMD release data
dataValueChanged = false;
}
@@ -473,7 +474,7 @@
}
// writeInteger(freeNode.getNumberOfChild());
writeInteger(numberOfChild);
- writeCrc32();
+ writeCrc32(0);
}
private void updateFreeNodeData() {
@@ -554,7 +555,7 @@
dataRecordHeaderSize = DATA_RECORD_HEADER_SIZE;
nodeIdentifier = new DataRecordIdentifier(long1);
}
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
}
private void unmarshallFreeRecordHeader() throws HeapException,
@@ -580,7 +581,7 @@
// freeNode.setNumberOfChildUnmarshalling(readInteger());
numberOfChild = readInteger();
// freeNode.valueSetted();
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
}
/**
@@ -752,7 +753,8 @@
}
private void unmarshallDataArea() throws HeapException {
- clearCrc32();
+ // clearCrc32();
+ // final int offset=numberOfByteReadWrote;
final int read = readFileToIoBuffer(dataAssociatedSize + 4);// +4 for
// crc32
// AS-SERT
@@ -761,7 +763,7 @@
+ " but read " + read);
}
dataAssociated = readBytes(dataAssociatedSize);
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
}
/**
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-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -60,11 +60,11 @@
/** to read/write this in file */
protected final IFileForStorable fileForStorable;
- /** to compute crc32 record header */
- private transient int crc32;
+ // /** to compute crc32 record header */
+ // private transient int crc32;
/** current number of byte read or wrote */
- private transient int numberOfByteReadWrote = 0;
+ protected transient int numberOfByteReadWrote = 0;
/** input output buffer */
private transient byte[] ioBuffer;
@@ -108,7 +108,7 @@
// ASSERTX
assert !valueChangedToSave : READING_ERASE_VALUE_CHANGE;
fileForStorable.seek(positionInFile);
- crc32 = 0;
+ // crc32 = 0;
ioBuffer = null;// NOPMD
unmarshallImpl();
ioBuffer = null;// NOPMD
@@ -119,7 +119,7 @@
// ASSERTX
assert valueChangedToSave : NO_VALUE_CHANGE_TO_WRITE;
fileForStorable.seek(positionInFile);
- crc32 = 0;
+ // crc32 = 0;
numberOfByteReadWrote = 0;
ioBuffer = new byte[toMarshallSize()];
marshallImpl();
@@ -179,101 +179,102 @@
valueChangedToSave = false;
}
- /**
- * update crc32 with byte value in buffer
- *
- * @param buffer
- * bytes for crc32 update
- */
- private void updateCrc32(final byte[] buffer) {
- updateCrc32(buffer, 0, buffer.length);
- }
+ // /**
+ // * update crc32 with byte value in buffer
+ // *
+ // * @param buffer
+ // * bytes for crc32 update
+ // */
+ // @SuppressWarnings("unused")
+ // private void _updateCrc32(final byte[] buffer) {
+ // _updateCrc32(buffer, 0, buffer.length);
+ // }
- private void updateCrc32(final byte[] buffer, final int start,
- final int length) {
+ // private void _updateCrc32(final byte[] buffer, final int start,
+ // final int length) {
+ //
+ // int index = start;
+ // for (int count = 0; count < length; count++) {
+ // final byte byteValue = buffer[index++];
+ // updateCrc32(byteValue);
+ // }
+ //
+ // }
- int index = start;
- for (int count = 0; count < length; count++) {
- final byte byteValue = buffer[index++];
- updateCrc32(byteValue);
- }
+ // @SuppressWarnings("unused")
+ // private void _updateCrc32(final byte byteValue) {
+ // int value = byteValue;
+ // for (int j = 0; j < 8; j++) {
+ // final int testbit = ((crc32 >> 31) & 1) ^ (value & 1);
+ // crc32 <<= 2;
+ // if (testbit != 0) {
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // }
+ // value >>= 1;
+ // }
+ // }
- }
+ // private void updateCrc32(final byte byteValue) {
+ // int crc32 = this.crc32;
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x01) == 0x01) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x02) == 0x02) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x04) == 0x04) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x08) == 0x08) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x10) == 0x10) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x20) == 0x20) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x40) == 0x40) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x80) == 0x80) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // this.crc32 = crc32;
+ // }
- @SuppressWarnings("unused")
- private void _updateCrc32(final byte byteValue) {
- int value = byteValue;
- for (int j = 0; j < 8; j++) {
- final int testbit = ((crc32 >> 31) & 1) ^ (value & 1);
- crc32 <<= 2;
- if (testbit != 0) {
- crc32 ^= 0x8005; /* 32 bit crc */
- }
- value >>= 1;
- }
- }
+ // protected void clearCrc32() {
+ // crc32 = 0;
+ // }
- private void updateCrc32(final byte byteValue) {
- int crc32=this.crc32;
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x01) == 0x01) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x02) == 0x02) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x04) == 0x04) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x08) == 0x08) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x10) == 0x10) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x20) == 0x20) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x40) == 0x40) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x80) == 0x80) {
- crc32 <<= 2;
- crc32 ^= 0x8005; /* 32 bit crc */
- } else {
- crc32 <<= 2;
- }
- this.crc32=crc32;
- }
+ // protected int getCrc32() {
+ // return crc32;
+ // }
- protected void clearCrc32() {
- crc32 = 0;
- }
-
- protected int getCrc32() {
- return crc32;
- }
-
protected int readFileToIoBuffer(final int size) throws HeapException {
ioBuffer = new byte[size];
readInIoBuffer = fileForStorable.read(ioBuffer);
@@ -309,19 +310,97 @@
return totalRead;
}
- /**
- * read and check CRC32
- *
- * @throws HeapException
- * read error crc32 error in record
- */
- protected void readAndCheckCrc32() throws HeapException {
- final int computedCrc32 = crc32;
+ // /**
+ // * read and check CRC32
+ // *
+ // * @throws HeapException
+ // * read error crc32 error in record
+ // */
+ // protected void readAndCheckCrc32() throws HeapException {
+ // final int computedCrc32 = crc32;
+ // final int readCrc32 = readInteger();
+ // if (computedCrc32 != readCrc32) {
+ // throw new HeapException(RECORD_INTEGRITY_ERROR
+ // + " record position=" + positionInFile + " read="
+ // + readCrc32 + " computed=" + computedCrc32 + " nb rd/wr="
+ // + numberOfByteReadWrote, EnumFileState.STATE_CORRUPTED);
+ // }
+ // }
+
+ protected void readAndCheckCrc32(final int offset) throws HeapException {
+ int crc32 = 0;
+ for (int index = offset; index < numberOfByteReadWrote; index++) {
+ int byteValue = ioBuffer[index];
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x01) ==
+ // 0x01) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x02) ==
+ // 0x02) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x04) ==
+ // 0x04) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x08) ==
+ // 0x08) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x10) ==
+ // 0x10) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x20) ==
+ // 0x20) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x40) ==
+ // 0x40) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x80) ==
+ // 0x80) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ for (int j = 0; j < 8; j++) {
+ final int testbit = ((crc32 >> 31) & 1) ^ (byteValue & 1);
+ crc32 <<= 2;
+ if (testbit != 0) {
+ crc32 ^= 0x8005; /* 32 bit crc */
+ }
+ byteValue >>= 1;
+ }
+ }
final int readCrc32 = readInteger();
- if (computedCrc32 != readCrc32) {
+ if (crc32 != readCrc32) {
throw new HeapException(RECORD_INTEGRITY_ERROR
+ " record position=" + positionInFile + " read="
- + readCrc32 + " computed=" + computedCrc32 + " nb rd/wr="
+ + readCrc32 + " computed=" + crc32 + " nb rd/wr="
+ numberOfByteReadWrote, EnumFileState.STATE_CORRUPTED);
}
}
@@ -339,7 +418,7 @@
System.arraycopy(ioBuffer, numberOfByteReadWrote, dataByteArray, 0,
length);
numberOfByteReadWrote += length;
- updateCrc32(dataByteArray);
+ // updateCrc32(dataByteArray);
return dataByteArray;
}
@@ -356,7 +435,7 @@
System.arraycopy(ioBuffer, numberOfByteReadWrote, destination, 0,
length);
numberOfByteReadWrote += length;
- updateCrc32(destination);
+ // updateCrc32(destination);
}
/**
@@ -374,7 +453,7 @@
final byte byteValue = ioBuffer[numberOfByteReadWrote + byteIndex];
value = (value << 8) | (((long) byteValue) & 0xff);
}
- updateCrc32(ioBuffer, numberOfByteReadWrote, 8);
+ // updateCrc32(ioBuffer, numberOfByteReadWrote, 8);
numberOfByteReadWrote += 8;
return value;
}
@@ -385,20 +464,20 @@
final byte byteValue = ioBuffer[numberOfByteReadWrote + byteIndex];
value = (value << 8) | (((int) byteValue) & 0xff);
}
- updateCrc32(ioBuffer, numberOfByteReadWrote, 4);
+ // updateCrc32(ioBuffer, numberOfByteReadWrote, 4);
numberOfByteReadWrote += 4;
return value;
}
protected boolean readBoolean() throws HeapException {
final byte byteValue = ioBuffer[numberOfByteReadWrote++];
- updateCrc32(byteValue);
+ // updateCrc32(byteValue);
return byteValue == 0 ? false : true;
}
protected byte readByte() throws HeapException {
final byte byteValue = ioBuffer[numberOfByteReadWrote++];
- updateCrc32(byteValue);
+ // updateCrc32(byteValue);
return byteValue;
}
@@ -413,7 +492,7 @@
System.arraycopy(dataByteArray, 0, ioBuffer, numberOfByteReadWrote,
dataByteArray.length);
numberOfByteReadWrote += dataByteArray.length;
- updateCrc32(dataByteArray);
+ // updateCrc32(dataByteArray);
}
/**
@@ -428,7 +507,7 @@
protected void writeLong(final long value) throws HeapException {
long localValue = value;
for (int byteIndex = 0; byteIndex < 8; byteIndex++) {
- updateCrc32(ioBuffer[numberOfByteReadWrote++] = (byte) localValue);
+ /* updateCrc32( */ioBuffer[numberOfByteReadWrote++] = (byte) localValue/* ) */;
localValue >>= 8;
}
}
@@ -436,25 +515,101 @@
protected void writeInteger(final int value) throws HeapException {
int localValue = value;
for (int byteIndex = 0; byteIndex < 4; byteIndex++) {
- updateCrc32(ioBuffer[numberOfByteReadWrote++] = (byte) localValue);
+ /* updateCrc32( */ioBuffer[numberOfByteReadWrote++] = (byte) localValue/* ) */;
localValue >>= 8;
}
}
- protected void writeCrc32() throws HeapException {
- int localValue = crc32;
+ // protected void writeCrc32() throws HeapException {
+ // int localValue = crc32;
+ // for (int byteIndex = 0; byteIndex < 4; byteIndex++) {
+ // ioBuffer[numberOfByteReadWrote++] = (byte) localValue;
+ // localValue >>= 8;
+ // }
+ // }
+
+ protected void writeCrc32(final int offset) throws HeapException {
+ int crc32 = 0;
+ for (int index = offset; index < numberOfByteReadWrote; index++) {
+ int byteValue = ioBuffer[index];
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x01) ==
+ // 0x01) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x02) ==
+ // 0x02) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x04) ==
+ // 0x04) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x08) ==
+ // 0x08) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x10) ==
+ // 0x10) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x20) ==
+ // 0x20) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x40) ==
+ // 0x40) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ // if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x80) ==
+ // 0x80) {
+ // crc32 <<= 2;
+ // crc32 ^= 0x8005; /* 32 bit crc */
+ // } else {
+ // crc32 <<= 2;
+ // }
+ for (int j = 0; j < 8; j++) {
+ final int testbit = ((crc32 >> 31) & 1) ^ (byteValue & 1);
+ crc32 <<= 2;
+ if (testbit != 0) {
+ crc32 ^= 0x8005; /* 32 bit crc */
+ }
+ byteValue >>= 1;
+ }
+ }
for (int byteIndex = 0; byteIndex < 4; byteIndex++) {
- ioBuffer[numberOfByteReadWrote++] = (byte) localValue;
- localValue >>= 8;
+ ioBuffer[numberOfByteReadWrote++] = (byte) crc32;
+ crc32 >>= 8;
}
}
protected void writeBoolean(final boolean value) throws HeapException {
- updateCrc32(ioBuffer[numberOfByteReadWrote++] = (byte) (value ? 1 : 0));
+ /* updateCrc32( */ioBuffer[numberOfByteReadWrote++] = (byte) (value ? 1
+ : 0)/* ) */;
}
protected void writeByte(final byte value) throws HeapException {
- updateCrc32(ioBuffer[numberOfByteReadWrote++] = value);
+ /* updateCrc32( */ioBuffer[numberOfByteReadWrote++] = value/* ) */;
}
@Override
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/RecordForTest.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/RecordForTest.java 2012-05-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/RecordForTest.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -82,13 +82,13 @@
protected void unmarshallImpl() throws HeapException {
readFileToIoBuffer(8);
value = readInteger();
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
}
@Override
protected void marshallImpl() throws HeapException {
writeInteger(value);
- writeCrc32();
+ writeCrc32(0);
}
@Override
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestAbstractFileStorable.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestAbstractFileStorable.java 2012-05-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestAbstractFileStorable.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -63,15 +63,17 @@
protected void unmarshallImpl() throws HeapException {
readFileToIoBuffer(dataSize + 4);// +4 for crc32
data = readBytes(dataSize);
- readAndCheckCrc32();
- logger.info("wrote crc32 " + getCrc32() + " pos=" + positionInFile);
+ readAndCheckCrc32(0);
+ // logger.info("wrote crc32 " + getCrc32() + " pos=" +
+ // positionInFile);
}
@Override
protected void marshallImpl() throws HeapException {
writeBytes(data);
- writeCrc32();
- logger.info("wrote crc32 " + getCrc32() + " pos=" + positionInFile);
+ writeCrc32(0);
+ // logger.info("wrote crc32 " + getCrc32() + " pos=" +
+ // positionInFile);
}
@Override
Modified: trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestMarshall.java
===================================================================
--- trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestMarshall.java 2012-05-04 16:18:55 UTC (rev 3067)
+++ trunk/joafip-kvstore/src/test/java/net/sf/joafip/kvstore/record/entity/TestMarshall.java 2012-05-04 17:54:02 UTC (rev 3068)
@@ -63,7 +63,7 @@
writeLong(longValue);
writeInteger(intValue);
writeBoolean(booleanValue);
- writeCrc32();
+ writeCrc32(0);
}
@Override
@@ -72,7 +72,7 @@
longValue = readLong();
intValue = readInteger();
booleanValue = readBoolean();
- readAndCheckCrc32();
+ readAndCheckCrc32(0);
}
@Override
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <luc...@us...> - 2012-05-04 16:19:06
|
Revision: 3067
http://joafip.svn.sourceforge.net/joafip/?rev=3067&view=rev
Author: luc_peuvrier
Date: 2012-05-04 16:18:55 +0000 (Fri, 04 May 2012)
Log Message:
-----------
WIP btree plus: tests OK : WIP check and optimization : update crc32 change
Modified Paths:
--------------
trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java
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-04 05:07:30 UTC (rev 3066)
+++ trunk/joafip-kvstore/src/main/java/net/sf/joafip/kvstore/entity/AbstractFileStorable.java 2012-05-04 16:18:55 UTC (rev 3067)
@@ -200,7 +200,8 @@
}
- private void updateCrc32(final byte byteValue) {
+ @SuppressWarnings("unused")
+ private void _updateCrc32(final byte byteValue) {
int value = byteValue;
for (int j = 0; j < 8; j++) {
final int testbit = ((crc32 >> 31) & 1) ^ (value & 1);
@@ -212,6 +213,59 @@
}
}
+ private void updateCrc32(final byte byteValue) {
+ int crc32=this.crc32;
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x01) == 0x01) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x02) == 0x02) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x04) == 0x04) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x08) == 0x08) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x10) == 0x10) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x20) == 0x20) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x40) == 0x40) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ if ((crc32 & 0x80000000) == 0x80000000 ^ (byteValue & 0x80) == 0x80) {
+ crc32 <<= 2;
+ crc32 ^= 0x8005; /* 32 bit crc */
+ } else {
+ crc32 <<= 2;
+ }
+ this.crc32=crc32;
+ }
+
protected void clearCrc32() {
crc32 = 0;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|