Author: j16sdiz
Date: 2008-04-11 07:17:31 +0000 (Fri, 11 Apr 2008)
New Revision: 19161
Modified:
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
simplify BDBFS.close exception handling
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-11
07:17:09 UTC (rev 19160)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-11
07:17:31 UTC (rev 19161)
@@ -67,12 +67,12 @@
private long misses = 0;
private long writes = 0;
private final int keyLength;
- private final Database keysDB;
- private final SecondaryDatabase accessTimeDB;
- private final SecondaryDatabase blockNumDB;
- private final RandomAccessFile storeRAF;
- private final RandomAccessFile keysRAF;
- private final RandomAccessFile lruRAF;
+ private Database keysDB;
+ private SecondaryDatabase accessTimeDB;
+ private SecondaryDatabase blockNumDB;
+ private RandomAccessFile storeRAF;
+ private RandomAccessFile keysRAF;
+ private RandomAccessFile lruRAF;
private final SortedLongSet freeBlocks;
private final String name;
/** Callback which translates records to blocks and back, specifies the
size of blocks etc. */
@@ -1582,6 +1582,30 @@
}
private final Object closeLock = new Object();
+
+ private void closeRAF(RandomAccessFile file, boolean logError) {
+ try {
+ if (file != null)
+ file.close();
+ } catch (IOException e) {
+ if (logError) {
+
System.err.println("Caught closing file: " + e);
+
e.printStackTrace();
+ }
+ }
+ }
+
+ private void closeDB(Database db, boolean logError) {
+ try {
+ if (db != null)
+ db.close();
+ } catch (DatabaseException e) {
+ if (logError) {
+
System.err.println("Caught closing database: " + e);
+
e.printStackTrace();
+ }
+ }
+ }
private void close(boolean sleep) {
try {
@@ -1598,7 +1622,11 @@
// Give all threads some time to complete
if(sleep)
+ try {
Thread.sleep(5000);
+ } catch (InterruptedException ie) {
+ Logger.error(this, "Thread
interrupted.", ie);
+ }
if(reallyClosed) {
Logger.error(this, "Already closed "+this);
@@ -1611,57 +1639,28 @@
return;
}
- try {
- if(storeRAF != null)
- storeRAF.close();
- if(lruRAF != null)
- lruRAF.close();
- if(keysRAF != null)
- keysRAF.close();
- } catch (Throwable t) {
- if(!(t instanceof RunRecoveryException
|| t instanceof OutOfMemoryError)) {
- System.err.println("Caught
closing database: "+t);
- t.printStackTrace();
- }
- }
- try {
- if(accessTimeDB != null)
- accessTimeDB.close();
- } catch (Throwable t) {
- if(!(t instanceof RunRecoveryException
|| t instanceof OutOfMemoryError)) {
- System.err.println("Caught
closing database: "+t);
- t.printStackTrace();
- }
- }
- try {
- if(blockNumDB != null)
- blockNumDB.close();
- } catch (Throwable t) {
- if(!(t instanceof RunRecoveryException
|| t instanceof OutOfMemoryError)) {
- System.err.println("Caught
closing database: "+t);
- t.printStackTrace();
- }
- }
- try {
- if(keysDB != null)
- keysDB.close();
- } catch (Throwable t) {
- if(!(t instanceof RunRecoveryException
|| t instanceof OutOfMemoryError)) {
- System.err.println("Caught
closing database: "+t);
- t.printStackTrace();
- }
- }
+ closeRAF(storeRAF, true);
+ storeRAF = null;
+ closeRAF(lruRAF, true);
+ lruRAF = null;
+ closeRAF(keysRAF, true);
+ keysRAF = null;
+
+ closeDB(accessTimeDB, true);
+ accessTimeDB = null;
+ closeDB(blockNumDB, true);
+ blockNumDB = null;
+ closeDB(keysDB, true);
+ keysDB = null;
+
if(logMINOR) Logger.minor(this, "Closing
database finished.");
System.err.println("Closed database");
- reallyClosed = true;
}
- } catch(Throwable ex) {
- try {
- Logger.error(this,"Error while closing
database.",ex);
- ex.printStackTrace();
- } catch (Throwable t) {
- // Return anyway
- }
+ } catch (RuntimeException ex) {
+ Logger.error(this, "Error while closing database.", ex);
+ ex.printStackTrace();
+ } finally {
+ reallyClosed = true;
}
}