Author: toad
Date: 2008-07-29 12:51:56 +0000 (Tue, 29 Jul 2008)
New Revision: 21474
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
Log:
Avoid deactivation trouble causes Failed messages
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
===================================================================
--- branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-29 12:47:34 UTC (rev 21473)
+++ branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSegment.java
2008-07-29 12:51:56 UTC (rev 21474)
@@ -600,7 +600,7 @@
tries = ++dataRetries[blockNo];
if(tries > maxTries && maxTries >= 0) failed =
true;
else {
- sub = getSubSegment(tries, container,
false);
+ sub = getSubSegment(tries, container,
false, seg);
if(tries %
ClientRequestScheduler.COOLDOWN_RETRIES == 0) {
long now =
System.currentTimeMillis();
if(dataCooldownTimes[blockNo] >
now)
@@ -618,7 +618,7 @@
tries = ++checkRetries[checkNo];
if(tries > maxTries && maxTries >= 0) failed =
true;
else {
- sub = getSubSegment(tries, container,
false);
+ sub = getSubSegment(tries, container,
false, seg);
if(tries %
ClientRequestScheduler.COOLDOWN_RETRIES == 0) {
long now =
System.currentTimeMillis();
if(checkCooldownTimes[checkNo]
> now)
@@ -656,7 +656,7 @@
return true;
}
- private SplitFileFetcherSubSegment getSubSegment(int retryCount,
ObjectContainer container, boolean noCreate) {
+ private SplitFileFetcherSubSegment getSubSegment(int retryCount,
ObjectContainer container, boolean noCreate, SplitFileFetcherSubSegment
dontDeactivate) {
SplitFileFetcherSubSegment sub;
if(persistent)
container.activate(subSegments, 1);
@@ -673,7 +673,7 @@
} else
ret = sub;
}
- if(persistent && sub != ret)
container.deactivate(sub, 1);
+ if(persistent && sub != ret && sub !=
dontDeactivate) container.deactivate(sub, 1);
}
if(ret != null) return ret;
if(noCreate) return null;
@@ -735,7 +735,7 @@
container.activate(this, 1);
}
try {
- SplitFileFetcherSubSegment seg = getSubSegment(0,
container, false);
+ SplitFileFetcherSubSegment seg = getSubSegment(0,
container, false, null);
if(persistent)
container.activate(seg, 1);
seg.addAll(dataRetries.length+checkRetries.length,
true, container, context, false);
@@ -858,7 +858,7 @@
/**
* @return True if the key was wanted, false otherwise.
*/
- public boolean requeueAfterCooldown(Key key, long time, ObjectContainer
container, ClientContext context) {
+ public boolean requeueAfterCooldown(Key key, long time, ObjectContainer
container, ClientContext context, SplitFileFetcherSubSegment dontDeactivate) {
if(persistent)
container.activate(this, 1);
Vector v = null;
@@ -878,7 +878,7 @@
return false;
}
int tries = dataRetries[i];
- SplitFileFetcherSubSegment sub =
getSubSegment(tries, container, false);
+ SplitFileFetcherSubSegment sub =
getSubSegment(tries, container, false, dontDeactivate);
if(logMINOR)
Logger.minor(this, "Retrying after
cooldown on "+this+": data block "+i+" on "+this+" :
tries="+tries+"/"+maxTries+" : "+sub);
if(v == null) v = new Vector();
@@ -902,7 +902,7 @@
return false;
}
int tries = checkRetries[i];
- SplitFileFetcherSubSegment sub =
getSubSegment(tries, container, false);
+ SplitFileFetcherSubSegment sub =
getSubSegment(tries, container, false, dontDeactivate);
if(logMINOR)
Logger.minor(this, "Retrying after
cooldown on "+this+": check block "+i+" on "+this+" :
tries="+tries+"/"+maxTries+" : "+sub);
if(v == null) v = new Vector();
@@ -1068,7 +1068,7 @@
int blockNum = this.getBlockNumber(key, container);
if(blockNum < 0) return null;
int retryCount = getBlockRetryCount(blockNum);
- return getSubSegment(retryCount, container, false);
+ return getSubSegment(retryCount, container, false, null);
}
public boolean isCancelled(ObjectContainer container) {
@@ -1102,7 +1102,7 @@
ClientCHK ckey = this.getBlockKey(blockNum, container);
ClientCHKBlock cb;
int retryCount = getBlockRetryCount(blockNum);
- SplitFileFetcherSubSegment seg = this.getSubSegment(retryCount,
container, true);
+ SplitFileFetcherSubSegment seg = this.getSubSegment(retryCount,
container, true, null);
if(persistent)
container.activate(seg, 1);
if(seg != null) {
Modified:
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
===================================================================
---
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-29 12:47:34 UTC (rev 21473)
+++
branches/db4o/freenet/src/freenet/client/async/SplitFileFetcherSubSegment.java
2008-07-29 12:51:56 UTC (rev 21474)
@@ -690,7 +690,7 @@
}
if(Logger.shouldLog(Logger.MINOR, this))
Logger.minor(this, "Requeueing after cooldown "+key+"
for "+this);
- if(!segment.requeueAfterCooldown(key, time, container,
context)) {
+ if(!segment.requeueAfterCooldown(key, time, container, context,
this)) {
Logger.error(this, "Key was not wanted after cooldown:
"+key+" for "+this+" in requeueAfterCooldown");
}
if(persistent) {