Author: toad
Date: 2008-03-21 19:23:03 +0000 (Fri, 21 Mar 2008)
New Revision: 18686
Modified:
trunk/freenet/src/freenet/node/NodeClientCore.java
Log:
SSK inserts: check for collision at the beginning, but store at the end.
Modified: trunk/freenet/src/freenet/node/NodeClientCore.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeClientCore.java 2008-03-21 18:53:38 UTC
(rev 18685)
+++ trunk/freenet/src/freenet/node/NodeClientCore.java 2008-03-21 19:23:03 UTC
(rev 18686)
@@ -886,14 +886,8 @@
}
try {
long startTime = System.currentTimeMillis();
- if(cache) {
- try {
- if(cache)
- node.storeInsert(block);
- } catch (KeyCollisionException e) {
- throw new
LowLevelPutException(LowLevelPutException.COLLISION);
- }
- }
+ SSKBlock altBlock = (SSKBlock) node.fetch(block.getKey(),
false);
+ if(altBlock != null) throw new
LowLevelPutException(LowLevelPutException.COLLISION);
is = node.makeInsertSender(block,
node.maxHTL(), uid, null, false, cache);
boolean hasReceivedRejectedOverload = false;
@@ -966,7 +960,16 @@
// Impossible
}
throw new
LowLevelPutException(LowLevelPutException.COLLISION);
+ } else {
+ if(cache) {
+ try {
+ node.storeInsert(block);
+ } catch (KeyCollisionException e) {
+ throw new
LowLevelPutException(LowLevelPutException.COLLISION);
+ }
+ }
}
+
if(status == SSKInsertSender.SUCCESS) {
Logger.normal(this, "Succeeded inserting "+block);