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


Reply via email to