Author: toad
Date: 2008-04-30 16:27:57 +0000 (Wed, 30 Apr 2008)
New Revision: 19628
Modified:
trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
Log:
Once have reached the end of the keys file, don't continue to use the last key.
May fix "Duplicate block" errors during reconstruction.
Modified: trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java
===================================================================
--- trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-30
16:20:07 UTC (rev 19627)
+++ trunk/freenet/src/freenet/store/BerkeleyDBFreenetStore.java 2008-04-30
16:27:57 UTC (rev 19628)
@@ -1009,7 +1009,7 @@
Logger.normal(this, "Block "+l+" : LRU
"+lruVal);
}
boolean readKey = false;
- if(keysRAF != null && keysRAFLength >
(l+1)*keyLength) {
+ if(keysRAF != null && keyBuf != null &&
keysRAFLength > (l+1)*keyLength) {
try {
keysRAF.readFully(keyBuf);
readKey = true;
@@ -1018,6 +1018,7 @@
readKey = false;
}
}
+ if(!readKey) keyBuf = null;
try {
byte[] routingkey = null;
if(keyBuf != null &&
!isAllNull(keyBuf)) {
@@ -1031,7 +1032,7 @@
}
if (routingkey == null &&
!isAllNull(header) && !isAllNull(data)) {
try {
- StorableBlock block =
callback.construct(data, header, null, readKey ? keyBuf : null);
+ StorableBlock block =
callback.construct(data, header, null, keyBuf);
routingkey =
block.getRoutingKey();
} catch (KeyVerifyException e) {
String err = "Bogus or
unreconstructible key at slot "+l+" : "+e+" - lost block "+l;