Author: toad
Date: 2008-02-06 18:56:16 +0000 (Wed, 06 Feb 2008)
New Revision: 17593

Modified:
   trunk/freenet/src/freenet/node/FailureTable.java
   trunk/freenet/src/freenet/node/FailureTableEntry.java
Log:
Greatly simplify addRequestedFrom/addRequestors by making them only take one 
PeerNode.
The following changes will only need to feed them one PeerNode.

Modified: trunk/freenet/src/freenet/node/FailureTable.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTable.java    2008-02-06 17:27:46 UTC 
(rev 17592)
+++ trunk/freenet/src/freenet/node/FailureTable.java    2008-02-06 18:56:16 UTC 
(rev 17593)
@@ -121,7 +121,7 @@
                        // Don't know anything about the key
                        return false;
                }
-               entry.addRequestors(new PeerNode[] { requestor }, now);
+               entry.addRequestors(requestor, now);
                if(htl > entry.htl) {
                        // If the HTL is higher this time, let it through
                        entriesByKey.push(key, entry);

Modified: trunk/freenet/src/freenet/node/FailureTableEntry.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTableEntry.java       2008-02-06 
17:27:46 UTC (rev 17592)
+++ trunk/freenet/src/freenet/node/FailureTableEntry.java       2008-02-06 
18:56:16 UTC (rev 17593)
@@ -105,10 +105,14 @@
                                htl = htl2;
                                timeoutTime = newTimeoutTime;
                        }
-                       if(requestors != null)
-                               addRequestors(requestors, now);
-                       if(requestedFrom != null)
-                               addRequestedFrom(requestedFrom, now);
+                       if(requestors != null) {
+                               for(int i=0;i<requestors.length;i++)
+                                       addRequestors(requestors[i], now);
+                       }
+                       if(requestedFrom != null) {
+                               for(int i=0;i<requestedFrom.length;i++)
+                                       addRequestedFrom(requestedFrom[i], now);
+                       }
                }
        }

@@ -118,17 +122,12 @@
        // per entry byte cost.
        // Note also this will generate some churn...

-       synchronized void addRequestors(PeerNode[] requestors, long now) {
-               if(logMINOR) Logger.minor(this, "Adding requestors: 
"+StringArray.toString(requestors)+" at "+now);
+       synchronized void addRequestors(PeerNode requestors, long now) {
+               if(logMINOR) Logger.minor(this, "Adding requestors: 
"+requestors+" at "+now);
                receivedTime = now;
-               /** The number of new requestor elements. These are moved to 
the beginning and the 
-                * rest is nulled out. So this is also the index of the first 
non-null element in 
-                * requestors. */
-               int notIncluded = 0;
+               boolean requestorIncluded = false;
                int nulls = 0;
-               for(int i=0;i<requestors.length;i++) {
-                       PeerNode req = requestors[i];
-                       boolean requestorIncluded = false;
+                       PeerNode req = requestors;
                        for(int j=0;j<requestorNodes.length;j++) {
                                PeerNode got = requestorNodes[j] == null ? null 
: (PeerNode) requestorNodes[j].get();
                                // No longer subscribed if they have rebooted, 
or expired
@@ -147,24 +146,17 @@
                                        break;
                                }
                        }
-                       if(!requestorIncluded) {
-                               requestors[notIncluded++] = requestors[i];
-                       } // if it's new, keep it in requestors
-               }
-               for(int i=notIncluded;i<requestors.length;i++) requestors[i] = 
null;
-               if(logMINOR) Logger.minor(this, "notIncluded="+notIncluded+" 
nulls="+nulls+" requestors.length="+requestors.length+" 
requestorNodes.length="+requestorNodes.length);
-               if(notIncluded == 0 && nulls == 0) return;
+               if(nulls == 0 && requestorIncluded) return;
+               int notIncluded = requestorIncluded ? 0 : 1;
                // Because weak, these can become null; doesn't matter, but we 
want to minimise memory usage
-               if(notIncluded == nulls) {
+               if(nulls == 1 && !requestorIncluded) {
                        // Nice special case
-                       int x = 0;
                        for(int i=0;i<requestorNodes.length;i++) {
                                if(requestorNodes[i] == null || 
requestorNodes[i].get() == null) {
-                                       PeerNode pn = requestors[x++];
+                                       PeerNode pn = requestors;
                                        requestorNodes[i] = pn.myRef;
                                        requestorTimes[i] = now;
                                        requestorBootIDs[i] = pn.getBootID();
-                                       if(x == notIncluded) break;
                                }
                        }
                        return;
@@ -183,8 +175,9 @@
                        toIndex++;
                }

-               for(int fromIndex=0;fromIndex<notIncluded;fromIndex++) {
-                       PeerNode pn = requestors[fromIndex];
+               if(!requestorIncluded) {
+               
+                       PeerNode pn = requestors;
                        if(pn != null) {
                                newRequestorNodes[toIndex] = pn.myRef;
                                newRequestorTimes[toIndex] = now;
@@ -210,17 +203,12 @@
                requestorBootIDs = newRequestorBootIDs;
        }

-       private synchronized void addRequestedFrom(PeerNode[] requestedFrom, 
long now) {
-               if(logMINOR) Logger.minor(this, "Adding requested from: 
"+StringArray.toString(requestedFrom)+" at "+now);
+       private synchronized void addRequestedFrom(PeerNode requestedFrom, long 
now) {
+               if(logMINOR) Logger.minor(this, "Adding requested from: 
"+requestedFrom+" at "+now);
                sentTime = now;
-               /** The number of new requestedFrom elements. These are moved 
to the beginning and the 
-                * rest is nulled out. So this is also the index of the first 
non-null element in 
-                * requestedFrom. */
-               int notIncluded = 0;
+               boolean requestorIncluded = false;
                int nulls = 0;
-               for(int i=0;i<requestedFrom.length;i++) {
-                       PeerNode req = requestedFrom[i];
-                       boolean requestorIncluded = false;
+                       PeerNode req = requestedFrom;
                        for(int j=0;j<requestedNodes.length;j++) {
                                PeerNode got = requestedNodes[j] == null ? null 
: (PeerNode) requestedNodes[j].get();
                                if(got == null)
@@ -234,20 +222,15 @@
                                        break;
                                }
                        }
-                       if(!requestorIncluded) {
-                               requestedFrom[notIncluded++] = requestedFrom[i];
-                       } // if it's new, keep it in requestedFrom, otherwise 
delete it
-               }
-               for(int i=notIncluded;i<requestedFrom.length;i++) 
requestedFrom[i] = null;
-               if(notIncluded == 0 && nulls == 0) return;
-               if(logMINOR) Logger.minor(this, "notIncluded="+notIncluded+" 
nulls="+nulls+" requestedFrom.length="+requestedFrom.length+" 
requestedNodes.length="+requestedNodes.length);
+               if(requestorIncluded && nulls == 0) return;
+               int notIncluded = requestorIncluded ? 0 : 1;
                // Because weak, these can become null; doesn't matter, but we 
want to minimise memory usage
-               if(notIncluded == nulls) {
+               if(nulls == 1 && !requestorIncluded) {
                        // Nice special case
                        int x = 0;
                        for(int i=0;i<requestedNodes.length;i++) {
                                if(requestedNodes[i] == null || 
requestedNodes[i].get() == null) {
-                                       PeerNode pn = requestedFrom[x++];
+                                       PeerNode pn = requestedFrom;
                                        requestedNodes[i] = pn.myRef;
                                        requestedLocs[i] = pn.getLocation();
                                        requestedTimes[i] = now;
@@ -272,8 +255,8 @@
                        toIndex++;
                }

-               for(int fromIndex=0;fromIndex<notIncluded;fromIndex++) {
-                       PeerNode pn = requestedFrom[fromIndex];
+               if(!requestorIncluded) {
+                       PeerNode pn = requestedFrom;
                        if(pn != null) {
                                newRequestedNodes[toIndex] = pn.myRef;
                                newRequestedTimes[toIndex] = now;


Reply via email to