Author: toad
Date: 2007-03-08 00:44:40 +0000 (Thu, 08 Mar 2007)
New Revision: 12027
Modified:
trunk/freenet/src/freenet/node/Node.java
Log:
Automatically regenerate the stores database if the environment cannot be opened
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2007-03-08 00:29:39 UTC (rev
12026)
+++ trunk/freenet/src/freenet/node/Node.java 2007-03-08 00:44:40 UTC (rev
12027)
@@ -1240,17 +1240,41 @@
File dbDir = new File(storeDir, "database-"+portNumber);
dbDir.mkdirs();
+ Environment env = null;
+ EnvironmentMutableConfig mutableConfig;
// This can take some time
System.out.println("Starting database...");
try {
- storeEnvironment = new Environment(dbDir, envConfig);
- envMutableConfig = storeEnvironment.getConfig();
+ env = new Environment(dbDir, envConfig);
+ mutableConfig = env.getConfig();
} catch (DatabaseException e) {
- System.err.println("Could not open store: "+e);
- e.printStackTrace();
- throw new NodeInitException(EXIT_STORE_OTHER,
e.getMessage());
+ // The database is broken
+ // We will have to recover from scratch
+ if(env != null) {
+ try {
+ env.close();
+ } catch (Throwable t) {
+ System.err.println("Error closing
database: "+t+" after "+e);
+ t.printStackTrace();
+ }
+ }
+ File[] files = dbDir.listFiles();
+ for(int i=0;i<files.length;i++) files[i].delete();
+ dbDir.delete();
+ try {
+ env = new Environment(dbDir, envConfig);
+ mutableConfig = env.getConfig();
+ } catch (DatabaseException e1) {
+ System.err.println("Could not open store: "+e1);
+ e1.printStackTrace();
+ System.err.println("Previous error was (tried
deleting database and retrying): "+e);
+ e.printStackTrace();
+ throw new NodeInitException(EXIT_STORE_OTHER,
e1.getMessage());
+ }
}
-
+ storeEnvironment = env;
+ envMutableConfig = mutableConfig;
+
statsConf = new StatsConfig();
statsConf.setClear(true);