Author: toad
Date: 2007-03-29 20:49:38 +0000 (Thu, 29 Mar 2007)
New Revision: 12429
Modified:
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
Detect empty secondary stores and reconstruct
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2007-03-29
20:38:28 UTC (rev 12428)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2007-03-29
20:49:38 UTC (rev 12429)
@@ -479,7 +479,7 @@
}
// Initialize secondary CHK database sorted on accesstime
- SecondaryDatabase atime;
+ SecondaryDatabase atime = null;
SecondaryConfig secDbConfig = new SecondaryConfig();
secDbConfig.setAllowCreate(chkDB.count() == 0);
secDbConfig.setSortedDuplicates(true);
@@ -493,8 +493,12 @@
try {
atime = environment.openSecondaryDatabase
(null,
prefix+"CHK_accessTime", chkDB, secDbConfig);
+ if(atime.count() < chkDB.count())
+ throw new DatabaseException("Needs
repopulation");
} catch (DatabaseException e) {
WrapperManager.signalStarting((int)(Math.max(Integer.MAX_VALUE, 5*60*1000 +
chkDB.count() * 100)));
+ if(atime != null) atime.close();
+ environment.truncateDatabase(null,
prefix+"CHK_accessTime", false);
System.err.println("Reconstructing access times
index...");
Logger.error(this, "Reconstructing access times
index...");
secDbConfig.setAllowCreate(true);
@@ -521,7 +525,7 @@
BlockNumberKeyCreator bnkc =
new BlockNumberKeyCreator(storeBlockTupleBinding);
blockNoDbConfig.setKeyCreator(bnkc);
- SecondaryDatabase blockNums;
+ SecondaryDatabase blockNums = null;
try {
try {
System.err.println("Opening block db index");
@@ -529,6 +533,8 @@
(null, prefix+"CHK_blockNum", chkDB,
blockNoDbConfig);
} catch (DatabaseException e) {
WrapperManager.signalStarting((int)(Math.max(Integer.MAX_VALUE, 5*60*1000 +
chkDB.count() * 100)));
+ if(blockNums != null) blockNums.close();
+ environment.truncateDatabase(null,
prefix+"CHK_blockNum", false);
System.err.println("Reconstructing block numbers
index...");
Logger.error(this, "Reconstructing block numbers
index...");
System.err.println("Creating new block DB index");