Author: toad
Date: 2007-05-23 17:40:30 +0000 (Wed, 23 May 2007)
New Revision: 13335

Modified:
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
When get a DbChecksumException or RunRecoveryException, create the 
reconstructFile.

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2007-05-23 
17:33:29 UTC (rev 13334)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2007-05-23 
17:40:30 UTC (rev 13335)
@@ -26,10 +26,12 @@
 import com.sleepycat.je.Environment;
 import com.sleepycat.je.LockMode;
 import com.sleepycat.je.OperationStatus;
+import com.sleepycat.je.RunRecoveryException;
 import com.sleepycat.je.SecondaryConfig;
 import com.sleepycat.je.SecondaryDatabase;
 import com.sleepycat.je.SecondaryKeyCreator;
 import com.sleepycat.je.Transaction;
+import com.sleepycat.je.log.DbChecksumException;
 import com.sleepycat.je.util.DbLoad;

 import freenet.crypt.CryptFormatException;
@@ -1778,9 +1780,9 @@

        private void checkSecondaryDatabaseError(Throwable ex) {
                String msg = ex.getMessage();
-               if((ex instanceof DatabaseException) && (msg != null && 
-                               ((msg.indexOf("missing key in the primary 
database") > -1) ||
-                               msg.indexOf("the primary record contains a key 
that is not present in the secondary") > -1))) {
+               if(ex instanceof DatabaseException) {
+               if(msg != null && (msg.indexOf("missing key in the primary 
database") > -1) ||
+                               msg.indexOf("the primary record contains a key 
that is not present in the secondary") > -1) {
                        try {
                                fixSecondaryFile.createNewFile();
                        } catch (IOException e) {
@@ -1791,7 +1793,17 @@
                        Logger.error(this, "Corrupt secondary database 
("+getName()+"). Should be cleaned up on restart.");
                        System.err.println("Corrupt secondary database 
("+getName()+"). Should be cleaned up on restart.");
                        
System.exit(freenet.node.Node.EXIT_DATABASE_REQUIRES_RESTART);
+               } else if(ex instanceof DbChecksumException || ex instanceof 
RunRecoveryException) {
+                       System.err.println("Corrupt database! Will be 
reconstructed on restart");
+                       try {
+                               reconstructFile.createNewFile();
+                       } catch (IOException e) {
+                               Logger.error(this, "Corrupt database 
("+getName()+") but could not create flag file "+reconstructFile);
+                               System.err.println("Corrupt database 
("+getName()+") but could not create flag file "+reconstructFile);
+                               return; // Not sure what else we can do
+                       }
                }
+               }
        }

        /**


Reply via email to