Author: toad
Date: 2008-06-21 13:33:00 +0000 (Sat, 21 Jun 2008)
New Revision: 20566

Modified:
   branches/db4o/freenet/src/freenet/support/RandomGrabArray.java
   branches/db4o/freenet/src/freenet/support/SectoredRandomGrabArray.java
Log:
Selective activation in RGA an SRGA.

Modified: branches/db4o/freenet/src/freenet/support/RandomGrabArray.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/RandomGrabArray.java      
2008-06-21 13:28:23 UTC (rev 20565)
+++ branches/db4o/freenet/src/freenet/support/RandomGrabArray.java      
2008-06-21 13:33:00 UTC (rev 20566)
@@ -96,6 +96,8 @@
                                                                reqs[target] = 
item;
                                                        }
                                                        target++;
+                                                       if(persistent)
+                                                               
container.activate(item, 1);
                                                        
if(excluding.exclude(item, container, context)) {
                                                                exclude++;
                                                        } else {
@@ -113,6 +115,8 @@
                                                if(chosenIndex >= 0) {
                                                        changedMe = true;
                                                        ret = reqs[chosenIndex];
+                                                       if(persistent)
+                                                               
container.activate(ret, 1);
                                                        if(ret.canRemove()) {
                                                                
contents.remove(ret);
                                                                if(chosenIndex 
!= index-1) {
@@ -138,6 +142,8 @@
                                                        return null;
                                                } else if(valid == 1) {
                                                        ret = reqs[validIndex];
+                                                       if(persistent)
+                                                               
container.activate(ret, 1);
                                                        if(ret.canRemove()) {
                                                                changedMe = 
true;
                                                                
contents.remove(ret);
@@ -170,6 +176,8 @@
                                        changedMe = true;
                                        continue;
                                }
+                               if(persistent)
+                                       container.activate(ret, 1);
                                oret = ret;
                                if(ret.isEmpty()) {
                                        if(logMINOR) Logger.minor(this, "Not 
returning because cancelled: "+ret);

Modified: branches/db4o/freenet/src/freenet/support/SectoredRandomGrabArray.java
===================================================================
--- branches/db4o/freenet/src/freenet/support/SectoredRandomGrabArray.java      
2008-06-21 13:28:23 UTC (rev 20565)
+++ branches/db4o/freenet/src/freenet/support/SectoredRandomGrabArray.java      
2008-06-21 13:33:00 UTC (rev 20566)
@@ -23,7 +23,7 @@
                if(persistent) {
                        // FIXME is this too heavyweight? Maybe we should 
iterate the array or something?
                        grabArraysByClient = 
container.ext().collections().newHashMap(10);
-                       ((Db4oMap)grabArraysByClient).activationDepth(3); // 
FIXME can we get away with 1??
+                       ((Db4oMap)grabArraysByClient).activationDepth(1); // 
FIXME can we get away with 1??
                } else
                        grabArraysByClient = new HashMap();
                grabArrays = new RemoveRandomWithObject[0];
@@ -52,6 +52,7 @@
                }
                if(logMINOR)
                        Logger.minor(this, "Adding "+item+" to RGA "+rga+" for 
"+client);
+               // rga is auto-activated to depth 1...
                rga.add(item, container);
                if(logMINOR)
                        Logger.minor(this, "Size now "+grabArrays.length+" on 
"+this);
@@ -90,6 +91,8 @@
                        if(grabArrays.length == 1) {
                                // Optimise the common case
                                RemoveRandomWithObject rga = grabArrays[0];
+                               if(persistent)
+                                       container.activate(rga, 1);
                                RandomGrabArrayItem item = 
rga.removeRandom(excluding, container, context);
                                if(rga.isEmpty()) {
                                        if(logMINOR)
@@ -108,11 +111,15 @@
                                // Another simple common case
                                int x = context.fastWeakRandom.nextBoolean() ? 
1 : 0;
                                RemoveRandomWithObject rga = grabArrays[x];
+                               if(persistent)
+                                       container.activate(rga, 1);
                                RemoveRandomWithObject firstRGA = rga;
                                RandomGrabArrayItem item = 
rga.removeRandom(excluding, container, context);
                                if(item == null) {
                                        x = 1-x;
                                        rga = grabArrays[x];
+                                       if(persistent)
+                                               container.activate(rga, 1);
                                        item = rga.removeRandom(excluding, 
container, context);
                                        if(firstRGA.isEmpty() && rga.isEmpty()) 
{
                                                
grabArraysByClient.remove(rga.getObject());
@@ -137,6 +144,8 @@
                        }
                        int x = 
context.fastWeakRandom.nextInt(grabArrays.length);
                        RemoveRandomWithObject rga = grabArrays[x];
+                       if(persistent)
+                               container.activate(rga, 1);
                        if(logMINOR)
                                Logger.minor(this, "Picked "+x+" of 
"+grabArrays.length+" : "+rga+" : "+rga.getObject()+" on "+this);
                        RandomGrabArrayItem item = rga.removeRandom(excluding, 
container, context);


Reply via email to