Author: j16sdiz
Date: 2008-04-26 04:59:08 +0000 (Sat, 26 Apr 2008)
New Revision: 19568

Modified:
   trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
don't recconstruct/log all zero block in BDBFS


Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-26 
03:57:34 UTC (rev 19567)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-26 
04:59:08 UTC (rev 19568)
@@ -1026,7 +1026,7 @@
                                                        routingkey = newkey;
                                                }
                                        }
-                                       if(routingkey == null) {
+                                       if (routingkey == null && 
!isAllNull(header) && !isAllNull(data)) {
                                                try {
                                                        StorableBlock block = 
callback.construct(data, header, null, readKey ? keyBuf : null);
                                                        routingkey = 
block.getRoutingKey();
@@ -1035,23 +1035,27 @@
                                                        Logger.error(this, err, 
e);
                                                        System.err.println(err);
                                                        failures++;
-                                                       t = 
environment.beginTransaction(null,null);
-                                                       StoreBlock storeBlock = 
new StoreBlock(l, --minLRU);
-                                                       byte[] buf = new 
byte[32];
-                                                       random.nextBytes(buf);
-                                                       DatabaseEntry 
routingkeyDBE = new DatabaseEntry(buf);
-                                                       DatabaseEntry blockDBE 
= new DatabaseEntry();
-                                                       
storeBlockTupleBinding.objectToEntry(storeBlock, blockDBE);
-                                                       OperationStatus op = 
keysDB.putNoOverwrite(t,routingkeyDBE,blockDBE);
-                                                       if(op != 
OperationStatus.SUCCESS) {
-                                                               
Logger.error(this, "Impossible operation status inserting bogus key to LRU: 
"+op);
-                                                               addFreeBlock(l, 
true, "Impossible to add (invalid) to LRU: "+op);
-                                                       }
-                                                       t.commitNoSync();
-                                                       t = null;
-                                                       continue;
                                                }
-                                       } 
+                                       }
+                                       
+                                       if (routingkey == null) { // can't 
recover, mark this as free
+                                               t = 
environment.beginTransaction(null, null);
+                                               StoreBlock storeBlock = new 
StoreBlock(l, --minLRU);
+                                               byte[] buf = new byte[32];
+                                               random.nextBytes(buf);
+                                               DatabaseEntry routingkeyDBE = 
new DatabaseEntry(buf);
+                                               DatabaseEntry blockDBE = new 
DatabaseEntry();
+                                               
storeBlockTupleBinding.objectToEntry(storeBlock, blockDBE);
+                                               OperationStatus op = 
keysDB.putNoOverwrite(t, routingkeyDBE, blockDBE);
+                                               if (op != 
OperationStatus.SUCCESS) {
+                                                       Logger.error(this, 
"Impossible operation status inserting bogus key to LRU: " + op);
+                                                       addFreeBlock(l, true, 
"Impossible to add (invalid) to LRU: " + op);
+                                               }
+                                               t.commitNoSync();
+                                               t = null;
+                                               continue;
+                                       }
+                                       
                                        t = 
environment.beginTransaction(null,null);
                                        StoreBlock storeBlock = new 
StoreBlock(l, lruVal);
                                        DatabaseEntry routingkeyDBE = new 
DatabaseEntry(routingkey);


Reply via email to