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);


Reply via email to