Author: toad
Date: 2005-12-01 14:44:46 +0000 (Thu, 01 Dec 2005)
New Revision: 7645
Modified:
trunk/freenet/src/freenet/client/BlockInserter.java
trunk/freenet/src/freenet/client/FileInserter.java
trunk/freenet/src/freenet/client/InserterException.java
trunk/freenet/src/freenet/node/InsertSender.java
trunk/freenet/src/freenet/node/LowLevelPutException.java
trunk/freenet/src/freenet/node/Node.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
trunk/freenet/src/freenet/node/TextModeClientInterface.java
trunk/freenet/src/freenet/node/Version.java
Log:
256: (mandatory)
New insert error mode: REALLY_ROUTE_NOT_FOUND ( = we couldn't reach a single
node ).
Probably want to provide this for requests too at some point.
Add nodes to connectedPeers only when they are actually connected.
Add node after promoting an unverified tracker.
This caused many instances of connections appearing to fail.
Modified: trunk/freenet/src/freenet/client/BlockInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 00:26:42 UTC
(rev 7644)
+++ trunk/freenet/src/freenet/client/BlockInserter.java 2005-12-01 14:44:46 UTC
(rev 7645)
@@ -72,19 +72,21 @@
succeeded = true;
tracker.success(this);
} catch (InserterException e) {
- switch(e.mode) {
+ int mode = e.getMode();
+ switch(mode) {
case InserterException.REJECTED_OVERLOAD:
case InserterException.ROUTE_NOT_FOUND:
- nonfatalError(e, e.mode);
+ case InserterException.ROUTE_REALLY_NOT_FOUND:
+ nonfatalError(e, mode);
return;
case InserterException.INTERNAL_ERROR:
case InserterException.BUCKET_ERROR:
- fatalError(e, e.mode);
+ fatalError(e, mode);
return;
case InserterException.FATAL_ERRORS_IN_BLOCKS:
case InserterException.TOO_MANY_RETRIES_IN_BLOCKS:
// Huh?
- Logger.error(this, "Got error inserting blocks
("+e.mode+") while inserting a block - WTF?");
+ Logger.error(this, "Got error inserting blocks
("+e.getMessage()+") while inserting a block - WTF?");
fatalError(e, InserterException.INTERNAL_ERROR);
return;
case InserterException.INVALID_URI:
@@ -92,7 +94,7 @@
fatalError(e, InserterException.INTERNAL_ERROR);
return;
default:
- Logger.error(this, "Unknown insert error
"+e.mode+" while inserting a block");
+ Logger.error(this, "Unknown insert error
"+mode+" while inserting a block");
fatalError(e, InserterException.INTERNAL_ERROR);
return;
}
Modified: trunk/freenet/src/freenet/client/FileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/FileInserter.java 2005-12-01 00:26:42 UTC
(rev 7644)
+++ trunk/freenet/src/freenet/client/FileInserter.java 2005-12-01 14:44:46 UTC
(rev 7645)
@@ -2,7 +2,6 @@
import java.io.IOException;
-import freenet.client.events.GeneratedURIEvent;
import freenet.client.events.SimpleBlockPutEvent;
import freenet.keys.CHKEncodeException;
import freenet.keys.ClientCHKBlock;
@@ -152,6 +151,8 @@
throw new
InserterException(InserterException.REJECTED_OVERLOAD, uri);
case LowLevelPutException.ROUTE_NOT_FOUND:
throw new
InserterException(InserterException.ROUTE_NOT_FOUND, uri);
+ case LowLevelPutException.ROUTE_REALLY_NOT_FOUND:
+ throw new
InserterException(InserterException.ROUTE_REALLY_NOT_FOUND, uri);
default:
Logger.error(this, "Unknown LowLevelPutException code:
"+e.code+" on "+this);
throw new
InserterException(InserterException.INTERNAL_ERROR, e, null);
Modified: trunk/freenet/src/freenet/client/InserterException.java
===================================================================
--- trunk/freenet/src/freenet/client/InserterException.java 2005-12-01
00:26:42 UTC (rev 7644)
+++ trunk/freenet/src/freenet/client/InserterException.java 2005-12-01
14:44:46 UTC (rev 7645)
@@ -6,7 +6,7 @@
public class InserterException extends Exception {
private static final long serialVersionUID = -1106716067841151962L;
- public final int mode;
+ private final int mode;
/** For collection errors */
public FailureCodeTracker errorCodes;
/** If a non-serious error, the URI */
@@ -64,6 +64,8 @@
public static final int FATAL_ERRORS_IN_BLOCKS = 6;
/** Could not insert a splitfile because a block failed too many times
*/
public static final int TOO_MANY_RETRIES_IN_BLOCKS = 7;
+ /** Not able to leave the node at all */
+ public static final int ROUTE_REALLY_NOT_FOUND = 8;
public static String getMessage(int mode) {
switch(mode) {
@@ -81,6 +83,8 @@
return "Could not insert splitfile: ran out of retries
(nonfatal errors)";
case ROUTE_NOT_FOUND:
return "Could not propagate the insert to enough nodes
(normal on small networks, try fetching it anyway)";
+ case ROUTE_REALLY_NOT_FOUND:
+ return "Insert could not leave the node at all";
default:
return "Unknown error "+mode;
}
Modified: trunk/freenet/src/freenet/node/InsertSender.java
===================================================================
--- trunk/freenet/src/freenet/node/InsertSender.java 2005-12-01 00:26:42 UTC
(rev 7644)
+++ trunk/freenet/src/freenet/node/InsertSender.java 2005-12-01 14:44:46 UTC
(rev 7645)
@@ -86,6 +86,8 @@
static final int TIMED_OUT = 4;
/** Locally Generated a RejectedOverload */
static final int GENERATED_REJECTED_OVERLOAD = 5;
+ /** Could not get off the node at all! */
+ static final int ROUTE_REALLY_NOT_FOUND = 6;
public String toString() {
return super.toString()+" for "+uid;
@@ -213,6 +215,8 @@
if(msg == null || msg.getSpec() != DMT.FNPAccepted) continue;
+ Logger.minor(this, "Got Accepted on "+this);
+
// Send them the data.
// Which might be the new data resulting from a collision...
@@ -405,6 +409,9 @@
}
}
+ if(code == ROUTE_NOT_FOUND && blockSenders.isEmpty())
+ code = ROUTE_REALLY_NOT_FOUND;
+
status = code;
synchronized(this) {
Modified: trunk/freenet/src/freenet/node/LowLevelPutException.java
===================================================================
--- trunk/freenet/src/freenet/node/LowLevelPutException.java 2005-12-01
00:26:42 UTC (rev 7644)
+++ trunk/freenet/src/freenet/node/LowLevelPutException.java 2005-12-01
14:44:46 UTC (rev 7645)
@@ -9,6 +9,8 @@
/** A downstream node is overloaded, and rejected the insert. We should
* reduce our rate of sending inserts. */
public static final int REJECTED_OVERLOAD = 3;
+ /** Insert could not get off the node at all */
+ public static final int ROUTE_REALLY_NOT_FOUND = 4;
/** Failure code */
public final int code;
@@ -21,6 +23,8 @@
return "Could not store the data on enough nodes";
case REJECTED_OVERLOAD:
return "A node downstream either timed out or was
overloaded (retry)";
+ case ROUTE_REALLY_NOT_FOUND:
+ return "The insert could not get off the node at all";
default:
return "Unknown error code: "+reason;
}
Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java 2005-12-01 00:26:42 UTC (rev
7644)
+++ trunk/freenet/src/freenet/node/Node.java 2005-12-01 14:44:46 UTC (rev
7645)
@@ -567,6 +567,8 @@
throw new
LowLevelPutException(LowLevelPutException.REJECTED_OVERLOAD);
case InsertSender.ROUTE_NOT_FOUND:
throw new
LowLevelPutException(LowLevelPutException.ROUTE_NOT_FOUND);
+ case InsertSender.ROUTE_REALLY_NOT_FOUND:
+ throw new
LowLevelPutException(LowLevelPutException.ROUTE_REALLY_NOT_FOUND);
case InsertSender.INTERNAL_ERROR:
throw new
LowLevelPutException(LowLevelPutException.INTERNAL_ERROR);
default:
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2005-12-01 00:26:42 UTC
(rev 7644)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2005-12-01 14:44:46 UTC
(rev 7645)
@@ -104,6 +104,10 @@
}
public synchronized void addConnectedPeer(PeerNode pn) {
+ if(!pn.isConnected()) {
+ Logger.minor(this, "Not connected: "+pn);
+ return;
+ }
for(int i=0;i<connectedPeers.length;i++) {
if(connectedPeers[i] == pn) {
Logger.minor(this, "Already connected: "+pn);
@@ -210,8 +214,8 @@
// This is safe as they will add themselves when they
// reconnect, and they can't do it yet as we are synchronized.
Vector v = new Vector(connectedPeers.length);
- for(int i=0;i<connectedPeers.length;i++) {
- PeerNode pn = connectedPeers[i];
+ for(int i=0;i<myPeers.length;i++) {
+ PeerNode pn = myPeers[i];
if(pn == exclude) continue;
if(pn.isConnected()) {
v.add(pn);
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2005-12-01 00:26:42 UTC
(rev 7644)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2005-12-01 14:44:46 UTC
(rev 7645)
@@ -30,7 +30,6 @@
import freenet.support.LRUHashtable;
import freenet.support.Logger;
import freenet.support.SimpleFieldSet;
-import freenet.support.math.BootstrappingDecayingRunningAverage;
import freenet.support.math.RunningAverage;
import freenet.support.math.SimpleRunningAverage;
@@ -611,7 +610,7 @@
if(thisBootID != this.bootID) {
connectedTime = System.currentTimeMillis();
Logger.minor(this, "Changed boot ID from "+bootID+" to
"+thisBootID);
- // We are connected, but we need a new KeyTracker
+ isConnected = false; // Will be reset below
if(previousTracker != null) {
KeyTracker old = previousTracker;
previousTracker = null;
@@ -647,7 +646,8 @@
Logger.error(this, "Disconnected in completedHandshake
with "+this);
return true; // i suppose
}
- node.peers.addConnectedPeer(this);
+ if(isConnected)
+ node.peers.addConnectedPeer(this);
sentInitialMessages = false;
return true;
}
@@ -695,6 +695,7 @@
unverifiedTracker = null;
isConnected = true;
ctx = null;
+ node.peers.addConnectedPeer(this);
maybeSendInitialMessages();
}
}
Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-12-01
00:26:42 UTC (rev 7644)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2005-12-01
14:44:46 UTC (rev 7645)
@@ -235,7 +235,8 @@
System.out.println("Error: "+e.getMessage());
if(e.uri != null)
System.out.println("URI would have been: "+e.uri);
- if(e.mode == e.FATAL_ERRORS_IN_BLOCKS || e.mode ==
e.TOO_MANY_RETRIES_IN_BLOCKS) {
+ int mode = e.getMode();
+ if(mode == InserterException.FATAL_ERRORS_IN_BLOCKS || mode ==
InserterException.TOO_MANY_RETRIES_IN_BLOCKS) {
System.out.println("Splitfile-specific
error:\n"+e.errorCodes.toVerboseString());
}
return;
Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2005-12-01 00:26:42 UTC (rev
7644)
+++ trunk/freenet/src/freenet/node/Version.java 2005-12-01 14:44:46 UTC (rev
7645)
@@ -20,10 +20,10 @@
public static final String protocolVersion = "1.0";
/** The build number of the current revision */
- public static final int buildNumber = 255;
+ public static final int buildNumber = 256;
/** Oldest build of Fred we will talk to */
- public static final int lastGoodBuild = 255;
+ public static final int lastGoodBuild = 256;
/** The highest reported build of fred */
public static int highestSeenBuild = buildNumber;