[freenet-cvs] r16934 - trunk/freenet/src/freenet/store

toad at freenetproject.org toad at freenetproject.org
Sat Jan 5 22:47:03 UTC 2008


Author: toad
Date: 2008-01-05 22:47:02 +0000 (Sat, 05 Jan 2008)
New Revision: 16934

Modified:
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
Fix bug causing the datastore (each file) to be halved in size on each reconstruction (!!)

Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java	2008-01-05 22:31:07 UTC (rev 16933)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java	2008-01-05 22:47:02 UTC (rev 16934)
@@ -1137,8 +1137,15 @@
 				Transaction t = null;
 				storeRAF.readFully(header);
 				storeRAF.readFully(data);
-				if(lruRAFLength > (l+1)*8)
-					lruVal = lruRAF.readLong();
+				if(lruRAFLength > (l+1)*8) {
+					try {
+						lruVal = lruRAF.readLong();
+					} catch (EOFException e) {
+						System.err.println("EOF reading LRU file at "+lruRAF.getFilePointer()+" of "+lruRAF.length()+" l = "+l+" orig lru length = "+lruRAFLength);
+						lruVal = 0;
+						lruRAFLength = 0;
+					}
+				}
 				if(lruVal == 0) {
 					Logger.normal(this, "Block "+l+" : resetting LRU");
 					lruVal = getNewRecentlyUsed();
@@ -1147,10 +1154,14 @@
 				}
 				boolean readKey = false;
 				if(keysRAF != null && keysRAFLength > (l+1)*keyLength) {
-					keysRAF.readFully(keyBuf);
-					readKey = true;
+					try {
+						keysRAF.readFully(keyBuf);
+						readKey = true;
+					} catch (EOFException e) {
+						System.err.println("EOF reading keys file at "+keysRAF.getFilePointer()+" of "+keysRAF.length()+" l = "+l+" orig keys length = "+keysRAFLength);
+						readKey = false;
+					}
 				}
-				lruVal = lruRAF.readLong();
 				try {
 					byte[] routingkey = null;
 					try {
@@ -1193,6 +1204,7 @@
 		} catch (EOFException e) {
 			long size = l * (dataBlockSize + headerBlockSize);
 			System.err.println("Found end of store, truncating to "+l+" blocks : "+size+" ("+failures+" failures "+dupes+" dupes)");
+			e.printStackTrace();
 			blocksInStore = l;
 			try {
 				storeRAF.setLength(size);




More information about the cvs mailing list