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