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");


Reply via email to