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
+ }
}
+ }
}
/**