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


Reply via email to