Author: zothar
Date: 2006-06-16 20:52:19 +0000 (Fri, 16 Jun 2006)
New Revision: 9233
Modified:
trunk/freenet/src/freenet/node/ARKFetchManager.java
trunk/freenet/src/freenet/node/ARKFetcher.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/Version.java
Log:
820: Fix problem preventing ARK redirects from working (caused by typo).
Status/routingBackoffReason related tweaks. ARKFetcher fixes/tweaks.
Modified: trunk/freenet/src/freenet/node/ARKFetchManager.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetchManager.java 2006-06-16 16:25:56 UTC
(rev 9232)
+++ trunk/freenet/src/freenet/node/ARKFetchManager.java 2006-06-16 20:52:19 UTC
(rev 9233)
@@ -30,13 +30,22 @@
public void addReadyARKFetcher(ARKFetcher arkFetcher) {
synchronized(readyARKFetchers) {
- if(readyARKFetchers.contains(arkFetcher)) {
+ if(hasReadyARKFetcher(arkFetcher)) {
Logger.error(this, arkFetcher.peer.getPeer()+"
already in readyARKFetchers");
return;
}
readyARKFetchers.addLast(arkFetcher);
}
}
+
+ public boolean hasReadyARKFetcher(ARKFetcher arkFetcher) {
+ synchronized(readyARKFetchers) {
+ if(readyARKFetchers.contains(arkFetcher)) {
+ return true;
+ }
+ return false;
+ }
+ }
public boolean hasReadyARKFetchers() {
if(readyARKFetchers.size() > 0) {
@@ -70,7 +79,7 @@
public void removeReadyARKFetcher(ARKFetcher arkFetcher) {
synchronized(readyARKFetchers) {
- if(!readyARKFetchers.contains(arkFetcher)) {
+ if(!hasReadyARKFetcher(arkFetcher)) {
return;
}
readyARKFetchers.remove(arkFetcher);
Modified: trunk/freenet/src/freenet/node/ARKFetcher.java
===================================================================
--- trunk/freenet/src/freenet/node/ARKFetcher.java 2006-06-16 16:25:56 UTC
(rev 9232)
+++ trunk/freenet/src/freenet/node/ARKFetcher.java 2006-06-16 20:52:19 UTC
(rev 9233)
@@ -25,8 +25,8 @@
private ClientGetter getter;
private FreenetURI fetchingURI;
private boolean shouldRun = false;
- private static final int MAX_BACKOFF = 60*60*1000;
- private static final int MIN_BACKOFF = 5*1000;
+ private static final int MAX_BACKOFF = 60*60*1000; // 1 hour
+ private static final int MIN_BACKOFF = 5*1000; // 5 seconds
private int backoff = MIN_BACKOFF;
private String identity;
private boolean isFetching = false;
@@ -46,6 +46,15 @@
* see if we can find something more recent).
*/
public synchronized void queue() {
+ if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+ return;
+ }
+ if(peer.isConnected()) {
+ return;
+ }
+ if(isFetching) {
+ return;
+ }
Logger.normal( this, "Queueing ARK Fetcher after
"+peer.getHandshakeCount()+" failed handshakes for "+peer.getPeer()+" with
identity '"+peer.getIdentityString()+"'");
node.arkFetchManager.addReadyARKFetcher(this);
}
@@ -54,6 +63,15 @@
* Called when the ARKFetchManager says it's our turn to start fetching.
*/
public synchronized void start() {
+ if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+ node.arkFetchManager.removeReadyARKFetcher(this);
+ }
+ if(peer.isConnected()) {
+ return;
+ }
+ if(isFetching) {
+ return;
+ }
ClientGetter cg = null;
if(started) { // We only need one ARKFetcher per PeerNode
return;
@@ -104,7 +122,9 @@
started = false;
if(isFetching) {
node.removeARKFetcher(identity,this);
-
node.arkFetchManager.removeReadyARKFetcher(this);
+
if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+
node.arkFetchManager.removeReadyARKFetcher(this);
+ }
isFetching = false;
}
}
@@ -121,6 +141,9 @@
if(isFetching) {
node.removeARKFetcher(identity,this);
+
if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+
node.arkFetchManager.removeReadyARKFetcher(this);
+ }
isFetching = false;
}
@@ -139,7 +162,7 @@
SimpleFieldSet fs;
try {
fs = new SimpleFieldSet(ref, true);
- Logger.minor(this, "Got ARK for "+peer);
+ Logger.minor(this, "Got ARK for "+peer.getPeer());
peer.gotARK(fs, startedEdition);
} catch (IOException e) {
// Corrupt ref.
@@ -154,6 +177,9 @@
if(isFetching) {
node.removeARKFetcher(identity,this);
+
if(node.arkFetchManager.hasReadyARKFetcher(this)) {
+
node.arkFetchManager.removeReadyARKFetcher(this);
+ }
isFetching = false;
}
@@ -167,11 +193,12 @@
}
}
if(e.newURI != null) {
+ Logger.minor(this, "Failed to fetch ARK for
"+peer.getPeer()+", "+fetchingURI+" gave redirect to "+e.newURI);
peer.updateARK(e.newURI);
queueWithBackoff();
return;
}
- Logger.minor(this, "Failed to fetch ARK for "+peer+", now
backing off ARK fetches for "+(int) (backoff / 1000)+" seconds");
+ Logger.minor(this, "Failed to fetch ARK for "+peer.getPeer()+",
now backing off ARK fetches for "+(int) (backoff / 1000)+" seconds");
// We may be on the PacketSender thread.
// FIXME should this be exponential backoff?
queueWithBackoff();
@@ -179,14 +206,17 @@
public void onSuccess(BaseClientPutter state) {
// Impossible.
+ Logger.error(this, "Impossible reached in
ARKFetcher.onSuccess(BaseClientPutter) for peer "+peer.getPeer(), new
Exception("error"));
}
public void onFailure(InserterException e, BaseClientPutter state) {
// Impossible.
+ Logger.error(this, "Impossible reached in
ARKFetcher.onFailure(InserterException,BaseClientPutter) for peer
"+peer.getPeer(), new Exception("error"));
}
public void onGeneratedURI(FreenetURI uri, BaseClientPutter state) {
// Impossible.
+ Logger.error(this, "Impossible reached in
ARKFetcher.onGeneratredURI(FreenetURI,BaseClientPutter) for peer
"+peer.getPeer(), new Exception("error"));
}
public boolean isFetching() {
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2006-06-16 16:25:56 UTC
(rev 9232)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2006-06-16 20:52:19 UTC
(rev 9233)
@@ -122,6 +122,12 @@
for(int i=0;i<myPeers.length;i++) {
if(myPeers[i] == pn) isInPeers=true;
}
+ int peerNodeStatus = pn.getPeerNodeStatus();
+ node.removePeerNodeStatus( peerNodeStatus, pn );
+ String peerNodePreviousRoutingBackoffReason =
pn.getPreviousBackoffReason();
+ if(peerNodePreviousRoutingBackoffReason != null) {
+
node.removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason,
pn);
+ }
if(!isInPeers) return false;
// removing from connectedPeers
@@ -145,12 +151,6 @@
}
}
myPeers = newMyPeers;
- int peerNodeStatus = pn.getPeerNodeStatus();
- node.removePeerNodeStatus( peerNodeStatus, pn );
- String peerNodePreviousRoutingBackoffReason =
pn.getPreviousBackoffReason();
- if(peerNodePreviousRoutingBackoffReason != null) {
-
node.removePeerNodeRoutingBackoffReason(peerNodePreviousRoutingBackoffReason,
pn);
- }
Logger.normal(this, "Removed "+pn);
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2006-06-16 16:25:56 UTC
(rev 9232)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2006-06-16 20:52:19 UTC
(rev 9233)
@@ -280,9 +280,6 @@
// FIXME make mandatory once everyone has upgraded
lastGoodVersion = fs.get("lastGoodVersion");
- // PeerNode starts life as disconnected
- node.addPeerNodeStatus(Node.PEER_NODE_STATUS_DISCONNECTED, this);
-
nominalPeer=new Vector();
nominalPeer.removeAllElements();
try{
@@ -363,6 +360,7 @@
// Not connected yet; need to handshake
isConnected = false;
+ node.addPeerNodeStatus(Node.PEER_NODE_STATUS_DISCONNECTED, this);
messagesToSendNow = new LinkedList();
@@ -1802,7 +1800,7 @@
Logger.error(this, "Changing ARK not supported
(and shouldn't be possible): from "+myARK+" to "+usk+" for "+this);
} else if(myARK.suggestedEdition >
usk.suggestedEdition) {
Logger.minor(this, "Ignoring ARK edition
decrease: "+myARK.suggestedEdition+" to "+usk.suggestedEdition+" for "+this);
- } else if(myARK.suggestedEdition >
usk.suggestedEdition) {
+ } else if(myARK.suggestedEdition <
usk.suggestedEdition) {
Logger.minor(this, "New ARK edition found");
myARK = usk;
} else if(myARK == null) {
@@ -1877,8 +1875,10 @@
peerNodeStatus = Node.PEER_NODE_STATUS_CONNECTED;
if(now < routingBackedOffUntil) {
peerNodeStatus =
Node.PEER_NODE_STATUS_ROUTING_BACKED_OFF;
-
if(!lastRoutingBackoffReason.equals(previousRoutingBackoffReason)) {
-
node.removePeerNodeRoutingBackoffReason(previousRoutingBackoffReason, this);
+
if(!lastRoutingBackoffReason.equals(previousRoutingBackoffReason) ||
previousRoutingBackoffReason == null) {
+ if(previousRoutingBackoffReason !=
null) {
+
node.removePeerNodeRoutingBackoffReason(previousRoutingBackoffReason, this);
+ }
node.addPeerNodeRoutingBackoffReason(lastRoutingBackoffReason, this);
previousRoutingBackoffReason =
lastRoutingBackoffReason;
}
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-06-16 16:25:56 UTC (rev
9232)
+++ trunk/freenet/src/freenet/node/Version.java 2006-06-16 20:52:19 UTC (rev
9233)
@@ -18,7 +18,7 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- private static final int buildNumber = 819;
+ private static final int buildNumber = 820;
/** Oldest build of Fred we will talk to */
private static final int lastGoodBuild = 765;